diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php index fbf7873766867f642108b7980cac79def4832d36..73c0d21fb22dc63cf6e6afa8fbe5b90fbec2773c 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 0000000000000000000000000000000000000000..9c49eae8a3b476708280a53e5108029fab29737e --- /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 0000000000000000000000000000000000000000..559d55fd1c2e40eb2325345a50df441aad41c54a --- /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 0000000000000000000000000000000000000000..ea0a4a87109f37175f6ba3c6cab28593eff2fe17 --- /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 f8b50b8f294cc19c949a0b8359fd86718162f6a8..4a6b18133909f0b26712e67c26dc27f60180fe75 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 6d70547903df936c254673da1fd9d5d2e39d1c61..864a95139a3fad64102a70ff7253800f354e4dfb 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 f80a34d446308e1d6602c142516c45796d24f4a2..f74245f2d8852c250dc7ee26c95d618626a3d40a 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 24e48b36479a417ad32cc81b7b6e288fd71f37e1..d5610ffd8feb481c31761adca76c4b32cd128599 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 58d8205a1a48eb6b14ff975a2706efe18bd45e57..9281206013f28fa5490d6c946417cd587c0baed2 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 0e16deb661aae0786cbdad265f1309d2bb2f5e40..1bcde3e0a0baf24a14d7d43984ddb32bc699f54a 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