Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- events.xml
- <?xml version="1.0"?>
- <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
- <event name="checkout_submit_before">
- <observer name="levecke_capture_dob_at_checkout" instance="Levecke\InsereDoBnoCheckout\Observer\CaptureDobAtCheckout" />
- </event>
- <event name="customer_register_success">
- <observer name="levecke_save_dob_after_customer_creation" instance="Levecke\InsereDoBnoCheckout\Observer\SaveDobAfterCustomerCreation" />
- </event>
- </config>
- CaptureDobAtCheckout.php
- <?php
- namespace Levecke\InsereDoBnoCheckout\Observer;
- use Magento\Framework\Event\Observer;
- use Magento\Framework\Event\ObserverInterface;
- use Magento\Checkout\Model\Session as CheckoutSession;
- use Psr\Log\LoggerInterface;
- class CaptureDobAtCheckout implements ObserverInterface
- {
- protected $checkoutSession;
- protected $logger;
- public function __construct(
- CheckoutSession $checkoutSession,
- LoggerInterface $logger
- ) {
- $this->checkoutSession = $checkoutSession;
- $this->logger = $logger;
- }
- public function execute(Observer $observer)
- {
- // Assumindo que o 'dob' é enviado como parte dos dados do formulário de checkout
- $request = $observer->getEvent()->getRequest();
- $dob = $request->getParam('dob', null); // ou a estrutura correta para acessar o 'dob'
- if ($dob) {
- $this->logger->info('CaptureDobAtCheckout: DOB capturado - ' . $dob);
- $this->checkoutSession->setData('customer_dob_temp', $dob);
- } else {
- $this->logger->info('CaptureDobAtCheckout: DOB não encontrado no formulário de checkout.');
- }
- }
- }
- <?php
- namespace Levecke\InsereDoBnoCheckout\Observer;
- use Magento\Framework\Event\Observer;
- use Magento\Framework\Event\ObserverInterface;
- use Magento\Customer\Api\CustomerRepositoryInterface;
- use Magento\Checkout\Model\Session as CheckoutSession;
- use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
- use Psr\Log\LoggerInterface;
- class SaveDobAfterCustomerCreation implements ObserverInterface
- {
- protected $customerRepository;
- protected $checkoutSession;
- protected $timezone;
- protected $logger;
- public function __construct(
- CustomerRepositoryInterface $customerRepository,
- CheckoutSession $checkoutSession,
- TimezoneInterface $timezone,
- LoggerInterface $logger
- ) {
- $this->customerRepository = $customerRepository;
- $this->checkoutSession = $checkoutSession;
- $this->timezone = $timezone;
- $this->logger = $logger;
- }
- SaveDobAfterCustomerCreation.php
- public function execute(Observer $observer)
- {
- $customer = $observer->getEvent()->getCustomer();
- $dob = $this->checkoutSession->getData('customer_dob_temp');
- if ($dob && $customer->getId()) {
- $this->logger->info('SaveDobAfterCustomerCreation: DOB encontrado - ' . $dob);
- try {
- $dobFormatted = $this->timezone->date(new \DateTime($dob))->format('Y-m-d');
- $customer->setDob($dobFormatted);
- $this->customerRepository->save($customer);
- $this->logger->info('SaveDobAfterCustomerCreation: DOB salvo no perfil do cliente.');
- } catch (\Exception $e) {
- $this->logger->error('SaveDobAfterCustomerCreation: Erro ao salvar DOB - ' . $e->getMessage());
- }
- $this->checkoutSession->unsetData('customer_dob_temp');
- } else {
- $this->logger->info('SaveDobAfterCustomerCreation: DOB ou ID do cliente não encontrado.');
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment