From c744f80305bf40a534a55ca7ff310a8ecfca3c94 Mon Sep 17 00:00:00 2001 From: Juanjo Menent <jmenent@2byte.es> Date: Sat, 19 Feb 2011 22:53:25 +0000 Subject: [PATCH] Task #10577: Works with shipments --- htdocs/admin/expedition.php | 109 +++++++++++++- .../expedition/mod_expedition_ribera.php | 131 ++++++++++++++++ .../expedition/mod_expedition_safor.php | 141 ++++++++++++++++++ .../modules/expedition/modules_expedition.php | 101 +++++++++++++ .../includes/modules/modExpedition.class.php | 8 + htdocs/langs/ca_ES/admin.lang | 1 + htdocs/langs/en_US/admin.lang | 1 + htdocs/langs/es_AR/admin.lang | 1 + htdocs/langs/es_ES/admin.lang | 1 + htdocs/langs/fr_FR/admin.lang | 1 + 10 files changed, 494 insertions(+), 1 deletion(-) create mode 100755 htdocs/includes/modules/expedition/mod_expedition_ribera.php create mode 100755 htdocs/includes/modules/expedition/mod_expedition_safor.php create mode 100755 htdocs/includes/modules/expedition/modules_expedition.php diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index fbf78737668..73c0d21fb22 100644 --- a/htdocs/admin/expedition.php +++ b/htdocs/admin/expedition.php @@ -5,6 +5,7 @@ * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -213,10 +214,21 @@ if ($_GET["action"] == 'setmod') dolibarr_set_const($db, "EXPEDITION_ADDON",$_GET["module"],'chaine',0,'',$conf->entity); } +if ($_POST["action"] == 'updateMask') +{ + $maskconst=$_POST['maskconstexpedition']; + $maskvalue=$_POST['maskexpedition']; + if ($maskconst) dolibarr_set_const($db,$maskconst,$maskvalue,'chaine',0,'',$conf->entity); +} + +if ($_GET["action"] == 'setmodel') +{ + dolibarr_set_const($db, "EXPEDITION_ADDON_NUMBER",$_GET["value"],'chaine',0,'',$conf->entity); +} /* - * Viewe + * View */ $dir = DOL_DOCUMENT_ROOT."/includes/modules/expedition/"; @@ -253,6 +265,101 @@ if ($conf->global->MAIN_SUBMODULE_LIVRAISON) dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup")); +/* + * Numbering module + */ +//print "<br>"; + +print_titre($langs->trans("SendingsNumberingModules")); + +print '<table class="noborder" width="100%">'; +print '<tr class="liste_titre">'; +print '<td width="100">'.$langs->trans("Name").'</td>'; +print '<td>'.$langs->trans("Description").'</td>'; +print '<td>'.$langs->trans("Example").'</td>'; +print '<td align="center" width="60">'.$langs->trans("Status").'</td>'; +print '<td align="center" width="16">'.$langs->trans("Infos").'</td>'; +print "</tr>\n"; + +clearstatcache(); + +//$dir = "../includes/modules/expedition/"; +$handle = opendir($dir); +if (is_resource($handle)) +{ + $var=true; + + while (($file = readdir($handle))!==false) + { + if (substr($file, 0, 15) == 'mod_expedition_' && substr($file, dol_strlen($file)-3, 3) == 'php') + { + $file = substr($file, 0, dol_strlen($file)-4); + + require_once(DOL_DOCUMENT_ROOT ."/includes/modules/expedition/".$file.".php"); + + $module = new $file; + + // Show modules according to features level + if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue; + if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue; + + if ($module->isEnabled()) + { + $var=!$var; + print '<tr '.$bc[$var].'><td>'.$module->nom."</td>\n"; + print '<td>'; + print $module->info(); + print '</td>'; + + // Examples + print '<td nowrap="nowrap">'.$module->getExample()."</td>\n"; + + print '<td align="center">'; + if ($conf->global->EXPEDITION_ADDON_NUMBER == "$file") + { + print img_picto($langs->trans("Activated"),'on'); + } + else + { + print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&value='.$file.'">'; + print img_picto($langs->trans("Disabled"),'off'); + print '</a>'; + } + print '</td>'; + + $expedition=new Expedition($db); + $expedition->initAsSpecimen(); + + // Info + $htmltooltip=''; + $htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>'; + $facture->type=0; + $nextval=$module->getNextValue($mysoc,$expedition); + if ("$nextval" != $langs->trans("NotAvailable")) // Keep " on nextval + { + $htmltooltip.=''.$langs->trans("NextValue").': '; + if ($nextval) + { + $htmltooltip.=$nextval.'<br>'; + } + else + { + $htmltooltip.=$langs->trans($module->error).'<br>'; + } + } + + print '<td align="center">'; + print $html->textwithpicto('',$htmltooltip,1,0); + print '</td>'; + + print '</tr>'; + } + } + } + closedir($handle); +} + +print '</table><br>'; /* diff --git a/htdocs/includes/modules/expedition/mod_expedition_ribera.php b/htdocs/includes/modules/expedition/mod_expedition_ribera.php new file mode 100755 index 00000000000..9c49eae8a3b --- /dev/null +++ b/htdocs/includes/modules/expedition/mod_expedition_ribera.php @@ -0,0 +1,131 @@ +<?php +/* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/includes/modules/expedition/mod_expedition_ribera.php + * \ingroup expedition + * \brief File of class to manage expedition numbering rules Ribera + * \version $Id$ + */ + +require_once(DOL_DOCUMENT_ROOT ."/includes/modules/expedition/modules_expedition.php"); + +/** \class mod_expedition_ribera + * \brief Class to manage expedition numbering rules Ribera + */ +class mod_expedition_ribera extends ModelNumRefExpedition +{ + var $version='dolibarr'; + var $error = ''; + var $nom = 'Ribera'; + + /** + * Return default description of numbering model + * @return string text description + */ + function info() + { + global $conf,$langs; + + $langs->load("bills"); + + $form = new Form($db); + + $texte = $langs->trans('GenericNumRefModelDesc')."<br>\n"; + $texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">'; + $texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + $texte.= '<input type="hidden" name="action" value="updateMask">'; + $texte.= '<input type="hidden" name="maskconstexpedition" value="EXPEDITION_RIBERA_MASK">'; + $texte.= '<table class="nobordernopadding" width="100%">'; + + $tooltip=$langs->trans("GenericMaskCodes",$langs->transnoentities("Sending")); + $tooltip.=$langs->trans("GenericMaskCodes2"); + $tooltip.=$langs->trans("GenericMaskCodes3"); + $tooltip.=$langs->trans("GenericMaskCodes4a",$langs->transnoentities("Sending"),$langs->transnoentities("Sending")); + $tooltip.=$langs->trans("GenericMaskCodes5"); + + $texte.= '<tr><td>'.$langs->trans("Mask").':</td>'; + $texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskexpedition" value="'.$conf->global->EXPEDITION_RIBERA_MASK.'">',$tooltip,1,1).'</td>'; + $texte.= '<td align="left" rowspan="2"> <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>'; + $texte.= '</tr>'; + $texte.= '</table>'; + $texte.= '</form>'; + + return $texte; + } + + /** + * Return numbering example + * @return string Example + */ + function getExample() + { + global $conf,$langs,$mysoc; + + $old_code_client=$mysoc->code_client; + $mysoc->code_client='CCCCCCCCCC'; + $numExample = $this->getNextValue($mysoc,''); + $mysoc->code_client=$old_code_client; + + if (! $numExample) + { + $numExample = $langs->trans('NotConfigured'); + } + return $numExample; + } + + /** + * Return next value + * @param objsoc third party object + * @param shipment shipment object + * @return string Value if OK, 0 if KO + */ + function getNextValue($objsoc,$shipment) + { + global $db,$conf; + + require_once(DOL_DOCUMENT_ROOT ."/lib/functions2.lib.php"); + + $mask=$conf->global->EXPEDITION_RIBERA_MASK; + + if (! $mask) + { + $this->error='NotConfigured'; + return 0; + } + + $numFinal=get_next_value($db,$mask,'expedition','ref','',$objsoc->code_client,$shipment->date_expedition); + + return $numFinal; + } + + /** + *Return next free value + * @param objsoc Object third party + * @param objforref Object for number to search + * @return string Next free value + */ + function expedition_get_num($objsoc,$objforref) + { + return $this->getNextValue($objsoc,$objforref); + } + +} + +?> \ No newline at end of file diff --git a/htdocs/includes/modules/expedition/mod_expedition_safor.php b/htdocs/includes/modules/expedition/mod_expedition_safor.php new file mode 100755 index 00000000000..559d55fd1c2 --- /dev/null +++ b/htdocs/includes/modules/expedition/mod_expedition_safor.php @@ -0,0 +1,141 @@ +<?php +/* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/includes/modules/expedition/mod_expedition_safor.php + * \ingroup expedition + * \brief File of class to manage shipments numbering rules Safor + * \version $Id$ + */ +require_once(DOL_DOCUMENT_ROOT ."/includes/modules/expedition/modules_expedition.php"); + +/** \class mod_commande_safor + * \brief Class to manage expedition numbering rules Safor + */ +class mod_expedition_safor extends ModelNumRefExpedition +{ + var $version='dolibarr'; + var $prefix='BE'; + var $error=''; + var $nom='Safor'; + + + /** + * Return default description of numbering model + * @return string text description + */ + function info() + { + global $langs; + return $langs->trans("SimpleNumRefModelDesc",$this->prefix); + } + + + /** + * Return numbering example + * @return string Example + */ + function getExample() + { + return $this->prefix."0501-0001"; + } + + + /** + * Test if existing numbers make problems with numbering + * @return boolean false if conflit, true if ok + */ + function canBeActivated() + { + global $conf,$langs; + + $coyymm=''; $max=''; + + $posindice=8; + $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."expedition"; + $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $row = $db->fetch_row($resql); + if ($row) { $coyymm = substr($row[0],0,6); $max=$row[0]; } + } + if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i',$coyymm)) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorNumRefModel', $max); + return false; + } + + return true; + } + + /** + * Return next value + * @param objsoc third party object + * @param shipment shipment object + * @return string Value if OK, 0 if KO + */ + function getNextValue($objsoc,$shipment) + { + global $db,$conf; + + $posindice=8; + $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."expedition"; + $sql.= " WHERE ref like '".$this->prefix."____-%'"; + $sql.= " AND entity = ".$conf->entity; + + $resql=$db->query($sql); + if ($resql) + { + $obj = $db->fetch_object($resql); + if ($obj) $max = intval($obj->max); + else $max=0; + } + else + { + dol_syslog("mod_expedition_safor::getNextValue sql=".$sql); + return -1; + } + + $date=time(); + $yymm = strftime("%y%m",$date); + $num = sprintf("%04s",$max+1); + + dol_syslog("mod_expedition_safor::getNextValue return ".$this->prefix.$yymm."-".$num); + return $this->prefix.$yymm."-".$num; + } + + /** + *Return next free value + * @param objsoc Object third party + * @param objforref Object for number to search + * @return string Next free value + */ + function expedition_get_num($objsoc,$objforref) + { + return $this->getNextValue($objsoc,$objforref); + } + +} +?> diff --git a/htdocs/includes/modules/expedition/modules_expedition.php b/htdocs/includes/modules/expedition/modules_expedition.php new file mode 100755 index 00000000000..ea0a4a87109 --- /dev/null +++ b/htdocs/includes/modules/expedition/modules_expedition.php @@ -0,0 +1,101 @@ +<?php +/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> + * Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> + * Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> + * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/includes/modules/expedition/modules_expedition.php + * \ingroup expedition + * \brief File of class to manage expedition numbering + * \version $Id$ + */ + +class ModelNumRefExpedition +{ + var $error=''; + + /** + * Return if a module can be used or not + * @return boolean true if module can be used + */ + function isEnabled() + { + return true; + } + + /** + * Return default description of numbering model + * @return string text description + */ + function info() + { + global $langs; + $langs->load("sendings"); + return $langs->trans("NoDescription"); + } + + /** + * Return numbering example + * @return string Example + */ + function getExample() + { + global $langs; + $langs->load("sendings"); + return $langs->trans("NoExample"); + } + + /** + * Test if existing numbers make problems with numbering + * @return boolean false if conflit, true if ok + */ + function canBeActivated() + { + return true; + } + + /** + * Return next value + * @return string Value + */ + function getNextValue() + { + global $langs; + return $langs->trans("NotAvailable"); + } + + /** + * Return numbering version module + * @return string Value + */ + function getVersion() + { + global $langs; + $langs->load("admin"); + + if ($this->version == 'development') return $langs->trans("VersionDevelopment"); + if ($this->version == 'experimental') return $langs->trans("VersionExperimental"); + if ($this->version == 'dolibarr') return DOL_VERSION; + return $langs->trans("NotAvailable"); + } +} +?> diff --git a/htdocs/includes/modules/modExpedition.class.php b/htdocs/includes/modules/modExpedition.class.php index f8b50b8f294..4a6b1813390 100644 --- a/htdocs/includes/modules/modExpedition.class.php +++ b/htdocs/includes/modules/modExpedition.class.php @@ -2,6 +2,7 @@ /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -106,6 +107,13 @@ class modExpedition extends DolibarrModules $this->const[$r][3] = 'Nom du gestionnaire de numerotation des bons de reception'; $this->const[$r][4] = 0; $r++; + + $this->const[$r][0] = "EXPEDITION_ADDON_NUMBER"; + $this->const[$r][1] = "chaine"; + $this->const[$r][2] = "mod_expedition_safor"; + $this->const[$r][3] = 'Nom du gestionnaire de numerotation des expeditions'; + $this->const[$r][4] = 0; + $r++; // Boxes $this->boxes = array(); diff --git a/htdocs/langs/ca_ES/admin.lang b/htdocs/langs/ca_ES/admin.lang index 6d70547903d..864a95139a3 100644 --- a/htdocs/langs/ca_ES/admin.lang +++ b/htdocs/langs/ca_ES/admin.lang @@ -1110,6 +1110,7 @@ NotificationEMailFrom=E-Mail emissor (From) dels correus enviats a través de no ##### Sendings ##### SendingsSetup=Configuració del mòdul Expedicions SendingsReceiptModel=Model de notes de lliurament +SendingsNumberingModules=Mòduls de numeració de notes de lliurament SendingsAbility=Ús de notes de lliurament per als enviaments a clients NoNeedForDeliveryReceipts=En la majoria dels casos, les notes de lliurament (llista de productes enviats) també actuen com a notes de recepció i són signades pel client. La gestió de les notes de recepció és per tant redundant i poques vegades s'activarà. FreeLegalTextOnDeliveryReceipts=Text lliure a les notes de recepció diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f80a34d4463..f74245f2d88 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1106,6 +1106,7 @@ NotificationEMailFrom=Sender EMail (From) for emails sent for notifications ##### Sendings ##### SendingsSetup=Sending module setup SendingsReceiptModel=Sending receipt model +SendingsNumberingModules=Sendings numbering modules SendingsAbility=Support sendings sheets for customer deliveries NoNeedForDeliveryReceipts=In most cases, sendings receipts are used both as sheets for customer deliveries (list of products to send) and sheets that is recevied and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated. FreeLegalTextOnDeliveryReceipts=Free text on delivery receipts diff --git a/htdocs/langs/es_AR/admin.lang b/htdocs/langs/es_AR/admin.lang index 24e48b36479..d5610ffd8fe 100755 --- a/htdocs/langs/es_AR/admin.lang +++ b/htdocs/langs/es_AR/admin.lang @@ -1110,6 +1110,7 @@ NotificationEMailFrom=E-Mail emisor (From) de los correos enviados a través de ##### Sendings ##### SendingsSetup=Configuración del módulo Expediciones SendingsReceiptModel=Modelo de notas de entrega +SendingsNumberingModules=Módulos de numeración de notas de entrega SendingsAbility=Uso de notas de entrega para los envíos a clientes NoNeedForDeliveryReceipts=En la mayoría de los casos, las notas de entrega (lista de productos enviados ) también actúan como notas de recepción y son firmadas por el cliente. La gestión de las notas de recepción es por lo tanto redundante y rara vez se activará. FreeLegalTextOnDeliveryReceipts=Texto libre en las notas de recepción diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang index 58d8205a1a4..9281206013f 100644 --- a/htdocs/langs/es_ES/admin.lang +++ b/htdocs/langs/es_ES/admin.lang @@ -1110,6 +1110,7 @@ NotificationEMailFrom=E-Mail emisor (From) de los correos enviados a través de ##### Sendings ##### SendingsSetup=Configuración del módulo Expediciones SendingsReceiptModel=Modelo de notas de entrega +SendingsNumberingModules=Módulos de numeración de notas de entrega SendingsAbility=Uso de notas de entrega para los envíos a clientes NoNeedForDeliveryReceipts=En la mayoría de los casos, las notas de entrega (lista de productos enviados ) también actúan como notas de recepción y son firmadas por el cliente. La gestión de las notas de recepción es por lo tanto redundante y rara vez se activará. FreeLegalTextOnDeliveryReceipts=Texto libre en las notas de recepción diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 0e16deb661a..1bcde3e0a0b 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -1115,6 +1115,7 @@ NotificationEMailFrom= Email émetteur (From) des mails envoyés lors des notifi ##### Sendings ##### SendingsSetup= Configuration du module Expédition/Livraison SendingsReceiptModel= Modèle du bordereau d'expédition +SendingsNumberingModules=Modèles de numérotation des expéditions SendingsAbility= Prise en charge des bons d'expédition/livraison vers le client NoNeedForDeliveryReceipts= Dans la plupart des cas, ce sont les bons d'expédition/livraison (liste des produits à envoyer par le transporteur) qui font office de bons de réception et qui sont signés par le client. La gestion des bons de réception fait donc double emploi et sera rarement activée. FreeLegalTextOnDeliveryReceipts= Mention complémentaire sur les bons de réception -- GitLab