From 3d10689eca8532f05a507c4bb44722cebb8fda1d Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Thu, 29 Nov 2012 01:18:57 +0100
Subject: [PATCH] Qual: Maxi debug of withdrawal module. It is possible to
 understand how it works now !

---
 .../class/bonprelevement.class.php            |  45 +++-
 htdocs/compta/prelevement/fiche-rejet.php     |  10 +-
 htdocs/compta/prelevement/fiche.php           | 244 ++++++++++--------
 htdocs/compta/prelevement/index.php           |  12 +-
 htdocs/langs/en_US/withdrawals.lang           |   3 +
 htdocs/langs/fr_FR/withdrawals.lang           |   3 +
 6 files changed, 189 insertions(+), 128 deletions(-)

diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php
index 0f12ab0cfc8..00e988688ea 100644
--- a/htdocs/compta/prelevement/class/bonprelevement.class.php
+++ b/htdocs/compta/prelevement/class/bonprelevement.class.php
@@ -546,17 +546,12 @@ class BonPrelevement extends CommonObject
                 // TODO Call trigger to create a notification using notification module
             }
             else
-            {
+           {
                 dol_syslog(get_class($this)."::set_infotrans Erreur 1", LOG_ERR);
                 dol_syslog($this->db->error());
                 $error++;
             }
 
-            /*
-             * End of procedure
-             *
-             */
-
             if ($error == 0)
             {
                 $this->db->commit();
@@ -1047,6 +1042,44 @@ class BonPrelevement extends CommonObject
     }
 
 
+    /**
+     *	Get object and lines from database
+     *
+     *	@return	int					>0 if OK, <0 if KO
+     */
+    function delete()
+    {
+    	$this->db->begin();
+
+    	$sql = "DELETE FROM ".MAIN_DB_PREFIX."prelevement_facture WHERE fk_prelevement_lignes IN (SELECT rowid FROM ".MAIN_DB_PREFIX."prelevement_lignes WHERE fk_prelevement_bons = '".$this->id."')";
+    	$resql1=$this->db->query($sql);
+    	if (! $resql1) dol_print_error($this->db);
+
+    	$sql = "DELETE FROM ".MAIN_DB_PREFIX."prelevement_lignes WHERE fk_prelevement_bons = '".$this->id."'";
+    	$resql2=$this->db->query($sql);
+    	if (! $resql2) dol_print_error($this->db);
+
+    	$sql = "DELETE FROM ".MAIN_DB_PREFIX."prelevement_bons WHERE rowid = '".$this->id."'";
+    	$resql3=$this->db->query($sql);
+		if (! $resql3) dol_print_error($this->db);
+
+    	$sql = "UPDATE ".MAIN_DB_PREFIX."prelevement_facture_demande SET fk_prelevement_bons = NULL, traite = 0 WHERE fk_prelevement_bons = '".$this->id."'";
+    	$resql4=$this->db->query($sql);
+		if (! $resql4) dol_print_error($this->db);
+
+		if ($resql1 && $resql2 && $resql3)
+		{
+			$this->db->commit();
+			return 1;
+		}
+		else
+		{
+			$this->db->rollback();
+			return -1;
+		}
+    }
+
+
     /**
      *	Returns clickable name (with picto)
      *
diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php
index 2ca9479f441..3b688c13331 100644
--- a/htdocs/compta/prelevement/fiche-rejet.php
+++ b/htdocs/compta/prelevement/fiche-rejet.php
@@ -103,8 +103,6 @@ $rej = new RejetPrelevement($db, $user);
 
 /*
  * Liste des factures
- *
- *
  */
 $sql = "SELECT pl.rowid, pl.amount, pl.statut";
 $sql.= " , s.rowid as socid, s.nom";
@@ -141,10 +139,10 @@ if ($resql)
     {
 		$obj = $db->fetch_object($resql);
 
-		print "<tr $bc[$var]><td>";
-		print '<img border="0" src="./img/statut'.$obj->statut.'.png"></a>&nbsp;';
-		print '<a href="'.DOL_URL_ROOT.'/compta/prelevement/ligne.php?id='.$obj->rowid.'">';
+		print "<tr ".$bc[$var]."><td>";
 
+		print '<a href="'.DOL_URL_ROOT.'/compta/prelevement/ligne.php?id='.$obj->rowid.'">';
+		print img_picto('', 'statut'.$obj->statut).' ';
 		print substr('000000'.$obj->rowid, -6);
 		print '</a></td>';
 		print '<td><a href="'.DOL_URL_ROOT.'/comm/fiche.php?socid='.$obj->socid.'">'.stripslashes($obj->nom)."</a></td>\n";
@@ -164,7 +162,7 @@ if ($resql)
 	print '<tr class="liste_total"><td>&nbsp;</td>';
 	print '<td class="liste_total">'.$langs->trans("Total").'</td>';
 	print '<td align="right">'.price($total)."</td>\n";
-	print '<td>&nbsp;</td>';
+	print '<td colspan="3">&nbsp;</td>';
 	print "</tr>\n</table>\n";
 	$db->free($resql);
 }
diff --git a/htdocs/compta/prelevement/fiche.php b/htdocs/compta/prelevement/fiche.php
index cd99849de9c..af2b1bbf495 100644
--- a/htdocs/compta/prelevement/fiche.php
+++ b/htdocs/compta/prelevement/fiche.php
@@ -42,14 +42,28 @@ if ($user->societe_id > 0) accessforbidden();
 $action = GETPOST('action','alpha');
 $id = GETPOST('id','int');
 
+
 /*
  * Actions
  */
+if ( $action == 'confirm_delete' )
+{
+	$bon = new BonPrelevement($db,"");
+	$bon->fetch($id);
+
+	$res=$bon->delete();
+	if ($res > 0)
+	{
+		header("Location: index.php");
+		exit;
+	}
+}
 
 if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes')
 {
 	$bon = new BonPrelevement($db,"");
-	$bon->id = $id;
+	$bon->fetch($id);
+
 	$bon->set_credite();
 
 	header("Location: fiche.php?id=".$id);
@@ -63,14 +77,15 @@ if ($action == 'infotrans' && $user->rights->prelevement->bons->send)
 	$bon = new BonPrelevement($db,"");
 	$bon->fetch($id);
 
+	$dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int'));
+
+	/*
 	if ($_FILES['userfile']['name'] && basename($_FILES['userfile']['name'],".ps") == $bon->ref)
 	{
 		$dir = $conf->prelevement->dir_output.'/receipts';
 
 		if (dol_move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . "/" . dol_unescapefile($_FILES['userfile']['name']),1) > 0)
 		{
-			$dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int'));
-
 			$bon->set_infotrans($user, $dt, GETPOST('methode','alpha'));
 		}
 
@@ -81,7 +96,15 @@ if ($action == 'infotrans' && $user->rights->prelevement->bons->send)
 	{
 		dol_syslog("Fichier invalide",LOG_WARNING);
 		$mesg='BadFile';
-	}
+	}*/
+
+	$error = $bon->set_infotrans($user, $dt, GETPOST('methode','alpha'));
+
+	if ($error)
+	{
+		header("Location: fiche.php?id=".$id."&error=$error");
+		exit;
+	}
 }
 
 if ($action == 'infocredit' && $user->rights->prelevement->bons->credit)
@@ -92,15 +115,11 @@ if ($action == 'infocredit' && $user->rights->prelevement->bons->credit)
 
 	$error = $bon->set_infocredit($user, $dt);
 
-	if ($error == 0)
-	{
-		header("Location: fiche.php?id=".$id);
-	}
-	else
+	if ($error)
 	{
 		header("Location: fiche.php?id=".$id."&error=$error");
+		exit;
 	}
-	exit;
 }
 
 
