/** * Get purchase_list * Get a list of products that needs to be delivered and are not in stock * * @access public * @return array $products */ public function get_purchase_list() { $delivery_items = \Skeleton\Package\Delivery\Item::get_undelivered(); $to_deliver = []; foreach ($delivery_items as $delivery_item) { if (!isset($to_deliver[$delivery_item->deliverable_object_classname . '-' . $delivery_item->deliverable_object_id])) { $to_deliver[$delivery_item->deliverable_object_classname . '-' . $delivery_item->deliverable_object_id] = 0; } $to_deliver[$delivery_item->deliverable_object_classname . '-' . $delivery_item->deliverable_object_id]++; } foreach ($this->get_backorder() as $purchase_order_item) { $product = $purchase_order_item->get_stock_object(); if (!isset($to_deliver[get_class($product) . '-' . $product->id])) { continue; } $backordered = $purchase_order_item->amount - $purchase_order_item->delivered; $to_deliver[get_class($product) . '-' . $product->id] -= $backordered; if ($to_deliver[get_class($product) . '-' . $product->id] < 0) { unset($to_deliver[get_class($product) . '-' . $product->id]); } } $purchase_list = []; foreach ($to_deliver as $key => $count) { list($classname, $id) = explode('-', $key); $class = $classname::get_by_id($id); $supplier = self::get_for_object($class); if ($supplier === null) { continue; } if ($supplier->id != $this->id) { continue; } $stock = Stock::get($class); if ($stock > $count) { continue; } $to_deliver_count = $count - $stock; for ($i = 1; $i <= $to_deliver_count; $i++) { $purchase_list[] = $class; } } return $purchase_list; }
/** * validate shipment * * @access public */ public function display_validate_shipment() { $delivery_id = $_POST['delivery_id']; $form = parse_str($_POST['form'], $_POST); $shipment = new Shipment(); $shipment->delivery_id = $delivery_id; if ($_POST['address_input'] == 'manual') { unset($_POST['shipment']['street']); unset($_POST['shipment']['housenumber']); } else { unset($_POST['shipment']['line1']); unset($_POST['shipment']['line2']); unset($_POST['shipment']['line3']); } if (isset($_POST['shipment']['courier'])) { list($courier_object_classname, $courier_object_id) = explode('/', $_POST['shipment']['courier']); $_POST['shipment']['courier_object_classname'] = $courier_object_classname; $_POST['shipment']['courier_object_id'] = $courier_object_id; unset($_POST['shipment']['courier']); } $shipment->load_array($_POST['shipment']); $validated = true; if (!$shipment->validate($shipment_errors)) { $validated = false; } $total_items = 0; $shipment_item_errors = []; if (isset($_POST['shipment_item'])) { foreach ($_POST['shipment_item'] as $deliverable_object_classname => $array) { foreach ($array as $deliverable_object_id => $values) { $total_items += $values['to_ship']; if (!class_exists('\\Skeleton\\Package\\Stock\\Stock')) { continue; } $object = $deliverable_object_classname::get_by_id($deliverable_object_id); $stock = \Skeleton\Package\Stock\Stock::get($object); if ($stock < $values['to_ship']) { $shipment_item_errors[] = 'stock_error'; $validated = false; } } } } if ($total_items <= 0) { $shipment_item_errors[] = 'no products shipped'; $validated = false; } $result = ['shipment_errors' => $shipment_errors, 'shipment_item_errors' => $shipment_item_errors, 'validated' => $validated]; echo json_encode($result); $this->template = false; }
/** * Get overview * This function is used to show an overview of the items to be shipped * * @access public * @return array $delivery_items_overview */ public function get_overview() { $items = $this->get_delivery_items(); $result = []; foreach ($items as $item) { $deliverable = $item->get_deliverable(); if (!isset($result[$deliverable->id])) { $result[$deliverable->id] = ['deliverable' => $deliverable, 'shipped' => 0, 'total' => 0]; if (class_exists('\\Skeleton\\Package\\Stock\\Stock')) { $result[$deliverable->id]['stock'] = \Skeleton\Package\Stock\Stock::get($deliverable); } } $result[$deliverable->id]['total']++; if ($item->shipment_item_id != 0) { $result[$deliverable->id]['shipped']++; } } return $result; }