/** * Queue a shipment for net suite * * @param OrderShipment $Model * @param null $priority * @param null $delay * @param $id * @param array $payload * @return bool */ public function queueForNetSuite(OrderShipment $Model, $priority = null, $delay = null, $id = null, $payload = []) { if (empty($id)) { $id = $Model->id; } if ($delay != null) { $this->delay_seconds = $delay; } /** * Queue Order in SQS for post purchase modifications */ if (Sqs::useQueue()) { /** * Queue For NetSuite */ $sqs = new Sqs(Sqs::queueUrl('ns_export_shipments_queue')); $sqs->sendJSON(['id' => $id, 'name' => 'Shipment', 'delay_seconds' => $this->delay_seconds, 'payload' => $payload, 'timeout' => 30.0, 'created' => date("Y-m-d H:i:s")], $this->delay_seconds, $priority); } return $Model->saveField('order_shipment_status_id', OrderShipmentStatus::PROCESSING); }
/** * Close a shipment * * @param OrderShipment $Model * @param null $id * @param null $snap_shipment * @param null $date_created * @return bool * @throws Exception */ public function closeShipment(OrderShipment $Model, $id = null, $snap_shipment = null, $date_created = null) { if (empty($id)) { $id = $Model->id; } if (empty($snap_shipment)) { throw new Exception('No Snap Shipment'); } $this->User = ClassRegistry::init('User'); $now = new DateTime(); $is_backorder = FALSE; $charm_order = FALSE; $order_shipment = $Model->find('first', ['contain' => ['Order' => ['OrderCustomer' => ['Email']], 'OrderItem'], 'conditions' => ['OrderShipment.id' => $id]]); foreach ($order_shipment['OrderShipment']['OrderItem'] as $item) { if ($item['order_item_type_id'] == OrderItemType::TYPE_BACK_ORDER) { $is_backorder = TRUE; } } if ($order_shipment['Order']['order_type_id'] == Order::TYPE_CHARM) { $charm_order = TRUE; } $shipment_tracking_number = $order_shipment['OrderShipment']['tracking_number']; $shipment_date_shipped = $order_shipment['OrderShipment']['date_shipped']; /** @noinspection PhpUndefinedFieldInspection */ $snap_tracking_number = $snap_shipment->CarrierTrackingNumber; /** @noinspection PhpUndefinedFieldInspection */ $snap_shipping_method = $snap_shipment->ShippingMethod; /** @noinspection PhpUndefinedFieldInspection */ $snap_date_closed = $snap_shipment->DateClosed; /** @noinspection PhpUndefinedFieldInspection */ $snap_customer_name = $snap_shipment->CustomerName; /** @noinspection PhpUndefinedFieldInspection */ $snap_order_id = $snap_shipment->CustomerRef; $order_status_id = $order_shipment['Order']['order_status_id']; $country_id = $order_shipment['OrderShipment']['country_id']; $user_id = $order_shipment['Order']['user_id']; $email = $order_shipment['Order']['OrderCustomer']['Email']['email']; if (empty($shipment_tracking_number) && empty($shipment_date_shipped)) { $Model->saveField("tracking_number", $snap_tracking_number); $Model->saveField("carrier", $snap_shipping_method); $Model->saveField("date_shipped", $snap_date_closed); $Model->saveField('order_shipment_status_id', OrderShipmentStatus::FULFILLED); } //to try to avoid sending too many emails, check the order status. $notification_date_obj = new DateTime($date_created); $interval = $now->diff($notification_date_obj); if ($interval->days >= 2) { return true; } if ($order_status_id == Order::STATUS_SHIPPED && !$is_backorder && $interval->days >= 2) { return true; } if ($snap_tracking_number && $snap_shipping_method) { $tracking_url = $Model->getTrackingLink($snap_tracking_number, $snap_shipping_method); } else { $tracking_url = ''; } if (!$charm_order) { /** @noinspection PhpUndefinedFieldInspection */ $email_data = ["name" => $snap_customer_name, "order_id" => $snap_order_id, "tracking_number" => $snap_shipment->CarrierTrackingNumber, "tracking_url" => $tracking_url, "country_id" => $country_id]; $userLocale = $this->User->userLocale($user_id); $usable_userLocale = empty($userLocale['User']['locale']) ? 'en_US' : $userLocale['User']['locale']; if (!empty($email)) { YouniqueEmail::queueEmail($email_data, 'en_us_tracking_numbers', $email, 'email order tracking', 'purchase-page', $usable_userLocale); } } return true; }