Workflow Expédition

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 :happy:

Bonjour,

Vous désirez faire quoi exactement ?
Votre message n’est pas trés compréhensible.

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.

Je suis un peu plus clair ?

Excusez moi je suis dedans c’est pour cela lol

Bjr
Si ca peut vs aider

SHIPPING_CREATE expedition.class.php
SHIPPING_VALIDATE expedition.class.php
SHIPPING_MODIFY expedition.class.php
SHIPPING_DELETE expedition.class.php

https://wiki.dolibarr.org/index.php/Triggers-actions

1 « J'aime »

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 :unhappy:

  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 :happy: :happy: ???

J’oubliais, il n’y a malheureusement pas le trigger : SHIPPING_CLOSED, trop facile sinon

Bonjour :happy:
Si il y est dans https://github.com/Dolibarr/dolibarr/blob/97429aeb7af4f1396f167dc07d7b82324230e0d5/htdocs/expedition/class/expedition.class.php

1 « J'aime »

le top, il faudrait le rajouter dans le wiki…

Comment faire si je change le code du workflow pour demander le changement pour la prochaine version dolibarr ???

Je demande sur le repo git ?

Oui pour tout changement c’est sur git !