/**
  * Execute back order restock task
  */
 public function execute()
 {
     if (!empty($this->args[0])) {
         $this->sku = $this->args[0];
     }
     if (!empty($this->args[1])) {
         $this->date = $this->args[1];
     }
     if (!empty($this->args[2])) {
         $this->sku_quantity = $this->args[2];
     }
     if (!empty($this->args[3])) {
         $this->warehouse = $this->args[3];
     }
     if (isset($this->args[4])) {
         $this->send_email = $this->args[4];
     }
     if (!empty($this->args[5])) {
         $this->second_date = $this->args[5];
     }
     if (!empty($this->args[6])) {
         $this->second_sku_quantity = $this->args[6];
     }
     $options = ['sku' => $this->sku, 'warehouse' => $this->warehouse, 'date' => $this->date, 'second_date' => $this->second_date, 'second_sku_quantity' => $this->second_sku_quantity, 'sku_quantity' => $this->sku_quantity, 'send_email' => $this->send_email];
     $this->api = new BackOrderRestock($options);
     /**
      * Execute and send return to output
      */
     $results = $this->api->execute();
     $this->out($results['output'], 1, Shell::NORMAL);
 }
 /**
  * Test Restock with a partial backorder
  */
 public function testRestockPartialBackorder()
 {
     $this->test_order = new TestOrder(['database' => 'test', 'items' => [['qty' => 10, 'sku' => 'US-11803-02'], ['qty' => 3, 'sku' => 'US-11101-02']]]);
     $this->test_order->create_test_order();
     $result = $this->back_order_restock->execute();
     $this->assertTrue($result['success']);
 }
 /**
  * This method retrieves the Inventory Watchlist page data from the DB, formats it for the front-end, and (optionally) translates it for the locale.
  * @param array $warehouseIds Default: array( 1,4 )
  * @param string $locale Default: en_US
  * @return boolean|array
  * @see ItemAvailabilityTimes::getInventoryWatchlistItems()
  * @see ProductsController::$itemAvailabilityIdToInventoryWatchlistIndividualStatus
  * @see ProductsController::$itemAvailabilityIdToInventoryWatchlistCollectionStatus
  * @see BackOrderRestock::getItemName()
  */
 protected function processInventoryWatchlistItems(array $warehouseIds = array(1), $locale = 'en_US')
 {
     $return = false;
     $locale = trim((string) $locale);
     if (count($warehouseIds) && !empty($locale)) {
         // Validate Passed Parameters
         $backOrderRestockObject = new BackOrderRestock();
         $return = array();
         foreach ($this->ItemAvailabilityTimes->getInventoryWatchlistItems($warehouseIds) as $currentItem) {
             // Loop through Inventory Watchlist Items
             $backOrderRestockObject->sku = $currentItem['Item']['sku'];
             $currentItemTranslatedName = $backOrderRestockObject->getItemName($locale);
             $currentProductName = is_array($currentItemTranslatedName) && !empty($currentItemTranslatedName['Item']['name']) ? $currentItemTranslatedName['Item']['name'] : $currentItem['Item']['name'];
             if ($this->ItemsItems->find('count', array('conditions' => array('child_item_id' => $currentItem['Item']['id']))) > 0) {
                 // Verify if Collection Status Required
                 $currentCollectionStatus = $this->itemAvailabilityIdToInventoryWatchlistCollectionStatus[$currentItem['ItemAvailabilityTimes']['item_availability_id']];
             } else {
                 // Middle of Verify if Collection Status Required
                 $currentCollectionStatus = 'NA';
             }
             // End of Verify if Collection Status Required
             if (in_array($currentItem['Item']['sku'], array('US-11405-01', 'US-11405-02', 'US-11405-03'))) {
                 // Hard-Coded SKUs with NO Collection Status -- Remove for Phase 2
                 $currentCollectionStatus = 'NA';
                 // @todo Remove this hard-coded block in Phase 2 - https://younique.attask-ondemand.com/task/view?ID=572a6a5b007df7a5df643924d8a46216
             }
             // End of Hard-Coded SKUs with NO Collection Status -- Remove for Phase 2
             $currentItemEstimatedDate = strtotime($currentItem['ItemAvailabilityTimes']['estimated_date']);
             $currentReturnItem = array('sku' => $currentItem['Item']['sku'], 'product' => $currentProductName, 'individual_status' => $this->itemAvailabilityIdToInventoryWatchlistIndividualStatus[$currentItem['ItemAvailabilityTimes']['item_availability_id']], 'collection_status' => $currentCollectionStatus, 'restock_date' => false !== $currentItemEstimatedDate ? date('m/j/Y', $currentItemEstimatedDate) : null, 'restock_date_unixtime' => false !== $currentItemEstimatedDate ? $currentItemEstimatedDate : null);
             $return[] = $currentReturnItem;
         }
         // End of Loop through Inventory Watchlist Items
     }
     // End of Validate Passed Parameters
     return $return;
 }
