/** * Update configurable delta export. * * @param Channel $channel * @param JobInstance $jobInstance * @param string $identifier */ public function setLastExportDate(Channel $channel, JobInstance $jobInstance, $identifier) { $variantGroup = $this->groupRepository->findOneBy(['code' => $identifier]); if ($variantGroup) { $deltaConfigurableTable = $this->tableNameBuilder->getTableName('pim_prestashop_connector.entity.delta_configurable_export.class'); $exportableProducts = $this->productFilter->apply($channel, $variantGroup->getProducts()); foreach ($exportableProducts as $product) { $sql = <<<SQL INSERT INTO {$deltaConfigurableTable} (product_id, job_instance_id, last_export) VALUES (:product_id, :job_instance_id, :last_export) ON DUPLICATE KEY UPDATE last_export = :last_export SQL; $connection = $this->em->getConnection(); $query = $connection->prepare($sql); $now = new \DateTime('now', new \DateTimeZone('UTC')); $lastExport = $now->format('Y-m-d H:i:s'); $productId = $product->getId(); $jobInstanceId = $jobInstance->getId(); $query->bindParam(':last_export', $lastExport, PDO::PARAM_STR); $query->bindParam(':product_id', $productId, PDO::PARAM_INT); $query->bindParam(':job_instance_id', $jobInstanceId, PDO::PARAM_INT); $query->execute(); } } }
/** * Get products association for each groups. * * @param array $products * @param array $groupsIds * * @return array */ protected function getProductsForGroups(array $products, array $groupsIds) { $channel = $this->channelManager->getChannelByCode($this->getChannel()); $groups = []; foreach ($products as $product) { foreach ($product->getGroups() as $group) { $groupId = $group->getId(); if (in_array($groupId, $groupsIds)) { $groupProducts = $group->getProducts(); $exportableProducts = $this->productFilter->apply($channel, $groupProducts); if (!isset($groups[$groupId])) { $groups[$groupId] = ['group' => $group, 'products' => []]; } if (!isset($this->processedIds[$groupId])) { $this->processedIds[$groupId] = []; } foreach ($exportableProducts as $exportableProduct) { $exportableProductId = $exportableProduct->getId(); if (!in_array($exportableProductId, $this->processedIds[$groupId])) { $groups[$groupId]['products'][] = $exportableProduct; $this->processedIds[$groupId][] = $exportableProductId; } } } } } return $groups; }