options = new AmzFulfillment_Options(); } /** * createEvent * * @param string $event * @param int $orderId */ public function createEvent($event, $orderId) { if(!AmzFulfillment_Core::instance()->getWooCommerce()->existOrder($orderId)) { return; } if(!array_key_exists($event, AmzFulfillment_Event::$events)) { $message = sprintf('Event with invalid event id: %s', $event); AmzFulfillment_Core::instance()->getLog()->add($message); AmzFulfillment_Core::debug($message); return; } $eventName = AmzFulfillment_Event::$events[$event]['name']; $eventGroup = AmzFulfillment_Event::$events[$event]['group']; $message = sprintf('Order %d status update: %s', $orderId, $eventName); AmzFulfillment_Core::instance()->getLog()->add($message); if(!AmzFulfillment_Core::instance()->getFeature()->hasPro()) { return; } $this->options->load(); if(!$this->options->getAutomation()) { return; } if($eventGroup != 'WooCommerce') { AmzFulfillment_Core::instance()->getWooCommerce()->addNote($orderId, $eventGroup . ': ' . $eventName); } foreach($this->getActions($event) as $action) { $this->doAction($action, $orderId, $eventName); } } /** * getActions * * @param string $event * @return string[] */ private function getActions($event) { $rules = new AmzFulfillment_Rules(); $rules->load(); return $rules->getActions($event); } /** * doAction * * @param string $action * @param int $orderId */ private function doAction($action, $orderId, $eventName) { if(!array_key_exists($action, AmzFulfillment_Action::$actions)) { $message = sprintf("Rule with invalid action '%s'", $action); AmzFulfillment_Core::instance()->getLog()->add($message); AmzFulfillment_Core::debug($message); return; } if(!AmzFulfillment_Core::instance()->getWooCommerce()->existOrder($orderId)) { return; } $actionName = AmzFulfillment_Action::$actions[$action]['name']; try { switch($action) { case AmzFulfillment_Action::WOOCOMMERCE_ORDER_PENDING: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::PENDING); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_PROCESSING: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::PROCESSING); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_ONHOLD: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::ONHOLD); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_COMPLETED: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::COMPLETED); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_CANCELLED: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::CANCELLED); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_REFUNDED: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::REFOUNDED); break; case AmzFulfillment_Action::WOOCOMMERCE_ORDER_FAILED: AmzFulfillment_Core::instance()->getWooCommerce()->setStatus($orderId, AmzFulfillment_WooCommerceStatus::FAILED); break; case AmzFulfillment_Action::AMAZON_FULFILLMENT_CREATE: AmzFulfillment_Core::instance()->doAmazonFulfillment($orderId); break; case AmzFulfillment_Action::AMAZON_FULFILLMENT_CANCEL: AmzFulfillment_Core::instance()->cancelAmazonFulfillment($orderId); break; case AmzFulfillment_Action::MAIL_NOTIFY: AmzFulfillment_Core::instance()->sendNotification('Order has changed', sprintf('Order %d has changed: %s', $orderId, $eventName)); break; } AmzFulfillment_Core::instance()->getLog()->add(sprintf("Triggered action '%s' for order %d", $actionName, $orderId)); } catch(Exception $e) { $message = sprintf("Error while executing action '%s' for order %d. Error: %s", $actionName, $orderId, $e->getMessage()); AmzFulfillment_Core::instance()->getLog()->add($message); AmzFulfillment_Core::debug($message); } } }