/** * Handles the whole import */ public function import() { $this->setData(); $this->setDetails(); $this->setVariants(); $this->setProperties(); $data = $this->data; $data['mainDetail'] = $this->details; $mainDetailId = -1; $ArticleResource = self::getArticleApi(); $VariantResource = self::getVariantApi(); try { // If a mappings exists, it's a regular item $SHOPWARE_itemID = PlentymarketsMappingController::getItemByPlentyID($this->ItemBase->ItemID); // Should the categories be synchronized? if (PlentymarketsConfig::getInstance()->getItemCategorySyncActionID(IMPORT_ITEM_CATEGORY_SYNC) == IMPORT_ITEM_CATEGORY_SYNC) { $this->setCategories(); $data['categories'] = $this->categories; } // Should the number be synchronized? // This does only matter if there are no variants if (PlentymarketsConfig::getInstance()->getItemNumberImportActionID(IMPORT_ITEM_NUMBER) == IMPORT_ITEM_NUMBER && !count($this->variants)) { // strip whitespaces $numberField = PyConf()->getItemNumberSourceKey('ItemNo'); $number = trim($this->ItemBase->{$numberField}); // If this number does not belong to this item if (!PlentymarketsImportItemHelper::isNumberExistantItem($number, $SHOPWARE_itemID)) { // and check if the number is valid if (!PlentymarketsImportItemHelper::isNumberValid($number)) { throw new PlentymarketsImportItemNumberException('The item number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is invalid', 3120); } // check if the number is available anyway if (PlentymarketsImportItemHelper::isNumberExistant($number)) { throw new PlentymarketsImportItemNumberException('The item number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is already in use', 3121); } // then update it $data['mainDetail']['number'] = $number; } } // Update the item $Article = $ArticleResource->update($SHOPWARE_itemID, $data); // Log PlentymarketsLogger::getInstance()->message('Sync:Item', sprintf('The item »%s« with the number »%s« has been updated', $data['name'], $Article->getMainDetail()->getNumber())); // Remember the main detail's id (to set the prices) $mainDetailId = $Article->getMainDetail()->getId(); // Variants that will be commited to the API $variants = array(); $update = array(); $number2sku = array(); $keep = array('numbers' => array(), 'ids' => array()); // Es gibt varianten if (count($this->variants)) { // $VariantController = new PlentymarketsImportItemVariantController($this->ItemBase); // Counter $numberOfVariantsUpdated = 0; $numberOfVariantsCreated = 0; $numberOfVariantsDeleted = 0; foreach ($this->variants as $variantId => $variant) { // Directly add the prices $PlentymarketsImportEntityItemPrice = new PlentymarketsImportEntityItemPrice($this->ItemBase->PriceSet, $VariantController->getMarkupByVariantId($variantId)); $variant['prices'] = $PlentymarketsImportEntityItemPrice->getPrices(); $variant['purchasePrice'] = $PlentymarketsImportEntityItemPrice->getPurchasePrice(); // If the variant has an id, it is already created and mapped soo we just keep it if (array_key_exists('id', $variant)) { ++$numberOfVariantsUpdated; $keep['ids'][] = $variant['id']; } else { ++$numberOfVariantsCreated; $variant['configuratorOptions'] = $VariantController->getOptionsByVariantId($variantId); $keep['numbers'][] = $variant['number']; // Internal mapping of the variant number to some plenty information $number2sku[$variant['number']] = $variant['X_plentySku']; } $variants[] = $variant; } // The configurator set has to be adapted $update['configuratorSet'] = array('groups' => $VariantController->getGroups(), 'type' => PlentymarketsConfig::getInstance()->getItemConfiguratorSetType(0)); // Delete all variants if ($numberOfVariantsUpdated == 0) { $Article = $ArticleResource->update($SHOPWARE_itemID, array('configuratorSet' => array('groups' => array()), 'variations' => array())); } $update['variants'] = $variants; // Check if the main detail will be deleted if (!in_array($mainDetailId, $keep['ids'])) { // Promote the first variante to be the main detail $update['variants'][0]['isMain'] = true; $deleteMainVariant = true; } else { $deleteMainVariant = false; } $ArticleResource->update($SHOPWARE_itemID, $update); // Check if the main detail will be deleted if ($deleteMainVariant) { // If the main detail is not needed anymore, delete it right away // Otherwise it will be a dead data record. The main details are not // returned from the API->getOne call. Only the "real" main detail. Shopware()->Models()->remove(Shopware()->Models()->find('Shopware\\Models\\Article\\Detail', $mainDetailId)); Shopware()->Models()->flush(); PlentymarketsMappingController::deleteItemVariantByShopwareID($mainDetailId); ++$numberOfVariantsDeleted; } $article = $ArticleResource->getOne($SHOPWARE_itemID); // Add the main detail $article['details'][] = $article['mainDetail']; // Mapping for the variants foreach ($article['details'] as $detail) { // If the variant is not needed anymore - delete it if (!in_array($detail['number'], $keep['numbers']) && !in_array($detail['id'], $keep['ids'])) { ++$numberOfVariantsDeleted; $VariantResource->delete($detail['id']); PlentymarketsMappingController::deleteItemVariantByShopwareID($detail['id']); } else { if (isset($number2sku[$detail['number']])) { // Add the mapping PlentymarketsMappingController::addItemVariant($detail['id'], $number2sku[$detail['number']]); } } } $VariantController->map($article); $messages = array(); // Log if ($numberOfVariantsUpdated == 1) { $messages[] = '1 variant has been updated'; } else { if ($numberOfVariantsUpdated > 1) { $messages[] = $numberOfVariantsUpdated . ' variants have been updated'; } } if ($numberOfVariantsCreated == 1) { $messages[] = '1 variant has been created'; } else { if ($numberOfVariantsCreated > 1) { $messages[] = $numberOfVariantsCreated . ' variants have been created'; } } if ($numberOfVariantsDeleted == 1) { $messages[] = '1 variant has been deleted'; } else { if ($numberOfVariantsDeleted > 1) { $messages[] = $numberOfVariantsDeleted . ' variants have been deleted'; } } if ($messages) { PlentymarketsLogger::getInstance()->message('Sync:Item', implode(', ', $messages)); } } else { // Preise eines Normalen Artikels aktualisieren $PlentymarketsImportEntityItemPrice = new PlentymarketsImportEntityItemPrice($this->ItemBase->PriceSet); $PlentymarketsImportEntityItemPrice->update($SHOPWARE_itemID); } // Bilder if (PlentymarketsConfig::getInstance()->getItemImageSyncActionID(IMPORT_ITEM_IMAGE_SYNC) == IMPORT_ITEM_IMAGE_SYNC) { $PlentymarketsImportEntityItemImage = new PlentymarketsImportEntityItemImage($this->ItemBase->ItemID, $SHOPWARE_itemID); $PlentymarketsImportEntityItemImage->image(); } } catch (PlentymarketsMappingExceptionNotExistant $E) { // Set the categories no matter what $this->setCategories(); $data['categories'] = $this->categories; // Regular item if (!count($this->variants)) { // Numbers should be synced if (PlentymarketsConfig::getInstance()->getItemNumberImportActionID(IMPORT_ITEM_NUMBER) == IMPORT_ITEM_NUMBER) { // strip whitespaces $numberField = PyConf()->getItemNumberSourceKey('ItemNo'); $number = trim($this->ItemBase->{$numberField}); // Nummer ist ungültig oder in Benutzung if (!PlentymarketsImportItemHelper::isNumberValid($number)) { throw new PlentymarketsImportItemNumberException('The item number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is invalid', 3120); } if (PlentymarketsImportItemHelper::isNumberExistant($number)) { throw new PlentymarketsImportItemNumberException('The item number »' . $number . '« of item »' . $this->data['name'] . '« with the id »' . $this->ItemBase->ItemID . '« is already in use', 3121); } // Use this number $data['mainDetail']['number'] = $number; } else { // A new number is generated $data['mainDetail']['number'] = PlentymarketsImportItemHelper::getItemNumber(); } // Create $Article = $ArticleResource->create($data); // $SHOPWARE_itemID = $Article->getId(); // Log PlentymarketsLogger::getInstance()->message('Sync:Item', 'The item »' . $this->data['name'] . '« has been created with the number »' . $data['mainDetail']['number'] . '«'); // Mapping speichern PlentymarketsMappingController::addItem($Article->getId(), $this->ItemBase->ItemID); // Stock stack PlentymarketsImportItemStockStack::getInstance()->add($this->ItemBase->ItemID); // Media // Preise $PlentymarketsImportEntityItemPrice = new PlentymarketsImportEntityItemPrice($this->ItemBase->PriceSet); $PlentymarketsImportEntityItemPrice->update($Article->getId()); } else { // Set the id of the first variant $mainVariant = array_shift(array_values($this->variants)); $data['mainDetail']['number'] = $mainVariant['number']; // Anlegen $Article = $ArticleResource->create($data); PlentymarketsLogger::getInstance()->message('Sync:Item', 'The variant base item »' . $this->data['name'] . '« has been created created with the number »' . $data['mainDetail']['number'] . '«'); // $SHOPWARE_itemID = $Article->getId(); // Mapping speichern PlentymarketsMappingController::addItem($Article->getId(), $this->ItemBase->ItemID); $VariantController = new PlentymarketsImportItemVariantController($this->ItemBase); // $number2sku = array(); // foreach ($this->variants as $variantId => &$variant) { $variant['inStock'] = 0; $variant['configuratorOptions'] = $VariantController->getOptionsByVariantId($variantId); // Prices $PlentymarketsImportEntityItemPrice = new PlentymarketsImportEntityItemPrice($this->ItemBase->PriceSet, $VariantController->getMarkupByVariantId($variantId)); $variant['prices'] = $PlentymarketsImportEntityItemPrice->getPrices(); $variant['purchasePrice'] = $PlentymarketsImportEntityItemPrice->getPurchasePrice(); $number2sku[$variant['number']] = $variant['X_plentySku']; } // Varianten $id = $Article->getId(); $updateArticle = array('configuratorSet' => array('groups' => $VariantController->getGroups(), 'type' => PlentymarketsConfig::getInstance()->getItemConfiguratorSetType(0)), 'variants' => array_values($this->variants)); PlentymarketsLogger::getInstance()->message('Sync:Item:Variant', 'Starting to create variants for the item »' . $this->data['name'] . '« with the number »' . $data['mainDetail']['number'] . '«'); $Article = $ArticleResource->update($id, $updateArticle); /**@var Shopware\Models\Article\Detail $detail */ foreach ($Article->getDetails() as $detail) { // Save mapping and add the variant to the stock stack $sku = $number2sku[$detail->getNumber()]; PlentymarketsMappingController::addItemVariant($detail->getId(), $sku); PlentymarketsImportItemStockStack::getInstance()->add($sku); } $VariantController->map($ArticleResource->getOne($id)); PlentymarketsLogger::getInstance()->message('Sync:Item:Variant', 'Variants created successfully'); } // Bilder $PlentymarketsImportEntityItemImage = new PlentymarketsImportEntityItemImage($this->ItemBase->ItemID, $SHOPWARE_itemID); $PlentymarketsImportEntityItemImage->image(); } // Rebuild category tree if (count($this->categories)) { /** @var \Shopware\Components\Model\CategoryDenormalization $component */ $component = Shopware()->CategoryDenormalization(); $component->removeArticleAssignmentments($SHOPWARE_itemID); foreach ($this->categories as $category) { $component->addAssignment($SHOPWARE_itemID, $category['id']); } } // Der Hersteller ist neu angelegt worden if ($Article instanceof Shopware\Models\Article\Article && array_key_exists('supplier', $this->data)) { PlentymarketsLogger::getInstance()->message('Sync:Item', 'The producer »' . $Article->getSupplier()->getName() . '« has been created'); PlentymarketsMappingController::addProducer($Article->getSupplier()->getId(), $this->ItemBase->ProducerID); } }
/** * Update plugin method * * @see Shopware_Components_Plugin_Bootstrap::update() */ public function update($version) { $Logger = PlentymarketsLogger::getInstance(); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, $version . ' → ' . $this->getVersion()); if (version_compare($version, '1.6') !== 1) { try { PlentymarketsExportController::getInstance()->erase('ItemCategory'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'PlentymarketsExportController::getInstance()->erase(\'ItemCategory\') done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'PlentymarketsExportController::getInstance()->erase(\'ItemCategory\') failed'); } try { Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_mapping_category` CHANGE `shopwareID` `shopwareID` VARCHAR(255) NOT NULL DEFAULT '';\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_category` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_category` failed'); } PyConf()->erase('PlentymarketsVersionTimestamp'); } if (version_compare($version, '1.7') !== 1) { $this->subscribeEvent('Shopware_Models_Order_Order::postPersist', 'onOrderModelPostPersist'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'Shopware_Models_Order_Order::postPersist'); try { Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_mapping_referrer` CHANGE `plentyID` `plentyID` FLOAT(11) UNSIGNED NOT NULL;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_referrer` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_referrer` failed'); } } if (version_compare($version, '1.7.4') !== 1) { PyConf()->setCheckIncomingPayment(1); PyConf()->setCheckOutgoingItems(1); PyConf()->setItemNumberSourceKey('ItemNo'); PyConf()->setItemVariationNumberSourceKey('ColliNo'); PlentymarketsConfig::getInstance()->setImportOrderStatusChangeLastUpdateTimestamp(time()); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'setCheckIncomingPayment(1)'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'setCheckOutgoingItems(1)'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'setImportOrderStatusChangeLastUpdateTimestamp(time())'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, "setItemNumberSourceKey('ItemNo')"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, "setItemVariationNumberSourceKey('ColliNo')"); try { Shopware()->Db()->exec("\n\t\t\t\t\tCREATE TABLE `plenty_mapping_order_status` (\n\t\t\t\t\t `shopwareID` int(11) NOT NULL,\n\t\t\t\t\t `plentyID` decimal(3,1) unsigned NOT NULL,\n\t\t\t\t\t PRIMARY KEY (`shopwareID`,`plentyID`),\n\t\t\t\t\t UNIQUE KEY `plentyID` (`plentyID`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_order_status` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_order_status` failed'); } try { Shopware()->Db()->exec("\n\t\t\t\t\tCREATE TABLE `plenty_mapping_payment_status` (\n\t\t\t\t\t `shopwareID` int(11) NOT NULL,\n\t\t\t\t\t `plentyID` decimal(3,1) unsigned NOT NULL,\n\t\t\t\t\t PRIMARY KEY (`shopwareID`,`plentyID`),\n\t\t\t\t\t UNIQUE KEY `plentyID` (`plentyID`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_payment_status` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_payment_status` failed'); } } if (version_compare($version, '1.8.1', '<')) { try { $this->subscribeEvent('Shopware_Models_Order_Order::postPersist', 'onOrderModelPostPersist'); } catch (Exception $e) { return array('success' => false, 'message' => $e->getMessage()); } } PlentymarketsConfig::getInstance()->setConnectorVersion($this->getVersion()); return true; }
/** * Update plugin method * * @see Shopware_Components_Plugin_Bootstrap::update() */ public function update($version) { $Logger = PlentymarketsLogger::getInstance(); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, $version . ' → ' . $this->getVersion()); if ($version == '1.4.3') { try { // Drop unused columns from the log Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_log`\n\t\t\t\t\t\tDROP `request`,\n\t\t\t\t\t\tDROP `response`;\n\t\t\t\t"); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_log` (drop unused columns from the log) already carried out'); } } if (version_compare($version, '1.4.4') !== 1) { try { Shopware()->Db()->exec("\n\t\t\t\t\tCREATE TABLE `plenty_mapping_customer_billing_address` (\n\t\t\t\t\t `shopwareID` int(11) unsigned NOT NULL,\n\t\t\t\t\t `plentyID` int(11) unsigned NOT NULL,\n\t\t\t\t\t PRIMARY KEY (`shopwareID`,`plentyID`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_customer_billing_address` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_customer_billing_address` already carried out'); } Shopware()->Db()->exec("\n\t\t\t\tTRUNCATE TABLE `plenty_mapping_customer`\n\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'TRUNCATE TABLE `plenty_mapping_customer` done'); Shopware()->Db()->exec("\n\t\t\t\tDELETE FROM `plenty_config` WHERE `key` LIKE 'CustomerExport%'\n\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'DELETE FROM `plenty_config` done'); } if (version_compare($version, '1.4.5') !== 1) { try { $this->addMappingCleanupCronEvent(); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'addMappingCleanupCronEvent done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'addMappingCleanupCronEvent already carried out'); } } if (version_compare($version, '1.4.7') !== 1) { if (PlentymarketsConfig::getInstance()->getItemExportStatus() == 'success') { PlentymarketsConfig::getInstance()->setItemCrossSellingExportStatus('success'); PlentymarketsConfig::getInstance()->setItemCrossSellingExportTimestampStart(time()); PlentymarketsConfig::getInstance()->setItemCrossSellingExportTimestampFinished(time()); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'Item cross selling export marked as done'); } } if (version_compare($version, '1.4.8') !== 1) { $this->addItemImportStackCronEvent(); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'addItemImportStackCronEvent done'); try { Shopware()->Db()->exec("\n\t\t\t\t\tCREATE TABLE `plenty_stack_item` (\n\t\t\t\t\t `itemId` int(11) unsigned NOT NULL,\n\t\t\t\t\t `timestamp` int(10) unsigned NOT NULL,\n\t\t\t\t\t `storeIds` text NOT NULL,\n\t\t\t\t\t PRIMARY KEY (`itemId`),\n\t\t\t\t\t KEY `timestamp` (`timestamp`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_stack_item` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_stack_item` already carried out'); } try { Shopware()->Db()->exec("\n\t\t\t\t\tUPDATE plenty_config\n\t\t\t\t\t\tSET `key` = 'ImportItemStackLastUpdateTimestamp'\n\t\t\t\t\t\tWHERE `key` = 'ImportItemLastUpdateTimestamp'\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'UPDATE plenty_config (ImportItemStackLastUpdateTimestamp) done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'UPDATE plenty_config (ImportItemStackLastUpdateTimestamp) failed'); } } if (version_compare($version, '1.4.12') !== 1) { try { Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_log` ADD `code` INT UNSIGNED NULL DEFAULT NULL AFTER `message`;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_log` ADD `code` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_log` ADD `code` already carried out'); } } if (version_compare($version, '1.4.14') !== 1) { $this->addLogCleanupCronEvent(); } if (version_compare($version, '1.4.18') !== 1) { $this->addItemAssociateUpdateCronEvent(); } if (version_compare($version, '1.4.22') !== 1) { try { Shopware()->Db()->exec("\n\t\t\t\t\tCREATE TABLE `plenty_mapping_item_bundle` (\n\t\t\t\t\t `shopwareID` int(11) unsigned NOT NULL,\n\t\t\t\t\t `plentyID` int(11) unsigned NOT NULL,\n\t\t\t\t\t PRIMARY KEY (`shopwareID`,`plentyID`),\n\t\t\t\t\t UNIQUE KEY `plentyID` (`plentyID`)\n\t\t\t\t\t) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_item_bundle` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'CREATE TABLE `plenty_mapping_item_bundle` failed'); } $this->addItemBundleCronEvents(); } if (version_compare($version, '1.6') !== 1) { try { PlentymarketsExportController::getInstance()->erase('ItemCategory'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'PlentymarketsExportController::getInstance()->erase(\'ItemCategory\') done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'PlentymarketsExportController::getInstance()->erase(\'ItemCategory\') failed'); } try { Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_mapping_category` CHANGE `shopwareID` `shopwareID` VARCHAR(255) NOT NULL DEFAULT '';\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_category` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_category` failed'); } PyConf()->erase('PlentymarketsVersionTimestamp'); } if (version_compare($version, '1.7') !== 1) { $this->subscribeEvent('Shopware_Models_Order_Order::postPersist', 'onOrderModelPostPersist'); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'Shopware_Models_Order_Order::postPersist'); try { Shopware()->Db()->exec("\n\t\t\t\t\tALTER TABLE `plenty_mapping_referrer` CHANGE `plentyID` `plentyID` FLOAT(11) UNSIGNED NOT NULL;\n\t\t\t\t"); $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_referrer` done'); } catch (Exception $E) { $Logger->message(PlentymarketsLogger::PREFIX_UPDATE, 'ALTER TABLE `plenty_mapping_referrer` failed'); } } // PlentymarketsConfig::getInstance()->setConnectorVersion($this->getVersion()); return true; }
/** * Returns the method of payment id * * @throws PlentymarketsExportEntityException if there is no mapping */ protected function getMethodOfPaymentId() { // Sub-objects $Payment = $this->Order->getPayment(); // Payment if ($Payment) { try { return PlentymarketsMappingController::getMethodOfPaymentByShopwareID($Payment->getId()); } catch (PlentymarketsMappingExceptionNotExistant $E) { $shopgateIds = explode('|', PyConf()->get('OrderShopgateMOPIDs', '')); if (in_array($Payment->getId(), $shopgateIds)) { return MOP_SHOPGATE; } } } // Save the error $this->setError(self::CODE_ERROR_MOP); // Exit throw new PlentymarketsExportEntityException('The order with the number »' . $this->Order->getNumber() . '« could not be exported (no mapping for method of payment)', 4030); }
/** * Runs the import of an expicit entity */ protected function runEntity($entity) { $timestamp = time(); PyConf()->set(sprintf('ImportItem%sLastRunTimestamp', $entity), time()); PyConf()->set(sprintf('ImportItem%sNextRunTimestamp', $entity), time() + $this->cronJobInterval); if (PyStatus()->maySynchronize()) { PyLog()->message('Sync:Item:' . $entity, 'Starting'); try { $controller = sprintf('PlentymarketsImportControllerItem%s', $entity); $Controller = new $controller(); $Controller->run((int) PyConf()->get(sprintf('ImportItem%sLastUpdateTimestamp', $entity))); PyConf()->set(sprintf('ImportItem%sStatus', $entity), 1); PyConf()->set(sprintf('ImportItem%sLastUpdateTimestamp', $entity), $timestamp); PyConf()->erase(sprintf('ImportItem%sError', $entity)); } catch (PlentymarketsImportException $E) { PyConf()->set(sprintf('ImportItem%sStatus', $entity), 2); PyConf()->set(sprintf('ImportItem%sError', $entity), $E->getMessage()); } PyLog()->message('Sync:Item:' . $entity, 'Finished'); } else { PyConf()->set(sprintf('ImportItem%sStatus', $entity), 0); } PyConf()->setImportItemAssociateLastEnity($entity); }
/** * Returns a page of the log * * @param integer $start * @param integer $limit * @param int|number $type * @param string $filter * @return array */ public function get($start, $limit, $type = 0, $filter = '') { $where = 'WHERE 1'; if ($type > 0) { $where .= ' AND type = ' . (int) $type; } if (strlen($filter) > 4) { $where .= ' AND identifier LIKE "' . $filter . '"'; } if (PyConf()->getApiHideCallsInLog(false)) { $where .= ' AND identifier != "Soap:Call"'; } $limit = ' LIMIT ' . $start . ', ' . $limit; $Result = Shopware()->Db()->query(' SELECT SQL_CALC_FOUND_ROWS * FROM plenty_log ' . $where . ' ORDER BY id DESC ' . $limit . ' '); return array('data' => $Result->fetchAll(), 'total' => Shopware()->Db()->query(' SELECT FOUND_ROWS() ')->fetchColumn(0)); }