Skip to content

Commit

Permalink
6.46.0 (FINAL RELEASE)
Browse files Browse the repository at this point in the history
  • Loading branch information
m2epro committed Sep 14, 2023
1 parent b14349e commit 2b7ad74
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,23 @@
*/

use Ess_M2ePro_Model_Cron_Task_Amazon_Listing_Product_Channel_SynchronizeData_AfnQty_MerchantManager as MerchantManager;
use Ess_M2ePro_Model_Magento_Product_ChangeProcessor_Abstract as ChangeProcessorAbstract;

class Ess_M2ePro_Model_Cron_Task_Amazon_Listing_Product_Channel_SynchronizeData_AfnQty_Responser
extends Ess_M2ePro_Model_Amazon_Connector_Inventory_Get_AfnQty_ItemsResponser
{
const ERROR_CODE_UNACCEPTABLE_REPORT_STATUS = 504;
const INSTRUCTION_INITIATOR = 'amazon_afn_qty_synchronization';

/** @var Ess_M2ePro_Model_Synchronization_Log */
protected $_synchronizationLog;
/** @var MerchantManager */
protected $_merchantManager;
/** @var Ess_M2ePro_Helper_Module_Logger */
protected $_logger;
/** @var array */
private $instructionForCheckingProductData = array();


/**
* @throws Ess_M2ePro_Model_Exception_Logic
Expand Down Expand Up @@ -69,6 +74,11 @@ protected function processResponseMessages()
if ($isMessageReceived) {
$this->refreshLastUpdate(false);
}

/** @var $instructionResource */
$instructionResource = Mage::getResourceModel('M2ePro/Listing_Product_Instruction');

$instructionResource->add($this->instructionForCheckingProductData);
}

