diff --git a/htdocs/admin/payment.php b/htdocs/admin/payment.php
new file mode 100644
index 00000000000..1bf794d52f8
--- /dev/null
+++ b/htdocs/admin/payment.php
@@ -0,0 +1,219 @@
+
+ *
+ * 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 .
+ */
+
+/**
+ * \file htdocs/admin/payment.php
+ * \ingroup facture
+ * \brief Page to setup invoices payments
+ */
+
+require '../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
+
+$langs->load("admin");
+$langs->load("errors");
+$langs->load('other');
+$langs->load('bills');
+
+if (! $user->admin) accessforbidden();
+
+$action = GETPOST('action','alpha');
+$value = GETPOST('value','alpha');
+$label = GETPOST('label','alpha');
+$scandir = GETPOST('scandir','alpha');
+$type='invoice';
+
+
+/*
+ * Actions
+ */
+
+if ($action == 'updateMask')
+{
+ $maskconstpayment=GETPOST('maskconstpayment','alpha');
+ $maskpayment=GETPOST('maskpayment','alpha');
+ if ($maskconstpayment) $res = dolibarr_set_const($db,$maskconstpayment,$maskpayment,'chaine',0,'',$conf->entity);
+
+ if (! $res > 0) $error++;
+
+ if (! $error)
+ {
+ setEventMessage($langs->trans("SetupSaved"));
+ }
+ else
+ {
+ setEventMessage($langs->trans("Error"),'errors');
+ }
+}
+
+ if ($action == 'setmod')
+{
+ dolibarr_set_const($db, "PAYMENT_ADDON",$value,'chaine',0,'',$conf->entity);
+}
+
+/*
+ * View
+ */
+
+$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
+
+llxHeader("",$langs->trans("BillsSetup"),'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura');
+
+$form=new Form($db);
+
+
+$linkback=''.$langs->trans("BackToModuleList").'';
+print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup');
+
+$head = invoice_admin_prepare_head();
+dol_fiche_head($head, 'payment', $langs->trans("Invoices"), 0, 'invoice');
+
+/*
+ * Numbering module
+ */
+
+print load_fiche_titre($langs->trans("PaymentsNumberingModule"));
+
+print '
';
+print '';
+print '| '.$langs->trans("Name").' | ';
+print ''.$langs->trans("Description").' | ';
+print ''.$langs->trans("Example").' | ';
+print ''.$langs->trans("Status").' | ';
+print ''.$langs->trans("ShortInfo").' | ';
+print '
'."\n";
+
+clearstatcache();
+
+foreach ($dirmodels as $reldir)
+{
+ $dir = dol_buildpath($reldir."core/modules/payment/");
+ if (is_dir($dir))
+ {
+ $handle = opendir($dir);
+ if (is_resource($handle))
+ {
+ $var=true;
+
+ while (($file = readdir($handle))!==false)
+ {
+ if (! is_dir($dir.$file) || (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS'))
+ {
+ $filebis = $file;
+ $classname = preg_replace('/\.php$/','',$file);
+ // For compatibility
+ if (! is_file($dir.$filebis))
+ {
+ $filebis = $file."/".$file.".modules.php";
+ $classname = "mod_payment_".$file;
+ }
+ // Check if there is a filter on country
+ preg_match('/\-(.*)_(.*)$/',$classname,$reg);
+ if (! empty($reg[2]) && $reg[2] != strtoupper($mysoc->country_code)) continue;
+
+ $classname = preg_replace('/\-.*$/','',$classname);
+ if (! class_exists($classname) && is_readable($dir.$filebis) && (preg_match('/mod_/',$filebis) || preg_match('/mod_/',$classname)) && substr($filebis, dol_strlen($filebis)-3, 3) == 'php')
+ {
+ // Chargement de la classe de numerotation
+ require_once $dir.$filebis;
+
+ $module = new $classname($db);
+
+ // 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 '| ';
+ echo preg_replace('/\-.*$/','',preg_replace('/mod_payment_/','',preg_replace('/\.php$/','',$file)));
+ print " | \n";
+
+ print $module->info();
+
+ print ' | ';
+
+ // Show example of numbering module
+ print '';
+ $tmp=$module->getExample();
+ if (preg_match('/^Error/',$tmp)) print ' '.$langs->trans($tmp).' ';
+ elseif ($tmp=='NotConfigured') print $langs->trans($tmp);
+ else print $tmp;
+ print ' | '."\n";
+
+ print '';
+ //print "> ".$conf->global->PAYMENT_ADDON." - ".$file;
+ if ($conf->global->PAYMENT_ADDON == $file || $conf->global->PAYMENT_ADDON.'.php' == $file)
+ {
+ print img_picto($langs->trans("Activated"),'switch_on');
+ }
+ else
+ {
+ print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'';
+ }
+ print ' | ';
+
+ $payment=new Paiement($db);
+ $payment->initAsSpecimen();
+
+ // Example
+ $htmltooltip='';
+ $htmltooltip.=''.$langs->trans("Version").': '.$module->getVersion().'
';
+ $nextval=$module->getNextValue($mysoc,$payment);
+ if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
+ $htmltooltip.=$langs->trans("NextValue").': ';
+ if ($nextval) {
+ if (preg_match('/^Error/',$nextval) || $nextval=='NotConfigured')
+ $nextval = $langs->trans($nextval);
+ $htmltooltip.=$nextval.'
';
+ } else {
+ $htmltooltip.=$langs->trans($module->error).'
';
+ }
+ }
+
+ print '';
+ print $form->textwithpicto('',$htmltooltip,1,0);
+
+ if ($conf->global->PAYMENT_ADDON.'.php' == $file) // If module is the one used, we show existing errors
+ {
+ if (! empty($module->error)) dol_htmloutput_mesg($module->error,'','error',1);
+ }
+
+ print ' | ';
+
+ print "
\n";
+
+ }
+ }
+ }
+ }
+ closedir($handle);
+ }
+ }
+}
+
+print '
';
+
+dol_fiche_end();
+
+
+llxFooter();
+
+$db->close();
diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php
index 9baa15a417f..2d8154c7b9e 100644
--- a/htdocs/compta/paiement/class/paiement.class.php
+++ b/htdocs/compta/paiement/class/paiement.class.php
@@ -4,7 +4,8 @@
* Copyright (C) 2005 Marc Barilley / Ocebo
* Copyright (C) 2012 Cédric Salvador
* Copyright (C) 2014 Raphaël Doursenaud
- * Copyright (C) 2014 Marcos García
+ * Copyright (C) 2014 Marcos García
+ * Copyright (C) 2015 Juanjo Menent
*
* 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
@@ -777,6 +778,30 @@ class Paiement extends CommonObject
}
}
+ /**
+ * Initialise an instance with random values.
+ * Used to build previews or test instances.
+ * id must be 0 if object instance is a specimen.
+ *
+ * @param string $option ''=Create a specimen invoice with lines, 'nolines'=No lines
+ * @return void
+ */
+ function initAsSpecimen($option='')
+ {
+ global $user,$langs,$conf;
+
+ $now=dol_now();
+ $arraynow=dol_getdate($now);
+ $nownotime=dol_mktime(0, 0, 0, $arraynow['mon'], $arraynow['mday'], $arraynow['year']);
+
+ // Initialize parameters
+ $this->id=0;
+ $this->ref = 'SPECIMEN';
+ $this->specimen=1;
+ $this->facid = 1;
+ $this->datepaye = $nownotime;
+ }
+
/**
* Return clicable name (with picto eventually)
diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php
index ac9da88bdc2..be73dd12b37 100644
--- a/htdocs/core/lib/invoice.lib.php
+++ b/htdocs/core/lib/invoice.lib.php
@@ -2,6 +2,7 @@
/* Copyright (C) 2005-2012 Laurent Destailleur
* Copyright (C) 2005-2012 Regis Houssin
* Copyright (C) 2013 Florian Henry
+ * Copyright (C) 2015 Juanjo Menent
*
* 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
@@ -120,6 +121,11 @@ function invoice_admin_prepare_head()
$head[$h][2] = 'general';
$h++;
+ $head[$h][0] = DOL_URL_ROOT.'/admin/payment.php';
+ $head[$h][1] = $langs->trans("Payments");
+ $head[$h][2] = 'payment';
+ $h++;
+
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
diff --git a/htdocs/core/modules/payment/mod_payment_ant.php b/htdocs/core/modules/payment/mod_payment_ant.php
index 8cc74a299b3..b4f90906c67 100644
--- a/htdocs/core/modules/payment/mod_payment_ant.php
+++ b/htdocs/core/modules/payment/mod_payment_ant.php
@@ -26,7 +26,7 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/payment/modules_payment.php';
/**
- * Class to manage customer order numbering rules Saphir
+ * Class to manage customer payment numbering rules Ant
*/
class mod_payment_ant extends ModeleNumRefPayments
{
@@ -52,7 +52,7 @@ class mod_payment_ant extends ModeleNumRefPayments
$texte.= '