diff --git a/htdocs/compta/bank/account.class.php b/htdocs/compta/bank/account.class.php index d1be7d54984..163f346493a 100644 --- a/htdocs/compta/bank/account.class.php +++ b/htdocs/compta/bank/account.class.php @@ -101,7 +101,7 @@ class Account * \param type Type de lien (payment, company, member, ...) * \return int <0 si ko, id line si ok */ - function add_url_line($line_id, $url_id, $url, $label, $type='') + function add_url_line($line_id, $url_id, $url, $label, $type) { $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_url (fk_bank, url_id, url, label, type)"; $sql .= " VALUES ('".$line_id."', '".$url_id."', '".$url."', '".addslashes($label)."', '".$type."')"; diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/ligne.php index eddb4ab4a7a..df9f5345a80 100644 --- a/htdocs/compta/bank/ligne.php +++ b/htdocs/compta/bank/ligne.php @@ -376,6 +376,12 @@ if ($result) print $links[$key]['label']; print ''; } + else if ($links[$key]['type']=='banktransfert') { + print ''; + print img_object($langs->trans('ShowTransaction'),'payment').' '; + print $langs->trans("TransactionOnTheOtherAccount"); + print ''; + } else { print ''; print $links[$key]['label']; diff --git a/htdocs/compta/bank/virement.php b/htdocs/compta/bank/virement.php index 7ffe9ae7c6c..297ce7ece85 100644 --- a/htdocs/compta/bank/virement.php +++ b/htdocs/compta/bank/virement.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2006 Laurent Destailleur + * Copyright (C) 2004-2007 Laurent Destailleur * * 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 @@ -17,7 +17,6 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Id$ - * $Source$ */ /** @@ -44,7 +43,7 @@ if (!$user->rights->banque->modifier) if ($_POST["action"] == 'add') { $mesg=''; - $dateo = $_POST["reyear"]."-".$_POST["remonth"]."-".$_POST["reday"]; + $dateo = dolibarr_mktime(12,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); $label = $_POST["label"]; $amount= $_POST["amount"]; @@ -60,37 +59,31 @@ if ($_POST["action"] == 'add') } if (! $error) { + require_once(DOL_DOCUMENT_ROOT.'/compta/bank/account.class.php'); + $db->begin(); - $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank (datec, datev, dateo, label, amount, fk_user_author,fk_account, fk_type)"; - $sql .= " VALUES (now(), '$dateo', '$dateo', '".addslashes($label)."', '".price2num(-1*price2num($amount))."', $user->id, ".$_POST["account_from"].", 'VIR')"; + $accountfrom=new Account($db); + $accountfrom->fetch($_POST["account_from"]); - dolibarr_syslog("Virement insert bank sql=".$sql); - $result = $db->query($sql); - if (!$result) + $bank_line_id_from = $accountfrom->addline($dateo, 'VIR', $label, -1*price2num($amount), '', '', $user); + + $accountto=new Account($db); + $accountto->fetch($_POST["account_to"]); + + $bank_line_id_to = $accountto->addline($dateo, 'VIR', $label, price2num($amount), '', '', $user); + + $result1=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + $result2=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + + if ($result1 > 0 && $result2 > 0) { - $db->rollback(); - dolibarr_print_error($db); - } - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank (datec, datev, dateo, label, amount, fk_user_author,fk_account, fk_type)"; - $sql .= " VALUES (now(), '$dateo', '$dateo', '".addslashes($label)."', '".price2num($amount)."',$user->id, ".$_POST["account_to"].", 'VIR')"; - - dolibarr_syslog("Virement insert bank sql=".$sql); - $result = $db->query($sql); - if ($result) - { - $accountfrom=new Account($db); - $accountfrom->fetch($_POST["account_from"]); - $accountto=new Account($db); - $accountto->fetch($_POST["account_to"]); - $mesg.="
Le virement depuis « id."\">".$accountfrom->label." » vers « id."\">".$accountto->label." » de ".$amount." ".$langs->trans("Currency".$conf->monnaie)." a été créé.
"; $db->commit(); } else { - $mesg.="
".$db->lasterror()."
"; + $mesg.="
".$accountfrom->error.' '.$accountto->error."
"; $db->rollback(); } } diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 631a6154674..423ea0a8255 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -174,6 +174,8 @@ if (isset($_POST['action']) && $_POST['action'] == 'upgrade') migrate_paiements_orphelins_1($db,$langs,$conf); migrate_paiements_orphelins_2($db,$langs,$conf); + + migrate_links_transfert($db,$langs,$conf); // On commit dans tous les cas. // La procédure etant conçue pour pouvoir passer plusieurs fois quelquesoit la situation. @@ -595,6 +597,83 @@ function migrate_contracts_det($db,$langs,$conf) } +function migrate_links_transfert($db,$langs,$conf) +{ + print ''; + + $nberr=0; + + print '
'; + print ''.$langs->trans('MigrationBankTransfertsUpdate')."
\n"; + + $sql = "SELECT ba.rowid as barowid, bb.rowid as bbrowid"; + $sql.= " FROM ".MAIN_DB_PREFIX."bank as bb, ".MAIN_DB_PREFIX."bank as ba"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu ON bu.fk_bank = ba.rowid"; + $sql.= " WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account"; + $sql.= " AND ba.datev = bb.datev AND ba.datec = bb.datec"; + $sql.= " AND bu.fk_bank IS NULL"; + $resql = $db->query($sql); + + dolibarr_install_syslog("migrate_links_transfert sql=".$sql); + if ($resql) + { + $i = 0; + $row = array(); + $num = $db->num_rows($resql); + + if ($num) + { + print $langs->trans('MigrationBankTransfertsToUpdate', $num)."
\n"; + $db->begin(); + + while ($i < $num) + { + $obj = $db->fetch_object($resql); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_url ("; + $sql.= "fk_bank, url_id, url, label, type"; + $sql.= ")"; + $sql.= " VALUES ("; + $sql.= $obj->barowid.",".$obj->bbrowid.", '/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'"; + $sql.= ")"; + + print $sql.'
'; + dolibarr_install_syslog("migrate_links_transfert sql=".$sql); + + if (! $db->query($sql)) + { + dolibarr_print_error($db); + $nberr++; + } + + $i++; + } + + if (! $nberr) + { + // $db->rollback(); + $db->commit(); + print $langs->trans('MigrationSuccessfullUpdate')."
"; + } + else + { + $db->rollback(); + print $langs->trans('MigrationUpdateFailed').'
'; + } + } + else { + print $langs->trans('MigrationBankTransfertsNothingToUpdate')."
\n"; + } + } + else + { + dolibarr_print_error($db); + } + + print ''; +} + + /* * Mise a jour des date de contrats non renseignées */ diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index 9c32fff75da..8e66c4e5691 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -110,3 +110,4 @@ ThisWillAlsoDeleteBankRecord=This will also delete generated bank transactions BankMovements=Movements CashBudget=Cash budget ExportDataset_banque_1=Bank transactions and account statement +TransactionOnTheOtherAccount=Transaction on the other account diff --git a/htdocs/langs/fr_FR/banks.lang b/htdocs/langs/fr_FR/banks.lang index aaf4361ac50..5085ac86d7d 100644 --- a/htdocs/langs/fr_FR/banks.lang +++ b/htdocs/langs/fr_FR/banks.lang @@ -109,4 +109,5 @@ ConfirmDeleteTransaction=Etes-vous sur de vouloir supprimer cette transaction ? ThisWillAlsoDeleteBankRecord=Ceci supprimera aussi les écritures banquaires générées BankMovements=Mouvements CashBudget=Budget de trésorerie -ExportDataset_banque_1=Transaction bancaire et relevé \ No newline at end of file +ExportDataset_banque_1=Transaction bancaire et relevé +TransactionOnTheOtherAccount=Transaction sur l'autre compte \ No newline at end of file diff --git a/mysql/migration/2.1.0-2.2.0.sql b/mysql/migration/2.1.0-2.2.0.sql index 220078b25d5..fb718723e3d 100644 --- a/mysql/migration/2.1.0-2.2.0.sql +++ b/mysql/migration/2.1.0-2.2.0.sql @@ -21,10 +21,11 @@ update llx_bank_account set currency_code='EUR' where (currency_code IS NULL or -- Sequence de requete pour nettoyage et correction champ type table llx_bank_url update llx_bank_url set type='company' where (type is null or type = '') and url like '%compta/fiche.php?socid=%'; -alter table llx_bank_url modify `type` enum("","?","company","payment","payment_supplier","member","subscription","donation","sc","payment_sc"); +alter table llx_bank_url modify `type` varchar(20); update llx_bank_url set type='?' where (type is null or type = '') and url like '%compta/facture.php?facid=%'; update llx_bank_url set type='payment_supplier' where (type='' or type is null) and url like '%fourn/paiement/fiche.php?id=%'; -alter table llx_bank_url modify `type` enum("?","company","payment","payment_supplier","member","subscription","donation","sc","payment_sc") NOT NULL; +update llx_bank_url set type='?' where (type is null or type = ''); +alter table llx_bank_url modify `type` varchar(20) NOT NULL; insert into llx_rights_def (id, libelle, module, type, bydefault, subperms, perms) values (114,'Rapprocher transactions','banque','w',0,null,'consolidate'); diff --git a/mysql/tables/llx_bank_url.sql b/mysql/tables/llx_bank_url.sql index 6b053592aca..e3f2379e859 100644 --- a/mysql/tables/llx_bank_url.sql +++ b/mysql/tables/llx_bank_url.sql @@ -28,5 +28,5 @@ create table llx_bank_url url_id integer, url varchar(255), label varchar(255), - type enum("?","company","payment","payment_supplier","member","subscription","donation","sc","payment_sc") NOT NULL + type varchar(20) NOT NULL )type=innodb;