/** * $Id: vw_traceability.php 19286 2013-05-26 16:59:04Z phenxdesign $ * * @package Mediboard * @subpackage Stock * @author SARL OpenXtrem <*****@*****.**> * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html * @version $Revision: 19286 $ */ CCanDo::checkRead(); $code = CValue::getOrSession('code'); $codes = array(); $products = array(); if (strlen($code) > 2) { $where = array('code' => "LIKE '%{$code}%'"); $delivery = new CProductDeliveryTrace(); $list_deliveries = $delivery->loadList($where, 'date_delivery'); $reception = new CProductOrderItemReception(); $list_order_reception = $reception->loadList($where, 'date'); foreach ($list_order_reception as $trace) { if (!isset($codes[$trace->code])) { $codes[$trace->code] = array(); } $trace->loadRefsFwd(); if (!isset($products[$trace->code])) { $trace->loadRefOrderItem(); $trace->_ref_order_item->loadReference(); $trace->_ref_order_item->_ref_reference->loadRefsFwd(); $products[$trace->code] = $trace->_ref_order_item->_ref_reference->_ref_product; } // date_reception
} $max = max($max, $total); $series[0]["data"][] = array(count($series[0]["data"]) * 2 - 0.6, $total); // Hack pour les etablissements qui ont un service "Périmés" $where_services = array("nom" => "= 'Périmés'"); $services_expired = new CService(); $services_expired_ids = $services_expired->loadIds($where_services); // Output ////////////////// $where = array("product_delivery.stock_class" => "= 'CProductStockGroup'", "product_delivery.stock_id" => "= '{$product->_ref_stock_group->_id}'", "product_delivery_trace.date_delivery" => "BETWEEN '{$date}' AND '{$to}'"); if (count($services_expired_ids)) { $where[100] = "(product_delivery.type != 'expired' OR product_delivery.type IS NULL)\r\n AND product_delivery.service_id NOT IN (" . implode(',', $services_expired_ids) . ")"; } else { $where[100] = "product_delivery.type != 'expired' OR product_delivery.type IS NULL"; } $ljoin = array("product_delivery" => "product_delivery.delivery_id = product_delivery_trace.delivery_id"); $trace = new CProductDeliveryTrace(); /** @var CProductDeliveryTrace $traces */ $traces = $trace->loadList($where, null, null, null, $ljoin); $total = 0; foreach ($traces as $_trace) { $total += $_trace->quantity; } $max = max($max, $total); $series[1]["data"][] = array(count($series[1]["data"]) * 2, $total); // Output expired /////////////////// if (count($services_expired_ids)) { $where[100] = "product_delivery.type = 'expired' OR product_delivery.service_id IN (" . implode(',', $services_expired_ids) . ")"; } else { $where[100] = "product_delivery.type = 'expired'"; } $traces = $trace->loadList($where, null, null, null, $ljoin);
/** * @see parent::store() */ function store() { $is_new = !$this->_id; if ($is_new) { if (!$this->datetime_min) { $this->datetime_min = $this->date_dispensation; } if (!$this->datetime_max) { $this->datetime_max = $this->date_dispensation; } if (!$this->preparateur_id) { $this->preparateur_id = CMediusers::get()->_id; } } $order_to_0 = $this->fieldModified("order", "0"); if ($msg = parent::store()) { return $msg; } if ($this->_prises) { $prises = json_decode(stripslashes($this->_prises), true); foreach ($prises as $_prise) { $prise_dispensation = new CPriseDispensation(); $prise_dispensation->delivery_id = $this->_id; $prise_dispensation->datetime = $_prise["datetime"]; $prise_dispensation->quantite_adm = $_prise["quantite_adm"]; $prise_dispensation->unite_adm = utf8_decode($_prise["unite_adm"]); $prise_dispensation->quantite_disp = $_prise["quantite_disp"]; $prise_dispensation->object_id = $_prise["object_id"]; $prise_dispensation->object_class = $_prise["object_class"]; $prise_dispensation->store(); } $this->_prises = null; } // Sortie manuelle ou autotrace et passage de "commande" à "pas commande" if ($is_new && $this->manual || ($is_new || $order_to_0) && $this->_auto_trace) { $delivery_trace = new CProductDeliveryTrace(); $delivery_trace->delivery_id = $this->_id; $delivery_trace->quantity = $this->quantity; $delivery_trace->date_delivery = $this->date_delivery ? $this->date_delivery : CMbDT::dateTime(); $delivery_trace->_code_cis = $this->_code_cis; $delivery_trace->_code_cip = $this->_code_cip; $delivery_trace->_datetime_min = $this->datetime_min; if ($this->manual) { $delivery_trace->date_reception = $delivery_trace->date_delivery; } $product = $this->loadRefStock()->loadRefProduct(); $location = CProductStockLocation::getDefaultLocation($this->loadRefService(), $product); $delivery_trace->target_location_id = $location->_id; if ($msg = $delivery_trace->store()) { CAppUI::setMsg("La commande a été validée, mais n'a pas pu etre délivrée automatiquement pour la raison suivante: <br />{$msg}", UI_MSG_WARNING); } else { CAppUI::setMsg("CProductDeliveryTrace-msg-create"); } } if (!$is_new) { return null; } $this->loadRefStock()->loadRefsFwd(); if ($this->_auto_deliver || $this->_ref_stock->_ref_product->auto_dispensed || $this->_auto_trace) { $this->date_dispensation = CMbDT::dateTime(); $this->order = 0; return parent::store(); } return null; }