public function isExistProductAction(Ess_M2ePro_Model_ListingsProducts $listingProductInstance, $action, array $params = array())
 {
     $newListingsProductId = $listingProductInstance->getId();
     $params['status_changer'] = Ess_M2ePro_Model_ListingsProducts::STATUS_CHANGER_SYNCH;
     if (!isset($this->_actionsProducts[$newListingsProductId])) {
         return false;
     }
     if ($this->_actionsProducts[$newListingsProductId]['action'] != $action) {
         return false;
     }
     $tempExistItem = $this->_actionsProducts[$newListingsProductId];
     foreach ($params as $tempParamKey => $tempParamValue) {
         if (!isset($tempExistItem['params'][$tempParamKey])) {
             return false;
         }
         if (is_array($tempExistItem['params'][$tempParamKey]) && is_array($tempParamValue)) {
             foreach ($tempParamValue as $tempParamKeyTwo => $tempParamValueTwo) {
                 if (!isset($tempExistItem['params'][$tempParamKey][$tempParamKeyTwo])) {
                     return false;
                 }
                 if ($tempExistItem['params'][$tempParamKey][$tempParamKeyTwo] != $tempParamValueTwo) {
                     return false;
                 }
             }
             continue;
         }
         if ($tempExistItem['params'][$tempParamKey] != $tempParamValue) {
             return false;
         }
     }
     return true;
 }
 public function getNewVariationByOld(Ess_M2ePro_Model_ListingsProducts $listingProduct, array $variationOld)
 {
     if (!isset($variationOld['specifics']) || !is_array($variationOld['specifics']) || count($variationOld['specifics']) <= 0) {
         return false;
     }
     $variationsModels = $listingProduct->getListingsProductsVariations(true);
     if (count($variationsModels) <= 0) {
         return false;
     }
     foreach ($variationsModels as $variationModel) {
         /** @var $variationModel Ess_M2ePro_Model_ListingsProductsVariations */
         $options = $variationModel->getListingsProductsVariationsOptions(false);
         if (count($options) != count($variationOld['specifics'])) {
             continue;
         }
         $equalVariations = true;
         foreach ($options as $optionNew) {
             $haveOption = false;
             foreach ($variationOld['specifics'] as $optionOldKey => $optionOldValue) {
                 if ($optionNew['attribute'] == $optionOldKey && $optionNew['option'] == $optionOldValue) {
                     $haveOption = true;
                     break;
                 }
             }
             if (!$haveOption) {
                 $equalVariations = false;
                 break;
             }
         }
         if ($equalVariations) {
             return $variationModel;
         }
     }
     return false;
 }
 private function addPriceProductChange(Ess_M2ePro_Model_ListingsProducts $listingProduct, $currentMethod, $ebayMethod, $sourceMethod)
 {
     $tempPrice = $listingProduct->{$currentMethod}();
     if ($tempPrice != $listingProduct->{$ebayMethod}()) {
         $attribute = '';
         $src = $listingProduct->getSellingFormatTemplate()->{$sourceMethod}();
         if ($src['mode'] == Ess_M2ePro_Model_SellingFormatTemplates::PRICE_PRODUCT) {
             $attribute = 'price';
         }
         if ($src['mode'] == Ess_M2ePro_Model_SellingFormatTemplates::PRICE_SPECIAL) {
             $attribute = 'special_price';
         }
         if ($src['mode'] == Ess_M2ePro_Model_SellingFormatTemplates::PRICE_ATTRIBUTE) {
             $attribute = $src['attribute'];
         }
         $attribute != '' && $this->addProductChange($listingProduct->getProductId(), $attribute, $listingProduct->{$ebayMethod}(), $tempPrice);
     }
 }
 private function prepareChangedListingsProducts(Ess_M2ePro_Model_ListingsProducts $tempListingProductModel, $ebayChange)
 {
     // Prepare ebay changes values
     //--------------------------
     $tempEbayChanges = array();
     if ($tempListingProductModel->isListingTypeAuction()) {
         $tempEbayChanges['ebay_start_price'] = (double) $ebayChange['currentPrice'] < 0 ? 0 : (double) $ebayChange['currentPrice'];
     }
     if ($tempListingProductModel->isListingTypeFixed()) {
         $tempEbayChanges['ebay_buyitnow_price'] = (double) $ebayChange['currentPrice'] < 0 ? 0 : (double) $ebayChange['currentPrice'];
     }
     $tempEbayChanges['ebay_qty'] = (int) $ebayChange['quantity'] < 0 ? 0 : (int) $ebayChange['quantity'];
     $tempEbayChanges['ebay_qty_sold'] = (int) $ebayChange['quantitySold'] < 0 ? 0 : (int) $ebayChange['quantitySold'];
     if ($tempListingProductModel->isListingTypeAuction()) {
         $tempEbayChanges['ebay_qty'] = 1;
         $tempEbayChanges['ebay_bids'] = (int) $ebayChange['bidCount'] < 0 ? 0 : (int) $ebayChange['bidCount'];
     }
     $tempEbayChanges['ebay_start_date'] = Ess_M2ePro_Model_Connectors_Ebay_Abstract::ebayTimeToString($ebayChange['startTime']);
     $tempEbayChanges['ebay_end_date'] = Ess_M2ePro_Model_Connectors_Ebay_Abstract::ebayTimeToString($ebayChange['endTime']);
     if (($ebayChange['listingStatus'] == self::EBAY_STATUS_COMPLETED || $ebayChange['listingStatus'] == self::EBAY_STATUS_ENDED) && $tempEbayChanges['ebay_qty'] == $tempEbayChanges['ebay_qty_sold']) {
         $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_SOLD;
     } else {
         if ($ebayChange['listingStatus'] == self::EBAY_STATUS_COMPLETED) {
             $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_STOPPED;
         } else {
             if ($ebayChange['listingStatus'] == self::EBAY_STATUS_ENDED) {
                 $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_FINISHED;
             } else {
                 if ($ebayChange['listingStatus'] == self::EBAY_STATUS_ACTIVE) {
                     $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_LISTED;
                 }
             }
         }
     }
     if ($tempEbayChanges['status'] != $tempListingProductModel->getStatus()) {
         $tempEbayChanges['status_changer'] = Ess_M2ePro_Model_ListingsProducts::STATUS_CHANGER_EBAY;
         Mage::getModel('M2ePro/ProductsChanges')->updateAttribute($tempListingProductModel->getProductId(), 'listing_product_status', 'listing_product_' . $tempListingProductModel->getId() . '_status_' . $tempListingProductModel->getStatus(), 'listing_product_' . $tempListingProductModel->getId() . '_status_' . $tempEbayChanges['status'], Ess_M2ePro_Model_ProductsChanges::CREATOR_TYPE_SYNCHRONIZATION);
     }
     //--------------------------
     // Create changed listings products
     //--------------------------
     $changedListingsProducts = array('ebay_item_id' => $ebayChange['id'], 'listing_product' => array('instance' => $tempListingProductModel, 'changes' => $tempEbayChanges), 'listings_products_variations' => array());
     //--------------------------
     // Cancel when have not ebay variations
     //--------------------------
     if (!isset($ebayChange['variations']) || is_null($ebayChange['variations'])) {
         return $changedListingsProducts;
     }
     //--------------------------
     // Get listings products variations
     //-----------------------
     $tempVariations = $tempListingProductModel->getListingsProductsVariations(true);
     if (count($tempVariations) == 0) {
         return $changedListingsProducts;
     }
     //-----------------------
     // Get listings products variations with options
     //-----------------------
     $tempVariationsWithOptions = array();
     foreach ($tempVariations as $variation) {
         $options = $variation->getListingsProductsVariationsOptions(true);
         if (count($options) == 0) {
             continue;
         }
         $tempVariationsWithOptions[] = array('variation' => $variation, 'options' => $options);
     }
     if (count($tempVariationsWithOptions) == 0) {
         return $changedListingsProducts;
     }
     //-----------------------
     // Search our variations for ebay variations
     //--------------------------
     foreach ($ebayChange['variations'] as $ebayVariation) {
         // Find our variation
         //--------------------------
         foreach ($tempVariationsWithOptions as $M2eProVariation) {
             $equalVariation = true;
             foreach ($M2eProVariation['options'] as $M2eProOptionValue) {
                 $haveOption = false;
                 foreach ($ebayVariation['specifics'] as $ebayOptionKey => $ebayOptionValue) {
                     if ($M2eProOptionValue->getData('attribute') == $ebayOptionKey && $M2eProOptionValue->getData('option') == $ebayOptionValue) {
                         $haveOption = true;
                         break;
                     }
                 }
                 if ($haveOption === false) {
                     $equalVariation = false;
                     break;
                 }
             }
             if ($equalVariation === true && count($M2eProVariation['options']) == count($ebayVariation['specifics'])) {
                 // Prepare ebay changes values
                 //--------------------------
                 $tempEbayChanges = array();
                 $tempEbayChanges['ebay_price'] = (double) $ebayVariation['price'] < 0 ? 0 : (double) $ebayVariation['price'];
                 $tempEbayChanges['ebay_qty'] = (int) $ebayVariation['quantity'] < 0 ? 0 : (int) $ebayVariation['quantity'];
                 $tempEbayChanges['ebay_qty_sold'] = (int) $ebayVariation['quantitySold'] < 0 ? 0 : (int) $ebayVariation['quantitySold'];
                 if ($tempEbayChanges['ebay_qty'] <= $tempEbayChanges['ebay_qty_sold']) {
                     $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_SOLD;
                 }
                 if ($tempEbayChanges['ebay_qty'] <= 0) {
                     $tempEbayChanges['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_NOT_LISTED;
                 }
                 //--------------------------
                 // Add changed variation
                 //--------------------------
                 $changedListingsProducts['listings_products_variations'][] = array('instance' => $M2eProVariation, 'changes' => $tempEbayChanges);
                 //--------------------------
                 break;
             }
         }
         //--------------------------
     }
     return $changedListingsProducts;
 }
 protected function addVariations(Ess_M2ePro_Model_ListingsProducts $listingProduct, $addedVariations)
 {
     foreach ($addedVariations as $aVariation) {
         if (isset($aVariation['variation']['id'])) {
             $dataForUpdate = array('add' => Ess_M2ePro_Model_ListingsProductsVariations::ADD_YES, 'delete' => Ess_M2ePro_Model_ListingsProductsVariations::DELETE_NO);
             Mage::getModel('M2ePro/ListingsProductsVariations')->loadInstance($aVariation['variation']['id'])->addData($dataForUpdate)->save();
             continue;
         }
         $dataForAdd = array('listing_product_id' => $listingProduct->getId(), 'add' => Ess_M2ePro_Model_ListingsProductsVariations::ADD_YES, 'delete' => Ess_M2ePro_Model_ListingsProductsVariations::DELETE_NO, 'status' => Ess_M2ePro_Model_ListingsProducts::STATUS_NOT_LISTED);
         $newVariationId = Mage::getModel('M2ePro/ListingsProductsVariations')->addData($dataForAdd)->save()->getId();
         foreach ($aVariation['options'] as $aOption) {
             $dataForAdd = array('listing_product_variation_id' => $newVariationId, 'product_id' => $aOption['product_id'], 'product_type' => $aOption['product_type'], 'attribute' => $aOption['attribute'], 'option' => $aOption['option']);
             Mage::getModel('M2ePro/ListingsProductsVariationsOptions')->addData($dataForAdd)->save();
         }
     }
 }
 public function __construct(array $params = array(), Ess_M2ePro_Model_ListingsProducts $listingProduct)
 {
     $this->listingProduct = $listingProduct;
     parent::__construct($params, $this->listingProduct->getListing());
 }
 public function updateAfterAction(Ess_M2ePro_Model_ListingsProducts $listingProduct, $saveEbayQtySold = false)
 {
     if (!$listingProduct->isListingTypeFixed() || !$listingProduct->getListingTemplate()->isVariationMode() || $listingProduct->getMagentoProduct()->isSimpleTypeWithoutCustomOptions()) {
         return;
     }
     // Delete Variations
     //-----------------------------
     $productVariations = $listingProduct->getListingsProductsVariations(true);
     foreach ($productVariations as $variation) {
         /** @var $variation Ess_M2ePro_Model_ListingsProductsVariations */
         $variation->isDelete() && $variation->deleteInstance();
     }
     //-----------------------------
     // Update Variations
     //-----------------------------
     $productVariations = $listingProduct->getListingsProductsVariations(true);
     foreach ($productVariations as $variation) {
         /** @var $variation Ess_M2ePro_Model_ListingsProductsVariations */
         $dataForUpdate = array('ebay_price' => $variation->getPrice(), 'add' => Ess_M2ePro_Model_ListingsProductsVariations::ADD_NO, 'delete' => Ess_M2ePro_Model_ListingsProductsVariations::DELETE_NO, 'status' => Ess_M2ePro_Model_ListingsProducts::STATUS_LISTED);
         if ($saveEbayQtySold) {
             $dataForUpdate['ebay_qty_sold'] = is_null($variation->getEbayQtySold()) ? 0 : $variation->getEbayQtySold();
             $dataForUpdate['ebay_qty'] = $variation->getQty() + $dataForUpdate['ebay_qty_sold'];
         } else {
             $dataForUpdate['ebay_qty_sold'] = 0;
             $dataForUpdate['ebay_qty'] = $variation->getQty();
         }
         if ($dataForUpdate['ebay_qty'] <= $dataForUpdate['ebay_qty_sold']) {
             $dataForUpdate['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_SOLD;
         }
         if ($dataForUpdate['ebay_qty'] <= 0) {
             $dataForUpdate['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_NOT_LISTED;
         }
         $variation->addData($dataForUpdate)->save();
     }
     //-----------------------------
 }
Exemple #8
0
 protected function updateProductAfterAction(Ess_M2ePro_Model_ListingsProducts $listingProduct, $ebayItemsId, $ebayStartDateRaw, $ebayEndDateRaw, $statusChanger, $saveEbayQtySold = false)
 {
     $dataForUpdate = array('ebay_items_id' => (int) $ebayItemsId, 'ebay_start_date' => Ess_M2ePro_Model_Connectors_Ebay_Abstract::ebayTimeToString($ebayStartDateRaw), 'ebay_end_date' => Ess_M2ePro_Model_Connectors_Ebay_Abstract::ebayTimeToString($ebayEndDateRaw), 'status' => Ess_M2ePro_Model_ListingsProducts::STATUS_LISTED, 'status_changer' => $statusChanger);
     if ($saveEbayQtySold) {
         $dataForUpdate['ebay_qty_sold'] = is_null($listingProduct->getEbayQtySold()) ? 0 : $listingProduct->getEbayQtySold();
         $dataForUpdate['ebay_qty'] = $listingProduct->getQty() + $dataForUpdate['ebay_qty_sold'];
     } else {
         $dataForUpdate['ebay_qty_sold'] = 0;
         $dataForUpdate['ebay_qty'] = $listingProduct->getQty();
     }
     if ($listingProduct->isListingTypeFixed()) {
         $dataForUpdate['ebay_start_price'] = NULL;
         $dataForUpdate['ebay_reserve_price'] = NULL;
         $dataForUpdate['ebay_buyitnow_price'] = $listingProduct->getBuyItNowPrice();
         $dataForUpdate['ebay_bids'] = NULL;
     } else {
         $dataForUpdate['ebay_start_price'] = $listingProduct->getStartPrice();
         $dataForUpdate['ebay_reserve_price'] = $listingProduct->getReservePrice();
         $dataForUpdate['ebay_buyitnow_price'] = $listingProduct->getBuyItNowPrice();
         $dataForUpdate['ebay_bids'] = 0;
     }
     $listingProduct->addData($dataForUpdate)->save();
 }
 private function isMeetStopRequirements(Ess_M2ePro_Model_ListingsProducts $listingProduct)
 {
     // Ebay available status
     //--------------------
     if (!$listingProduct->isListed()) {
         return false;
     }
     if (!$listingProduct->isStoppable()) {
         return false;
     }
     if ($this->_ebayActions->isExistProductAction($listingProduct, Ess_M2ePro_Model_Connectors_Ebay_Item_Dispatcher::ACTION_STOP, array())) {
         return false;
     }
     //--------------------
     // Correct synchronization
     //--------------------
     if (!$listingProduct->getListing()->isSynchronizationNowRun()) {
         return false;
     }
     //--------------------
     // Check filters
     //--------------------
     if ($listingProduct->getSynchronizationTemplate()->isStopStatusDisabled()) {
         if ($listingProduct->getMagentoProduct()->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_DISABLED) {
             return true;
         }
     }
     if ($listingProduct->getSynchronizationTemplate()->isStopOutOfStock()) {
         if (!$listingProduct->getMagentoProduct()->getStockAvailability()) {
             return true;
         }
     }
     if ($listingProduct->getSynchronizationTemplate()->isStopWhenQtyHasValue()) {
         $productQty = (int) $listingProduct->getQty(true);
         $typeQty = (int) $listingProduct->getSynchronizationTemplate()->getStopWhenQtyHasValueType();
         $minQty = (int) $listingProduct->getSynchronizationTemplate()->getStopWhenQtyHasValueMin();
         $maxQty = (int) $listingProduct->getSynchronizationTemplate()->getStopWhenQtyHasValueMax();
         if ($typeQty == Ess_M2ePro_Model_SynchronizationsTemplates::STOP_QTY_LESS && $productQty <= $minQty) {
             return true;
         }
         if ($typeQty == Ess_M2ePro_Model_SynchronizationsTemplates::STOP_QTY_MORE && $productQty >= $minQty) {
             return true;
         }
         if ($typeQty == Ess_M2ePro_Model_SynchronizationsTemplates::STOP_QTY_BETWEEN && $productQty >= $minQty && $productQty <= $maxQty) {
             return true;
         }
     }
     //--------------------
     return false;
 }
Exemple #10
0
 private function isScheduleThroughNow(Ess_M2ePro_Model_ListingsProducts $listingProduct)
 {
     $dateEnd = $listingProduct->getEbayEndDate();
     if (is_null($dateEnd) || $dateEnd == '') {
         return false;
     }
     $interval = 60;
     $metric = $listingProduct->getSynchronizationTemplate()->getRelistSheduleThroughMetric();
     $value = (int) $listingProduct->getSynchronizationTemplate()->getRelistSheduleThroughValue();
     if ($metric == Ess_M2ePro_Model_SynchronizationsTemplates::RELIST_SCHEDULE_THROUGH_METRIC_DAYS) {
         $interval = 60 * 60 * 24;
     }
     if ($metric == Ess_M2ePro_Model_SynchronizationsTemplates::RELIST_SCHEDULE_THROUGH_METRIC_HOURS) {
         $interval = 60 * 60;
     }
     if ($metric == Ess_M2ePro_Model_SynchronizationsTemplates::RELIST_SCHEDULE_THROUGH_METRIC_MINUTES) {
         $interval = 60;
     }
     $interval = $interval * $value;
     $dateEnd = strtotime($dateEnd);
     if (Mage::helper('M2ePro')->getCurrentGmtDate(true) < $dateEnd + $interval) {
         return false;
     }
     return true;
 }