@@ -108,132 +127,139 @@ if ($action == 'infocredit' && $user->rights->prelevement->bons->credit)
  * View
  */
 
+$bon = new BonPrelevement($db,"");
+$form = new Form($db);
+
 llxHeader('',$langs->trans("WithdrawalReceipt"));
 
-$form = new Form($db);
 
-if ($id)
+if ($id > 0)
 {
-	$bon = new BonPrelevement($db,"");
+	$bon->fetch($id);
 
-	if ($bon->fetch($id) == 0)
+	$head = prelevement_prepare_head($bon);
+	dol_fiche_head($head, 'prelevement', $langs->trans("WithdrawalReceipt"), '', 'payment');
+
+	if (GETPOST('error','alpha')!='')
 	{
-		$head = prelevement_prepare_head($bon);
-		dol_fiche_head($head, 'prelevement', $langs->trans("WithdrawalReceipt"), '', 'payment');
+		print '<div class="error">'.$bon->ReadError(GETPOST('error','alpha')).'</div>';
+	}
 
-		if (GETPOST('error','alpha')!='')
-		{
-			print '<div class="error">'.$bon->ReadError(GETPOST('error','alpha')).'</div>';
-		}
+	/*if ($action == 'credite')
+	{
+		$ret=$form->form_confirm("fiche.php?id=".$bon->id,$langs->trans("ClassCredited"),$langs->trans("ClassCreditedConfirm"),"confirm_credite",'',1,1);
+		if ($ret == 'html') print '<br>';
+	}*/
 
-		if ($action == 'credite')
-		{
-			$ret=$form->form_confirm("fiche.php?id=".$bon->id,$langs->trans("ClassCredited"),$langs->trans("ClassCreditedConfirm"),"confirm_credite",'',1,1);
-			if ($ret == 'html') print '<br>';
-		}
+	print '<table class="border" width="100%">';
 
-		print '<table class="border" width="100%">';
+	print '<tr><td width="20%">'.$langs->trans("Ref").'</td><td>'.$bon->getNomUrl(1).'</td></tr>';
+	print '<tr><td width="20%">'.$langs->trans("Date").'</td><td>'.dol_print_date($bon->datec,'day').'</td></tr>';
+	print '<tr><td width="20%">'.$langs->trans("Amount").'</td><td>'.price($bon->amount).'</td></tr>';
 
-		print '<tr><td width="20%">'.$langs->trans("Ref").'</td><td>'.$bon->getNomUrl(1).'</td></tr>';
-		print '<tr><td width="20%">'.$langs->trans("Date").'</td><td>'.dol_print_date($bon->datec,'day').'</td></tr>';
-		print '<tr><td width="20%">'.$langs->trans("Amount").'</td><td>'.price($bon->amount).'</td></tr>';
-		print '<tr><td width="20%">'.$langs->trans("File").'</td><td>';
+	// Status
+	print '<tr><td width="20%">'.$langs->trans('Status').'</td>';
+	print '<td>'.$bon->getLibStatut(1).'</td>';
+	print '</tr>';
 
-		$relativepath = 'receipts/'.$bon->ref;
+	if($bon->date_trans <> 0)
+	{
+		$muser = new User($db);
+		$muser->fetch($bon->user_trans);
+
+		print '<tr><td width="20%">'.$langs->trans("TransData").'</td><td>';
+		print dol_print_date($bon->date_trans,'day');
+		print ' '.$langs->trans("By").' '.$muser->getFullName($langs).'</td></tr>';
+		print '<tr><td width="20%">'.$langs->trans("TransMetod").'</td><td>';
+		print $bon->methodes_trans[$bon->method_trans];
+		print '</td></tr>';
+	}
+	if($bon->date_credit <> 0)
+	{
+		print '<tr><td width="20%">'.$langs->trans('CreditDate').'</td><td>';
+		print dol_print_date($bon->date_credit,'day');
+		print '</td></tr>';
+	}
 
-		print '<a href="'.DOL_URL_ROOT.'/document.php?type=text/plain&amp;modulepart=prelevement&amp;file='.urlencode($relativepath).'">'.$relativepath.'</a>';
+	print '</table>';
 
-		print '</td></tr>';
+	print '<br>';
 
-		// Status
-		print '<tr><td width="20%">'.$langs->trans('Status').'</td>';
-		print '<td>'.$bon->getLibStatut(1).'</td>';
-		print '</tr>';
+	print '<table class="border" width="100%"><tr><td width="20%">';
+	print $langs->trans("WithdrawalFile").'</td><td>';
+	$relativepath = 'receipts/'.$bon->ref;
+	print '<a href="'.DOL_URL_ROOT.'/document.php?type=text/plain&amp;modulepart=prelevement&amp;file='.urlencode($relativepath).'">'.$relativepath.'</a>';
+	print '</td></tr></table>';
+
+	dol_fiche_end();
 
-		if($bon->date_trans <> 0)
-		{
-			$muser = new User($db);
-			$muser->fetch($bon->user_trans);
-
-			print '<tr><td width="20%">'.$langs->trans("TransData").'</td><td>';
-			print dol_print_date($bon->date_trans,'day');
-			print ' '.$langs->trans("By").' '.$muser->getFullName($langs).'</td></tr>';
-			print '<tr><td width="20%">'.$langs->trans("TransMetod").'</td><td>';
-			print $bon->methodes_trans[$bon->method_trans];
-			print '</td></tr>';
-		}
-		if($bon->date_credit <> 0)
-		{
-			print '<tr><td width="20%">'.$langs->trans('CreditDate').'</td><td>';
-			print dol_print_date($bon->date_credit,'day');
-			print '</td></tr>';
-		}
 
+
+
+	if (empty($bon->date_trans) && $user->rights->prelevement->bons->send && $action=='settransmitted')
+	{
+		print '<form method="post" name="userfile" action="fiche.php?id='.$bon->id.'" enctype="multipart/form-data">';
+		print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+		print '<input type="hidden" name="action" value="infotrans">';
+		print '<table class="border" width="100%">';
+		print '<tr class="liste_titre">';
+		print '<td colspan="3">'.$langs->trans("NotifyTransmision").'</td></tr>';
+		print '<tr><td width="20%">'.$langs->trans("TransData").'</td><td>';
+		print $form->select_date('','','','','',"userfile",1,1);
+		print '</td></tr>';
+		print '<tr><td width="20%">'.$langs->trans("TransMetod").'</td><td>';
+		print $form->selectarray("methode",$bon->methodes_trans);
+		print '</td></tr>';
+/*			print '<tr><td width="20%">'.$langs->trans("File").'</td><td>';
+		print '<input type="hidden" name="max_file_size" value="'.$conf->maxfilesize.'">';
+		print '<input class="flat" type="file" name="userfile"><br>';
+		print '</td></tr>';*/
+		print '</table><br>';
+		print '<center><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("SetToStatusSent")).'">';
+		print '</form>';
+	}
+
+	if (! empty($bon->date_trans) && $bon->date_credit == 0 && $user->rights->prelevement->bons->credit && $action=='setcredited')
+	{
+		print '<form name="infocredit" method="post" action="fiche.php?id='.$bon->id.'">';
+		print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+		print '<input type="hidden" name="action" value="infocredit">';
+		print '<table class="border" width="100%">';
+		print '<tr class="liste_titre">';
+		print '<td colspan="3">'.$langs->trans("NotifyCredit").'</td></tr>';
+		print '<tr><td width="20%">'.$langs->trans('CreditDate').'</td><td>';
+		print $form->select_date('','','','','',"infocredit",1,1);
+		print '</td></tr>';
 		print '</table>';
-		dol_fiche_end();
+		print '<br>'.$langs->trans("ThisWillAlsoAddPaymentOnInvoice");
+		print '<center><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("ClassCredited")).'">';
+		print '</form>';
+	}
 
-		if($bon->date_trans == 0  && $user->rights->prelevement->bons->send)
+
+	// Actions
+	if ($action != 'settransmitted' && $action != 'setcredited')
+	{
+		print "\n<div class=\"tabsAction\">\n";
+
+		if (empty($bon->date_trans) && $user->rights->prelevement->bons->send)
 		{
-			print '<form method="post" name="userfile" action="fiche.php?id='.$bon->id.'" enctype="multipart/form-data">';
-			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-			print '<input type="hidden" name="action" value="infotrans">';
-			print '<table class="border" width="100%">';
-			print '<tr class="liste_titre">';
-			print '<td colspan="3">'.$langs->trans("NotifyTransmision").'</td></tr>';
-			print '<tr><td width="20%">'.$langs->trans("TransData").'</td><td>';
-			print $form->select_date('','','','','',"userfile");
-			print '</td></tr>';
-			print '<tr><td width="20%">'.$langs->trans("TransMetod").'</td><td>';
-			print $form->selectarray("methode",$bon->methodes_trans);
-			print '</td></tr>';
-			print '<tr><td width="20%">'.$langs->trans("File").'</td><td>';
-			print '<input type="hidden" name="max_file_size" value="'.$conf->maxfilesize.'">';
-			print '<input class="flat" type="file" name="userfile"><br>';
-			print '</td></tr>';
-			print '</table><br>';
-			print '<center><input type="submit" class="button" value="'.$langs->trans("Send").'">';
-			print '</form>';
+			print "<a class=\"butAction\" href=\"fiche.php?action=settransmitted&id=".$bon->id."\">".$langs->trans("SetToStatusSent")."</a>";
 		}
 
-		if($bon->date_trans <> 0 && $bon->date_credit == 0 && $user->rights->prelevement->bons->credit)
+		if (! empty($bon->date_trans) && $bon->date_credit == 0)
 		{
-			print '<form name="infocredit" method="post" action="fiche.php?id='.$bon->id.'">';
-			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-			print '<input type="hidden" name="action" value="infocredit">';
-			print '<table class="border" width="100%">';
-			print '<tr class="liste_titre">';
-			print '<td colspan="3">'.$langs->trans("NotifyCredit").'</td></tr>';
-			print '<tr><td width="20%">'.$langs->trans('CreditDate').'</td><td>';
-			print $form->select_date('','','','','',"infocredit");
-			print '</td></tr>';
-			print '</table><br>';
-			print '<center><input type="submit" class="button" value="'.$langs->trans("ClassCredited").'">';
-			print '</form>';
+			print "<a class=\"butAction\" href=\"fiche.php?action=setcredited&id=".$bon->id."\">".$langs->trans("ClassCredited")."</a>";
 		}
-	}
-	else
-	{
-		dol_print_error($db);
-	}
-}
 
