Fix: If a transaction was reconciliated and should not, there was no way to reverse error.

This commit is contained in:
Laurent Destailleur 2010-12-27 23:40:32 +00:00
parent a2f949a4df
commit e9b48f8b0b
4 changed files with 346 additions and 295 deletions

View File

@ -53,6 +53,7 @@ For users:
- New: Task #10796: Add Spain ProfId1 Verification - New: Task #10796: Add Spain ProfId1 Verification
- New: Page "supplier summary" is now available. - New: Page "supplier summary" is now available.
- New: Task #10611: Add option to choose order of field in bank account info on PDF - New: Task #10611: Add option to choose order of field in bank account info on PDF
- New: If a transaction was reconciliated and should not, there was no way to reverse error.
- Perf: Avoid reading database to determine country code after each - Perf: Avoid reading database to determine country code after each
page call. page call.
- Fix: Special chars are now supported in ECM module for filename (not yet for - Fix: Special chars are now supported in ECM module for filename (not yet for

View File

@ -23,7 +23,7 @@
/** /**
* \file htdocs/compta/bank/account.php * \file htdocs/compta/bank/account.php
* \ingroup banque * \ingroup banque
* \brief List of detail of bank transaction for an account * \brief List of details of bank transactions for an account
* \version $Id$ * \version $Id$
*/ */
@ -646,12 +646,12 @@ if ($account || $_GET["ref"])
print '<td align="right">-</td>'; print '<td align="right">-</td>';
} }
// Receipt conciliate or edit link // Transaction reconciliated or edit link
if ($objp->rappro && $acct->type != 2) // Si non compte cash if ($objp->rappro && $acct->type != 2) // Si non compte cash
{ {
print "<td align=\"center\" nowrap>"; print "<td align=\"center\" nowrap>";
print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$objp->rowid.'&amp;account='.$acct->id.'&amp;page='.$page.'">'; print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$objp->rowid.'&amp;account='.$acct->id.'&amp;page='.$page.'">';
print img_view(); print img_edit();
print '</a>'; print '</a>';
print "&nbsp; "; print "&nbsp; ";
print "<a href=\"releve.php?num=$objp->num_releve&amp;account=$acct->id\">$objp->num_releve</a>"; print "<a href=\"releve.php?num=$objp->num_releve&amp;account=$acct->id\">$objp->num_releve</a>";

View File

@ -137,15 +137,27 @@ if ($_POST["action"] == 'emetteur')
$result = $db->query($sql); $result = $db->query($sql);
} }
if ($user->rights->banque->consolidate && $_POST["action"] == 'num_releve') // Reconcile
if ($user->rights->banque->consolidate && ($_POST["action"] == 'num_releve' || $_POST["action"] == 'setreconcile'))
{
$num_rel=trim($_POST["num_rel"]);
$rappro=$_POST['reconciled']?1:0;
// Check parameters
if ($rappro && empty($num_rel))
{
$mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("AccountStatement"));
$error++;
}
if (! $error)
{ {
$db->begin(); $db->begin();
$num_rel=trim($_POST["num_rel"]);
$sql = "UPDATE ".MAIN_DB_PREFIX."bank"; $sql = "UPDATE ".MAIN_DB_PREFIX."bank";
$sql.= " SET num_releve=".($num_rel?"'".$num_rel."'":"null"); $sql.= " SET num_releve=".($num_rel?"'".$num_rel."'":"null");
if (! $num_rel) $sql.= ", rappro = 0"; if (empty($num_rel)) $sql.= ", rappro = 0";
else $sql.=", rappro = ".$rappro;
$sql.= " WHERE rowid = ".$rowid; $sql.= " WHERE rowid = ".$rowid;
dol_syslog("ligne.php sql=".$sql, LOG_DEBUG); dol_syslog("ligne.php sql=".$sql, LOG_DEBUG);
@ -160,6 +172,8 @@ if ($user->rights->banque->consolidate && $_POST["action"] == 'num_releve')
dol_print_error($db); dol_print_error($db);
} }
} }
}
/* /*
@ -203,6 +217,7 @@ $h++;
dol_fiche_head($head, $hselected, $langs->trans('LineRecord'),0,'account'); dol_fiche_head($head, $hselected, $langs->trans('LineRecord'),0,'account');
if ($mesg) print '<div class="error">'.$mesg.'</div><br>';
$sql = "SELECT b.rowid,b.dateo as do,b.datev as dv, b.amount, b.label, b.rappro,"; $sql = "SELECT b.rowid,b.dateo as do,b.datev as dv, b.amount, b.label, b.rappro,";
$sql.= " b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account"; $sql.= " b.num_releve, b.fk_user_author, b.num_chq, b.fk_type, b.fk_account";
@ -248,17 +263,11 @@ if ($result)
$i++; $i++;
print '<form name="update" method="post" action="ligne.php?rowid='.$objp->rowid.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print "<input type=\"hidden\" name=\"action\" value=\"update\">";
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
// Account // Account
print "<tr><td>".$langs->trans("Account")."</td>"; print "<tr><td>".$langs->trans("Account")."</td>";
print '<td colspan="4">'; print '<td colspan="4">';
print '<a href="account.php?account='.$acct->id.'">'.img_object($langs->trans("ShowAccount"),'account').' '.$acct->label.'</a>'; print '<a href="account.php?account='.$acct->id.'">'.img_object($langs->trans("ShowAccount"),'account').' '.$acct->label.'</a>';
print '<input type="hidden" name="accountid" value="'.$acct->id.'">';
print '</td>'; print '</td>';
print '</tr>'; print '</tr>';
@ -327,13 +336,75 @@ if ($result)
print '</td></tr>'; print '</td></tr>';
} }
// Type of payment / Number
print "<tr><td>".$langs->trans("Type")." / ".$langs->trans("Numero")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="type">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print $html->select_types_paiements($objp->fk_type,"value",'',2);
print '<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ? '' : $objp->num_chq).'">';
print '</td><td align="center" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->fk_type.' '.$objp->num_chq.'</td><td>&nbsp;</td>';
}
print "</td></tr>";
// Bank
print "<tr><td>".$langs->trans("Bank")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="banque">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<input type="text" class="flat" size="40" name="banque" value="'.(empty($objp->banque) ? '' : $objp->banque).'">';
print '</td><td align="center" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->banque.'&nbsp;</td><td>&nbsp;</td>';
}
print "</td></tr>";
// Transmitter
print "<tr><td>".$langs->trans("CheckTransmitter")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="emetteur">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<input type="text" class="flat" size="40" name="emetteur" value="'.(empty($objp->emetteur) ? '' : stripslashes($objp->emetteur)).'">';
print '</td><td align="center" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->emetteur.'&nbsp;</td><td>&nbsp;</td>';
}
print "</td></tr>";
print '<form name="update" method="post" action="ligne.php?rowid='.$objp->rowid.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print "<input type=\"hidden\" name=\"action\" value=\"update\">";
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<input type="hidden" name="accountid" value="'.$acct->id.'">';
// Date ope // Date ope
print '<tr><td>'.$langs->trans("DateOperation").'</td>'; print '<tr><td>'.$langs->trans("DateOperation").'</td>';
if (! $objp->rappro && ($user->rights->banque->modifier || $user->rights->banque->consolidate)) if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{ {
print '<td colspan="3">'; print '<td colspan="3">';
$html->select_date($db->jdate($objp->do),'dateo','','','','update'); if ($objp->rappro) print dol_print_date($db->jdate($objp->do),"day");
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'"></td>'; else $html->select_date($db->jdate($objp->do),'dateo','','','','update');
print '</td><td align="center" rowspan="4" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'"'.($objp->rappro?' disabled="true"':'').'></td>';
} }
else else
{ {
@ -344,17 +415,19 @@ if ($result)
// Value date // Value date
print "<tr><td>".$langs->trans("DateValue")."</td>"; print "<tr><td>".$langs->trans("DateValue")."</td>";
if (! $objp->rappro && ($user->rights->banque->modifier || $user->rights->banque->consolidate)) if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{ {
print '<td colspan="3">'; print '<td colspan="3">';
if ($objp->rappro) print dol_print_date($db->jdate($objp->dv),"day");
else
{
$html->select_date($db->jdate($objp->dv),'datev','','','','update'); $html->select_date($db->jdate($objp->dv),'datev','','','','update');
print ' &nbsp; '; print ' &nbsp; ';
print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvprev&amp;account='.$_GET["account"].'&amp;rowid='.$objp->rowid.'">'; print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvprev&amp;account='.$_GET["account"].'&amp;rowid='.$objp->rowid.'">';
print img_edit_remove() . "</a> "; print img_edit_remove() . "</a> ";
print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvnext&amp;account='.$_GET["account"].'&amp;rowid='.$objp->rowid.'">'; print '<a href="'.$_SERVER['PHP_SELF'].'?action=dvnext&amp;account='.$_GET["account"].'&amp;rowid='.$objp->rowid.'">';
print img_edit_add() ."</a>"; print img_edit_add() ."</a>";
print '</td>'; }
print '<td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'"></td>';
} }
else else
{ {
@ -366,9 +439,23 @@ if ($result)
// Description // Description
print "<tr><td>".$langs->trans("Label")."</td>"; print "<tr><td>".$langs->trans("Label")."</td>";
if (! $objp->rappro && ($user->rights->banque->modifier || $user->rights->banque->consolidate)) if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{ {
print '<td colspan="3">'; print '<td colspan="3">';
if ($objp->rappro)
{
if (preg_match('/^\((.*)\)$/i',$objp->label,$reg))
{
// Label generique car entre parentheses. On l'affiche en le traduisant
print $langs->trans($reg[1]);
}
else
{
print $objp->label;
}
}
else
{
print '<input name="label" class="flat" value="'; print '<input name="label" class="flat" value="';
if (preg_match('/^\((.*)\)$/i',$objp->label,$reg)) if (preg_match('/^\((.*)\)$/i',$objp->label,$reg))
{ {
@ -380,8 +467,7 @@ if ($result)
print $objp->label; print $objp->label;
} }
print '" size="50">'; print '" size="50">';
print '</td>'; }
print '<td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
} }
else else
{ {
@ -400,11 +486,12 @@ if ($result)
// Amount // Amount
print "<tr><td>".$langs->trans("Amount")."</td>"; print "<tr><td>".$langs->trans("Amount")."</td>";
if (! $objp->rappro && $user->rights->banque->modifier) if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{ {
print '<td colspan="3">'; print '<td colspan="3">';
print '<input name="amount" class="flat" size="10" value="'.price($objp->amount).'"> '.$langs->trans("Currency".$conf->monnaie); if ($objp->rappro) print price($objp->amount);
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'">'; else print '<input name="amount" class="flat" size="10" value="'.price($objp->amount).'"> '.$langs->trans("Currency".$conf->monnaie);
print '</td>';
} }
else else
{ {
@ -414,86 +501,49 @@ if ($result)
print "</td></tr>"; print "</td></tr>";
print "</form>"; print "</form>";
print "</table>";
// Type paiement
print "<tr><td>".$langs->trans("Type")." / ".$langs->trans("Numero")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="type">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print $html->select_types_paiements($objp->fk_type,"value",'',2);
print '<input type="text" class="flat" name="num_chq" value="'.(empty($objp->num_chq) ? '' : $objp->num_chq).'">';
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->fk_type.' '.$objp->num_chq.'</td><td>&nbsp;</td>';
}
print "</td></tr>";
// Banque
print "<tr><td>".$langs->trans("Bank")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="banque">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<input type="text" class="flat" size="40" name="banque" value="'.(empty($objp->banque) ? '' : $objp->banque).'">';
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->banque.'&nbsp;</td><td>&nbsp;</td>';
}
print "</td></tr>";
// Emetteur
print "<tr><td>".$langs->trans("CheckTransmitter")."</td><td colspan=\"3\">";
if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="emetteur">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<input type="text" class="flat" size="40" name="emetteur" value="'.(empty($objp->emetteur) ? '' : stripslashes($objp->emetteur)).'">';
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'">';
print "</form>";
}
else
{
print $objp->emetteur.'&nbsp;</td><td>&nbsp;</td>';
}
print "</td></tr>";
// Releve rappro // Releve rappro
if ($acct->rappro) // Si compte rapprochable if ($acct->rappro) // Si compte rapprochable
{ {
print "<tr><td>".$langs->trans("Conciliation")."</td>"; print '<br>'."\n";
if ($user->rights->banque->consolidate) print_fiche_titre($langs->trans("Reconciliation"),'','');
{
print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">"; print "<form method=\"post\" action=\"ligne.php?rowid=$objp->rowid\">";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="num_releve">'; print '<input type="hidden" name="action" value="setreconcile">';
print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">"; print "<input type=\"hidden\" name=\"orig_account\" value=\"".$orig_account."\">";
print '<table class="border" width="100%">';
print '<tr><td width="20%">'.$langs->trans("Conciliation")."</td>";
if ($user->rights->banque->consolidate)
{
print '<td colspan="3">'; print '<td colspan="3">';
print $langs->trans("AccountStatement").' <input name="num_rel" class="flat" value="'.$objp->num_releve.'">'; print $langs->trans("AccountStatement").' <input name="num_rel" class="flat" value="'.$objp->num_releve.'">';
print '</td><td align="center"><input type="submit" class="button" value="'.$langs->trans("Update").'"></td>'; print '</td><td align="center" rowspan="2" width="20%"><input type="submit" class="button" value="'.$langs->trans("Update").'"></td>';
print '</form>';
} }
else else
{ {
print '<td colspan="4">'.$objp->num_releve.'&nbsp;</td>'; print '<td colspan="4">'.$objp->num_releve.'&nbsp;</td>';
} }
print '</tr>'; print '</tr>';
print "<tr><td>".$langs->trans("BankLineConciliated")."</td>";
if ($user->rights->banque->consolidate)
{
print '<td colspan="3">';
print '<input type="checkbox" name="reconciled" class="flat" '.(isset($_POST["reconciled"])?($_POST["reconciled"]?' checked="true"':''):($objp->rappro?' checked="true"':'')).'">';
print '</td>';
} }
else
{
print '<td colspan="4">'.yn($objp->rappro).'</td>';
}
print '</tr>';
print "</table>"; print "</table>";
print '</form>';
}
} }

View File

@ -84,7 +84,7 @@ if ($resql)
print '<table class="liste" width="100%">'; print '<table class="liste" width="100%">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
print_liste_field_titre($langs->trans("Ref"),"liste.php","bc.number","",$paramlist,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Ref"),"liste.php","bc.number","",$paramlist,"",$sortfield,$sortorder);
print_liste_field_titre($langs->trans("DateCreation"),"liste.php","dp","",$paramlist,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Date"),"liste.php","dp","",$paramlist,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Account"),"liste.php","ba.label","",$paramlist,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Account"),"liste.php","ba.label","",$paramlist,"",$sortfield,$sortorder);
print_liste_field_titre($langs->trans("NbOfCheques"),"liste.php","bc.nbcheque","",$paramlist,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("NbOfCheques"),"liste.php","bc.nbcheque","",$paramlist,'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Amount"),"liste.php","bc.amount","",$paramlist,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Amount"),"liste.php","bc.amount","",$paramlist,'align="right"',$sortfield,$sortorder);