_user_id = (string)$request['user_id']; else $this->_user_id = (string)$this->di->getUser()->id; // $this->_user_id = '60dace0ec5cc1e356830d073'; $this->_user_details = $this->di->getObjectManager()->get('\App\Core\Models\User\Details'); // if (isset($request['shop_id'])) { // $this->_shop_id = (string)$request['shop_id']; // $shop = $this->_user_details->getShop($this->_shop_id, $this->_user_id); // } else { // $shop = $this->_user_details->getDataByUserID($this->_user_id, 'amazon'); // $this->_shop_id = $shop['_id']; // } // $this->_remote_shop_id = $shop['remote_shop_id']; // $this->_site_id = $shop['warehouses'][0]['seller_id']; $this->_baseMongo = $this->di->getObjectManager()->get('\App\Core\Models\BaseMongo'); return $this; } public function saveReport($report) { $report = json_decode($report, true); if (isset($report['response']) && count($report['response'])) { foreach ($report['response'] as $amzReport) { // if ($amzReport['status']) { if (!isset($amzReport['GeneratedReportId']) || empty($amzReport['GeneratedReportId']) || $amzReport['GeneratedReportId'] == 0) { $this->processQueue(); } $preparedReport = $this->moldReport($amzReport, $report['specifics'], $report['queued_task_id'] ?? ""); $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $collection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::REPORT_CONTAINER); $reportData = $collection->findOne(['ReportRequestId' => $preparedReport['ReportRequestId']]); if ($reportData && count($reportData)) { foreach ($reportData as $key => $value) { if (!isset($reportData[$key])) { $reportData[$key] = $value; } } $collection->updateOne(['ReportRequestId' => $preparedReport['ReportRequestId']], ['$set' => $preparedReport]); } else { // $preparedReport['_id'] = $this->_baseMongo->getCounter('report_id', $this->_user_id); $collection->insertOne($preparedReport); } // } } } return true; } public function moldReport($amzReport, $specifics, $queued_task_id) { $bulkOpArray = []; $preparedReport = $amzReport; $preparedReport['user_id'] = $this->_user_id; $preparedReport['shop_id'] = $specifics['shop_id']; if (!isset($preparedReport['GeneratedReportId'])) { $preparedReport['GeneratedReportId'] = 0; } if (isset($preparedReport['report_content'])) { $reportContent = base64_decode($preparedReport['report_content']); $delimiter = "\n"; $splitContents = explode($delimiter, $reportContent); $first = true; $heading = []; $products = []; $batchSize = 500; $counter = 1; $bulkInsertArray = []; $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $amazonCollection = $mongo->setSource(\App\Amazon\Components\Common\Helper::AMAZON_LISTING)->getPhpCollection(); $response = $amazonCollection->deleteMany([ 'user_id' => $this->_user_id, 'shop_id' => $specifics['shop_id'] ], ['w' => true]); // $this->di->getLog()->logContent('userId = '. $this->_user_id.' '.$response->getDeletedCount().' items deleted successfully.', 'info', 'report_data.log'); foreach ($splitContents as $line) { $bits = explode("\t", $line); if ($first) { $heading = $bits; $first = false; continue; } else { if (count($bits) == count($heading)) { $product = []; foreach ($heading as $i => $key) { $bits[$i] = iconv('UTF-8', 'UTF-8//IGNORE', $bits[$i]); $product[$key] = $bits[$i]; } $copy_product = $product; if (isset($product['卖家 SKU'])) { $copy_product['seller-sku'] = $product['卖家 SKU']; } if (isset($product['ASIN1'])) { $copy_product['asin1'] = $product['ASIN1']; } if (isset($product['状态'])) { $copy_product['status'] = $product['状态']; } $copy_product['user_id'] = $preparedReport['user_id']; $copy_product['shop_id'] = $preparedReport['shop_id']; $bulkInsertArray[] = $copy_product; $counter++; if ($counter == $batchSize) { $amazonCollection->insertMany($bulkInsertArray); $counter = 1; $bulkInsertArray = []; } $products[] = $product; } } } if (!empty($bulkInsertArray)) { $amazonCollection->insertMany($bulkInsertArray); } // $this->di->getLog()->logContent('userId = '.$this->_user_id.' '.'Report Data count = ' . count($products), 'info', 'report_data.log'); // $preparedReport['products'] = $products; $count = count($products); if ($count) { $handlerData = [ 'type' => 'full_class', 'class_name' => '\App\Amazon\Components\Cron\Route\Requestcontrol', 'method' => 'matchProductFromAmazon', 'queue_name' => $this->di->getObjectManager()->get('\App\Amazon\Components\Cron\Helper')->getMatchProductQueueName(), 'user_id' => $this->_user_id, 'shop_id' => $preparedReport['shop_id'], 'limit' => 20, 'queued_task_id' => $queued_task_id, 'page' => 0 ]; $handlerData['individual_weight'] = round((100 / ceil($count / $handlerData['limit'])), 2); $helper = $this->di->getObjectManager()->get('\App\Rmq\Components\Helper'); $helper->createQueue($handlerData['queue_name'], $handlerData); } else { //removing notification $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $queuedTasks = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::QUEUED_TASKS); $queuedTasks->deleteOne(['user_id' => $this->_user_id, 'shop_id' => (string)$specifics['shop_id'], 'type' => 'default_amazon_product_match']); } unset($preparedReport['report_content']); } if (!empty($queued_task_id) && !isset($preparedReport['queued_task_id'])) { $preparedReport['queued_task_id'] = $queued_task_id; } return $preparedReport; } /*public function moldReport($amzReport, $specifics) { $bulkOpArray = []; $preparedReport = $amzReport; $preparedReport['user_id'] = $this->_user_id; $preparedReport['shop_id'] = $specifics['shop_id']; if (!isset($preparedReport['GeneratedReportId'])) { $preparedReport['GeneratedReportId'] = 0; } if (isset($preparedReport['report_content'])) { $reportContent = base64_decode($preparedReport['report_content']); $delimiter = "\n"; $splitContents = explode($delimiter, $reportContent); $first = true; $heading = []; $products = []; $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $amazonCollection = $mongo->setSource(\App\Amazon\Components\Common\Helper::AMAZON_LISTING)->getPhpCollection(); foreach ($splitContents as $line) { $bits = explode("\t", $line); if ($first) { $heading = $bits; $first = false; continue; } else { if (count($bits) == count($heading)) { $product = []; foreach ($heading as $i => $key) { // if (!in_array($key, ['seller-sku', 'asin1', 'price', 'quantity', 'status'])) { // continue; // } $bits[$i] = iconv('UTF-8', 'UTF-8//IGNORE', $bits[$i]); $product[$key] = $bits[$i]; } $copy_product = $product; if (isset($product['卖家 SKU'])) { $copy_product['seller-sku'] = $product['卖家 SKU']; } if (isset($product['ASIN1'])) { $copy_product['asin1'] = $product['ASIN1']; } if (isset($product['状态'])) { $copy_product['status'] = $product['状态']; } // if ($this->_user_id == '60dace0ec5cc1e356830d073') { // $this->di->getLog()->logContent('userId = ' . $this->_user_id, 'info', 'report_data.log'); // $this->di->getLog()->logContent('Report Data = ' . json_encode($copy_product), 'info', 'report_data.log'); // } $copy_product['user_id'] = $preparedReport['user_id']; $copy_product['shop_id'] = $preparedReport['shop_id']; $filter = ['seller-sku' => (string)$copy_product['seller-sku'], 'shop_id' => (string)$preparedReport['shop_id'], 'user_id' => (string)$preparedReport['user_id']]; $queryData = [ '$set' => $copy_product ]; $bulkOpArray[] = [ 'updateOne' => [ $filter, $queryData, ['upsert' => true], ], ]; // $amazonData = $amazonCollection->findOne(['seller-sku' => $product['seller-sku'], 'shop_id' => $preparedReport['shop_id'], 'user_id' => $preparedReport['user_id']]); // if ($amazonData && count($amazonData)) { // $amazonCollection->updateOne(['seller-sku' => $copy_product['seller-sku'], 'shop_id' => $preparedReport['shop_id'], 'user_id' => $preparedReport['user_id']], ['$set' => $copy_product]); // } else { // // $copy_product['_id'] = $this->_baseMongo->getCounter('amazon_listing_id', $this->_user_id); // $amazonCollection->insertOne($copy_product); // } // $product = $this->match($product, $preparedReport); $products[] = $product; } } } // if ($this->_user_id == '60dace0ec5cc1e356830d073') { $this->di->getLog()->logContent('userId = ' . $this->_user_id, 'info', 'report_data.log'); $this->di->getLog()->logContent('Report Data count = ' . count($products), 'info', 'report_data.log'); // } if (!empty($bulkOpArray)) { $amazonCollection->BulkWrite($bulkOpArray, ['w' => 1]); } $preparedReport['products'] = $products; if (count($products)) { $handlerData = [ 'type' => 'full_class', 'class_name' => '\App\Amazon\Components\Cron\Route\Requestcontrol', 'method' => 'matchProductFromAmazon', 'queue_name' => $this->di->getObjectManager()->get('\App\Amazon\Components\Cron\Helper')->getMatchProductQueueName(), 'user_id' => $this->_user_id, 'shop_id' => $preparedReport['shop_id'], 'limit' => 100, 'page' => 0 ]; $helper = $this->di->getObjectManager()->get('\App\Rmq\Components\Helper'); $helper->createQueue($handlerData['queue_name'], $handlerData); } else { //removing notification $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $queuedTasks = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::QUEUED_TASKS); $queuedTasks->deleteOne(['user_id' => $this->_user_id, 'shop_id' => (string)$specifics['shop_id'], 'type' => 'default_amazon_product_match']); } unset($preparedReport['report_content']); } // $this->di->getLog()->logContent('Report Data to be saved = ' . json_encode($preparedReport), 'info', 'report_data.log'); return $preparedReport; }*/ public function getRequestedReportIds($shopId) { $reportList = []; $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $collection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::REPORT_CONTAINER); $reportData = $collection->findOne(['user_id' => $this->_user_id, 'ReportProcessingStatus' => ['$in' => ['_SUBMITTED_', '_IN_PROGRESS_']]], ["typeMap" => ['root' => 'array', 'document' => 'array']]); if ($reportData && isset($reportData['shop_id'], $reportData['ReportRequestId'])) { $reportList[$reportData['shop_id']][] = $reportData; } // print '
'; // print_r($reportList); // die(); // $reportData = $reportData->toArray(); // if ($reportData && count($reportData)) { // foreach ($reportData as $key => $value) { // $reportList[$value['shop_id']][] = $value; // } // } return $reportList; } public function requestReport() { $reportGenerated = 0; $shops = $this->di->getObjectManager()->get('\App\Amazon\Components\Common\Helper')->getAllAmazonShops($this->_user_id); foreach ($shops as $shop) { if (isset($shop['warehouses'][0]['status']) && $shop['warehouses'][0]['status'] == 'active') { $queueData = [ 'user_id' => $this->_user_id, 'message' => 'Product Match from Amazon in progress', 'type' => 'amazon_product_match', 'progress' => 0.00, 'shop_id' => (string)$shop['_id'], 'created_at' => date('c'), ]; $queuedTask = new \App\Connector\Models\QueuedTasks; $queuedTaskId = $queuedTask->setQueuedTask($this->_user_id, $queueData); if (!$queuedTaskId) { return ['success' => false, 'message' => 'Product match from Amazon process is already under progress. Please check notification for updates.']; } $params = ['shop_id' => $shop['remote_shop_id'], 'type' => '_GET_MERCHANT_LISTINGS_ALL_DATA_', 'home_shop_id' => $shop['_id']]; $commonHelper = $this->di->getObjectManager() ->get(Helper::class); $response = $commonHelper->sendRequestToAmazon('report-request', $params, 'GET'); if (isset($response['success']) && $response['success'] && isset($response['response'])) { $response['queued_task_id'] = $queuedTaskId; $createReport = $this->saveReport(json_encode($response)); $reportGenerated = $reportGenerated + 1; } else { //removing notification $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $queuedTasks = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::QUEUED_TASKS); $queuedTasks->deleteOne(['user_id' => $this->_user_id, 'shop_id' => (string)$shop['_id'], 'type' => 'default_amazon_product_match']); } } } if ($reportGenerated > 0) { $response = ['success' => true, 'message' => 'Match initiated. If matched, status of main product will be visible in the listing grid. This may take approx. 20 min.']; } else { $response = ['success' => false, 'message' => 'No report requested, please check amazon account status.']; } return $response; } public function getReport() { try { $this->init(); $reportRequests = $this->getRequestedReportIds($this->_user_id); if (!empty($reportRequests)) { foreach ($reportRequests as $homeShopId => $requests) { $remoteShop = $this->_user_details->getShop($homeShopId, $this->_user_id); $params = ['shop_id' => $remoteShop['remote_shop_id'], 'home_shop_id' => $homeShopId, 'requests' => $requests]; $commonHelper = $this->di->getObjectManager() ->get(Helper::class); $response = $commonHelper->sendRequestToAmazon('report-fetch', $params, 'GET'); if (isset($response['success']) && $response['success'] && isset($response['response'])) { // //removing notification // $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); // $queuedTasks = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::QUEUED_TASKS); // $queuedTasks->deleteOne(['user_id' => $this->_user_id, 'shop_id' => (string)$homeShopId, 'type' => 'default_amazon_product_match']); if (isset($requests[0]['queued_task_id'])) { $response['queued_task_id'] = $requests[0]['queued_task_id']; } $createReport = $this->saveReport(json_encode($response)); } } } $response = ['success' => true, 'message' => 'Report fetched successfully.']; } catch (\Exception $e) { $response = ['success' => false, 'message' => $e->getMessage()]; } return $response; } public function processQueue() { $time = 35; $handlerData = [ 'type' => 'full_class', 'class_name' => '\App\Amazon\Components\Report\Report', 'method' => 'getReport', 'queue_name' => $this->di->getObjectManager()->get('\App\Amazon\Components\Cron\Helper')->getReportQueueName(), 'user_id' => $this->_user_id, 'DelaySeconds' => $time, 'run_after' => $time, 'delay' => $time, ]; $helper = $this->di->getObjectManager()->get('\App\Rmq\Components\Helper'); $helper->createQueue($handlerData['queue_name'], $handlerData); } public function match($product, $preparedReport) { $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $productCollection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::PRODUCT_CONTAINER); $amazonProductCollection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::AMAZON_PRODUCT_CONTAINER); $amazonCollection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::AMAZON_LISTING); $shop = $this->_user_details->getShop($preparedReport['shop_id'], $this->_user_id); $seller_id = $shop['warehouses'][0]['seller_id']; $shopifyAttribute = 'sku'; $amazonAttribute = 'seller-sku'; // $productData = $productCollection->findOne(['user_id' => $this->_user_id, $shopifyAttribute => new \MongoDB\BSON\Regex('^' . preg_quote((string)$product[$amazonAttribute]) . '$', "i")], ["typeMap" => ['root' => 'array', 'document' => 'array']]); $productData = $productCollection->findOne(['user_id' => $this->_user_id, 'low_sku' => strtolower($product[$amazonAttribute])], ["typeMap" => ['root' => 'array', 'document' => 'array']]); if ($productData) { $saveArray = []; $amazonData = []; $amazonCollection->updateOne(['_id' => $product['_id']], ['$set' => ['matched' => true]]); if (isset($productData['marketplace']['amazon']) && is_array($productData['marketplace']['amazon'])) { foreach ($productData['marketplace']['amazon'] as $key => $amazonShops) { if (isset($amazonShops['shop_id']) && $amazonShops['shop_id'] == $preparedReport['shop_id']) { $saveArray = $amazonShops; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; // $amazonData = $productData['marketplace']['amazon']; if (!isset($amazonShops['status']) || $amazonShops['status'] != $product['status'] || !isset($amazonShops['seller_id']) || $amazonShops['seller_id'] != $seller_id) { $query = ['_id' => $productData['_id'], 'marketplace.amazon.shop_id' => (string)$amazonShops['shop_id']]; $productCollection->updateOne($query, ['$set' => ['marketplace.amazon.$.status' => $product['status'], 'marketplace.amazon.$.seller_id' => $seller_id]]); // $productCollection->updateOne([$shopifyAttribute => new \MongoDB\BSON\Regex('^'.preg_quote((string)$product[$amazonAttribute]).'$',"i"), 'marketplace.amazon.shop_id' => (string)$amazonShops['shop_id'], 'user_id' => $this->_user_id], // ['$set' => ['marketplace.amazon.$.status' => $product['status'], 'marketplace.amazon.$.seller_id' => $seller_id]]); } break; } } if (empty($saveArray)) { $saveArray['shop_id'] = (string)$preparedReport['shop_id']; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; // $amazonData['marketplace']['amazon'][] = $saveArray $query = ['_id' => $productData['_id']]; $productCollection->updateOne($query, ['$push' => ['marketplace.amazon' => $saveArray]]); // $productCollection->updateOne([$shopifyAttribute => new \MongoDB\BSON\Regex('^'.preg_quote((string)$product[$amazonAttribute]).'$',"i"), 'user_id' => $this->_user_id], ['$push' => ['marketplace.amazon' => $saveArray]]); } } if (empty($saveArray)) { $saveArray['shop_id'] = (string)$preparedReport['shop_id']; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; $amazonData['marketplace']['amazon'][] = $saveArray; $query = ['_id' => $productData['_id']]; $productCollection->updateOne($query, ['$set' => $amazonData]); // $productCollection->updateOne([$shopifyAttribute => new \MongoDB\BSON\Regex('^'.preg_quote((string)$product[$amazonAttribute]).'$',"i"), 'user_id' => $this->_user_id], ['$set' => $amazonData]); } // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['shop_id'] = $preparedReport['shop_id']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['status'] = $product['status']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['asin'] = $product['asin1']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['seller_id'] = $seller_id; // $productCollection->updateOne([$shopifyAttribute => $product[$amazonAttribute]], ['$set' => $amazonData]); $sourceProductId = $productData['source_product_id']; $amazonProduct = $amazonProductCollection->findOne(['user_id' => $this->_user_id, 'source_product_id' => $sourceProductId]); if ($amazonProduct) { if (!isset($amazonProduct['asin']) || $amazonProduct['asin'] != $product['asin1']) { $query = ['_id' => new \MongoDB\BSON\ObjectId($amazonProduct['_id'])]; } } else { $insertData = ['source_product_id' => (string)$sourceProductId, 'container_id' => (string)$productData['container_id'], 'user_id' => $this->_user_id, 'asin' => $product['asin1']]; if (isset($productData['group_id'])) { $insertData['group_id'] = (string)$productData['group_id']; } $amazonProductCollection->insert($insertData); } if (isset($productData['group_id']) && $productData['group_id']) { $amazonData['shop_id'] = $preparedReport['shop_id']; // $this->matchParent($productData, $amazonData); } $sourceVariantId = $productData['source_product_id']; $sourceProductId = $productData['container_id']; $product['source_variant_id'] = $sourceVariantId; $product['source_product_id'] = $sourceProductId; } else { // $amazonProductData = $amazonProductCollection->findOne(['user_id' => $this->_user_id, $shopifyAttribute => new \MongoDB\BSON\Regex('^' . preg_quote((string)$product[$amazonAttribute]) . '$', "i")], ["typeMap" => ['root' => 'array', 'document' => 'array']]); $amazonProductData = $amazonProductCollection->findOne(['user_id' => $this->_user_id, $shopifyAttribute => (string)$product[$amazonAttribute]], ["typeMap" => ['root' => 'array', 'document' => 'array']]); // if (!$amazonProductData) { // $amazonProductData = $amazonProductCollection->findOne(['user_id' => $this->_user_id, 'parent_sku' => new \MongoDB\BSON\Regex('^'.preg_quote((string)$product[$amazonAttribute]).'$',"i")], ["typeMap" => ['root' => 'array', 'document' => 'array']]); // } if ($amazonProductData && isset($amazonProductData['source_product_id'])) { $amazonCollection->updateOne(['_id' => $product['_id']], ['$set' => ['matched' => true]]); $productData = $productCollection->findOne(['user_id' => $this->_user_id, 'source_product_id' => $amazonProductData['source_product_id']], ["typeMap" => ['root' => 'array', 'document' => 'array']]); if ($productData) { $saveArray = []; $amazonData = []; if (isset($productData['marketplace']['amazon']) && is_array($productData['marketplace']['amazon'])) { foreach ($productData['marketplace']['amazon'] as $amazonShops) { if (isset($amazonShops['shop_id']) && $amazonShops['shop_id'] == $preparedReport['shop_id']) { $saveArray = $amazonShops; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; if (!isset($amazonShops['status']) || $amazonShops['status'] != $product['status'] || !isset($amazonShops['seller_id']) || $amazonShops['seller_id'] != $seller_id) { $query = ['_id' => $productData['_id'], 'marketplace.amazon.shop_id' => (string)$amazonShops['shop_id']]; $productCollection->updateOne($query, ['$set' => ['marketplace.amazon.$.status' => $product['status'], 'marketplace.amazon.$.seller_id' => $seller_id]]); // $productCollection->updateOne(['source_product_id' => $amazonProductData['source_product_id'], 'marketplace.amazon.shop_id' => (string)$amazonShops['shop_id'], 'user_id' => $this->_user_id], // ['$set' => ['marketplace.amazon.$.status' => $product['status'], 'marketplace.amazon.$.seller_id' => $seller_id]]); } break; } } if (empty($saveArray)) { $saveArray['shop_id'] = (string)$preparedReport['shop_id']; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; // $amazonData['marketplace']['amazon'][] = $saveArray $query = ['_id' => $productData['_id']]; $productCollection->updateOne($query, ['$push' => ['marketplace.amazon' => $saveArray]]); // $productCollection->updateOne(['source_product_id' => $amazonProductData['source_product_id'], 'user_id' => $this->_user_id], ['$push' => ['marketplace.amazon' => $saveArray]]); } } if (empty($saveArray)) { $saveArray['shop_id'] = (string)$preparedReport['shop_id']; $saveArray['status'] = $product['status']; $saveArray['seller_id'] = $seller_id; $amazonData['marketplace']['amazon'][] = $saveArray; $query = ['_id' => $productData['_id']]; $productCollection->updateOne($query, ['$set' => $amazonData]); // $productCollection->updateOne(['source_product_id' => $amazonProductData['source_product_id'], 'user_id' => $this->_user_id], ['$set' => $amazonData]); } // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['shop_id'] = $preparedReport['shop_id']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['status'] = $product['status']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['asin'] = $product['asin1']; // $amazonData['marketplace']['amazon'][$preparedReport['shop_id']]['seller_id'] = $seller_id; // $productCollection->updateOne(['source_product_id' => $amazonProductData['source_product_id'], 'user_id' => $this->_user_id], ['$set' => $amazonData]); if (!isset($amazonProductData['asin']) || $amazonProductData['asin'] != $product['asin1']) { $query = ['_id' => new \MongoDB\BSON\ObjectId($amazonProductData['_id'])]; $amazonProductCollection->updateOne($query, ['$set' => ['asin' => $product['asin1']]]); // $amazonProductCollection->updateOne(['source_product_id' => $amazonProductData['source_product_id'], 'user_id' => $this->_user_id], ['$set' => ['asin' => $product['asin1']]]); } if (isset($productData['group_id']) && $productData['group_id']) { $amazonData['shop_id'] = $preparedReport['shop_id']; // $this->matchParent($productData, $amazonData); } $sourceVariantId = $productData['source_product_id']; $sourceProductId = $productData['container_id']; $product['source_variant_id'] = $sourceVariantId; $product['source_product_id'] = $sourceProductId; } } else { $amazonCollection->updateOne(['_id' => $product['_id']], ['$set' => ['matched' => false]]); } } return $product; } public function matchParent($productData, $amazonData) { $mongo = $this->di->getObjectManager()->create('\App\Core\Models\BaseMongo'); $homeShopId = $amazonData['shop_id']; $shop = $this->_user_details->getShop($homeShopId, $this->_user_id); $remoteShopId = $shop['remote_shop_id']; $asin = $amazonData['marketplace']['amazon'][$homeShopId]['asin']; $specifics['id'] = [$asin]; $specifics['shop_id'] = $remoteShopId; $specifics['home_shop_id'] = $homeShopId; $commonHelper = $this->di->getObjectManager()->get(Helper::class); //get Parent Asin from Amazon $response = $commonHelper->sendRequestToAmazon('product-relationship', $specifics, 'GET'); if (isset($response['success']) && $response['success']) { if (isset($response['response']) && is_array($response['response'])) { foreach ($response['response'] as $barcode => $asin) { $amazonListing = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::AMAZON_LISTING); // search asin and seller-sku from amazon_listing $amazonReportProduct = $amazonListing->findOne(['user_id' => $this->_user_id, 'shop_id' => $homeShopId, 'asin1' => $asin]); if ($amazonReportProduct) { $sellerSku = $amazonReportProduct['seller-sku']; $status = $amazonReportProduct['status']; $productCollection = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::PRODUCT_CONTAINER); $shop = $this->_user_details->getShop($homeShopId, $this->_user_id); $seller_id = $shop['warehouses'][0]['seller_id']; $parentProduct = $productCollection->findOne(['source_product_id' => $productData['group_id']]); if ($parentProduct) { // save asin, status in product_container // $amazonData['marketplace']['amazon'][$homeShopId]['shop_id'] = $homeShopId; // $amazonData['marketplace']['amazon'][$homeShopId]['status'] = $status; // $amazonData['marketplace']['amazon'][$homeShopId]['asin'] = $asin; // $amazonData['marketplace']['amazon'][$homeShopId]['seller_id'] = $seller_id; // $productCollection->updateOne(['source_product_id' => $productData['group_id']], ['$set' => $amazonData]); $saveArray = []; $amazonData = []; if (isset($productData['marketplace']['amazon']) && is_array($productData['marketplace']['amazon'])) { foreach ($productData['marketplace']['amazon'] as $amazonShops) { if (isset($amazonShops['shop_id']) && $amazonShops['shop_id'] == $homeShopId) { $saveArray = $amazonShops; $saveArray['status'] = $status; $saveArray['seller_id'] = $seller_id; $productCollection->updateOne(['source_product_id' => $productData['group_id']], ['$push' => ['marketplace' => ['amazon' => $saveArray]]]); break; } else { $saveArray['shop_id'] = $homeShopId; $saveArray['status'] = $status; $saveArray['seller_id'] = $seller_id; $productCollection->updateOne(['source_product_id' => $productData['group_id']], ['$push' => ['marketplace' => ['amazon' => $saveArray]]]); break; } } } if (empty($saveArray)) { $saveArray['shop_id'] = $homeShopId; $saveArray['status'] = $status; $saveArray['seller_id'] = $seller_id; $amazonData['marketplace']['amazon'][] = $saveArray; $productCollection->updateOne(['source_product_id' => $productData['group_id']], ['$set' => $amazonData]); } $amazonProductContainer = $mongo->getCollectionForTable(\App\Amazon\Components\Common\Helper::AMAZON_PRODUCT_CONTAINER); // search that parent product in amazon_product $amazonProduct = $amazonProductContainer->findOne(['source_product_id' => $productData['group_id'], 'user_id' => $this->_user_id]); $amazonSku['parent_sku'] = $sellerSku; if ($amazonProduct) { // update amazon sku in amazon_product $amazonProductContainer->UpdateOne(['source_product_id' => $productData['group_id'], 'user_id' => $this->_user_id], ['$set' => $amazonSku]); } else { // save parent product and its amazon sku in amazon_product // $amazonSku['_id'] = $this->_baseMongo->getCounter('amazon_product_id', $this->_user_id); $amazonSku['source_product_id'] = $productData['group_id']; $amazonSku['user_id'] = $this->_user_id; $amazonProductContainer->insertOne($amazonSku); } } } } } } } }