/** * 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; }
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); } }