Bonjour,
il me manquerai une option sur mes expédition, on a bien : Classer la commande source à expédiée à la validation d’une expédition (et si les quantités expédiées dans le bon d’expédition sont les même que dans la commande mise à jour)
Mais cela ne convient pas à mon process car les expéditions ne sont déstockées qu’au moment de la clôture de l’expédition pas à la validation.
Il me faudrait donc faire un trigger sur la clôture de l’expédition, savez-vous ou je peux récupérer la requête ci-dessus pour al modifier
Oups.
Je souhaiterais dans le workflow avoir une autre option pour passer la Commande à un état -> Livrée quand l’expédition est cloturé et non pas au moment de la validation car elle n’a pas encore était réceptionné par le client final donc suivant la loi francaise elle appartient encore à l’expéditeur.
Aprés quelques recherche j’ai le code Wordflow actuel : WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING
il me faudrait maintenant voir pour ajouter mon triggers à cette liste dans htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
Là si je remplace juste le trigger SHIPPING_VALIDATE en SHIPPING_MODIFY avec statut qui passe à Closed / Shipped (2) cela fonctionne comme je veux mais je touche au core dolibarr
252 if ($action=='SHIPPING_VALIDATE')
253 {
254 dol_syslog( "Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id );
255
256 if (! empty($conf->commande->enabled) && ! empty($conf->expedition->enabled) && ! empty($conf->global->WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING))
257 {
258 $qtyshipped=array();
259 $qtyordred=array();
260 require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
261
262 //find all shippement on order origin
263 $order = new Commande($this->db);
264 $ret=$order->fetch($object->origin_id);
265 if ($ret<0) {
266 $this->error=$order->error; $this->errors=$order->errors;
267 return $ret;
268 }
269 $ret=$order->fetchObjectLinked($order->id,'commande',null,'shipping');
270 if ($ret<0) {
271 $this->error=$order->error; $this->errors=$order->errors;
272 return $ret;
273 }
274 //Build array of quantity shipped by product for an order
275 if (is_array($order->linkedObjects) && count($order->linkedObjects)>0) {
276 foreach($order->linkedObjects as $type=>$shipping_array) {
277 if ($type=='shipping' && is_array($shipping_array) && count($shipping_array)>0) {
278 foreach ($shipping_array as $shipping) {
279 if (is_array($shipping->lines) && count($shipping->lines)>0) {
280 foreach($shipping->lines as $shippingline) {
281 $qtyshipped[$shippingline->fk_product]+=$shippingline->qty;
282 }
283 }
284 }
285 }
286 }
287 }
288
289 //Build array of quantity ordered by product
290 if (is_array($order->lines) && count($order->lines)>0) {
291 foreach($order->lines as $orderline) {
292 $qtyordred[$orderline->fk_product]+=$orderline->qty;
293 }
294 }
295 //dol_syslog(var_export($qtyordred,true),LOG_DEBUG);
296 //dol_syslog(var_export($qtyshipped,true),LOG_DEBUG);
297 //Compare array
298 $diff_array=array_diff_assoc($qtyordred,$qtyshipped);
299 if (count($diff_array)==0) {
300 //No diff => mean everythings is shipped
301 $ret=$object->setStatut(Commande::STATUS_CLOSED, $object->origin_id, $object->origin);
302 if ($ret<0) {
303 $this->error=$object->error; $this->errors=$object->errors;
304 return $ret;
305 }
306 }
307 }
308 }
Comment proposer cette nouvelle fonctionnalité, qui se tiens à mon sens ???