Пример #4
0
 public function concession()
 {
     $data = [['order_id' => 6770383, 'order_shipment_id' => 7860154, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6802456, 'order_shipment_id' => 7862061, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6811037, 'order_shipment_id' => 7862606, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6814970, 'order_shipment_id' => 7865608, 'order_market_id' => 3, 'price' => 38], ['order_id' => 6820057, 'order_shipment_id' => 7865838, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6830149, 'order_shipment_id' => 7866212, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6839322, 'order_shipment_id' => 7866739, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6839542, 'order_shipment_id' => 7866753, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6845260, 'order_shipment_id' => 7867024, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6845375, 'order_shipment_id' => 7867037, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6845649, 'order_shipment_id' => 7867048, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6845791, 'order_shipment_id' => 7867056, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6855142, 'order_shipment_id' => 7867541, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6863932, 'order_shipment_id' => 7867973, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6865930, 'order_shipment_id' => 7868055, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6866113, 'order_shipment_id' => 7868063, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6866235, 'order_shipment_id' => 7868072, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6871579, 'order_shipment_id' => 7868314, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6873993, 'order_shipment_id' => 7868413, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6883414, 'order_shipment_id' => 7868925, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6898254, 'order_shipment_id' => 7869706, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6901295, 'order_shipment_id' => 7869840, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6903634, 'order_shipment_id' => 7869965, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6914740, 'order_shipment_id' => 7870454, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6925299, 'order_shipment_id' => 7870968, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6969158, 'order_shipment_id' => 7872185, 'order_market_id' => 1, 'price' => 29], ['order_id' => 6992063, 'order_shipment_id' => 7872942, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7006051, 'order_shipment_id' => 7873344, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7006249, 'order_shipment_id' => 7873350, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7011287, 'order_shipment_id' => 7873472, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7012180, 'order_shipment_id' => 7873496, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7068887, 'order_shipment_id' => 7877466, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7070206, 'order_shipment_id' => 7877529, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7098672, 'order_shipment_id' => 7878617, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7100246, 'order_shipment_id' => 7878676, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7105488, 'order_shipment_id' => 7878889, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7130251, 'order_shipment_id' => 7879659, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7131487, 'order_shipment_id' => 7879685, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7209153, 'order_shipment_id' => 7881878, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7212063, 'order_shipment_id' => 7881949, 'order_market_id' => 2, 'price' => 35], ['order_id' => 7213893, 'order_shipment_id' => 7882001, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7225310, 'order_shipment_id' => 7882431, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7261875, 'order_shipment_id' => 7883655, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7267563, 'order_shipment_id' => 7883887, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7268260, 'order_shipment_id' => 7883926, 'order_market_id' => 1, 'price' => 29], ['order_id' => 7286594, 'order_shipment_id' => 7884528, 'order_market_id' => 2, 'price' => 35]];
     App::uses('BackOrderRestock', 'Lib');
     foreach ($data as $line) {
         $this->hr();
         $this->Order = ClassRegistry::init('Order');
         $this->OrderItem = ClassRegistry::init('OrderItem');
         $this->OrderShipment = ClassRegistry::init('OrderShipment');
         $this->OrderShipmentPackage = ClassRegistry::init("OrderShipmentPackage");
         $this->OrderShipmentItem = ClassRegistry::init("OrderShipmentItem");
         $this->ProductCredit = ClassRegistry::init('ProductCredit');
         $this->UserNote = ClassRegistry::init('UserNote');
         $oid = $line['order_id'];
         $sid = $line['order_shipment_id'];
         $omid = $line['order_market_id'];
         $price = $line['price'];
         $shipment_query = "\r\nselect *\r\nfrom order_shipments os\r\njoin orders o\r\n    on o.id= os.order_id\r\nleft join order_shipment_packages osp on osp.order_shipment_id = os.id\r\nleft join order_shipment_items osi\r\n    on osi.order_shipment_id = os.id\r\nleft join order_items oi\r\n    on oi.id = osi.order_item_id\r\nleft join items i\r\n    on i.id = oi.item_id\r\nleft JOIN item_availability_times iat\r\n    ON iat.item_id = i.id\r\n    AND iat.start_date < o.date_completed\r\n    AND (iat.end_date IS NULL\r\n    OR iat.end_date > o.date_completed)\r\n    AND iat.ns_warehouse_id = CASE o.order_market_id\r\n        WHEN 1 THEN 1\r\n        WHEN 2 THEN 1\r\n        WHEN 3 THEN 1\r\n        WHEN 4 THEN 1\r\n        WHEN 5 THEN 2\r\n        WHEN 6 THEN 3\r\n        WHEN 7 THEN 2\r\n    END\r\nwhere os.id = {$sid}\r\n                ";
         $shipment_item = $this->OrderShipment->query($shipment_query);
         $this->OrderShipment->clear();
         $this->OrderShipmentPackage->clear();
         $this->OrderShipmentItem->clear();
         $this->OrderItem->clear();
         // db values
         $o_pid = $shipment_item[0]['o']['presenter_id'];
         $o_uid = $shipment_item[0]['o']['user_id'];
         $os_id = $shipment_item[0]['os']['id'];
         $os_date_shipped = $shipment_item[0]['os']['date_shipped'];
         $os_carrier = $shipment_item[0]['os']['carrier'];
         $os_tracking = $shipment_item[0]['os']['tracking_number'];
         $osp_id = $shipment_item[0]['osp']['id'];
         $osp_carrier = $shipment_item[0]['osp']['carrier'];
         $osp_tracking = $shipment_item[0]['osp']['tracking_number'];
         $oi_id = $shipment_item[0]['oi']['id'];
         $oi_qty = $shipment_item[0]['oi']['quantity'];
         $oi_status = $shipment_item[0]['oi']['order_item_hold_code_id'];
         $oi_parent_id = $shipment_item[0]['oi']['parent_id'];
         $osi_id = $shipment_item[0]['osi']['id'];
         $osi_status = $shipment_item[0]['osi']['order_item_status'];
         $item_name = $shipment_item[0]['i']['name'];
         $item_sku = $shipment_item[0]['i']['sku'];
         $order_market_id = $shipment_item[0]['o']['order_market_id'];
         $restock_date = $shipment_item[0]['iat']['estimated_date'];
         $this->OrderShipment->id = $os_id;
         $this->OrderShipmentPackage->id = $osp_id;
         $this->OrderShipmentItem->id = $osi_id;
         $this->OrderItem->id = $oi_id;
         $this->out("<info>O: {$oid} OS: {$os_id} OSP: {$osp_id} OSI: {$osi_id}</info>");
         // check for empty shippments
         if (is_null($oi_id)) {
             $this->OrderShipment->saveField('tracking_number', NULL);
             $this->OrderShipment->saveField('date_shipped', NULL);
             $this->OrderShipment->saveField('carrier', NULL);
             $this->OrderShipment->saveField('order_shipment_status_id', OrderShipment::TYPE_UNSHIPPABLE);
             $this->OrderShipmentPackage->saveField("tracking_number", NULL);
             $this->OrderShipmentPackage->saveField("carrier", NULL);
             $this->out("Empty shipment");
             continue;
         }
         //check if it's in a prekit
         if (!is_null($oi_parent_id)) {
             $parent_oi_record = $this->OrderItem->findById($oi_parent_id);
             if ($parent_oi_record['OrderItem']['item_id'] == 682) {
                 $this->out("Prekit - resetting BO status");
                 // remove backorder
                 $original_shipment_id = $parent_oi_record['OrderItem']['order_shipment_id'];
                 $this->OrderItem->saveField('order_shipment_id', $original_shipment_id);
                 $this->OrderShipmentItem->saveField('order_shipment_id', $original_shipment_id);
                 $this->OrderShipment->saveField('tracking_number', NULL);
                 $this->OrderShipment->saveField('date_shipped', NULL);
                 $this->OrderShipment->saveField('carrier', NULL);
                 $this->OrderShipment->saveField('order_shipment_status_id', OrderShipment::TYPE_PREKIT_RESET);
                 $this->OrderShipmentPackage->saveField("tracking_number", NULL);
                 $this->OrderShipmentPackage->saveField("carrier", NULL);
                 //add user note
                 $this->UserNote->clear();
                 $this->UserNote->save(['user_id' => $o_uid, 'note' => "Backorder removed. Item in prekit so it was already shipped", 'reference_type' => 'order', 'reference_id' => $oid, 'user_note_status' => 'normal', 'admin_user_id' => 584]);
                 $this->out("Note added: " . $oid);
                 continue;
             }
         }
         // reset backorder status
         if (empty($restock_date)) {
             $restock_date = "2016-01-15 00:00:00";
             $this->out("No restock date");
         }
         $options = ["date" => $restock_date, "sku_quantity" => 1000];
         $order_item_restock = new BackOrderRestock($options);
         $order = ['OrderItem' => ['quantity' => $oi_qty, 'id' => $oi_id], 'Order' => ['id' => $oid]];
         $order_item_restock->setRestockForOrder($order);
         $this->out("Restock reset");
         // reset remove the link to the shipment on the order_items and order_shipment_items records
         $this->OrderItem->saveField('order_shipment_id', NULL);
         $this->out("OrderItem updated");
         $this->OrderShipmentItem->saveField('order_shipment_id', NULL);
         $this->OrderShipmentItem->saveField('order_item_status', OrderShipmentItem::STATUS_ON_BCKORDR);
         $this->out("OrderShipmentItem updated");
         $this->OrderShipment->saveField('order_shipment_status_id', OrderShipment::TYPE_BACKORDER_RESET);
         $this->out("<error>Item reset for backorder</error>");
         //update the shipment status to dead - 11
         $this->OrderShipment->saveField('tracking_number', NULL);
         $this->OrderShipment->saveField('date_shipped', NULL);
         $this->OrderShipment->saveField('carrier', NULL);
         $this->out("OrderShipment updated");
         $this->OrderShipmentPackage->saveField("tracking_number", NULL);
         $this->OrderShipmentPackage->saveField("carrier", NULL);
         $this->out("OrderShipmentPackage updated");
         // add ycash
         if ($price > 0) {
             $this->ProductCredit->credit(ProductCredit::METHOD_SYSTEM, ProductCredit::TYPE_CONCESSION, $omid, $o_pid, $o_uid, Money::fromString($price), "shipping concession:missing backorders 2016-01-15", $oid);
             $this->out("Ycash paid: " . $price);
         }
         //add user note
         $this->UserNote->clear();
         $this->UserNote->save(['user_id' => $o_uid, 'note' => "Ycash ({$price}) added for missed backorder ({$sid}) reset to backorder on 2016-01-15", 'reference_type' => 'order', 'reference_id' => $oid, 'user_note_status' => 'normal', 'admin_user_id' => 584]);
         $this->out("Note added: " . $oid);
     }
 }