-/* ************************************************************************** */
-/*                                                                            */
-/* Barre d'action                                                             */
-/*                                                                            */
-/* ************************************************************************** */
+		print "<a class=\"butActionDelete\" href=\"fiche.php?action=confirm_delete&id=".$bon->id."\">".$langs->trans("Delete")."</a>";
 
-/*
-print "\n</div>\n<div class=\"tabsAction\">\n";
-
-if ($bon->statut == 0)
-{
-	print "<a class=\"butAction\" href=\"fiche.php?action=credite&amp;id=$bon->id\">".$langs->trans("ClassCredited")."</a>";
+		print "</div>";
+	}
 }
-*/
-print "</div>";
 
-$db->close();
 
 llxFooter();
+
+$db->close();
 ?>
diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php
index 8dba0b37cae..53100598544 100644
--- a/htdocs/compta/prelevement/index.php
+++ b/htdocs/compta/prelevement/index.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
  * Copyright (C) 2011      Juanjo Menent		<jmenent@2byte.es>
  *
@@ -117,14 +117,12 @@ if ($result)
         $obj = $db->fetch_object($result);
         $var=!$var;
 
-        print "<tr $bc[$var]><td>";
-
-        print '<img border="0" src="./img/statut'.$obj->statut.'.png"></a>&nbsp;';
-
-        print '<a href="fiche.php?id='.$obj->rowid.'">'.$obj->ref."</a></td>\n";
+        print "<tr ".$bc[$var]."><td>";
 
