Your IP : 216.73.216.220


Current Path : /var/www/html/app/code/FlipsDigital/TextbookList/Controller/Adminhtml/TextbookList/
Upload File :
Current File : /var/www/html/app/code/FlipsDigital/TextbookList/Controller/Adminhtml/TextbookList/SyncData.php

<?php
namespace FlipsDigital\TextbookList\Controller\Adminhtml\TextbookList;

use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use FlipsDigital\TextbookList\Model\TextbookListFactory;
use \Zend\Log\Writer\Stream;
use \Zend\Log\Logger;
use \Magento\Catalog\Model\Product;
use \Magento\Catalog\Model\Product\Type as ProductType;

class SyncData extends Action
{
    /** @var textbooklistFactory $objectFactory */
    protected $objectFactory;

    /**
     * @param Context $context
     * @param TextbookListFactory $objectFactory
     */
    public function __construct(
        Context $context,
        TextbookListFactory $objectFactory,
        \Magento\Framework\ObjectManagerInterface $objectManager,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        \Magento\Catalog\Model\CategoryFactory $categoryFactory,
        \Magento\Catalog\Model\CategoryLinkManagement $categoryLinkManagement,
        \FlipsDigital\EducationInstitution\Model\EducationInstitutionFactory $educationInstitutionFactory,
        \FlipsDigital\TextbookList\Model\TextbookListFactory $textbookListFactory,
        \FlipsDigital\TextbookListBook\Model\TextbookListBookFactory $textbookListBookFactory,
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
    ) {
        $this->objectFactory = $objectFactory;
        parent::__construct($context);
        $this->_scopeConfig = $scopeConfig;
        $this->_categoryFactory = $categoryFactory;
        $this->_categoryLinkManagement = $categoryLinkManagement;
        $this->_eiFactory = $educationInstitutionFactory;
        $this->_tlFactory = $textbookListFactory;
        $this->_tlbFactory = $textbookListBookFactory;
        $this->_timezone = $timezone;
    }

    /**
     * {@inheritdoc}
     */
    protected function _isAllowed()
    {
        return $this->_authorization->isAllowed('FlipsDigital_TextbookList::textbooklist');
    }

    public function _executeQuery($sql, $params = []){
        $stmt = sqlsrv_query( $this->_connection, $sql, $params);
        if( $stmt === false ) {
             die( print_r( sqlsrv_errors(), true));
        }
        return $stmt;
    }
    public function _executeFetchArray($sql, $params = []){
        $stmt = $this->_executeQuery($sql, $params);
        $arrData = array();
        while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
            $arrData[] = $row;
        }