protected function isNeedProcessResponse()
Expand Down Expand Up @@ -190,13 +200,25 @@ private function updateItemsFromCollection($collection, array $normalizedReceive
*/
private function updateItem($item, $afnQty)
{
$oldStatus = $item->getData('status');
$newStatus = $afnQty ? Ess_M2ePro_Model_Listing_Product::STATUS_LISTED
: Ess_M2ePro_Model_Listing_Product::STATUS_STOPPED;

$item->setData('online_afn_qty', $afnQty);
$item->setData(
'status',
$afnQty ?
Ess_M2ePro_Model_Listing_Product::STATUS_LISTED : Ess_M2ePro_Model_Listing_Product::STATUS_STOPPED
);
$item->setData('status', $newStatus);
$item->save();

if ($item instanceof Ess_M2ePro_Model_Listing_Product
&& $this->isStatusChangedFromInactiveToActive($oldStatus, $newStatus)
) {
$this->addInstructionForCheckingProductData($item);
}
}

private function isStatusChangedFromInactiveToActive($oldStatus, $newStatus)
{
return (int)$oldStatus === Ess_M2ePro_Model_Listing_Product::STATUS_STOPPED
&& (int)$newStatus === Ess_M2ePro_Model_Listing_Product::STATUS_LISTED;
}

/**
Expand Down Expand Up @@ -233,4 +255,15 @@ protected function getSynchronizationLog()

return $this->_synchronizationLog;
}

private function addInstructionForCheckingProductData(Ess_M2ePro_Model_Listing_Product $listingProduct)
{
$this->instructionForCheckingProductData[] = array(
'listing_product_id' => $listingProduct->getId(),
'component' => Ess_M2ePro_Helper_Component_Ebay::NICK,
'type' => ChangeProcessorAbstract::INSTRUCTION_TYPE_PRODUCT_STATUS_DATA_POTENTIALLY_CHANGED,
'initiator' => self::INSTRUCTION_INITIATOR,
'priority' => 100,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
* @license Commercial use is forbidden
*/

class Ess_M2ePro_Model_Cron_Task_Magento_Product_DetectSpecialPriceEndDate extends Ess_M2ePro_Model_Cron_Task_Abstract
class Ess_M2ePro_Model_Cron_Task_Magento_Product_DetectSpecialPriceStartEndDate extends Ess_M2ePro_Model_Cron_Task_Abstract
{
const NICK = 'magento/product/detect_special_price_end_date';
const NICK = 'magento/product/detect_special_price_start_end_date';

/** @var int (in seconds) */
protected $_interval = 7200;
Expand Down Expand Up @@ -53,19 +53,73 @@ protected function performActions()
$this->setLastProcessedProductId((int)$lastMagentoProduct);
}

//########################################
private function getAllChangedProductsPrice()
{
$currentDate = Mage::helper('M2ePro')->createCurrentGmtDateTime();
$toDate = clone $currentDate;
$toDate->modify('-1 day');

$specialFromDateResults = $this->getChangedProductPricesByDate('special_from_date', $currentDate);
$specialToDateResults = $this->getChangedProductPricesByDate('special_to_date', $toDate);

$allChangedProductsPrice = $specialToDateResults + $specialFromDateResults;

ksort($allChangedProductsPrice);

return array_slice($allChangedProductsPrice, 0, 1000, true);
}

private function getChangedProductPricesByDate($attributeCode, \DateTime $date)
{
$changedProductsPrice = array();

foreach ($this->getAllStoreIds() as $storeId) {
$productCollection = $this->getProductCollection($attributeCode, $storeId, $date);

/** @var Mage_Catalog_Model_Product $magentoProduct */
foreach ($productCollection->getItems() as $magentoProduct) {
$magentoProductId = $magentoProduct->getId();
$price = ($attributeCode === 'special_from_date')
? $magentoProduct->getSpecialPrice()
: $magentoProduct->getPrice();

$changedProductsPrice[$magentoProductId] = array(
'price' => $price,
);
}
}

return $changedProductsPrice;
}

private function getProductCollection($attributeCode, $storeId, \DateTime $date
) {
/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = Mage::getModel('catalog/product')->getCollection();

$collection->setStoreId($storeId);
$collection->addAttributeToSelect('price');
$collection->addAttributeToFilter('special_price', array('notnull' => true));
$collection->addFieldToFilter($attributeCode, array('notnull' => true));
$collection->addFieldToFilter($attributeCode, array('lt' => $date->format('Y-m-d H:i:s')));
$collection->addFieldToFilter('entity_id', array('gt' => (int)$this->getLastProcessedProductId()));
$collection->setOrder('entity_id', 'asc');
$collection->getSelect()->limit(1000);

protected function getArrayKeyLast($array)
return $collection;
}

private function getArrayKeyLast($array)
{
if (!is_array($array) || empty($array)) {
if (empty($array)) {
return NULL;
}

$arrayKeys = array_keys($array);
return $arrayKeys[count($array)-1];
}

protected function getCurrentPrice(Ess_M2ePro_Model_Listing_Product $listingProduct)
private function getCurrentPrice(Ess_M2ePro_Model_Listing_Product $listingProduct)
{
if ($listingProduct->isComponentModeAmazon()) {
return $listingProduct->getChildObject()->getOnlineRegularPrice();
Expand All @@ -78,7 +132,7 @@ protected function getCurrentPrice(Ess_M2ePro_Model_Listing_Product $listingProd
}
}

protected function getAllStoreIds()
private function getAllStoreIds()
{
$storeIds = array();

Expand All @@ -95,59 +149,18 @@ protected function getAllStoreIds()
return $storeIds;
}

protected function getChangedProductsPrice($storeId)
{
$date = new DateTime('now', new DateTimeZone('UTC'));
$date->modify('-1 day');

/** @var Mage_Catalog_Model_Resource_Product_Collection $collection */
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->setStoreId($storeId);
$collection->addAttributeToSelect('price');
$collection->addAttributeToFilter('special_price', array('notnull' => true));
$collection->addFieldToFilter('special_to_date', array('notnull' => true));
$collection->addFieldToFilter('special_to_date', array('lt' => $date->format('Y-m-d H:i:s')));
$collection->addFieldToFilter('entity_id', array('gt' => (int)$this->getLastProcessedProductId()));
$collection->setOrder('entity_id', 'asc');
$collection->getSelect()->limit(1000);

return $collection->getItems();
}

protected function getAllChangedProductsPrice()
{
$changedProductsPrice = array();

/** @var Mage_Catalog_Model_Product $magentoProduct */
foreach ($this->getAllStoreIds() as $storeId) {
foreach ($this->getChangedProductsPrice($storeId) as $magentoProduct) {
$changedProductsPrice[$magentoProduct->getId()] = array(
'price' => $magentoProduct->getPrice()
);
}
}

ksort($changedProductsPrice);

return array_slice($changedProductsPrice, 0, 1000, true);
}

// ---------------------------------------

protected function getLastProcessedProductId()
private function getLastProcessedProductId()
{
return Mage::helper('M2ePro/Module')->getRegistry()->getValue(
'/magento/product/detect_special_price_end_date/last_magento_product_id/'
'/magento/product/detect_special_price_start_end_date/last_magento_product_id/'
);
}

protected function setLastProcessedProductId($magentoProductId)
private function setLastProcessedProductId($magentoProductId)
{
Mage::helper('M2ePro/Module')->getRegistry()->setValue(
'/magento/product/detect_special_price_end_date/last_magento_product_id/',
'/magento/product/detect_special_price_start_end_date/last_magento_product_id/',
(int)$magentoProductId
);
}

//########################################
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class Ess_M2ePro_Model_Cron_Task_Repository
'component' => self::COMPONENT_GENERAL,
'group' => self::GROUP_SYSTEM,
),
Ess_M2ePro_Model_Cron_Task_Magento_Product_DetectSpecialPriceEndDate::NICK => array(
Ess_M2ePro_Model_Cron_Task_Magento_Product_DetectSpecialPriceStartEndDate::NICK => array(
'component' => self::COMPONENT_GENERAL,
'group' => self::GROUP_SYSTEM,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@ class Ess_M2ePro_Model_Magento_Product_Variation_Cache extends Ess_M2ePro_Model_

public function getVariationsTypeStandard()
{
$params = array(
$cacheKeyParams = array(
'virtual_attributes' => $this->getMagentoProduct()->getVariationVirtualAttributes(),
'filter_attributes' => $this->getMagentoProduct()->getVariationFilterAttributes(),
'is_ignore_virtual_attributes' => $this->getMagentoProduct()->isIgnoreVariationVirtualAttributes(),
'is_ignore_filter_attributes' => $this->getMagentoProduct()->isIgnoreVariationFilterAttributes(),
);
return $this->getMethodData(__FUNCTION__, $params);

return $this->getMethodData(__FUNCTION__, $cacheKeyParams);
}

public function getVariationsTypeRaw()
Expand All @@ -33,7 +34,7 @@ public function getTitlesVariationSet()

//########################################

protected function getMethodData($methodName, $params = null)
protected function getMethodData($methodName, $cacheKeyParams = array())
{
if ($this->getMagentoProduct() === null) {
throw new Ess_M2ePro_Model_Exception('Magento Product was not set.');
Expand All @@ -44,8 +45,8 @@ protected function getMethodData($methodName, $params = null)
$methodName,
);

if ($params !== null) {
$cacheKey[] = $params;
if ($cacheKeyParams !== array()) {
$cacheKey[] = $cacheKeyParams;
}

$cacheResult = $this->getMagentoProduct()->getCacheValue($cacheKey);
Expand All @@ -54,11 +55,7 @@ protected function getMethodData($methodName, $params = null)
return $cacheResult;
}

if ($params !== null) {
$data = call_user_func_array(array('parent', $methodName), $params);
} else {
$data = call_user_func(array('parent', $methodName));
}
$data = call_user_func(array('parent', $methodName));

if (!$this->getMagentoProduct()->isCacheEnabled()) {
return $data;
Expand Down
2 changes: 1 addition & 1 deletion app/code/community/Ess/M2ePro/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "m2epro/magento1-extension",
"description": "M2E Pro is a Magento trusted (TM), award-winning extension, which allows merchants of all sizes to fully integrate Magento based system(s) into eBay/Amazon/Walmart platforms.",
"type": "magento-module",
"version": "6.45.0",
"version": "6.46.0",
"license": "proprietary",
"keywords": ["ebay", "amazon", "walmart", "magento"],
"homepage": "https://www.m2epro.com/",
Expand Down
2 changes: 1 addition & 1 deletion app/code/community/Ess/M2ePro/etc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<config>
<modules>
<Ess_M2ePro>
<version>6.45.0</version>
<version>6.46.0</version>
</Ess_M2ePro>
</modules>
<default>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

/**
* @author M2E Pro Developers Team
* @copyright M2E LTD
* @license Commercial use is forbidden
*/

class Ess_M2ePro_Sql_Upgrade_v6_45_0__v6_46_0_Config extends Ess_M2ePro_Model_Upgrade_Feature_AbstractConfig
{
public function getFeaturesList()
{
return array();
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "m2epro/magento1-extension",
"description": "M2E Pro is a Magento trusted (TM), award-winning extension, which allows merchants of all sizes to fully integrate Magento based system(s) into eBay/Amazon/Walmart platforms.",
"type": "magento-module",
"version": "6.45.0",
"version": "6.46.0",
"license": "proprietary",
"keywords": ["ebay", "amazon", "walmart", "magento"],
"homepage": "https://www.m2epro.com/",
Expand Down

0 comments on commit 2b7ad74

Please sign in to comment.