+        print '<a href="fiche.php?id='.$obj->rowid.'">';
+        print img_picto('', 'statut'.$obj->statut).' ';
+        print $obj->ref."</a></td>\n";
         print '<td>'.dol_print_date($db->jdate($obj->datec),"dayhour")."</td>\n";
-
         print '<td align="right">'.price($obj->amount)."</td>\n";
 
         print "</tr>\n";
diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang
index 5488f674620..fe9fa0a9b99 100644
--- a/htdocs/langs/en_US/withdrawals.lang
+++ b/htdocs/langs/en_US/withdrawals.lang
@@ -81,6 +81,9 @@ WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your cou
 ShowWithdraw=Show Withdraw
 IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one withdrawal payment not yet processed, it won't be set as payed to allow to manage withdrawal before.
 DoStandingOrdersBeforePayments=This tabs allows you to request for a standing order. Once it will be finished, you can type the payment to close the invoice.
+WithdrawalFile=Withdrawal file
+SetToStatusSent=Set to status "File Sent"
+ThisWillAlsoAddPaymentOnInvoice=This will also create payments onto invoices and will classify them to paid
 
 ### Notifications 
 InfoCreditSubject=Payment of standing order %s by the bank
diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang
index 39f62c0f5c1..27c00e307cf 100644
--- a/htdocs/langs/fr_FR/withdrawals.lang
+++ b/htdocs/langs/fr_FR/withdrawals.lang
@@ -81,6 +81,9 @@ WithdrawalFileNotCapable=Impossible de générer un fichier de bons de prélève
 ShowWithdraw=Voir prélèvement
 IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Toutefois, si la facture a au moins un paiement par prélèvement non traité, elle ne le sera pas afin de permettre la gestion du prélèvement d'abord.
 DoStandingOrdersBeforePayments=Cet onglet permet de faire une demande de prélèvement bancaire. Une fois réalisé, vous pourrez saisir le paiement sur la facture pour la clore.
+WithdrawalFile=Fichier de prélèvement
+SetToStatusSent=Mettre status "Fichier envoyé"
+ThisWillAlsoAddPaymentOnInvoice=Ceci créera également les paiements sur les factures et les classera payées
 
 ### Notifications 
 InfoCreditSubject=Crédit prélèvement %s à la banque
-- 
GitLab