klaviyo / magento2-klaviyo

37 stars 51 forks source link

report.CRITICAL: No such entity with customerId = 0 #95

Closed sergey-fedosimov closed 3 years ago

sergey-fedosimov commented 3 years ago

\Magento\Newsletter\Model\Subscriber::subscribe():487 $this->save(); \Klaviyo\Reclaim\Observer\UserProfileNewsletterSubscribeObserver::execute():33 $customer = $this->customer_repository_interface->getById($subscriber->getCustomerId());

If a guest customer tries to subscribe it get an error "report.CRITICAL: No such entity with customerId = 0" It will be great to have a configuration field to set Guest Firstname and Guest Lastname, for example: \Klaviyo\Reclaim\Observer\UserProfileNewsletterSubscribeObserver::execute()

public function execute(\Magento\Framework\Event\Observer $observer)
    {
        if (!$this->_klaviyoScopeSetting->isEnabled()) {
            return;
        }

        $subscriber = $observer->getDataObject();

        if ($subscriber->isStatusChanged()) {
            if ($subscriber->getCustomerId() !== 0) {
                $customer = $this->customer_repository_interface->getById($subscriber->getCustomerId());
                $email = $customer->getEmail();
                $firstname = $customer->getFirstname();
                $lastname = $customer->getLastname();
            } else {
                $email = $subscriber->getSubscriberEmail();
                $firstname = ''; // get from config
                $lastname = ''; // get from config
            }

            if ($subscriber->isSubscribed()) {
                $this->_dataHelper->subscribeEmailToKlaviyoList(
                    $email,
                    $firstname,
                    $lastname
                );
            } else {
                if (isset($customer)) {
                    $this->_dataHelper->unsubscribeEmailFromKlaviyoList($customer->getEmail());
                } else {
                    $this->_dataHelper->unsubscribeEmailFromKlaviyoList($subscriber->getSubscriberEmail());
                }
            }
        }
    }

Or just

public function execute(\Magento\Framework\Event\Observer $observer)
    {
        if (!$this->_klaviyoScopeSetting->isEnabled()) {
            return;
        }

        $subscriber = $observer->getDataObject();

        if ($subscriber->isStatusChanged()) {
            if ($subscriber->getCustomerId() !== 0) {
                $customer = $this->customer_repository_interface->getById($subscriber->getCustomerId());
            }

            if ($subscriber->isSubscribed()) {
                if (isset($customer)) {
                    $this->_dataHelper->subscribeEmailToKlaviyoList(
                        $customer->getEmail(),
                        $customer->getFirstname(),
                        $customer->getLastname()
                    );
                } else {
                    $this->_dataHelper->subscribeEmailToKlaviyoList($subscriber->getSubscriberEmail());
                }
            } else {
                if (isset($customer)) {
                    $this->_dataHelper->unsubscribeEmailFromKlaviyoList($customer->getEmail());
                } else {
                    $this->_dataHelper->unsubscribeEmailFromKlaviyoList($subscriber->getSubscriberEmail());
                }
            }
        }
    }
cykolln commented 3 years ago

Resolved by #118