diff --git a/htdocs/admin/bank.php b/htdocs/admin/bank.php
index de1f766237365..9b5cb77e07243 100644
--- a/htdocs/admin/bank.php
+++ b/htdocs/admin/bank.php
@@ -26,6 +26,7 @@
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
$langs->load("admin");
@@ -89,6 +90,9 @@
print '
';
+$head = bank_admin_prepare_head(null);
+dol_fiche_head($head, 'general', $langs->trans("BankSetupModule"), 0, 'account');
+
print '
';
print '';
print ''.$langs->trans("Parameters").' | ';
diff --git a/htdocs/admin/bank_extrafields.php b/htdocs/admin/bank_extrafields.php
new file mode 100644
index 0000000000000..b28c8b417c301
--- /dev/null
+++ b/htdocs/admin/bank_extrafields.php
@@ -0,0 +1,154 @@
+
+ * Copyright (C) 2003 Jean-Louis Bergamo
+ * Copyright (C) 2004-2011 Laurent Destailleur
+ * Copyright (C) 2012 Regis Houssin
+ * Copyright (C) 2014 Florian Henry
+ *
+ * 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/bank_extrafields.php
+ * \ingroup bank
+ * \brief Page to setup extra fields of bank
+ */
+
+require '../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
+
+$langs->load("banks");
+$langs->load("admin");
+
+$extrafields = new ExtraFields($db);
+$form = new Form($db);
+
+// List of supported format
+$tmptype2label=ExtraFields::$type2label;
+$type2label=array('');
+foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->trans($val);
+
+$action=GETPOST('action', 'alpha');
+$attrname=GETPOST('attrname', 'alpha');
+$elementtype='bank_account'; //Must be the $element of the class that manage extrafield
+
+if (!$user->admin) accessforbidden();
+
+
+/*
+ * Actions
+ */
+
+require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php';
+
+
+
+/*
+ * View
+ */
+
+llxHeader('',$langs->trans("BankSetupModule"),$help_url);
+
+
+$linkback=''.$langs->trans("BackToModuleList").'';
+print_fiche_titre($langs->trans("BankSetupModule"),$linkback,'setup');
+
+
+$head = bank_admin_prepare_head(null);
+
+dol_fiche_head($head, 'attributes', $langs->trans("Bank"), 0, 'account');
+
+
+print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n";
+print '
';
+
+// Load attribute_label
+$extrafields->fetch_name_optionals_label($elementtype);
+
+print "";
+
+print '';
+print ''.$langs->trans("Position").' | ';
+print ''.$langs->trans("Label").' | ';
+print ''.$langs->trans("AttributeCode").' | ';
+print ''.$langs->trans("Type").' | ';
+print ''.$langs->trans("Size").' | ';
+print ''.$langs->trans("Unique").' | ';
+print ''.$langs->trans("Required").' | ';
+print ' | ';
+print "
\n";
+
+$var=True;
+foreach($extrafields->attribute_type as $key => $value)
+{
+ $var=!$var;
+ print "";
+ print "".$extrafields->attribute_pos[$key]." | \n";
+ print "".$extrafields->attribute_label[$key]." | \n";
+ print "".$key." | \n";
+ print "".$type2label[$extrafields->attribute_type[$key]]." | \n";
+ print ''.$extrafields->attribute_size[$key]." | \n";
+ print ''.yn($extrafields->attribute_unique[$key])." | \n";
+ print ''.yn($extrafields->attribute_required[$key])." | \n";
+ print ''.img_edit().'';
+ print " ".img_delete()." | \n";
+ print "
";
+ // $i++;
+}
+
+print "
";
+
+dol_fiche_end();
+
+
+// Buttons
+if ($action != 'create' && $action != 'edit')
+{
+ print '";
+}
+
+
+/* ************************************************************************** */
+/* */
+/* Creation d'un champ optionnel
+ /* */
+/* ************************************************************************** */
+
+if ($action == 'create')
+{
+ print "
";
+ print_titre($langs->trans('NewAttribute'));
+
+ require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
+}
+
+/* ************************************************************************** */
+/* */
+/* Edition d'un champ optionnel */
+/* */
+/* ************************************************************************** */
+if ($action == 'edit' && ! empty($attrname))
+{
+ print "
";
+ print_titre($langs->trans("FieldEdition", $attrname));
+
+ require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
+}
+
+llxFooter();
+
+$db->close();
diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php
index 81596540489d4..9b4efe79eb13a 100644
--- a/htdocs/compta/bank/card.php
+++ b/htdocs/compta/bank/card.php
@@ -31,6 +31,7 @@
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbank.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
+require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
$langs->load("banks");
$langs->load("categories");
@@ -48,6 +49,10 @@
if ($user->societe_id) $socid=$user->societe_id;
$result=restrictedArea($user,'banque',$id,'bank_account&bank_account','','',$fieldid);
+$account = new Account($db);
+$extrafields = new ExtraFields($db);
+// fetch optionals attributes and labels
+$extralabels=$extrafields->fetch_name_optionals_label($account->table_element);
/*
* Actions
@@ -100,6 +105,9 @@
$error++;
}
+ // Fill array 'array_options' with data from add form
+ $ret = $extrafields->setOptionalsFromPost($extralabels,$account);
+
if (! $error)
{
$id = $account->create($user);
@@ -172,6 +180,9 @@
$error++;
}
+ // Fill array 'array_options' with data from add form
+ $ret = $extrafields->setOptionalsFromPost($extralabels,$account);
+
if (! $error)
{
$result = $account->update($user);
@@ -306,6 +317,15 @@
$doleditor=new DolEditor('account_comment',$account->comment,'',200,'dolibarr_notes','',false,true,$conf->global->FCKEDITOR_ENABLE_SOCIETE,10,70);
$doleditor->Create();
print '
';
+
+ // Other attributes
+ $parameters=array('colspan' => 3);
+ $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$account,$action); // Note that $action and $object may have been modified by hook
+ if (empty($reshook) && ! empty($extrafields->attribute_label))
+ {
+ print $account->showOptionals($extrafields,'edit',$parameters);
+ }
+
print '
';
@@ -461,6 +481,14 @@
print ''.$langs->trans("Comment").' | ';
print ''.$account->comment.' |
';
+ // Other attributes
+ $parameters=array('colspan' => 3);
+ $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$account,$action); // Note that $action and $object may have been modified by hook
+ if (empty($reshook) && ! empty($extrafields->attribute_label))
+ {
+ print $account->showOptionals($extrafields);
+ }
+
print '';
print '
';
@@ -615,6 +643,15 @@
$doleditor->Create();
print '';
+ // Other attributes
+ $parameters=array('colspan' => 3);
+ $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$account,$action); // Note that $action and $object may have been modified by hook
+ if (empty($reshook) && ! empty($extrafields->attribute_label))
+ {
+ print $account->showOptionals($extrafields,'edit');
+ }
+
+
print '';
print '
';
diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php
index e2a039cf2d812..a50a7f448a9c8 100644
--- a/htdocs/compta/bank/class/account.class.php
+++ b/htdocs/compta/bank/class/account.class.php
@@ -343,7 +343,7 @@ function addline($date, $oper, $label, $amount, $num_chq, $categorie, $user, $em
*/
function create($user='')
{
- global $langs,$conf;
+ global $langs,$conf, $hookmanager;
// Clean parameters
if (! $this->min_allowed) $this->min_allowed=0;
@@ -441,6 +441,23 @@ function create($user='')
$this->error=$this->db->lasterror();
return -3;
}
+
+ // Actions on extra fields (by external module or standard code)
+ $hookmanager->initHooks(array('bankdao'));
+ $parameters=array('id'=>$this->id);
+ $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
+ if (empty($reshook))
+ {
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+ {
+ $result=$this->insertExtraFields();
+ if ($result < 0)
+ {
+ return -4;
+ }
+ }
+ }
+ else if ($reshook < 0) return -5;
}
return $this->id;
}
@@ -466,7 +483,7 @@ function create($user='')
*/
function update($user='')
{
- global $langs,$conf;
+ global $langs,$conf, $hookmanager;
// Clean parameters
if (! $this->min_allowed) $this->min_allowed=0;
@@ -517,6 +534,25 @@ function update($user='')
$result = $this->db->query($sql);
if ($result)
{
+
+ // Actions on extra fields (by external module or standard code)
+ $hookmanager->initHooks(array('bankdao'));
+ $parameters=array('id'=>$this->id);
+ $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
+ if (empty($reshook))
+ {
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
+ {
+ $result=$this->insertExtraFields();
+ if ($result < 0)
+ {
+ return -1;
+ }
+ }
+ }
+ else if ($reshook < 0) return -1;
+
+
return 1;
}
else
@@ -663,6 +699,15 @@ function fetch($id,$ref='')
$this->min_allowed = $obj->min_allowed;
$this->min_desired = $obj->min_desired;
$this->comment = $obj->comment;
+
+ // Retreive all extrafield for thirdparty
+ // fetch optionals attributes and labels
+ require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
+ $extrafields=new ExtraFields($this->db);
+ $extralabels=$extrafields->fetch_name_optionals_label($this->table_element,true);
+ $this->fetch_optionals($this->id,$extralabels);
+
+
return 1;
}
else
@@ -694,6 +739,18 @@ function delete()
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$result = $this->db->query($sql);
if ($result) {
+
+ // Remove extrafields
+ if ((empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
+ {
+ $result=$this->deleteExtraFields();
+ if ($result < 0)
+ {
+ return -1;
+ dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
+ }
+ }
+
return 1;
}
else {
diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php
index 488a4c3a530ee..e3fb787657be3 100644
--- a/htdocs/core/lib/bank.lib.php
+++ b/htdocs/core/lib/bank.lib.php
@@ -89,6 +89,39 @@ function bank_prepare_head($object)
return $head;
}
+/**
+ * Prepare array with list of tabs
+ *
+ * @param Object $object Object related to tabs
+ * @return array Array of tabs to shoc
+ */
+function bank_admin_prepare_head($object)
+{
+ global $langs, $conf, $user;
+ $h = 0;
+ $head = array();
+
+ $head[$h][0] = DOL_URL_ROOT . '/admin/bank.php';
+ $head[$h][1] = $langs->trans("Miscellaneous");
+ $head[$h][2] = 'general';
+ $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
+ // $this->tabs = array('entity:-tabname); to remove a tab
+ complete_head_from_modules($conf, $langs, $object, $head, $h, 'bank_admin');
+
+ $head[$h][0] = DOL_URL_ROOT.'/admin/bank_extrafields.php';
+ $head[$h][1] = $langs->trans("ExtraFields");
+ $head[$h][2] = 'attributes';
+ $h++;
+
+ complete_head_from_modules($conf, $langs, $object, $head, $h, 'bank_admin', 'remove');
+
+ return $head;
+ }
/**
* Check account number informations for a bank account
diff --git a/htdocs/install/mysql/tables/llx_bank_account_extrafields.key.sql b/htdocs/install/mysql/tables/llx_bank_account_extrafields.key.sql
new file mode 100644
index 0000000000000..0f6e80521154b
--- /dev/null
+++ b/htdocs/install/mysql/tables/llx_bank_account_extrafields.key.sql
@@ -0,0 +1,20 @@
+-- ===================================================================
+-- Copyright (C) 2014 Florian Henry
+--
+-- 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 .
+--
+-- ===================================================================
+
+
+ALTER TABLE llx_bank_account_extrafields ADD INDEX idx_bank_account_extrafields (fk_object);
diff --git a/htdocs/install/mysql/tables/llx_bank_account_extrafields.sql b/htdocs/install/mysql/tables/llx_bank_account_extrafields.sql
new file mode 100644
index 0000000000000..97b1508237cd6
--- /dev/null
+++ b/htdocs/install/mysql/tables/llx_bank_account_extrafields.sql
@@ -0,0 +1,26 @@
+-- ========================================================================
+-- Copyright (C) 2014 Florian Henry
+--
+-- 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 .
+--
+-- ========================================================================
+
+create table llx_bank_account_extrafields
+(
+ rowid integer AUTO_INCREMENT PRIMARY KEY,
+ tms timestamp,
+ fk_object integer NOT NULL,
+ import_key varchar(14) -- import key
+) ENGINE=innodb;
+