/**
  * Edit stock for product
  *
  * @access public
  */
 public function display_edit()
 {
     parent::display_edit();
     $template = Template::get();
     $classname = \Skeleton\Package\Stock\Config::$object_stock_interface;
     $product = $classname::get_by_id($_GET['id']);
     if (isset($_POST['product_supplier_id'])) {
         try {
             $product_supplier = \Skeleton\Package\Stock\Supplier::get_by_id($_POST['product_supplier_id']);
             \Skeleton\Package\Stock\Supplier::set_for_object($product, $product_supplier);
         } catch (\Exception $e) {
             $product_supplier = null;
             \Skeleton\Package\Stock\Supplier::set_for_object($product);
         }
         Session::set_sticky('updated', true);
         Session::redirect($this->get_module_path() . '?action=edit&id=' . $product->id);
     }
     $suppliers = \Skeleton\Package\Stock\Supplier::get_all();
     $template->assign('suppliers', $suppliers);
     $supplier = \Skeleton\Package\Stock\Supplier::get_for_object($product);
     $template->assign('product_supplier', $supplier);
     try {
         $stock = \Skeleton\Package\Stock\Stock::get_last_by_object($product);
         $template->assign('stock', $stock->total);
     } catch (\Exception $e) {
         $template->assign('stock', 0);
     }
     $backorder = \Skeleton\Package\Stock\Purchase\Order\Item::get_backorder($product);
     $template->assign('backorder', $backorder);
     $count_backorder = \Skeleton\Package\Stock\Purchase\Order\Item::count_backorder($product);
     $template->assign('count_backorder', $count_backorder);
     if (class_exists('\\Skeleton\\Package\\Delivery\\Item')) {
         $to_deliver = \Skeleton\Package\Delivery\Item::get_undelivered_by_deliverable($product);
         $to_deliver_overview = [];
         foreach ($to_deliver as $delivery_item) {
             if (!isset($to_deliver_overview[$delivery_item->delivery_id])) {
                 $to_deliver_overview[$delivery_item->delivery_id] = 0;
             }
             $to_deliver_overview[$delivery_item->delivery_id]++;
         }
         $template->assign('to_deliver_overview', $to_deliver_overview);
         $template->assign('to_deliver', $to_deliver);
     }
     $pager = new Pager('\\Skeleton\\Package\\Stock\\Stock');
     $pager->add_sort_permission('created');
     $pager->add_sort_permission('id');
     $pager->add_condition('stock_object_id', $product->id);
     $pager->set_sort('id');
     $pager->set_direction('desc');
     $pager->page();
     $template->assign('pager', $pager);
 }
 /**
  * add_delivery
  *
  * @access public
  */
 public function display_add_delivery()
 {
     $purchase_order = \Skeleton\Package\Stock\Purchase\Order::get_by_id($_GET['id']);
     if (isset($_POST['purchase_order'])) {
         $purchase_order->load_array($_POST['purchase_order']);
         $purchase_order->save();
     }
     if (isset($_POST['delivery'])) {
         foreach ($_POST['delivery'] as $purchase_order_item_id => $amount) {
             $purchase_order_item = \Skeleton\Package\Stock\Purchase\Order\Item::get_by_id($purchase_order_item_id);
             $purchase_order_item->deliver($amount, $purchase_order, 'Delivery for PO' . $purchase_order->id);
         }
     }
     Session::redirect($this->get_module_path() . '?action=edit&id=' . $purchase_order->id);
 }
 /**
  * Get backorders
  *
  * @access public
  * @return array $objects
  */
 public function get_backorder()
 {
     return \Skeleton\Package\Stock\Purchase\Order\Item::get_backorder_by_supplier($this);
 }
 /**
  * Get purchase_order_items
  *
  * @access public
  * @return array $purchase_order_items
  */
 public function get_purchase_order_items()
 {
     return \Skeleton\Package\Stock\Purchase\Order\Item::get_by_purchase_order($this);
 }
 /**
  * count backorder
  *
  * @access public
  * @return int $backorder
  */
 public function count_backorder()
 {
     $classname = $this->stock_object_classname;
     $object = $classname::get_by_id($this->stock_object_id);
     return \Skeleton\Package\Stock\Purchase\Order\Item::count_backorder($object);
 }