/** * 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); } }
/** * 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]); }