Ejemplo n.º 1
0
 /**
  * Check category
  *
  * @return void
  */
 public function categoryAction()
 {
     $myCategoryMap = CategoryMap::find(['status = :status:', 'bind' => ['status' => CategoryMap::STATUS_PENDING]]);
     if ($myCategoryMap) {
         foreach ($myCategoryMap as $item) {
             // Get all products from this category from haravan
             $myStore = Store::findFirstById($item->sid);
             $session = $this->getDI()->get('session');
             $session->set('shop', $myStore->name);
             $session->set('oauth_token', $myStore->accessToken);
             $total = EnHelper::getInstance('haravan', 'import')->getTotalProductsByCollectionId((int) $item->hid);
             $totalPage = ceil($total / 50);
             // Using to count queued item.
             $itemInQueue = $item->totalItemQueue;
             $itemList = [];
             if ($totalPage >= 1) {
                 for ($i = 1; $i <= $totalPage; $i++) {
                     $myProducts = EnHelper::getInstance('haravan', 'import')->getProductsByCollectionId((int) $item->hid, $i);
                     if ($myProducts) {
                         foreach ($myProducts as $product) {
                             $myProductQueue = ProductQueue::findFirst(['pid = :pid:', 'bind' => ['pid' => (int) $product->id]]);
                             if ($myProductQueue == false) {
                                 $myProductQueue = new ProductQueue();
                                 $myProductQueue->pid = (int) $product->id;
                                 $myProductQueue->pdata = json_encode($product, JSON_UNESCAPED_UNICODE);
                                 $myProductQueue->status = ProductQueue::STATUS_QUEUE;
                                 $myProductQueue->retryCount = 0;
                                 $myProductQueue->priority = 1;
                                 $myProductQueue->fcid = $item->fid;
                                 $myProductQueue->sid = $item->sid;
                                 if ($myProductQueue->create()) {
                                     //Push to Beanstalk Queue
                                     $queue = $this->getDI()->get('queue');
                                     $queue->choose('haraapp.import');
                                     $addedToQueue = $queue->put([['storeId' => $item->sid, 'haravanId' => $item->hid, 'haravanProductId' => $product->id], ['priority' => $myProductQueue->priority, 'delay' => 10, 'ttr' => 3600]]);
                                     if ($addedToQueue) {
                                         echo $item->hid . ' - added to queue.' . PHP_EOL;
                                         $itemInQueue = $itemInQueue + 1;
                                         $itemList[] = $item->hid;
                                     }
                                 } else {
                                     foreach ($myProductQueue->getMessages() as $msg) {
                                         print $msg . PHP_EOL;
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
             //Save to category_map table total products of this category.
             $item->totalItem = (int) $total;
             $item->totalItemQueue = (int) $itemInQueue;
             $item->status = CategoryMap::STATUS_COMPLETED;
             if (count($itemList) > 0) {
                 $item->data = json_encode($itemList);
             }
             $item->update();
             // Insert current progress to product log table.
             $myProductLog = ProductLog::findFirst('status = ' . ProductLog::STATUS_CURRENT_PROCESSING . ' AND type = ' . ProductLog::TYPE_IMPORT . ' AND sid = ' . $myStore->id);
             $myProductLog->status = ProductLog::STATUS_COMPLETED;
             $myProductLog->update();
             $myProductLog = new ProductLog();
             $myProductLog->assign(['sid' => $item->sid, 'message' => 'Category Name ' . $item->fname . ' initialize Completed. Ready in Queue.', 'type' => ProductLog::TYPE_IMPORT, 'status' => ProductLog::STATUS_CURRENT_PROCESSING, 'class' => 'succcess']);
             $myProductLog->create();
         }
     } else {
         print ConsoleUtil::success('No Category Pending found.') . PHP_EOL;
         exit(0);
     }
 }
Ejemplo n.º 2
0
 /**
  * Main action.
  *
  * @return void
  *
  * @Route("/update", methods={"GET", "POST"}, name="import-category-update")
  */
 public function updateAction()
 {
     $formData = $jsonData = $error = [];
     if (!empty($this->request->hasPost('fsubmit'))) {
         $success = [];
         $message = "";
         $formData = array_merge($formData, $this->request->getPost());
         $categoryMap = (array) $formData['mapping'];
         foreach ($categoryMap as $haravanId => $itemMap) {
             if ($itemMap['id'] > 0) {
                 $myCategoryMap = CategoryMap::findFirst(['hid = :haravanId: AND sid = :storeId:', 'bind' => ['haravanId' => $haravanId, 'storeId' => $this->session->get('sid')]]);
                 if ($myCategoryMap) {
                     // Update exist category for change
                     if ($myCategoryMap->fid != $itemMap['id']) {
                         $myCategoryMap->fid = $itemMap['id'];
                         $myCategoryMap->fname = $itemMap['name'];
                         if ($myCategoryMap->update()) {
                             $this->flash->success('Updated category id: ' . $myCategoryMap->hid);
                         } else {
                             $this->flash->error('Failed to update category id: ' . $myCategoryMap->hid);
                         }
                     }
                 } else {
                     // Create new category map record
                     $myCategoryMap = new CategoryMap();
                     $myCategoryMap->sid = (int) $this->session->get('sid');
                     $myCategoryMap->hid = (int) $haravanId;
                     $myCategoryMap->fid = (int) $itemMap['id'];
                     $myCategoryMap->fname = (string) $itemMap['name'];
                     $myCategoryMap->status = (int) CategoryMap::STATUS_PENDING;
                     $myCategoryMap->totalItem = 0;
                     $myCategoryMap->totalItemSync = 0;
                     $myCategoryMap->totalItemQueue = 0;
                     if ($myCategoryMap->create()) {
                         $success[] = $haravanId;
                     } else {
                         foreach ($myCategoryMap->getMessages() as $msg) {
                             $message .= str_replace('###haravanId###', $haravanId, $this->lang->_($msg->getMessage())) . '<br />';
                         }
                     }
                 }
             }
         }
         if (count($success) > 0) {
             $this->flash->success('Categories ' . implode(',', $success) . ' created successfully.');
         } elseif (strlen($message) > 0) {
             $this->flash->error($message);
         }
     }
     $myCategories = Category::parent_sort(Category::find(['order' => 'orderno ASC'])->toArray());
     $haravanCollections = [];
     $haravanCollections = array_merge($haravanCollections, EnHelper::getInstance('haravan', 'import')->getCollections());
     $haravanCollections = array_merge($haravanCollections, EnHelper::getInstance('haravan', 'import')->getSmartCollections());
     $myCategroyMap = CategoryMap::find(['sid = :storeId:', 'bind' => ['storeId' => $this->session->get('sid')]]);
     foreach ($haravanCollections as $haravan) {
         $formData['mapping'][$haravan->id] = Utils::findInListObject($myCategroyMap, $haravan->id);
     }
     $this->bc->add($this->lang->_('title-home'), 'home');
     $this->bc->add($this->lang->_('title-category-update'), '');
     $this->view->setVars(['bc' => $this->bc->generate(), 'myCategories' => $myCategories, 'formData' => $formData, 'error' => $error, 'collections' => $haravanCollections]);
 }