public function setAccount(Ess_M2ePro_Model_Accounts $account)
 {
     if (!$account->getId()) {
         throw new Exception('Account does not exist.');
     }
     $this->_account = $account;
     return $this;
 }
Example #2
0
 public function process()
 {
     if (!is_null($this->marketplace)) {
         $this->requestExtraData['marketplace'] = $this->marketplace->getId();
     }
     if (!is_null($this->account)) {
         $this->requestExtraData['account'] = $this->account->getServerHash();
     }
     if (!is_null($this->mode)) {
         $this->requestExtraData['mode'] = $this->mode;
     }
     return parent::process();
 }
Example #3
0
 private function _prepareForInsert($item, Ess_M2ePro_Model_Accounts $account)
 {
     $result = array('id' => Mage::getModel('M2ePro/EbayListings')->load($item['id'], 'ebay_item')->getId(), 'account_id' => (int) $account->getId(), 'marketplace_id' => (int) Mage::getModel('M2ePro/Marketplaces')->load($item['marketplace'], "code")->getId(), 'ebay_item' => (double) $item['id'], 'ebay_price' => (double) $item['currentPrice'], 'ebay_currency' => (string) $item['currency'], 'ebay_title' => (string) $item['title'], 'ebay_qty' => (int) $item['quantity'], 'ebay_qty_sold' => (int) $item['quantitySold'], 'ebay_bids' => (int) $item['bidCount'], 'ebay_start_date' => (string) Mage::helper('M2ePro')->getDate($item['startTime']), 'ebay_end_date' => (string) Mage::helper('M2ePro')->getDate($item['endTime']));
     if ($item['listingType'] == Ess_M2ePro_Model_SellingFormatTemplates::EBAY_LISTING_TYPE_AUCTION) {
         $result['ebay_qty'] = 1;
     }
     if (($item['listingStatus'] == self::EBAY_STATUS_COMPLETED || $item['listingStatus'] == self::EBAY_STATUS_ENDED) && $result['ebay_qty'] == $result['ebay_qty_sold']) {
         $result['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_SOLD;
     } else {
         if ($item['listingStatus'] == self::EBAY_STATUS_COMPLETED) {
             $result['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_STOPPED;
         } else {
             if ($item['listingStatus'] == self::EBAY_STATUS_ENDED) {
                 $result['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_FINISHED;
             } else {
                 if ($item['listingStatus'] == self::EBAY_STATUS_ACTIVE) {
                     $result['status'] = Ess_M2ePro_Model_ListingsProducts::STATUS_LISTED;
                 }
             }
         }
     }
     return $result;
 }
 public static function receiveFeedbacks(Ess_M2ePro_Model_Accounts $account, array $paramsConnector = array())
 {
     // Create connector
     //-----------------------
     $feedbacks = Mage::getModel('M2ePro/Connectors_Ebay_Dispatcher')->processVirtual('feedback', 'get', 'entity', $paramsConnector, 'feedbacks', NULL, $account->getId());
     is_null($feedbacks) && ($feedbacks = array());
     //-----------------------
     // Get and update feedbacks
     //-----------------------
     $countNewFeedbacks = 0;
     foreach ($feedbacks as $feedback) {
         $dbFeedback = array('account_id' => $account->getId(), 'ebay_item_id' => $feedback['item_id'], 'ebay_transaction_id' => $feedback['transaction_id']);
         if ($feedback['item_title'] != '') {
             $dbFeedback['ebay_item_title'] = $feedback['item_title'];
         }
         if ($feedback['from_role'] == self::ROLE_BUYER) {
             $dbFeedback['buyer_name'] = $feedback['user_sender'];
             $dbFeedback['buyer_feedback_id'] = $feedback['id'];
             $dbFeedback['buyer_feedback_text'] = $feedback['info']['text'];
             $dbFeedback['buyer_feedback_date'] = $feedback['info']['date'];
             $dbFeedback['buyer_feedback_type'] = $feedback['info']['type'];
         } else {
             $dbFeedback['seller_feedback_id'] = $feedback['id'];
             $dbFeedback['seller_feedback_text'] = $feedback['info']['text'];
             $dbFeedback['seller_feedback_date'] = $feedback['info']['date'];
             $dbFeedback['seller_feedback_type'] = $feedback['info']['type'];
         }
         $existFeedback = Mage::getModel('M2ePro/Feedbacks')->getCollection()->addFieldToFilter('account_id', $account->getId())->addFieldToFilter('ebay_item_id', $feedback['item_id'])->addFieldToFilter('ebay_transaction_id', $feedback['transaction_id'])->getFirstItem();
         if ($existFeedback->getId()) {
             if ($feedback['from_role'] == self::ROLE_BUYER && !$existFeedback->getData('buyer_feedback_id')) {
                 $countNewFeedbacks++;
             }
             if ($feedback['from_role'] == self::ROLE_SELLER && !$existFeedback->getData('seller_feedback_id')) {
                 $countNewFeedbacks++;
             }
             $existFeedback->addData($dbFeedback);
         } else {
             $existFeedback->setData($dbFeedback);
             $countNewFeedbacks++;
         }
         $existFeedback->save();
     }
     //-----------------------
     return array('total' => count($feedbacks), 'new' => $countNewFeedbacks);
 }
Example #5
0
 private function getResponseBody(Ess_M2ePro_Model_Accounts $account)
 {
     if ($account->isFeedbacksAutoResponseCycled()) {
         $lastUsedId = 0;
         if ($account->getFeedbacksLastUsedId() != null) {
             $lastUsedId = (int) $account->getFeedbacksLastUsedId();
         }
         $feedbackTemplatesIds = Mage::getModel('M2ePro/FeedbacksTemplates')->getCollection()->addFieldToFilter('account_id', $account->getId())->setOrder('id', 'ASC')->getAllIds();
         if (!count($feedbackTemplatesIds)) {
             return '';
         }
         $feedbackTemplate = Mage::getModel('M2ePro/FeedbacksTemplates');
         if (max($feedbackTemplatesIds) > $lastUsedId) {
             foreach ($feedbackTemplatesIds as $templateId) {
                 if ($templateId <= $lastUsedId) {
                     continue;
                 }
                 $feedbackTemplate->load($templateId);
                 break;
             }
         } else {
             $feedbackTemplate->load(min($feedbackTemplatesIds));
         }
         if (!$feedbackTemplate->getId()) {
             return '';
         }
         $account->setData('feedbacks_last_used_id', $feedbackTemplate->getId())->save();
         return $feedbackTemplate->getBody();
     }
     if ($account->isFeedbacksAutoResponseRandom()) {
         $feedbackTemplatesIds = Mage::getModel('M2ePro/FeedbacksTemplates')->getCollection()->addFieldToFilter('account_id', $account->getId())->getAllIds();
         if (!count($feedbackTemplatesIds)) {
             return '';
         }
         $index = rand(0, count($feedbackTemplatesIds) - 1);
         $feedbackTemplate = Mage::getModel('M2ePro/FeedbacksTemplates')->load($feedbackTemplatesIds[$index]);
         if (!$feedbackTemplate->getId()) {
             return '';
         }
         return $feedbackTemplate->getBody();
     }
     return '';
 }
 public static function receiveMessages(Ess_M2ePro_Model_Accounts $account, array $paramsConnector = array())
 {
     // Create connector
     //-----------------------
     $messages = Mage::getModel('M2ePro/Connectors_Ebay_Dispatcher')->processVirtual('message', 'get', 'memberList', $paramsConnector, 'messages', NULL, $account->getId());
     is_null($messages) && ($messages = array());
     //-----------------------
     // Get new messages
     //-----------------------
     $countNewMessages = 0;
     foreach ($messages as $message) {
         $dbMessage = array('account_id' => $account->getId(), 'ebay_item_id' => $message['item_id'], 'ebay_item_title' => $message['item_title'], 'sender_name' => $message['sender_name'], 'message_id' => $message['id'], 'message_subject' => $message['subject'], 'message_text' => $message['body'], 'message_date' => $message['creation_date'], 'message_type' => $message['type']);
         if (isset($message['responses'])) {
             $dbMessage['message_responses'] = json_encode($message['responses'], JSON_FORCE_OBJECT);
         }
         $existMessage = Mage::getModel('M2ePro/Messages')->getCollection()->addFieldToFilter('message_id', $message['id'])->toArray();
         $tempModel = Mage::getModel('M2ePro/Messages');
         if (count($existMessage['items']) != 0) {
             $tempModel->setId($existMessage['items'][0]['id']);
         } else {
             $countNewMessages++;
         }
         $tempModel->addData($dbMessage)->save();
     }
     //-----------------------
     return array('new' => $countNewMessages, 'total' => count($messages));
 }
Example #7
0
 protected function processAccount(Ess_M2ePro_Model_Accounts $account, $percentsForAccount)
 {
     $this->_profiler->addEol();
     $this->_profiler->addTitle('Starting account "' . $account->getData('title') . '"');
     $this->_profiler->addEol();
     $this->_profiler->addTimePoint(__METHOD__ . 'get' . $account->getData('id'), 'Get orders from eBay');
     $tempString = str_replace('%acc%', $account->getTitle(), Mage::helper('M2ePro')->__('Task "Orders Synchronization" for eBay account: "%acc%" is started. Please wait...'));
     $this->_lockItem->setStatus($tempString);
     $currentPercent = $this->_lockItem->getPercents();
     // Get since time
     //---------------------------
     $lastSinceTime = $this->_getEbayCheckSinceTime();
     //---------------------------
     // Get orders from ebay
     //---------------------------
     $request = array('account' => $account->getServerHash(), 'last_update' => $lastSinceTime);
     $response = Mage::getModel('M2ePro/Connectors_Ebay_Dispatcher')->processVirtual('sales', 'get', 'list', $request);
     $ebayOrders = array();
     $lastSuccessTime = $lastSinceTime;
     if (isset($response['sales']) && isset($response['updated_to'])) {
         $ebayOrders = $response['sales'];
         $lastSuccessTime = $response['updated_to'];
     }
     if (count($ebayOrders) <= 0) {
         return $lastSuccessTime;
     }
     //---------------------------
     $currentPercent = $currentPercent + $percentsForAccount * 0.15;
     $this->_lockItem->setPercents($currentPercent);
     $this->_lockItem->activate();
     $this->_profiler->saveTimePoint(__METHOD__ . 'get' . $account->getData('id'));
     $this->_profiler->addTitle('Total count orders received from eBay: ' . count($ebayOrders));
     $this->_profiler->addTimePoint(__METHOD__ . 'process' . $account['id'], 'Processing received orders from eBay');
     $tempString = str_replace('%acc%', $account['title'], Mage::helper('M2ePro')->__('Task "Orders Synchronization" for eBay account: "%acc%" is in data processing state. Please wait...'));
     $this->_lockItem->setStatus($tempString);
     // Save eBay orders
     //---------------------------
     $orders = array();
     foreach ($ebayOrders as $ebayOrderData) {
         /** @var $ebayOrder Ess_M2ePro_Model_Orders_Ebay_Order */
         $ebayOrder = Mage::getModel('M2ePro/Orders_Ebay_Order');
         $ebayOrder->setAccount($account);
         $ebayOrder->initialize($ebayOrderData);
         $result = $ebayOrder->process();
         if ($result) {
             $orders[] = $result;
         }
     }
     //---------------------------
     if (!count($orders)) {
         return $lastSuccessTime;
     }
     $currentPercent = $currentPercent + $percentsForAccount * 0.05;
     $this->_lockItem->setPercents($currentPercent);
     $this->_lockItem->activate();
     $this->_profiler->saveTimePoint(__METHOD__ . 'process' . $account->getData('id'));
     $this->_profiler->addEol();
     $this->_profiler->addTimePoint(__METHOD__ . 'magento_orders_process' . $account['id'], 'Creating magento orders');
     $tempString = str_replace('%acc%', $account['title'], Mage::helper('M2ePro')->__('Task "Orders Synchronization" for eBay account: "%acc%" is in order creation state.. Please wait...'));
     $this->_lockItem->setStatus($tempString);
     // Create magento orders
     //---------------------------
     $magentoOrders = 0;
     $paymentTransactions = 0;
     $invoices = 0;
     $shipments = 0;
     $percentPerOrder = floor(($percentsForAccount - $currentPercent) / count($orders));
     foreach ($orders as $order) {
         /** @var $order Ess_M2ePro_Model_Orders_Order */
         $order->createMagentoOrder() && $magentoOrders++;
         $order->createPaymentTransactionForMagentoOrder() && $paymentTransactions++;
         $order->createInvoiceForMagentoOrder() && $invoices++;
         $order->createShipmentForMagentoOrder() && $shipments++;
         $currentPercent = $currentPercent + $percentPerOrder;
         $this->_lockItem->setPercents($currentPercent);
         $this->_lockItem->activate();
     }
     //---------------------------
     $this->_profiler->saveTimePoint(__METHOD__ . 'magento_orders_process' . $account->getData('id'));
     $this->_profiler->addTitle('Total count magento orders created: ' . $magentoOrders);
     $this->_profiler->addTitle('Total count payment transactions created: ' . $paymentTransactions);
     $this->_profiler->addTitle('Total count invoices created: ' . $invoices);
     $this->_profiler->addTitle('Total count shipments created: ' . $shipments);
     $this->_profiler->addEol();
     $this->_profiler->addTitle('End account "' . $account->getData('title') . '"');
     return $lastSuccessTime;
 }