diff --git a/htdocs/admin/supplier_invoice.php b/htdocs/admin/supplier_invoice.php new file mode 100644 index 0000000000000000000000000000000000000000..49e31d1b86ca94680a6c1a718696eec81050c511 --- /dev/null +++ b/htdocs/admin/supplier_invoice.php @@ -0,0 +1,511 @@ +<?php +/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> + * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> + * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> + * Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2011-2013 Philippe Grand <philippe.grand@atoo-net.com> + * + * 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 3 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, see <http://www.gnu.org/licenses/>. + */ + +/** + * \file htdocs/admin/supplier_invoice.php + * \ingroup fournisseur + * \brief Page d'administration-configuration du module Fournisseur + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; + +$langs->load("admin"); +$langs->load("other"); +$langs->load("orders"); + +if (!$user->admin) +accessforbidden(); + +$type=GETPOST('type', 'alpha'); +$value=GETPOST('value', 'alpha'); +$action=GETPOST('action', 'alpha'); + +$specimenthirdparty=new Societe($db); +$specimenthirdparty->initAsSpecimen(); + + +/* + * Actions + */ + +if ($action == 'updateMask') +{ + $maskconstorder=GETPOST('maskconstorder','alpha'); + $maskorder=GETPOST('maskorder','alpha'); + + if ($maskconstorder) $res = dolibarr_set_const($db,$maskconstorder,$maskorder,'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; + } + else + { + $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; + } +} + +if ($action == 'specimen') // For invoices +{ + $modele=GETPOST('module','alpha'); + + $facture = new FactureFournisseur($db); + $facture->initAsSpecimen(); + $facture->thirdparty=$specimenthirdparty; // Define who should has build the invoice (so the supplier) + + // Search template files + $file=''; $classname=''; $filefound=0; + $dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); + foreach($dirmodels as $reldir) + { + $file=dol_buildpath($reldir."core/modules/supplier_invoice/pdf/pdf_".$modele.".modules.php",0); + if (file_exists($file)) + { + $filefound=1; + $classname = "pdf_".$modele; + break; + } + } + + if ($filefound) + { + require_once $file; + + $module = new $classname($db,$facture); + + if ($module->write_file($facture,$langs) > 0) + { + header("Location: ".DOL_URL_ROOT."/document.php?modulepart=facture_fournisseur&file=SPECIMEN.pdf"); + return; + } + else + { + $mesg='<font class="error">'.$module->error.'</font>'; + dol_syslog($module->error, LOG_ERR); + } + } + else + { + $mesg='<font class="error">'.$langs->trans("ErrorModuleNotFound").'</font>'; + dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); + } +} + +if ($action == 'set') +{ + $label = GETPOST('label','alpha'); + $scandir = GETPOST('scandir','alpha'); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity, libelle, description)"; + $sql.= " VALUES ('".$db->escape($value)."','".$type."',".$conf->entity.", "; + $sql.= ($label?"'".$db->escape($label)."'":'null').", "; + $sql.= (! empty($scandir)?"'".$db->escape($scandir)."'":"null"); + $sql.= ")"; + $res=$db->query($sql); + if ($res) + { + + } + // else dol_print_error($db); +} + +if ($action == 'del') +{ + $sql = "DELETE FROM ".MAIN_DB_PREFIX."document_model"; + $sql.= " WHERE nom = '".$value."'"; + $sql.= " AND type = '".$type."'"; + $sql.= " AND entity = ".$conf->entity; + $db->query($sql); + if ($res) + { + + } + // else dol_print_error($db); +} + +if ($action == 'setdoc') +{ + $label = GETPOST('label','alpha'); + $scandir = GETPOST('scandir','alpha'); + + $db->begin(); + + if ($type == 'order_supplier' && dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_PDF",$value,'chaine',0,'',$conf->entity)) + { + $conf->global->INVOICE_SUPPLIER_ADDON_PDF = $value; + } + + // On active le modele + $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."document_model"; + $sql_del.= " WHERE nom = '".$db->escape($value)."'"; + $sql_del.= " AND type = '".$type."'"; + $sql_del.= " AND entity = ".$conf->entity; + $result1=$db->query($sql_del); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity, libelle, description)"; + $sql.= " VALUES ('".$db->escape($value)."', '".$type."', ".$conf->entity.", "; + $sql.= ($label?"'".$db->escape($label)."'":'null').", "; + $sql.= (! empty($scandir)?"'".$db->escape($scandir)."'":"null"); + $sql.= ")"; + $result2=$db->query($sql); + if ($result1 && $result2) + { + $db->commit(); + } + else + { + $db->rollback(); + } +} + +if ($action == 'setmod') +{ + // TODO Verifier si module numerotation choisi peut etre active + // par appel methode canBeActivated + + dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_NUMBER",$value,'chaine',0,'',$conf->entity); +} + +if ($action == 'addcat') +{ + $fourn = new Fournisseur($db); + $fourn->CreateCategory($user,$_POST["cat"]); +} + +if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') +{ + $freetext = GETPOST('SUPPLIER_INVOICE_FREE_TEXT'); // No alpha here, we want exact string + + $res = dolibarr_set_const($db, "SUPPLIER_INVOICE_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity); + + if (! $res > 0) $error++; + + if (! $error) + { + $mesg = "<font class=\"ok\">".$langs->trans("SetupSaved")."</font>"; + } + else + { + $mesg = "<font class=\"error\">".$langs->trans("Error")."</font>"; + } +} + + +/* + * View + */ + +$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); + +llxHeader("",""); + +$form=new Form($db); + +$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>'; +print_fiche_titre($langs->trans("SuppliersSetup"),$linkback,'setup'); + +print "<br>"; + +$h = 0; + +$head[$h][0] = DOL_URL_ROOT."/admin/supplier_order.php"; +$head[$h][1] = $langs->trans("SupplierOrder"); +$head[$h][2] = 'Order'; +$h++; + +$head[$h][0] = DOL_URL_ROOT."/admin/supplier_invoice.php"; +$head[$h][1] = $langs->trans("SuppliersInvoice"); +$head[$h][2] = 'Invoice'; +$hselected=$h; +$h++; + +dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup")); + + +// Supplier invoice numbering module + +print_titre($langs->trans("SuppliersInvoiceNumberingModel")); + +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("Info").'</td>'; +print "</tr>\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + $dir = dol_buildpath($reldir."core/modules/supplier_invoice/"); + + if (is_dir($dir)) + { + $handle = opendir($dir); + if (is_resource($handle)) + { + $var=true; + + while (($file = readdir($handle))!==false) + { + if (substr($file, 0, 25) == 'mod_facture_fournisseur_' && substr($file, dol_strlen($file)-3, 3) == 'php') + { + $file = substr($file, 0, dol_strlen($file)-4); + + require_once $dir.$file.'.php'; + + $module = new $file; + + if ($module->isEnabled()) + { + // 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; + + $var=!$var; + print '<tr '.$bc[$var].'><td>'.$module->nom."</td><td>\n"; + print $module->info(); + print '</td>'; + + // Show example of numbering module + print '<td nowrap="nowrap">'; + $tmp=$module->getExample(); + if (preg_match('/^Error/',$tmp)) { + $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; + } + elseif ($tmp=='NotConfigured') print $langs->trans($tmp); + else print $tmp; + print '</td>'."\n"; + + print '<td align="center">'; + if ($conf->global->INVOICE_SUPPLIER_ADDON_NUMBER == "$file") + { + print img_picto($langs->trans("Activated"),'switch_on'); + } + else + { + print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.$file.'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>'; + } + print '</td>'; + + $invoice=new FactureFournisseur($db); + $invoice->initAsSpecimen(); + + // Info + $htmltooltip=''; + $htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>'; + $nextval=$module->getNextValue($mysoc,$invoice); + 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 $form->textwithpicto('',$htmltooltip,1,0); + print '</td>'; + + print '</tr>'; + } + } + } + closedir($handle); + } + } +} + +print '</table><br>'; + + + + +/* + * Modeles documents for supplier invoices + */ + +print_titre($langs->trans("BillsPDFModules")); + +// Defini tableau def de modele +$def = array(); + +$sql = "SELECT nom"; +$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; +$sql.= " WHERE type = 'order_supplier'"; +$sql.= " AND entity = ".$conf->entity; + +$resql=$db->query($sql); +if ($resql) +{ + $i = 0; + $num_rows=$db->num_rows($resql); + while ($i < $num_rows) + { + $array = $db->fetch_array($resql); + array_push($def, $array[0]); + $i++; + } +} +else +{ + dol_print_error($db); +} + +print '<table class="noborder" width="100%">'."\n"; +print '<tr class="liste_titre">'."\n"; +print '<td width="100">'.$langs->trans("Name").'</td>'."\n"; +print '<td>'.$langs->trans("Description").'</td>'."\n"; +print '<td align="center" width="60">'.$langs->trans("Status").'</td>'."\n"; +print '<td align="center" width="60">'.$langs->trans("Default").'</td>'."\n"; +print '<td align="center" width="40" colspan="2">'.$langs->trans("Info").'</td>'; +print '</tr>'."\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + $dir = dol_buildpath($reldir."core/modules/supplier_invoice/pdf/"); + + if (is_dir($dir)) + { + $var=true; + + $handle=opendir($dir); + + + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + if (preg_match('/\.modules\.php$/i',$file) && substr($file,0,4) == 'pdf_') + { + $name = substr($file, 4, dol_strlen($file) -16); + $classname = substr($file, 0, dol_strlen($file) -12); + + $var=!$var; + print "<tr ".$bc[$var].">\n"; + print "<td>".$name."</td>\n"; + print "<td>\n"; + require_once $dir.$file; + $module = new $classname($db,$specimenthirdparty); + print $module->description; + print "</td>\n"; + + // Active + if (in_array($name, $def)) + { + print '<td align="center">'."\n"; + if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name") + { + print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier">'; + print img_picto($langs->trans("Enabled"),'switch_on'); + print '</a>'; + } + else + { + print img_picto($langs->trans("Enabled"),'switch_on'); + } + print "</td>"; + } + else + { + print '<td align="center">'."\n"; + print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=order_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>'; + print "</td>"; + } + + // Defaut + print '<td align="center">'; + if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF == "$name") + { + print img_picto($langs->trans("Default"),'on'); + } + else + { + print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>'; + } + print '</td>'; + + // Info + $htmltooltip = ''.$langs->trans("Name").': '.$module->name; + $htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); + $htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; + $htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>'; + $htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1); + $htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg,1,1); + $htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg,1,1); + print '<td align="center">'; + print $form->textwithpicto('',$htmltooltip,1,0); + print '</td>'; + print '<td align="center">'; + print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'order').'</a>'; + print '</td>'; + + print "</tr>\n"; + } + } + + closedir($handle); + } + } +} + +print '</table><br/>'; + +print_titre($langs->trans("OtherOptions")); +print '<table class="noborder" width="100%">'; +print '<tr class="liste_titre">'; +print '<td>'.$langs->trans("Parameter").'</td>'; +print '<td align="center" width="60">'.$langs->trans("Value").'</td>'; +print '<td width="80"> </td>'; +print "</tr>\n"; + +print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'; +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; +print '<input type="hidden" name="action" value="set_SUPPLIER_ORDER_FREE_TEXT">'; +print '<tr '.$bc[$var].'><td colspan="2">'; +print $langs->trans("FreeLegalTextOnInvoices").' ('.$langs->trans("AddCRIfTooLong").')<br>'; +print '<textarea name="SUPPLIER_ORDER_FREE_TEXT" class="flat" cols="120">'.$conf->global->SUPPLIER_ORDER_FREE_TEXT.'</textarea>'; +print '</td><td align="right">'; +print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'; +print "</td></tr>\n"; +print '</form>'; + +dol_htmloutput_mesg($mesg); + +$db->close(); +llxFooter(); +?> diff --git a/htdocs/admin/fournisseur.php b/htdocs/admin/supplier_order.php similarity index 68% rename from htdocs/admin/fournisseur.php rename to htdocs/admin/supplier_order.php index e92ef38ee97c0242cbcd6b84485125723d3545c3..aa609d65721b46584a1d51116efefde746ed1da8 100644 --- a/htdocs/admin/fournisseur.php +++ b/htdocs/admin/supplier_order.php @@ -5,7 +5,7 @@ * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> * Copyright (C) 2010-2012 Juanjo Menent <jmenent@2byte.es> - * Copyright (C) 2011 Philippe Grand <philippe.grand@atoo-net.com> + * Copyright (C) 2011-2013 Philippe Grand <philippe.grand@atoo-net.com> * * 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 @@ -22,7 +22,7 @@ */ /** - * \file htdocs/admin/fournisseur.php + * \file htdocs/admin/supplier_order.php * \ingroup fournisseur * \brief Page d'administration-configuration du module Fournisseur */ @@ -31,10 +31,10 @@ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; -require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $langs->load("admin"); -$langs->load('other'); +$langs->load("other"); +$langs->load("orders"); if (!$user->admin) accessforbidden(); @@ -116,52 +116,6 @@ if ($action == 'specimen') // For orders } } -if ($action == 'specimenfacture') // For invoices -{ - $modele=GETPOST('module','alpha'); - - $facture = new FactureFournisseur($db); - $facture->initAsSpecimen(); - $facture->thirdparty=$specimenthirdparty; // Define who should has build the invoice (so the supplier) - - // Search template files - $file=''; $classname=''; $filefound=0; - $dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); - foreach($dirmodels as $reldir) - { - $file=dol_buildpath($reldir."core/modules/supplier_invoice/pdf/pdf_".$modele.".modules.php",0); - if (file_exists($file)) - { - $filefound=1; - $classname = "pdf_".$modele; - break; - } - } - - if ($filefound) - { - require_once $file; - - $module = new $classname($db,$facture); - - if ($module->write_file($facture,$langs) > 0) - { - header("Location: ".DOL_URL_ROOT."/document.php?modulepart=facture_fournisseur&file=SPECIMEN.pdf"); - return; - } - else - { - $mesg='<font class="error">'.$module->error.'</font>'; - dol_syslog($module->error, LOG_ERR); - } - } - else - { - $mesg='<font class="error">'.$langs->trans("ErrorModuleNotFound").'</font>'; - dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR); - } -} - if ($action == 'set') { $label = GETPOST('label','alpha'); @@ -206,11 +160,6 @@ if ($action == 'setdoc') $conf->global->COMMANDE_SUPPLIER_ADDON_PDF = $value; } - if ($type == 'invoice_supplier' && dolibarr_set_const($db, "INVOICE_SUPPLIER_ADDON_PDF",$value,'chaine',0,'',$conf->entity)) - { - $conf->global->INVOICE_SUPPLIER_ADDON_PDF = $value; - } - // On active le modele $sql_del = "DELETE FROM ".MAIN_DB_PREFIX."document_model"; $sql_del.= " WHERE nom = '".$db->escape($value)."'"; @@ -248,11 +197,11 @@ if ($action == 'addcat') $fourn->CreateCategory($user,$_POST["cat"]); } -if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') +if ($action == 'set_SUPPLIER_ORDER_FREE_TEXT') { - $freetext = GETPOST('SUPPLIER_INVOICE_FREE_TEXT'); // No alpha here, we want exact string + $freetext = GETPOST('SUPPLIER_ORDER_FREE_TEXT'); // No alpha here, we want exact string - $res = dolibarr_set_const($db, "SUPPLIER_INVOICE_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db, "SUPPLIER_ORDER_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity); if (! $res > 0) $error++; @@ -273,7 +222,7 @@ if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') $dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); -llxHeader(); +llxHeader("",""); $form=new Form($db); @@ -282,6 +231,22 @@ print_fiche_titre($langs->trans("SuppliersSetup"),$linkback,'setup'); print "<br>"; +$h = 0; + +$head[$h][0] = DOL_URL_ROOT."/admin/supplier_order.php"; +$head[$h][1] = $langs->trans("SupplierOrder"); +$head[$h][2] = 'Order'; +$hselected=$h; +$h++; + +$head[$h][0] = DOL_URL_ROOT."/admin/supplier_invoice.php"; +$head[$h][1] = $langs->trans("SuppliersInvoice"); +$head[$h][2] = 'Invoice'; + +$h++; + +dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup")); + // Supplier order numbering module @@ -521,137 +486,6 @@ foreach ($dirmodels as $reldir) print '</table><br/>'; -/* - * Modeles documents for supplier invoices - */ - -print_titre($langs->trans("BillsPDFModules")); - -// Defini tableau def de modele -$def = array(); - -$sql = "SELECT nom"; -$sql.= " FROM ".MAIN_DB_PREFIX."document_model"; -$sql.= " WHERE type = 'invoice_supplier'"; -$sql.= " AND entity = ".$conf->entity; - -$resql=$db->query($sql); -if ($resql) -{ - $i = 0; - $num_rows=$db->num_rows($resql); - while ($i < $num_rows) - { - $array = $db->fetch_array($resql); - array_push($def, $array[0]); - $i++; - } -} -else -{ - dol_print_error($db); -} - - -print '<table class="noborder" width="100%">'."\n"; -print '<tr class="liste_titre">'."\n"; -print '<td width="100">'.$langs->trans("Name").'</td>'."\n"; -print '<td>'.$langs->trans("Description").'</td>'."\n"; -print '<td align="center" width="60">'.$langs->trans("Status").'</td>'."\n"; -print '<td align="center" width="60">'.$langs->trans("Default").'</td>'."\n"; -print '<td align="center" width="40" colspan="2">'.$langs->trans("Info").'</td>'; -print '</tr>'."\n"; - -clearstatcache(); - -foreach ($dirmodels as $reldir) -{ - $dir = dol_buildpath($reldir."core/modules/supplier_invoice/pdf/"); - - if (is_dir($dir)) - { - $var=true; - - $handle=opendir($dir); - - if (is_resource($handle)) - { - while (($file = readdir($handle)) !== false) - { - if (preg_match('/\.modules\.php$/i',$file) && substr($file,0,4) == 'pdf_') - { - $name = substr($file, 4, dol_strlen($file) -16); - $classname = substr($file, 0, dol_strlen($file) -12); - - $var=!$var; - print "<tr ".$bc[$var].">\n"; - print "<td>".$name."</td>\n"; - print "<td>"; - require_once $dir.$file; - $module = new $classname($db,$specimenthirdparty); - print $module->description; - print "</td>\n"; - - // Active - if (in_array($name, $def)) - { - print "<td align=\"center\">\n"; - if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name") - { - print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier">'; - print img_picto($langs->trans("Enabled"),'switch_on'); - print '</a>'; - } - else - { - print img_picto($langs->trans("Enabled"),'switch_on'); - } - print "</td>"; - } - else - { - print "<td align=\"center\">\n"; - print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>'; - print "</td>"; - } - - // Defaut - print "<td align=\"center\">"; - if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF == "$name") - { - print img_picto($langs->trans("Default"),'on'); - } - else - { - print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>'; - } - print '</td>'; - - // Info - $htmltooltip = ''.$langs->trans("Name").': '.$module->name; - $htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); - $htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; - $htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>'; - $htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1); - $htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg,1,1); - $htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg,1,1); - print '<td align="center">'; - print $form->textwithpicto('',$htmltooltip,1,0); - print '</td>'; - print '<td align="center">'; - print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimenfacture&module='.$name.'">'.img_object($langs->trans("Preview"),'bill').'</a>'; - print '</td>'; - - print "</tr>\n"; - } - } - closedir($handle); - } - } -} - -print '</table><br/>'; - print_titre($langs->trans("OtherOptions")); print '<table class="noborder" width="100%">'; print '<tr class="liste_titre">'; @@ -662,10 +496,10 @@ print "</tr>\n"; print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; -print '<input type="hidden" name="action" value="set_SUPPLIER_INVOICE_FREE_TEXT">'; +print '<input type="hidden" name="action" value="set_SUPPLIER_ORDER_FREE_TEXT">'; print '<tr '.$bc[$var].'><td colspan="2">'; print $langs->trans("FreeLegalTextOnInvoices").' ('.$langs->trans("AddCRIfTooLong").')<br>'; -print '<textarea name="SUPPLIER_INVOICE_FREE_TEXT" class="flat" cols="120">'.$conf->global->SUPPLIER_INVOICE_FREE_TEXT.'</textarea>'; +print '<textarea name="SUPPLIER_ORDER_FREE_TEXT" class="flat" cols="120">'.$conf->global->SUPPLIER_ORDER_FREE_TEXT.'</textarea>'; print '</td><td align="right">'; print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'; print "</td></tr>\n"; diff --git a/htdocs/core/modules/modFournisseur.class.php b/htdocs/core/modules/modFournisseur.class.php index 4cb3b9163ef5e617c3db6ad5b29ac7c00a81b6fe..7ca64a2c524ea8c62bfb46b708b4664af9480e13 100644 --- a/htdocs/core/modules/modFournisseur.class.php +++ b/htdocs/core/modules/modFournisseur.class.php @@ -72,7 +72,7 @@ class modFournisseur extends DolibarrModules $this->langfiles = array('bills', 'companies', 'suppliers', 'orders'); // Config pages - $this->config_page_url = array("fournisseur.php"); + $this->config_page_url = array("supplier_order.php"); // Constantes $this->const = array(); @@ -92,6 +92,11 @@ class modFournisseur extends DolibarrModules $this->const[$r][1] = "chaine"; $this->const[$r][2] = "canelle"; $r++; + + $this->const[$r][0] = "INVOICE_SUPPLIER_ADDON_NUMBER"; + $this->const[$r][1] = "chaine"; + $this->const[$r][2] = "tulip"; + $r++; // Boxes $this->boxes = array(); diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php new file mode 100644 index 0000000000000000000000000000000000000000..f753d8b2fcee1d3dc03d8baac5b69d1417b60ca6 --- /dev/null +++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php @@ -0,0 +1,147 @@ +<?php +/* Copyright (C) 2005-2008 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com> + * + * 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 3 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, see <http://www.gnu.org/licenses/>. + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/supplier_order/mod_facture_fournisseur_cactus.php + * \ingroup commande + * \brief File containing the Cactus Class of numbering models of suppliers invoices references + */ + +require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_order/modules_facturefournisseur.php'; + + +/** + * Cactus Class of numbering models of suppliers invoices references + */ +class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices +{ + var $version='dolibarr'; // 'development', 'experimental', 'dolibarr' + var $error = ''; + var $nom = 'Cactus'; + var $prefix='SI'; + + + /** + * Return description of numbering model + * + * @return string Text with description + */ + function info() + { + global $langs; + return $langs->trans("SimpleNumRefModelDesc",$this->prefix); + } + + + /** + * Returns a numbering example + * + * @return string Example + */ + function getExample() + { + return $this->prefix."1301-0001"; + } + + + /** + * Tests if the numbers already in force in the database do not cause conflicts that would prevent this numbering. + * + * @return boolean false if conflict, true if ok + */ + function canBeActivated() + { + global $conf,$langs; + + $siyymm=''; $max=''; + + $posindice=8; + $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn"; + $sql.= " WHERE ref LIKE '".$this->prefix."____-%'"; + $sql.= " AND entity = ".$conf->entity; + $resql=$db->query($sql); + if ($resql) + { + $row = $db->fetch_row($resql); + if ($row) { $siyymm = substr($row[0],0,6); $max=$row[0]; } + } + if (! $siyymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i',$siyymm)) + { + return true; + } + else + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorNumRefModel',$max); + return false; + } + } + + /** + * Return next value + * + * @param Societe $objsoc Object third party + * @param Object $object Object + * @return string Value if OK, 0 if KO + */ + function getNextValue($objsoc=0,$object='') + { + global $db,$conf; + + // D'abord on recupere la valeur max + $posindice=8; + $sql = "SELECT MAX(SUBSTRING(ref FROM ".$posindice.")) as max"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn"; + $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; + } + + //$date=time(); + $date=$object->datec; // Not always defined + if (empty($date)) $date=$object->date; // Creation date is order date for suppliers orders + $yymm = strftime("%y%m",$date); + $num = sprintf("%04s",$max+1); + + return $this->prefix.$yymm."-".$num; + } + + + /** + * Renvoie la reference de facture suivante non utilisee + * + * @param Societe $objsoc Object third party + * @param Object $object Object + * @return string Texte descripif + */ + function invoice_get_num($objsoc=0,$object='') + { + return $this->getNextValue($objsoc,$object); + } +} + +?> diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php new file mode 100644 index 0000000000000000000000000000000000000000..72cf50adc6061b2034c86af3a24ae35237ea3d63 --- /dev/null +++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php @@ -0,0 +1,145 @@ +<?php +/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org> + * Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com> + * + * 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 3 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, see <http://www.gnu.org/licenses/>. + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php + * \ingroup commande + * \brief File containing the Tulip Class of numbering models of suppliers invoices references + */ + +require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_invoice/modules_facturefournisseur.php'; + + +/** + \class mod_facture_fournisseur_tulip + \brief Tulip Class of numbering models of suppliers invoices references +*/ +class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices +{ + var $version='dolibarr'; // 'development', 'experimental', 'dolibarr' + var $error = ''; + var $nom = 'Tulip'; + + + /** + * Returns the description of the model numbering + * + * @return string Description Text + */ + function info() + { + global $conf,$langs; + + $langs->load("bills"); + $langs->load("admin"); + + $form = new Form($this->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="updateMaskInvoice">'; + $texte.= '<input type="hidden" name="maskconstinvoice" value="SUPPLIER_INVOICE_TULIP_MASK">'; + $texte.= '<table class="nobordernopadding" width="100%">'; + + $tooltip=$langs->trans("GenericMaskCodes",$langs->transnoentities("Invoice"),$langs->transnoentities("Invoice")); + $tooltip.=$langs->trans("GenericMaskCodes2"); + $tooltip.=$langs->trans("GenericMaskCodes3"); + $tooltip.=$langs->trans("GenericMaskCodes4a",$langs->transnoentities("Invoice"),$langs->transnoentities("Invoice")); + $tooltip.=$langs->trans("GenericMaskCodes5"); + + // Parametrage du prefix + $texte.= '<tr><td>'.$langs->trans("Mask").':</td>'; + $texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskinvoice" value="'.$conf->global->SUPPLIER_INVOICE_TULIP_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; + } + + /** + * Returns a 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 Societe $objsoc Object third party + * @param Object $object Object + * @return string Value if OK, 0 if KO + */ + function getNextValue($objsoc=0,$object='') + { + global $db,$conf; + + require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php'; + + // On defini critere recherche compteur + $mask=$conf->global->SUPPLIER_INVOICE_TULIP_MASK; + + if (! $mask) + { + $this->error='NotConfigured'; + return 0; + } + + $numFinal=get_next_value($db,$mask,'facture_fournisseur','ref','',$objsoc->code_fournisseur,$object->date_commande); + + return $numFinal; + } + + + /** + * Renvoie la reference de facture suivante non utilisee + * + * @param Societe $objsoc Object third party + * @param Object $object Object + * @return string Texte descripif + */ + function invoice_get_num($objsoc=0,$object='') + { + return $this->getNextValue($objsoc,$object); + } +} + +?> \ No newline at end of file diff --git a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php index 5d409dd6c675e68c283ea43adada87798ab6e0e3..7a80cc93bfebf91017638725879be18bb6114c87 100755 --- a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php +++ b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php @@ -1,6 +1,7 @@ <?php /* Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es> * Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2013 Philippe Grand <philippe.grand@atoo-net.com> * * 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 @@ -20,9 +21,10 @@ /** * \file htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php * \ingroup facture fournisseur - * \brief File that contain parent class for supplier invoices models + * \brief File that contains parent class for supplier invoices models */ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requis car utilise par les classes qui heritent /** @@ -55,6 +57,79 @@ abstract class ModelePDFSuppliersInvoices extends CommonDocGenerator } +/** + * Parent Class of numbering models of suppliers invoices references + */ +abstract class ModeleNumRefSuppliersInvoices +{ + var $error=''; + + /** Return if a model can be used or not + * + * @return boolean true if model can be used + */ + function isEnabled() + { + return true; + } + + /** Returns the default description of the model numbering + * + * @return string Description Text + */ + function info() + { + global $langs; + $langs->load("invoices"); + return $langs->trans("NoDescription"); + } + + /** Returns a numbering example + * + * @return string Example + */ + function getExample() + { + global $langs; + $langs->load("invoices"); + return $langs->trans("NoExample"); + } + + /** Tests if the numbers already in force in the database do not cause conflicts that would prevent this numbering. + * + * @return boolean false if conflict, true if ok + */ + function canBeActivated() + { + return true; + } + + /** Returns next value assigned + * + * @return string Valeur + */ + function getNextValue() + { + global $langs; + return $langs->trans("NotAvailable"); + } + + /** Returns version of the model numbering + * + * @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"); + } +} + /** * Create a document onto disk according to template module. * diff --git a/htdocs/core/modules/supplier_order/modules_commandefournisseur.php b/htdocs/core/modules/supplier_order/modules_commandefournisseur.php index 6b9fd315f187e0b358df87ae9ea39605ea788a20..f9407ba804e2e6760d9f31e2a8675c4a2b8da627 100644 --- a/htdocs/core/modules/supplier_order/modules_commandefournisseur.php +++ b/htdocs/core/modules/supplier_order/modules_commandefournisseur.php @@ -4,7 +4,7 @@ * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr> - * Copyright (C) 2011 Philippe Grand <philippe.grand@atoo-net.com> + * Copyright (C) 2011-2013 Philippe Grand <philippe.grand@atoo-net.com> * * 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 @@ -40,7 +40,7 @@ abstract class ModelePDFSuppliersOrders extends CommonDocGenerator /** - * Return list of active generation modules + * Return list of active generation models * * @param DoliDB $db Database handler * @param string $maxfilenamelength Max length of value to show @@ -64,24 +64,24 @@ abstract class ModelePDFSuppliersOrders extends CommonDocGenerator /** - * Classe mere des modeles de numerotation des references de commandes fournisseurs + * Parent Class of numbering models of suppliers orders references */ abstract class ModeleNumRefSuppliersOrders { var $error=''; - /** Return if a module can be used or not + /** Return if a model can be used or not * - * @return boolean true if module can be used + * @return boolean true if model can be used */ function isEnabled() { return true; } - /** Renvoie la description par defaut du modele de numerotation + /** Returns the default description of the model numbering * - * @return string Texte descripif + * @return string Description Text */ function info() { @@ -90,7 +90,7 @@ abstract class ModeleNumRefSuppliersOrders return $langs->trans("NoDescription"); } - /** Renvoie un exemple de numerotation + /** Returns a numbering example * * @return string Example */ @@ -101,16 +101,16 @@ abstract class ModeleNumRefSuppliersOrders return $langs->trans("NoExample"); } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de conflits qui empecheraient cette numerotation de fonctionner. + /** Tests if the numbers already in force in the database do not cause conflicts that would prevent this numbering. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ function canBeActivated() { return true; } - /** Renvoie prochaine valeur attribuee + /** Returns next value assigned * * @return string Valeur */ @@ -120,9 +120,9 @@ abstract class ModeleNumRefSuppliersOrders return $langs->trans("NotAvailable"); } - /** Renvoie version du module numerotation + /** Returns version of the model numbering * - * @return string Valeur + * @return string Value */ function getVersion() { @@ -143,7 +143,7 @@ abstract class ModeleNumRefSuppliersOrders * @param DoliDB $db Database handler * @param Object $object Object supplier order * @param string $modele Force template to use ('' to not force) - * @param Translate $outputlangs Object lang a utiliser pour traduction + * @param Translate $outputlangs Object lang to use for traduction * @param int $hidedetails Hide details of lines * @param int $hidedesc Hide description * @param int $hideref Hide ref @@ -164,7 +164,7 @@ function supplier_order_pdf_create($db, $object, $modele, $outputlangs, $hidedet $srctemplatepath=''; - // Positionne le modele sur le nom du modele a utiliser + // Set the model on the model name to use if (! dol_strlen($modele)) { if (! empty($conf->global->COMMANDE_SUPPLIER_ADDON_PDF)) @@ -177,7 +177,7 @@ function supplier_order_pdf_create($db, $object, $modele, $outputlangs, $hidedet } } - // If selected modele is a filename template (then $modele="modelname:filename") + // If selected model is a filename template (then $modele="modelname:filename") $tmp=explode(':',$modele,2); if (! empty($tmp[1])) { @@ -195,7 +195,7 @@ function supplier_order_pdf_create($db, $object, $modele, $outputlangs, $hidedet { $file = $prefix."_".$modele.".modules.php"; - // On verifie l'emplacement du modele + // We checked the location of the model $file=dol_buildpath($reldir."core/modules/supplier_order/pdf/".$file,0); if (file_exists($file)) { @@ -207,7 +207,7 @@ function supplier_order_pdf_create($db, $object, $modele, $outputlangs, $hidedet if ($filefound) break; } - // Charge le modele + // Load the model if ($filefound) { require_once $file; @@ -225,12 +225,12 @@ function supplier_order_pdf_create($db, $object, $modele, $outputlangs, $hidedet require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; dol_delete_preview($object); - // Appel des triggers + // Calls triggers include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; $interface=new Interfaces($db); $result=$interface->run_triggers('ORDER_SUPPLIER_BUILDDOC',$object,$user,$langs,$conf); if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // End calls triggers return 1; } diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 04a95bf5980b1d8dc849fceb25298be9a32f1339..ccf194dfeb045afd11ff01ee8b5bc623e84b926a 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -1383,6 +1383,7 @@ MultiCompanySetup=Configuration du module Multi-société SuppliersSetup=Configuration du module Fournisseurs SuppliersCommandModel=Modèle de commandes fournisseur complet (logo...) SuppliersInvoiceModel=Modèle de factures fournisseur complet (logo...) +SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=Configuration du module GeoIP Maxmind PathToGeoIPMaxmindCountryDataFile=Chemin du fichier Maxmind contenant les conversions IP->Pays.<br>Exemple: /usr/local/share/GeoIP/GeoIP.dat