From 55aee90c340bd15140cd761deac9517d612bb915 Mon Sep 17 00:00:00 2001
From: Bruno Dias <ibroopi@gmail.com>
Date: Mon, 28 Feb 2022 17:04:31 +0000
Subject: [PATCH 1/4] Remove layout module and more

---
 Block/Form/Options.php                        | 39 ++++++---
 Helper/Data.php                               | 10 +++
 Observer/UpdateOptions.php                    | 22 ++---
 Setup/UpgradeData.php                         | 83 +++++++++++++++++++
 etc/adminhtml/system.xml                      | 20 +++++
 etc/module.xml                                |  2 +-
 .../templates/form/newsletter-options.phtml   | 18 ++--
 view/frontend/templates/form/newsletter.phtml |  2 +-
 8 files changed, 158 insertions(+), 38 deletions(-)
 create mode 100644 Helper/Data.php
 create mode 100644 Setup/UpgradeData.php
 create mode 100644 etc/adminhtml/system.xml

diff --git a/Block/Form/Options.php b/Block/Form/Options.php
index dbfd103..e4a5b54 100644
--- a/Block/Form/Options.php
+++ b/Block/Form/Options.php
@@ -3,19 +3,17 @@
 namespace OuterEdge\Multiplenewsletter\Block\Form;
 
 use Magento\Framework\View\Element\Template;
-use OuterEdge\Layout\Helper\Data as LayoutHelper;
 use Magento\Framework\View\Element\Template\Context;
 use Magento\Customer\Model\SessionFactory;
 use Magento\Customer\Api\CustomerRepositoryInterface;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\Store\Model\ScopeInterface;
