Levecke

Magento 2 dob at checkout

Jan 25th, 2024
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.72 KB | None | 0 0
  1. events.xml
  2. <?xml version="1.0"?>
  3. <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
  4.     <event name="checkout_submit_before">
  5.         <observer name="levecke_capture_dob_at_checkout" instance="Levecke\InsereDoBnoCheckout\Observer\CaptureDobAtCheckout" />
  6.     </event>
  7.     <event name="customer_register_success">
  8.         <observer name="levecke_save_dob_after_customer_creation" instance="Levecke\InsereDoBnoCheckout\Observer\SaveDobAfterCustomerCreation" />
  9.     </event>
  10. </config>
  11.  
  12. CaptureDobAtCheckout.php
  13. <?php
  14. namespace Levecke\InsereDoBnoCheckout\Observer;
  15.  
  16. use Magento\Framework\Event\Observer;
  17. use Magento\Framework\Event\ObserverInterface;
  18. use Magento\Checkout\Model\Session as CheckoutSession;
  19. use Psr\Log\LoggerInterface;
  20.  
  21. class CaptureDobAtCheckout implements ObserverInterface
  22. {
  23.     protected $checkoutSession;
  24.     protected $logger;
  25.  
  26.     public function __construct(
  27.         CheckoutSession $checkoutSession,
  28.         LoggerInterface $logger
  29.     ) {
  30.         $this->checkoutSession = $checkoutSession;
  31.         $this->logger = $logger;
  32.     }
  33.  
  34.     public function execute(Observer $observer)
  35.     {
  36.         // Assumindo que o 'dob' é enviado como parte dos dados do formulário de checkout
  37.         $request = $observer->getEvent()->getRequest();
  38.         $dob = $request->getParam('dob', null); // ou a estrutura correta para acessar o 'dob'
  39.  
  40.         if ($dob) {
  41.             $this->logger->info('CaptureDobAtCheckout: DOB capturado - ' . $dob);
  42.             $this->checkoutSession->setData('customer_dob_temp', $dob);
  43.         } else {
  44.             $this->logger->info('CaptureDobAtCheckout: DOB não encontrado no formulário de checkout.');
  45.         }
  46.     }
  47. }
  48.  
  49.  
  50. <?php
  51. namespace Levecke\InsereDoBnoCheckout\Observer;
  52.  
  53. use Magento\Framework\Event\Observer;
  54. use Magento\Framework\Event\ObserverInterface;
  55. use Magento\Customer\Api\CustomerRepositoryInterface;
  56. use Magento\Checkout\Model\Session as CheckoutSession;
  57. use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
  58. use Psr\Log\LoggerInterface;
  59.  
  60. class SaveDobAfterCustomerCreation implements ObserverInterface
  61. {
  62.     protected $customerRepository;
  63.     protected $checkoutSession;
  64.     protected $timezone;
  65.     protected $logger;
  66.  
  67.     public function __construct(
  68.         CustomerRepositoryInterface $customerRepository,
  69.         CheckoutSession $checkoutSession,
  70.         TimezoneInterface $timezone,
  71.         LoggerInterface $logger
  72.     ) {
  73.         $this->customerRepository = $customerRepository;
  74.         $this->checkoutSession = $checkoutSession;
  75.         $this->timezone = $timezone;
  76.         $this->logger = $logger;
  77.     }
  78.  
  79. SaveDobAfterCustomerCreation.php
  80.     public function execute(Observer $observer)
  81.     {
  82.         $customer = $observer->getEvent()->getCustomer();
  83.         $dob = $this->checkoutSession->getData('customer_dob_temp');
  84.  
  85.         if ($dob && $customer->getId()) {
  86.             $this->logger->info('SaveDobAfterCustomerCreation: DOB encontrado - ' . $dob);
  87.             try {
  88.                 $dobFormatted = $this->timezone->date(new \DateTime($dob))->format('Y-m-d');
  89.                 $customer->setDob($dobFormatted);
  90.                 $this->customerRepository->save($customer);
  91.                 $this->logger->info('SaveDobAfterCustomerCreation: DOB salvo no perfil do cliente.');
  92.             } catch (\Exception $e) {
  93.                 $this->logger->error('SaveDobAfterCustomerCreation: Erro ao salvar DOB - ' . $e->getMessage());
  94.             }
  95.             $this->checkoutSession->unsetData('customer_dob_temp');
  96.         } else {
  97.             $this->logger->info('SaveDobAfterCustomerCreation: DOB ou ID do cliente não encontrado.');
  98.         }
  99.     }
  100. }
  101.  
Tags: magento2
Advertisement
Add Comment
Please, Sign In to add comment