        sqlsrv_free_stmt($stmt);
        return $arrData;
    }
    public function getEIData($G_GL_CUS){
        $EI_ID = '';
        $categoryTextbookList = $this->_categoryFactory->create()->getCollection()
        ->addFieldToFilter('entity_id', $this->_scopeConfig->getValue('happymind/textbook/default_textbook_list_category'))
        ->getFirstItem();

        $arrSQLFields = [
            'V_CUS.ID',
            'V_CUS.CUS',
            'V_CUS.ENAME',
            'V_CUS.CNAME',
            'V_CUS.CDATE',
            'V_CUS.PCAT',
            'V_CUS.STATUS',
        ];
        $query = "SELECT ".implode(", ", $arrSQLFields)." FROM V_CUS WHERE CUS = '".$G_GL_CUS."'";
        $arrRawData = $this->_executeFetchArray($query);
        if(count($arrRawData)){
            foreach ($arrRawData as $key => $value) {
                $identifierEI = $value['CUS'].'-'.$value['ID'];
    
                $objEI = $this->_eiFactory->create();
                $collectionEI = $objEI->getCollection();
                $collectionEI->addFieldToFilter('identifier', $identifierEI);
                $collectionEI->addAttributeToSelect('*');
                $arrData = [];
                if ($collectionEI->count()){
                    $objEI = $collectionEI->getFirstItem();
                    $arrData = $objEI->getData();
                }
                $arrData['identifier'] = $identifierEI;
                $arrData['mers_stock_source_v_cus_id'] = $value['ID'];
                $arrData['mers_stock_source_v_cus_cus'] = $value['CUS'];
                $arrData['mers_stock_source_v_cus_cdate'] = $value['CDATE'];
                $arrData['group_id'] = $value['PCAT'];
                $arrData['name'] = $value['ENAME'];
                $arrData['chinese_name'] = $value['CNAME'];
                $arrData['status'] = ($value['STATUS'] == 1)?"1":"0";
    
                $objEI->setData($arrData);
                $objEI->save();
                $EI_ID = $objEI->getId();
                $this->_logger->info("Sync Data: Education Institution - " . $EI_ID . " |  V_CUS - " . $value['CUS']);
    
                $objCategory = $this->_categoryFactory->create();
                $collectionCategory = $objCategory->getCollection();
                $collectionCategory->addAttributeToSelect('*')
                        ->addAttributeToFilter('mers_stock_source_type', "V_CUS")
                        ->addAttributeToFilter('mers_stock_source_id', $value['ID'])
                        ->addAttributeToFilter('mers_stock_source_code', $value['CUS']);
                $categoryTextbookListPath = $categoryTextbookList->getPath();
                if ($collectionCategory->count()){
                    $objCategory = $collectionCategory->getFirstItem();
                    $categoryTextbookListPath .= "/".$objCategory->getId();
                }
                $objCategory->setStoreId(0);
                $objCategory->setPath($categoryTextbookListPath);
                $objCategory->setUrlKey($identifierEI);
                $objCategory->setIncludeInMenu(false);
                $objCategory->setParentId($categoryTextbookList->getId());
                $objCategory->setIsActive(true);
                $objCategory->setName($value['ENAME']);
                $objCategory->setMersStockSourceType("V_CUS");
                $objCategory->setMersStockSourceId($value['ID']);
                $objCategory->setMersStockSourceCode($value['CUS']);
                $objCategory->save();
                $this->_logger->info("Sync Data: Category ( Education Institution ) - " . $objCategory->getId());
            }
        }
        return $EI_ID;
    }
    public function getCategoryID_EI($eiEntityID){
        $textBookListEI = $this->_eiFactory->create()->load($eiEntityID);
        $objCategory = $this->_categoryFactory->create();
        $collectionCategory = $objCategory->getCollection();
        $collectionCategory->addAttributeToSelect('*')
                ->addAttributeToFilter('mers_stock_source_type', 'V_CUS')
                ->addAttributeToFilter('mers_stock_source_id', $textBookListEI->getData('mers_stock_source_v_cus_id'))
                ->addAttributeToFilter('mers_stock_source_code', $textBookListEI->getData('mers_stock_source_v_cus_cus'));
        if ($collectionCategory->count()){
            $objCategory = $collectionCategory->getFirstItem();
        }
        return $objCategory->getId();
    }
    public function getCategoryID_TB($GL_GROUP_ID, $categoryID_EI){
        $objCategory = $this->_categoryFactory->create();
        $collectionCategory = $objCategory->getCollection();
        $collectionCategory->addAttributeToSelect('*')
                ->addAttributeToFilter('mers_stock_source_type', 'G_GL_GROUP')
                ->addAttributeToFilter('mers_stock_source_id', $GL_GROUP_ID)
                ->addAttributeToFilter('mers_stock_source_code', $categoryID_EI)
                ->setOrder('entity_id','DESC');
        if ($collectionCategory->count()){
            $objCategory = $collectionCategory->getFirstItem();
        }
        return $objCategory->getId();
    }
    public function setTextbookListBookStatus($tbEntityID, $status = 0){
        $objTLB = $this->_tlbFactory->create();
        $collectionTLB = $objTLB->getCollection();
        $collectionTLB->addAttributeToSelect('*');
        $collectionTLB->addFieldToFilter('booklist_id', $tbEntityID);
        if ($collectionTLB->count()){
            foreach ($collectionTLB->getItems() as $key => $value) {
                $this->_logger->info("Textbook List Book - " . $value->getId() . " | Status From ".$value->getData('status')." to ".$status);
                $value->setData('status', $status);
                $value->save();
            }
        }
    }
    public function execute()
    {
        $logFile = BP . '/var/log/adminSyncTextbook.log';
        $writer = new Stream($logFile);
        $this->_logger = new Logger();
        $this->_logger->addWriter($writer);

        $serverName = "192.168.102.1";
        $connectionInfo = array(
            "Database"=>"MERS_STOCK",
            "UID"=>"magento",
            "PWD"=>"Magento888",
            "CharacterSet"=>"UTF-8"
        );
        $this->_connection = sqlsrv_connect($serverName, $connectionInfo);
        if( $this->_connection === false ) {
            $this->_logger->err("Connection failed: " . print_r( sqlsrv_errors(), true));
        }

        if( $this->_connection === false ) return;
        $this->_logger->info("START (".$this->_timezone->date()->format('Y-m-d H:i:s')."): " . __METHOD__ );

        $resultRedirect = $this->resultRedirectFactory->create();
        $entity_id = $this->getRequest()->getParam('entity_id', null);
        $objTL = $this->objectFactory->create()->load($entity_id);

        //Sync education institution data
        $eiEntityID = $this->getEIData($objTL->getData('mers_stock_source_v_cus_cus'));
        
        //Sync textbook data
        $categoryTextbookList = $this->_categoryFactory->create()->getCollection()
        ->addFieldToFilter('entity_id', $this->_scopeConfig->getValue('happymind/textbook/default_textbook_list_category'))
        ->getFirstItem();

        $categoryID_EI = $this->getCategoryID_EI($eiEntityID);
        
        $arrSQLFields = [
            'G_GL_GROUP.ID as G_GL_GROUP_ID',
            'G_GL_GROUP.CLASSNAME',
            'G_GL_GROUP.GROUP_ID',
            'G_GL_GROUP.GROUPNAME',
            'G_GL.ID as GL_ID',
            'G_GL.GL_CODE',
            'G_GL.CUS',
            'G_GL.COMPANY',
            'G_GL.PRINT_REMARK',
            'G_GL.PLASTIC_BAG_LEVY',
            'G_GL.PLASTIC_BAG_LEVY_AMOUNT', // New table field from 20230502
            'G_GL.ALLOW_NOT_BUY_ALL',
            'G_GL.INPUT_DATE',
            'G_GL.EDIT_DATE',
            'G_GL.MAGENTO_START_DATE',
            'G_GL.MAGENTO_END_DATE',
        ];
        $query = "SELECT ".implode(", ", $arrSQLFields)." FROM G_GL_GROUP 
        LEFT JOIN G_GL ON G_GL.ID = G_GL_GROUP.GL_ID
        WHERE G_GL_GROUP.ID = '".$objTL->getData('mers_stock_source_g_gl_group_id')."'";
        $arrRawData = $this->_executeFetchArray($query);
        if(count($arrRawData)){
            foreach ($arrRawData as $key => $value) {
                $identifierTL = $value['GL_ID'].'-'.$value['G_GL_GROUP_ID'];
                $arrData = [];
                $arrData = $objTL->getData();
                
                $arrData['identifier'] = $identifierTL;
                $arrData['mers_stock_source_g_gl_id'] = $value['GL_ID'];
                $arrData['mers_stock_source_g_gl_code'] = $value['GL_CODE'];
                $arrData['mers_stock_source_v_cus_cus'] = $value['CUS'];
                $arrData['mers_stock_source_g_gl_company'] = $value['COMPANY'];
                $arrData['mers_stock_source_g_gl_input_date'] = $value['INPUT_DATE'];
                $arrData['mers_stock_source_g_gl_edit_date'] = $value['EDIT_DATE'];
                $arrData['mers_stock_source_g_gl_magento_start_date'] = $value['MAGENTO_START_DATE'];
                $arrData['mers_stock_source_g_gl_magento_end_date'] = $value['MAGENTO_END_DATE'];
                $arrData['mers_stock_source_g_gl_group_id'] = $value['G_GL_GROUP_ID'];
                $arrData['mers_stock_source_g_gl_group_group_id'] = $value['GROUP_ID'];
                $arrData['mers_stock_source_g_gl_plastic_bag_levy'] = $value['PLASTIC_BAG_LEVY'];
                $arrData['mers_stock_source_g_gl_plastic_bag_levy_amount'] = $value['PLASTIC_BAG_LEVY_AMOUNT'];
                $arrData['mers_stock_source_g_gl_allow_not_buy_all'] = $value['ALLOW_NOT_BUY_ALL'];
                $arrData['education_institution_id'] = $eiEntityID;
                $arrData['print_remark'] = $value['PRINT_REMARK'];
                $arrData['class_name'] = $value['CLASSNAME'];
                $arrData['group_name'] = $value['GROUPNAME'];
                $arrData['status'] = $arrData['status'];
                $arrData['sync_data_start_date'] = $this->_timezone->date()->format('Y-m-d H:i:s');
    
                $objTL->setData($arrData);
                $objTL->save();
                $this->_logger->info("Sync Data: Textbook List - " . $objTL->getId() . " |  G_GL - " . $value['GL_ID'] . ", G_GL_GROUP - " . $value['G_GL_GROUP_ID']);
                
                if($categoryID_EI){
                    $objCategory = $this->_categoryFactory->create();
                    $collectionCategory = $objCategory->getCollection();
                    $collectionCategory->addAttributeToSelect('*')
                            ->addAttributeToFilter('mers_stock_source_type', 'G_GL_GROUP')
                            ->addAttributeToFilter('mers_stock_source_id', $value['G_GL_GROUP_ID'])
                            ->addAttributeToFilter('mers_stock_source_code', $categoryID_EI);
                    $categoryTextbookListPath = $categoryTextbookList->getPath().'/'.$categoryID_EI;
                    if ($collectionCategory->count()){
                        $objCategory = $collectionCategory->getFirstItem();
                        $categoryTextbookListPath .= "/".$objCategory->getId();
                    }
                    $objCategory->setStoreId(0);
                    $objCategory->setPath($categoryTextbookListPath);
                    $objCategory->setUrlKey($identifierTL);
                    $objCategory->setIncludeInMenu(false);
                    $objCategory->setParentId($categoryID_EI);
                    $objCategory->setIsActive(true);
                    $objCategory->setName($value['CLASSNAME'] . ' - '. $value['GROUPNAME']);
                    $objCategory->setMersStockSourceType('G_GL_GROUP');
                    $objCategory->setMersStockSourceId($value['G_GL_GROUP_ID']);
                    $objCategory->setMersStockSourceCode($categoryID_EI);
                    $objCategory->save();
                    $this->_logger->info("Sync Data: Category ( Textbook List ) - " . $objCategory->getId());
                }
            }
        }

        //Sync book data
        $tbEntityID = $entity_id;
        $GL_ID = $objTL->getData('mers_stock_source_g_gl_id');
        $GL_GROUP_ID = $objTL->getData('mers_stock_source_g_gl_group_id');
        $eiEntityID = $objTL->getData('education_institution_id');
        $categoryID_EI = $this->getCategoryID_EI($eiEntityID);
        $categoryID_TB = $this->getCategoryID_TB($GL_GROUP_ID, $categoryID_EI);
        $this->_logger->info("Sync Data: Textbook ID - " . $tbEntityID . " | " . $GL_ID."-".$GL_GROUP_ID);

        // Inactive existing book data
        $this->setTextbookListBookStatus($tbEntityID);
        
        foreach ([
            'G_GL_GROUP_BOOKLIST',
            'G_GL_GROUP_MISC',
            'G_GL_GROUP_OPTION',
        ] as $_table) {
            $arrSQLFields = [
                $_table.'.ID as G_GL_GROUP_BOOKLIST_ID',
                $_table.'.PRINT_SECTION as G_GL_GROUP_BOOKLIST_PRINT_SECTION',
                $_table.'.PRINT_SEQ as G_GL_GROUP_BOOKLIST_PRINT_SEQ',
                $_table.'.CODE as G_GL_GROUP_BOOKLIST_BOOK_CODE',
                $_table.'.BOOK as G_GL_GROUP_BOOKLIST_BOOK',
                $_table.'.BOOKLIST_PUBLISHER as G_GL_GROUP_BOOKLIST_BOOKLIST_PUBLISHER',
                $_table.'.PRICE_ORIGINAL as G_GL_GROUP_BOOKLIST_PRICE_ORIGINAL',
                $_table.'.PRICE_SELLING as G_GL_GROUP_BOOKLIST_PRICE_SELLING',
                $_table.'.PRICE_NOT_BUY_ALL as G_GL_GROUP_BOOKLIST_PRICE_NOT_BUY_ALL',
                $_table.'.MUST_BUY as G_GL_GROUP_BOOKLIST_MUST_BUY',
                $_table.'.MAGENTO_HIDDEN as G_GL_GROUP_BOOKLIST_MAGENTO_HIDDEN',
                $_table.'.MAGENTO_BUY_DEFAULT as G_GL_GROUP_BOOKLIST_MAGENTO_BUY_DEFAULT',
                $_table.'.MUST_BUY_TOGETHER_1 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_1',
                $_table.'.MUST_BUY_TOGETHER_2 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_2',
                $_table.'.MUST_BUY_TOGETHER_3 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_3',
                $_table.'.MUST_BUY_TOGETHER_4 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_4',
                $_table.'.MUST_BUY_TOGETHER_5 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_5',
                $_table.'.MUST_BUY_TOGETHER_6 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_6',
                $_table.'.MUST_BUY_TOGETHER_7 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_7',
                $_table.'.MUST_BUY_TOGETHER_8 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_8',
                $_table.'.MUST_BUY_TOGETHER_9 as G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_9',
                $_table.'.CANNOT_BUY_TOGETHER_1 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_1',
                $_table.'.CANNOT_BUY_TOGETHER_2 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_2',
                $_table.'.CANNOT_BUY_TOGETHER_3 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_3',
                $_table.'.CANNOT_BUY_TOGETHER_4 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_4',
                $_table.'.CANNOT_BUY_TOGETHER_5 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_5',
                $_table.'.CANNOT_BUY_TOGETHER_6 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_6',
                $_table.'.CANNOT_BUY_TOGETHER_7 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_7',
                $_table.'.CANNOT_BUY_TOGETHER_8 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_8',
                $_table.'.CANNOT_BUY_TOGETHER_9 as G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_9',
                $_table.'.BUY_AT_LEAST_ONE_1 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_1',
                $_table.'.BUY_AT_LEAST_ONE_2 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_2',
                $_table.'.BUY_AT_LEAST_ONE_3 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_3',
                $_table.'.BUY_AT_LEAST_ONE_4 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_4',
                $_table.'.BUY_AT_LEAST_ONE_5 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_5',
                $_table.'.BUY_AT_LEAST_ONE_6 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_6',
                $_table.'.BUY_AT_LEAST_ONE_7 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_7',
                $_table.'.BUY_AT_LEAST_ONE_8 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_8',
                $_table.'.BUY_AT_LEAST_ONE_9 as G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_9',
                $_table.'.GroupItemDisplayName as G_GL_GROUP_BOOKLIST_GroupItemDisplayName',
                $_table.'.GroupItemDisplayPublisher as G_GL_GROUP_BOOKLIST_GroupItemDisplayPublisher',
                $_table.'.GroupNameEng as G_GL_GROUP_BOOKLIST_GroupNameEng',
                $_table.'.GroupNameChi as G_GL_GROUP_BOOKLIST_GroupNameChi',
                // 'S_PRODUCT.ID as S_PRODUCT_ID',
                // 'S_PRODUCT.CODE as S_PRODUCT_CODE',
                // 'S_PRODUCT.BDESC as S_PRODUCT_BDESC',
                // 'S_PRODUCT.CBDESC as S_PRODUCT_CBDESC',
                // 'S_PRODUCT.UNIT_PRICE_DATE as S_PRODUCT_UNIT_PRICE_DATE',
            ];
            $query = "SELECT ".implode(", ", $arrSQLFields)." FROM ".$_table." 
            WHERE ".$_table.".GL_ID = '".$GL_ID."' AND ".$_table.".GL_GROUP_ID = '".$GL_GROUP_ID."'";
            
            $arrRawData = $this->_executeFetchArray($query);
            if(count($arrRawData)){
                foreach ($arrRawData as $key => $value) {
                    $identifierTLBP = $value['G_GL_GROUP_BOOKLIST_BOOK_CODE'].'-'.$value['G_GL_GROUP_BOOKLIST_ID'];

                    $productSku = $identifierTLBP;
                    $objTLBP = $this->_objectManager->create(Product::class);

                    $objProduct = $objTLBP->loadByAttribute('sku', $productSku);
                    if ($objProduct == NULL){
                        $objProduct = $objTLBP;
                    }
                    $objProduct->setTypeId(ProductType::TYPE_SIMPLE);
                    $objProduct->setSku($productSku);
                    $objProduct->setUrlKey($productSku);
                    $objProduct->setAttributeSetId(4);
                    $objProduct->setName($value['G_GL_GROUP_BOOKLIST_BOOK']);
                    $objProduct->setPrice($value['G_GL_GROUP_BOOKLIST_PRICE_ORIGINAL']);
                    $objProduct->setSpecialPrice($value['G_GL_GROUP_BOOKLIST_PRICE_SELLING']);
                    $objProduct->setStatus(1);
                    $objProduct->setVisibility(4);
                    $objProduct->setTaxClassId(0);
                    $objProduct->setProductHasWeight(0);
                    $objProduct->setStoreId(0);
                    $objProduct->setWebsiteIds(array(1));
                    $objProduct->save();
                    $this->_categoryLinkManagement->assignProductToCategories(
                        $objProduct->getSku(),
                        [
                            $categoryID_TB
                        ]
                    );
                    $this->_logger->info("Sync Data: Product ( Textbook List Book ) - " . $objProduct->getId() . " |  S_PRODUCT - " . $value['G_GL_GROUP_BOOKLIST_ID']);

                    $identifierTLB = $GL_ID.'-'.$GL_GROUP_ID.'-'.$value['G_GL_GROUP_BOOKLIST_ID'];
                    $objTLB = $this->_tlbFactory->create();
                    $collectionTLB = $objTLB->getCollection();
                    $collectionTLB->addFieldToFilter('identifier', $identifierTLB);
                    $arrData = [];
                    
                    if ($collectionTLB->count()){
                        $objTLB = $collectionTLB->getFirstItem();
                        $arrData = $objTLB->getData();
                    }
                    $mustBuy = [];
                    $cannotBuy = [];
                    $buyAtLeastOne = [];

                    for($i=1; $i<=9; $i++){
                        if($value['G_GL_GROUP_BOOKLIST_MUST_BUY_TOGETHER_'.$i]){
                            $mustBuy[] = 'MUST_BUY_TOGETHER_'.$i;
                        }
                        if($value['G_GL_GROUP_BOOKLIST_CANNOT_BUY_TOGETHER_'.$i]){
                            $cannotBuy[] = 'CANNOT_BUY_TOGETHER_'.$i;
                        }
                        if($value['G_GL_GROUP_BOOKLIST_BUY_AT_LEAST_ONE_'.$i]){
                            $buyAtLeastOne[] = 'BUY_AT_LEAST_ONE_'.$i;
                        }
                    }
                    $arrData['identifier'] = $identifierTLB;
                    $arrData['mers_stock_source_table'] = $_table;
                    $arrData['mers_stock_source_g_gl_group_booklist_id'] = $value['G_GL_GROUP_BOOKLIST_ID'];
                    $arrData['mers_stock_source_g_gl_id'] = $GL_ID;
                    $arrData['mers_stock_source_g_gl_group_id'] = $GL_GROUP_ID;
                    $arrData['booklist_id'] = $tbEntityID;
                    $arrData['mers_stock_source_s_product_code'] = $value['G_GL_GROUP_BOOKLIST_BOOK_CODE'];
                    $arrData['product_id'] = $objProduct->getId();
                    $arrData['name'] = $value['G_GL_GROUP_BOOKLIST_BOOK'];
                    $arrData['publisher'] = $value['G_GL_GROUP_BOOKLIST_BOOKLIST_PUBLISHER'];
                    $arrData['print_section'] = trim($value['G_GL_GROUP_BOOKLIST_PRINT_SECTION']);
                    $arrData['print_seq'] = trim($value['G_GL_GROUP_BOOKLIST_PRINT_SEQ']);
                    $arrData['price_original'] = $value['G_GL_GROUP_BOOKLIST_PRICE_ORIGINAL'];
                    $arrData['price_selling'] = $value['G_GL_GROUP_BOOKLIST_PRICE_SELLING'];
                    $arrData['price_not_buy_all'] = $value['G_GL_GROUP_BOOKLIST_PRICE_NOT_BUY_ALL'];
                    $arrData['must_buy'] = $value['G_GL_GROUP_BOOKLIST_MUST_BUY'];
                    $arrData['magento_hidden'] = $value['G_GL_GROUP_BOOKLIST_MAGENTO_HIDDEN'];
                    $arrData['buy_default'] = $value['G_GL_GROUP_BOOKLIST_MAGENTO_BUY_DEFAULT'];
                    $arrData['must_buy_tgt'] = json_encode($mustBuy);
                    $arrData['cannot_buy_tgt'] = json_encode($cannotBuy);
                    $arrData['buy_at_least_one'] = json_encode($buyAtLeastOne);
                    $arrData['GroupItemDisplayName'] = $value['G_GL_GROUP_BOOKLIST_GroupItemDisplayName'];
                    $arrData['GroupItemDisplayPublisher'] = $value['G_GL_GROUP_BOOKLIST_GroupItemDisplayPublisher'];
                    $arrData['GroupNameEng'] = $value['G_GL_GROUP_BOOKLIST_GroupNameEng'];
                    $arrData['GroupNameChi'] = $value['G_GL_GROUP_BOOKLIST_GroupNameChi'];
                    $arrData['status'] = 1;
                    $objTLB->setData($arrData);
                    $objTLB->save();
                    $this->_logger->info("Sync Data: Textbook List Book - " . $objTLB->getId() . " |  G_GL_GROUP_BOOKLIST - " . $value['G_GL_GROUP_BOOKLIST_ID']);
                }
            }
        }

        // Sync textbook and books data end
        $objTL->setData('sync_data_end_date', $this->_timezone->date()->format('Y-m-d H:i:s'));
        $objTL->setData('need_to_sync', 0);
        $objTL->save();
        $this->_logger->info("END (".$this->_timezone->date()->format('Y-m-d H:i:s')."): " . __METHOD__ );
        $this->messageManager->addSuccessMessage(__('Textbook - '.$entity_id.' synchronization success.'));
        return $resultRedirect->setPath('flipsdigital_textbooklist/textbooklist/index');
    }
}