+use OuterEdge\Multiplenewsletter\Helper\Data;
 
 class Options extends Template
 {
-    protected $_newsletterOptions;
 
-    /**
-     * @var LayoutHelper
-     */
-    protected $layoutHelper;
+    protected $newsletterOptions;
 
     /**
      * @var SessionFactory
@@ -27,32 +25,45 @@ class Options extends Template
      */
     protected $customerRepositoryInterface;
 
+    /**
+     * @var ScopeConfigInterface
+     */
+    protected $scopeConfig;
+
     /**
      * @param Context $context
-     * @param LayoutHelper $layoutHelper
      * @param SessionFactory $sessionFactory
      * @param CustomerRepositoryInterface $customerRepositoryInterface
+     * @param ScopeConfigInterface $scopeConfig
      * @param array $data
      */
     public function __construct(
         Context $context,
-        LayoutHelper $layoutHelper,
         SessionFactory $sessionFactory,
         CustomerRepositoryInterface $customerRepositoryInterface,
+        ScopeConfigInterface $scopeConfig,
         array $data = []
     ) {
-        $this->layoutHelper = $layoutHelper;
         $this->sessionFactory = $sessionFactory;
         $this->customerRepositoryInterface = $customerRepositoryInterface;
+        $this->scopeConfig = $scopeConfig;
         parent::__construct($context, $data);
     }
 
     public function getNewsletterOptions()
     {
-        if ($this->_newsletterOptions === null) {
-            $this->_newsletterOptions = $this->layoutHelper->getGroupAndElements('newsletter_options');
+        if ($this->newsletterOptions === null) {
+
+            $data = $this->scopeConfig->getValue('multinewletteroptions/list/options', ScopeInterface::SCOPE_STORE);
+            foreach (explode(',', $data) as $option) {
+                $this->newsletterOptions[] = [
+                    'lable' => ucfirst(ltrim($option)),
+                    'code' => str_replace(' ', '_', ltrim($option))
+                ];
+            }
         }
-        return $this->_newsletterOptions;
+
+        return $this->newsletterOptions;
     }
 
     public function getNewsletterOptionsByCustomer($newsletterOption)
@@ -69,6 +80,10 @@ public function getNewsletterOptionsByCustomer($newsletterOption)
         }
 
         if (!empty($customerNewsOpt)) {
+            if ($customerNewsOpt == Data::CORE_NEWSLETTER) {
+                return true;
+            }
+
             if (strpos($customerNewsOpt, $newsletterOption) !== false) {
                 return true;
             }
diff --git a/Helper/Data.php b/Helper/Data.php
new file mode 100644
index 0000000..3399491
--- /dev/null
+++ b/Helper/Data.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace OuterEdge\Multiplenewsletter\Helper;
+
+use Magento\Framework\App\Helper\AbstractHelper;
+
+class Data extends AbstractHelper
+{
+    CONST CORE_NEWSLETTER = 'all';
+}
diff --git a/Observer/UpdateOptions.php b/Observer/UpdateOptions.php
index e1dfc25..d28296a 100644
--- a/Observer/UpdateOptions.php
+++ b/Observer/UpdateOptions.php
@@ -5,16 +5,11 @@
 use Magento\Framework\Event\Observer;
 use Magento\Framework\Event\ObserverInterface;
 use Magento\Customer\Model\SessionFactory;
-use Magento\Store\Model\StoreManagerInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
+use OuterEdge\Multiplenewsletter\Helper\Data;
 
 class UpdateOptions implements ObserverInterface
 {
-    /**
-     * @var StoreManagerInterface
-     */
-    protected $storeManager;
-
     /**
      * @var CustomerRepositoryInterface
      */
@@ -26,16 +21,13 @@ class UpdateOptions implements ObserverInterface
     protected $sessionFactory;
 
     /**
-     * @param StoreManagerInterface $storeManager
      * @param CustomerRepositoryInterface $customerRepositoryInterface
      * @param SessionFactory $sessionFactory
      */
     public function __construct(
-        StoreManagerInterface $storeManager,
         CustomerRepositoryInterface $customerRepositoryInterface,
         SessionFactory $sessionFactory
     ) {
-        $this->storeManager = $storeManager;
         $this->customerRepositoryInterface = $customerRepositoryInterface;
         $this->sessionFactory = $sessionFactory;
     }
@@ -46,11 +38,15 @@ public function __construct(
     public function execute(Observer $observer) : void
     {
         $newsOptions = $observer->getRequest()->getParam('newsletter_options', false);
+        if ($newsOptions) {
+            $dataToSave = implode(',', array_keys($newsOptions));
+        }
 
-        $dataToSave = implode(',', array_keys($newsOptions));
-
-        $storeId = (int)$this->storeManager->getStore()->getId();
-        $websiteId = (int)$this->storeManager->getStore($storeId)->getWebsiteId();
+        if ($observer->getRequest()->getParam('is_subscribed', false)) {
+            $dataToSave = Data::CORE_NEWSLETTER;
+        } elseif (!$newsOptions) {
+            $dataToSave = NULL;
+        }
 
         try {
             $customer = $this->customerRepositoryInterface->getById($this->getCustomerId());
diff --git a/Setup/UpgradeData.php b/Setup/UpgradeData.php
new file mode 100644
index 0000000..7a6fbf6
--- /dev/null
+++ b/Setup/UpgradeData.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace OuterEdge\Multiplenewsletter\Setup;
+
+use Magento\Framework\Setup\UpgradeDataInterface;
+use Magento\Framework\Setup\ModuleDataSetupInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory as NewsCollectionFactory;
+use Magento\Customer\Api\CustomerRepositoryInterface;
+use OuterEdge\Multiplenewsletter\Helper\Data;
+use Magento\Framework\App\State;
+
+class UpgradeData implements UpgradeDataInterface
+{
+    /**
+     * @var NewsCollectionFactory
+     */
+    protected $subscriberCollection;
+
+    /**
+     * @var CustomerRepositoryInterface
+     */
+    protected $customerRepositoryInterface;
+
+    /**
+     * @var \Magento\Framework\App\State
+     */
+    private $state;
+
+    /**
+     * @param NewsCollectionFactory $subscriberCollection
+     * @param CustomerRepositoryInterface $customerRepositoryInterface
+     * @param State $state
+     */
+    public function __construct(
+        NewsCollectionFactory $subscriberCollection,
+        CustomerRepositoryInterface $customerRepositoryInterface,
+        State $state
+    ) {
+        $this->subscriberCollection = $subscriberCollection;
+        $this->customerRepositoryInterface = $customerRepositoryInterface;
+        $this->state = $state;
+    }
+
+    public function getSubscriberCollection()
+    {
+        return $this->subscriberCollection->create();
+    }
+
+    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $this->state->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
+
+        if (version_compare($context->getVersion(), '1.0.1', '<')) {
+
+            $setup->startSetup();
+
+            foreach ($this->getSubscriberCollection() as $customerNewsletter) {
+
+                if (!$customerNewsletter['customer_id']) {
+                    continue;
+                }
+                try {
+                    $customer = $this->customerRepositoryInterface->getById($customerNewsletter['customer_id']);
+
+                    //Only update if newsletter_options is empty
+                    if ($customer->getCustomAttribute('newsletter_options')) {
+                        continue;
+                    }
+
+                    //TODO. Save in a different way, or force to save even if customer have errors
+                    $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER);
+                    $this->customerRepositoryInterface->save($customer);
+
+                } catch (\Exception $e) {
+                    throw new \Exception('Error updating multiple newsletter, customer: ' . $customerNewsletter['customer_id']. ' Reason: '. $e->getMessage());
+                }
+
+            }
+            $setup->endSetup();
+		}
+    }
+}
diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml
new file mode 100644
index 0000000..308c12f
--- /dev/null
+++ b/etc/adminhtml/system.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
+    <system>
+        <tab id="outeredge" translate="label" sortOrder="2000" class="outeredge-tab">
+            <label>outer/edge</label>
+        </tab>
+        <section id="multinewletteroptions" translate="label" type="text" sortOrder="11" showInDefault="1" showInWebsite="1" showInStore="0">
+            <label>Multi Newsletter Emails</label>
+            <tab>outeredge</tab>
+            <resource>OuterEdge_Multiplenewsletter::MultiplenewsletterSettings</resource>
+            <group id="list" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="0">
+                <label>Multi Newsletter Emails list</label>
+                <field id="options" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Newsletter options</label>
+                    <comment>newsletter one, newsletter two, newsletter three</comment>
+                </field>
+            </group>
+        </section>
+    </system>
+</config>
diff --git a/etc/module.xml b/etc/module.xml
index 549b3b8..354bfd2 100644
--- a/etc/module.xml
+++ b/etc/module.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="OuterEdge_Multiplenewsletter" setup_version="1.0.0">
+    <module name="OuterEdge_Multiplenewsletter" setup_version="1.0.1">
         <sequence>
             <module name="Magento_Newsletter"/>
         </sequence>
diff --git a/view/frontend/templates/form/newsletter-options.phtml b/view/frontend/templates/form/newsletter-options.phtml
index 88b83bd..6d09fe1 100644
--- a/view/frontend/templates/form/newsletter-options.phtml
+++ b/view/frontend/templates/form/newsletter-options.phtml
@@ -2,29 +2,25 @@
 /**
  * @var \OuterEdge\Multiplenewsletter\Block\Form\NewsletterOptions $block
  */
-
 $newsletterOptions = $block->getNewsletterOptions();
 ?>
 
-<?php foreach($newsletterOptions->getElements() as $newsletters) : ?>
-    <?php $isEnabled = $block->getNewsletterOptionsByCustomer($newsletters->getNewsletterOptionsCode()); ?>
+<?php foreach ($newsletterOptions as $newsletters): ?>
+    <?php $isEnabled = $block->getNewsletterOptionsByCustomer($newsletters['code']); ?>
     <div class="field choice">
-        <input type="checkbox" onClick="unCheckAll(this);" name="newsletter_options[<?php echo $newsletters->getNewsletterOptionsCode()?>]"
-            id="newsletter_options[<?php echo $newsletters->getNewsletterOptionsCode()?>"
+        <input type="checkbox" onClick="unCheckAll(this);" name="newsletter_options[<?php echo $newsletters['code']?>]"
+            id="newsletter_options[<?php echo $newsletters['code']?>]"
             value="1"
-            title="<?= $block->escapeHtml($newsletters->getTitle()) ?>"
+            title="<?= $block->escapeHtml($newsletters['lable']) ?>"
             <?php if($isEnabled): ?> checked="checked"<?php endif; ?> class="checkbox"
         />
-        <label for="newsletter_options[<?php echo $newsletters->getNewsletterOptionsCode()?>">
-            <?= $block->escapeHtml($newsletters->getTitle()) ?>
+        <label for="newsletter_options[<?php echo $newsletters['code']?>]">
+            <?= $block->escapeHtml($newsletters['lable']) ?>
         </label>
     </div>
 <?php endforeach; ?>
 
 <script type="text/javascript">
-    //<![CDATA[
-    var dataForm = new VarienForm('form-validate', true);
-    //]]>
     function checkAll(source) {
         checkboxes = document.getElementsByClassName('checkbox');
         for ( var i in checkboxes)
diff --git a/view/frontend/templates/form/newsletter.phtml b/view/frontend/templates/form/newsletter.phtml
index 3bb1895..3b02728 100644
--- a/view/frontend/templates/form/newsletter.phtml
+++ b/view/frontend/templates/form/newsletter.phtml
@@ -5,7 +5,7 @@
     <form class="form form-newsletter-manage" action="<?= $block->escapeUrl($block->getAction()) ?>" method="post" id="form-validate">
         <fieldset class="fieldset">
             <?= $block->getBlockHtml('formkey') ?>
-            <legend class="legend"><span><?= $block->escapeHtml(__('Subscription option')) ?></span></legend><br>
+            <legend class="legend"><span><?= $block->escapeHtml(__('Subscription Options')) ?></span></legend><br>
             <div class="field choice">
                 <input type="checkbox" name="is_subscribed" id="subscription" onClick="checkAll(this);" value="1" title="<?= $block->escapeHtmlAttr(__('General Subscription')) ?>"<?php if ($block->getIsSubscribed()) : ?> checked="checked"<?php endif; ?> class="checkbox">
                 <label for="subscription" class="label"><span><?= $block->escapeHtml(__('All Newsletters')) ?></span></label>

From 6812de25615c931f6676ab72f8d8e4e5fda9a4aa Mon Sep 17 00:00:00 2001
From: Bruno Dias <ibroopi@gmail.com>
Date: Tue, 1 Mar 2022 13:19:27 +0000
Subject: [PATCH 2/4] Update all subscrived customers to multi newsletter

---
 Observer/UpdateFromAdmin.php | 54 ++++++++++++++++++++++++++++++++++++
 Observer/UpdateOptions.php   |  2 +-
 Setup/UpgradeData.php        | 41 ++++++++++++++++++++++-----
 etc/adminhtml/events.xml     |  6 ++++
 4 files changed, 95 insertions(+), 8 deletions(-)
 create mode 100644 Observer/UpdateFromAdmin.php
 create mode 100644 etc/adminhtml/events.xml

diff --git a/Observer/UpdateFromAdmin.php b/Observer/UpdateFromAdmin.php
new file mode 100644
index 0000000..6b76d0a
--- /dev/null
+++ b/Observer/UpdateFromAdmin.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace OuterEdge\Multiplenewsletter\Observer;
+
+use Magento\Framework\Event\Observer;
+use Magento\Framework\Event\ObserverInterface;
+use Magento\Customer\Api\CustomerRepositoryInterface;
+use OuterEdge\Multiplenewsletter\Helper\Data;
+
+class UpdateFromAdmin implements ObserverInterface
+{
+    /**
+     * @var CustomerRepositoryInterface
+     */
+    protected $customerRepositoryInterface;
+
+    /**
+     * @param CustomerRepositoryInterface $customerRepositoryInterface
+     */
+    public function __construct(
+        CustomerRepositoryInterface $customerRepositoryInterface
+    ) {
+        $this->customerRepositoryInterface = $customerRepositoryInterface;
+    }
+
+    /**
+     * @param Observer $observer
+     */
+    public function execute(Observer $observer)
+    {
+        $customerId = $observer->getCustomer()->getId();
+        $subscriptionStatus = (array)$observer->getRequest()->getParam('subscription_status');
+
+        if (empty($subscriptionStatus)) {
+            return;
+        }
+
+        $customer = $this->customerRepositoryInterface->getById((int)$customerId);
+
+        foreach ($subscriptionStatus as $status) {
+            if ($status) {
+                $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER);
+            } else {
+                $customer->setCustomAttribute('newsletter_options', 'NULL');
+            }
+
+            try {
+                $this->customerRepositoryInterface->save($customer);
+            } catch (\Exception $e) {
+                throw new \Exception('Error saving multiple newsletter');
+            }
+        }
+    }
+}
diff --git a/Observer/UpdateOptions.php b/Observer/UpdateOptions.php
index d28296a..44104ce 100644
--- a/Observer/UpdateOptions.php
+++ b/Observer/UpdateOptions.php
@@ -45,7 +45,7 @@ public function execute(Observer $observer) : void
         if ($observer->getRequest()->getParam('is_subscribed', false)) {
             $dataToSave = Data::CORE_NEWSLETTER;
         } elseif (!$newsOptions) {
-            $dataToSave = NULL;
+            $dataToSave = 'NULL';
         }
 
         try {
diff --git a/Setup/UpgradeData.php b/Setup/UpgradeData.php
index 7a6fbf6..ee73fe9 100644
--- a/Setup/UpgradeData.php
+++ b/Setup/UpgradeData.php
@@ -9,6 +9,8 @@
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use OuterEdge\Multiplenewsletter\Helper\Data;
 use Magento\Framework\App\State;
+use Magento\Framework\App\ResourceConnection;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 class UpgradeData implements UpgradeDataInterface
 {
@@ -27,19 +29,35 @@ class UpgradeData implements UpgradeDataInterface
      */
     private $state;
 
+    /**
+     * @var ResourceConnection
+     */
+    protected $resource;
+
+    /**
+     * @var Attribute
+     */
+    protected $eavAttribute;
+
     /**
      * @param NewsCollectionFactory $subscriberCollection
      * @param CustomerRepositoryInterface $customerRepositoryInterface
      * @param State $state
+     * @param ResourceConnection $resource
+     * @param Attribute $eavAttribute
      */
     public function __construct(
         NewsCollectionFactory $subscriberCollection,
         CustomerRepositoryInterface $customerRepositoryInterface,
-        State $state
+        State $state,
+        ResourceConnection $resource,
+        Attribute $eavAttribute
     ) {
         $this->subscriberCollection = $subscriberCollection;
         $this->customerRepositoryInterface = $customerRepositoryInterface;
         $this->state = $state;
+        $this->resource = $resource;
+        $this->eavAttribute = $eavAttribute;
     }
 
     public function getSubscriberCollection()
@@ -49,33 +67,42 @@ public function getSubscriberCollection()
 
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
-        $this->state->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
+        $this->state->setAreaCode(\Magento\Framework\App\Area::AREA_FRONTEND);
 
         if (version_compare($context->getVersion(), '1.0.1', '<')) {
 
             $setup->startSetup();
+            $connection = $this->resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
+            $customerEntity = $connection->getTableName('customer_entity');
+            $customerEntityVarchar = $connection->getTableName('customer_entity_varchar');
+            $attributeId = $this->eavAttribute->getIdByCode(\Magento\Customer\Model\Customer::ENTITY, 'newsletter_options');
 
             foreach ($this->getSubscriberCollection() as $customerNewsletter) {
 
                 if (!$customerNewsletter['customer_id']) {
                     continue;
                 }
+
+                $selectCustomer = "SELECT entity_id FROM $customerEntity WHERE entity_id LIKE ".$customerNewsletter['customer_id'];
+                $customerExist = $connection->fetchRow($selectCustomer);
+                if (!$customerExist) {
+                    continue;
+                }
+
                 try {
                     $customer = $this->customerRepositoryInterface->getById($customerNewsletter['customer_id']);
-
                     //Only update if newsletter_options is empty
                     if ($customer->getCustomAttribute('newsletter_options')) {
                         continue;
                     }
 
-                    //TODO. Save in a different way, or force to save even if customer have errors
-                    $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER);
-                    $this->customerRepositoryInterface->save($customer);
+                    $connection->fetchAll("INSERT INTO `".$customerEntityVarchar."`
+                        (`value_id`, `attribute_id`, `entity_id`, `value`)
+                        VALUES (NULL, '".$attributeId."', '".$customer->getId()."', '".Data::CORE_NEWSLETTER."')");
 
                 } catch (\Exception $e) {
                     throw new \Exception('Error updating multiple newsletter, customer: ' . $customerNewsletter['customer_id']. ' Reason: '. $e->getMessage());
                 }
-
             }
             $setup->endSetup();
 		}
diff --git a/etc/adminhtml/events.xml b/etc/adminhtml/events.xml
new file mode 100644
index 0000000..a3c4508
--- /dev/null
+++ b/etc/adminhtml/events.xml
@@ -0,0 +1,6 @@
+<?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="adminhtml_customer_save_after">
+        <observer name="update_multinewsletter_field" instance="OuterEdge\Multiplenewsletter\Observer\UpdateFromAdmin" />
+    </event>
+</config>

From 6c4e3645fcccab5ff08c7fc750e728f53794641d Mon Sep 17 00:00:00 2001
From: Bruno Dias <ibroopi@gmail.com>
Date: Tue, 1 Mar 2022 15:44:34 +0000
Subject: [PATCH 3/4] Update all subscrived customers to multi newsletter

---
 Block/Form/Options.php       | 2 +-
 Helper/Data.php              | 4 +++-
 Observer/UpdateFromAdmin.php | 4 ++--
 Observer/UpdateOptions.php   | 4 ++--
 Setup/UpgradeData.php        | 2 +-
 5 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/Block/Form/Options.php b/Block/Form/Options.php
index e4a5b54..ea16ca4 100644
--- a/Block/Form/Options.php
+++ b/Block/Form/Options.php
@@ -80,7 +80,7 @@ public function getNewsletterOptionsByCustomer($newsletterOption)
         }
 
         if (!empty($customerNewsOpt)) {
-            if ($customerNewsOpt == Data::CORE_NEWSLETTER) {
+            if ($customerNewsOpt == Data::CORE_NEWSLETTER_SUBSCRIBE) {
                 return true;
             }
 
diff --git a/Helper/Data.php b/Helper/Data.php
index 3399491..9ea4c4a 100644
--- a/Helper/Data.php
+++ b/Helper/Data.php
@@ -6,5 +6,7 @@
 
 class Data extends AbstractHelper
 {
-    CONST CORE_NEWSLETTER = 'all';
+    CONST CORE_NEWSLETTER_SUBSCRIBE = 'all';
+
+    CONST CORE_NEWSLETTER_UNSUBSCRIBE = 'null';
 }
diff --git a/Observer/UpdateFromAdmin.php b/Observer/UpdateFromAdmin.php
index 6b76d0a..8a9bc06 100644
--- a/Observer/UpdateFromAdmin.php
+++ b/Observer/UpdateFromAdmin.php
@@ -39,9 +39,9 @@ public function execute(Observer $observer)
 
         foreach ($subscriptionStatus as $status) {
             if ($status) {
-                $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER);
+                $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER_SUBSCRIBE);
             } else {
-                $customer->setCustomAttribute('newsletter_options', 'NULL');
+                $customer->setCustomAttribute('newsletter_options', Data::CORE_NEWSLETTER_UNSUBSCRIBE);
             }
 
             try {
diff --git a/Observer/UpdateOptions.php b/Observer/UpdateOptions.php
index 44104ce..61c7e23 100644
--- a/Observer/UpdateOptions.php
+++ b/Observer/UpdateOptions.php
@@ -43,9 +43,9 @@ public function execute(Observer $observer) : void
         }
 
         if ($observer->getRequest()->getParam('is_subscribed', false)) {
-            $dataToSave = Data::CORE_NEWSLETTER;
+            $dataToSave = Data::CORE_NEWSLETTER_SUBSCRIBE;
         } elseif (!$newsOptions) {
-            $dataToSave = 'NULL';
+            $dataToSave = Data::CORE_NEWSLETTER_UNSUBSCRIBE;
         }
 
         try {
diff --git a/Setup/UpgradeData.php b/Setup/UpgradeData.php
index ee73fe9..b5ce93f 100644
--- a/Setup/UpgradeData.php
+++ b/Setup/UpgradeData.php
@@ -98,7 +98,7 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface
 
                     $connection->fetchAll("INSERT INTO `".$customerEntityVarchar."`
                         (`value_id`, `attribute_id`, `entity_id`, `value`)
-                        VALUES (NULL, '".$attributeId."', '".$customer->getId()."', '".Data::CORE_NEWSLETTER."')");
+                        VALUES (NULL, '".$attributeId."', '".$customer->getId()."', '".Data::CORE_NEWSLETTER_SUBSCRIBE."')");
 
                 } catch (\Exception $e) {
                     throw new \Exception('Error updating multiple newsletter, customer: ' . $customerNewsletter['customer_id']. ' Reason: '. $e->getMessage());

From 46657c13edd4dd7df660b371e559d4dda4887951 Mon Sep 17 00:00:00 2001
From: Bruno Dias <ibroopi@gmail.com>
Date: Tue, 1 Mar 2022 15:46:18 +0000
Subject: [PATCH 4/4] Update all subscrived customers to multi newsletter

---
 Setup/UpgradeData.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Setup/UpgradeData.php b/Setup/UpgradeData.php
index b5ce93f..fc907e4 100644
--- a/Setup/UpgradeData.php
+++ b/Setup/UpgradeData.php
@@ -101,7 +101,8 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface
                         VALUES (NULL, '".$attributeId."', '".$customer->getId()."', '".Data::CORE_NEWSLETTER_SUBSCRIBE."')");
 
                 } catch (\Exception $e) {
-                    throw new \Exception('Error updating multiple newsletter, customer: ' . $customerNewsletter['customer_id']. ' Reason: '. $e->getMessage());
+                    throw new \Exception('Error on multiple newsletter with customer: '
+                        .$customerNewsletter['customer_id'].' Reason: '.$e->getMessage());
                 }
             }
             $setup->endSetup();