[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Noalyss-commit] [noalyss] 01/02: Task #1236 - Ajout d'une pièce jointe
From: |
Dany De Bontridder |
Subject: |
[Noalyss-commit] [noalyss] 01/02: Task #1236 - Ajout d'une pièce jointe dands le rapprochement (COMPTA/MENUFIN/FREC) #1236 : ajout d'une pièce pour les réconciliations bancaires + indication de ce qui est sélectionné |
Date: |
Mon, 14 Dec 2015 16:19:15 +0000 |
sparkyx pushed a commit to branch master
in repository noalyss.
commit f49c313ed292033fa9d9fa215ffcfc5682e71672
Author: Dany De Bontridder <address@hidden>
Date: Mon Dec 14 16:57:06 2015 +0100
Task #1236 - Ajout d'une pièce jointe dands le rapprochement
(COMPTA/MENUFIN/FREC)
#1236 : ajout d'une pièce pour les réconciliations bancaires + indication
de ce qui est sélectionné
---
include/ajax/ajax_ledger.php | 2 +-
include/class/class_acc_ledger.php | 2 +-
include/class/class_acc_ledger_fin.php | 2 +-
include/class/class_acc_ledger_purchase.php | 2 +-
include/class/class_acc_ledger_sold.php | 2 +-
include/compta_fin_rec.inc.php | 142 +++++++++++++++++++++++++--
include/lib/class_database.php | 78 +++++++++------
unit-test/include/class_databaseTest.php | 6 +-
8 files changed, 191 insertions(+), 45 deletions(-)
diff --git a/include/ajax/ajax_ledger.php b/include/ajax/ajax_ledger.php
index 6898b4a..2ce5c27 100644
--- a/include/ajax/ajax_ledger.php
+++ b/include/ajax/ajax_ledger.php
@@ -301,7 +301,7 @@ case 'loadfile':
$cn->start();
// remove the file
$grpt=$cn->get_value('select jr_grpt_id from jrn where
jr_id=$1',array($jr_id));
- $cn->save_upload_document($grpt);
+ $cn->save_receipt($grpt);
$cn->commit();
// Show a link to the new file
$op->get();
diff --git a/include/class/class_acc_ledger.php
b/include/class/class_acc_ledger.php
index 318feab..598abf6 100644
--- a/include/class/class_acc_ledger.php
+++ b/include/class/class_acc_ledger.php
@@ -2140,7 +2140,7 @@ class Acc_Ledger extends jrn_def_sql
*/
if (isset($_FILES["pj"]))
{
- $this->db->save_upload_document($seq);
+ $this->db->save_receipt($seq);
}
}
diff --git a/include/class/class_acc_ledger_fin.php
b/include/class/class_acc_ledger_fin.php
index 247166d..f472cd8 100644
--- a/include/class/class_acc_ledger_fin.php
+++ b/include/class/class_acc_ledger_fin.php
@@ -941,7 +941,7 @@ class Acc_Ledger_Fin extends Acc_Ledger
// first record we upload the files and
// keep variable to update other row of
jrn
if (isset($_FILES))
- $oid =
$this->db->save_upload_document($seq);
+ $oid =
$this->db->save_receipt($seq);
}
else
{
diff --git a/include/class/class_acc_ledger_purchase.php
b/include/class/class_acc_ledger_purchase.php
index 8639b80..738f8b9 100644
--- a/include/class/class_acc_ledger_purchase.php
+++ b/include/class/class_acc_ledger_purchase.php
@@ -795,7 +795,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
if ( isset ($_FILES))
{
if ( sizeof($_FILES) != 0 )
- $this->db->save_upload_document($seq);
+ $this->db->save_receipt($seq);
}
$str_file="";
/* Generate an document and save it into the database (Note de
frais only)
diff --git a/include/class/class_acc_ledger_sold.php
b/include/class/class_acc_ledger_sold.php
index a8de203..aa17334 100644
--- a/include/class/class_acc_ledger_sold.php
+++ b/include/class/class_acc_ledger_sold.php
@@ -479,7 +479,7 @@ class Acc_Ledger_Sold extends Acc_Ledger {
/* Save the attachment or generate doc */
if (isset($_FILES['pj'])) {
if (strlen(trim($_FILES['pj']['name'])) != 0)
- $this->db->save_upload_document($seq);
+ $this->db->save_receipt($seq);
else
/* Generate an invoice and save it into the database */
if (isset($_POST['gen_invoice'])) {
diff --git a/include/compta_fin_rec.inc.php b/include/compta_fin_rec.inc.php
index b3c1f5e..966458a 100644
--- a/include/compta_fin_rec.inc.php
+++ b/include/compta_fin_rec.inc.php
@@ -30,6 +30,68 @@ if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas
permis');
global $g_failed,$g_succeed;
require_once NOALYSS_INCLUDE.'/class/class_acc_ledger_fin.php';
bcscale(2);
+?>
+<script>
+ function update_selected(p_node,p_amount) {
+ try {
+ if (p_node.checked )
+ {
+ var
selected=parseFloat($('selected_amount').innerHTML)+p_amount;
+ $('selected_amount').innerHTML=Math.round(selected*100)/100;
+ } else {
+ var
selected=parseFloat($('selected_amount').innerHTML)-p_amount;
+ $('selected_amount').innerHTML=Math.round(selected*100)/100;
+
+ }
+ } catch(e) {
+ if (console) {console.error('update_selected :'+e.message);}
+ }
+ }
+ function update_remain(p_node,p_amount) {
+ try {
+ if ( parseFloat($('delta_amount').innerHTML) == 0) return;
+ if (p_node.checked )
+ {
+ var selected=parseFloat($('remain_amount').innerHTML)-p_amount;
+ $('remain_amount').innerHTML=Math.round(selected*100)/100;
+ } else {
+ var selected=parseFloat($('remain_amount').innerHTML)+p_amount;
+ $('remain_amount').innerHTML=Math.round(selected*100)/100;
+
+ }
+ } catch(e) {
+ if (console) {console.error('update_remain :'+e.message);}
+
+ }
+ }
+ function update_delta() {
+ try {
+ var
delta=parseFloat($('end_extrait').value)-parseFloat($('start_extrait').value);
+ delta=Math.round(delta*100)/100;
+ $('delta_amount').innerHTML=delta;
+ var remain=delta-parseFloat($('selected_amount').innerHTML);
+ $('remain_amount').innerHTML=Math.round(remain*100)/100;
+ } catch(e) {
+ if (console) {console.error('update_delta :' +e.message);}
+ }
+ }
+ function recompute(p_form) {
+ try {
+ var form=$(p_form);
+ var i=0;
+ for (i=0;i<form.length;i++) {
+ var e=form.elements[i];
+ if (e.type=='checkbox') {
+ e.click();
+ }
+ }
+
+ } catch (e) {
+ if (console) {console.error('recompute :' +e.message);}
+ }
+ }
+</script>
+<?php
echo '<div class="content">';
$Ledger = new Acc_Ledger_Fin($cn, 0);
if (!isset($_REQUEST['p_jrn']))
@@ -45,6 +107,22 @@ if (isset($_GET["p_jrn"]) && $jrn_priv == "X")
NoAccess();
return;
}
+$end_extrait=HtmlInput::default_value_post("end_extrait", 0);
+$start_extrait=HtmlInput::default_value_post("start_extrait", 0);
+if ( isNumber($end_extrait) == 0 )
+{
+ echo '<span class="notice">';
+ echo _('Donnée invalide');
+ echo '</span>';
+ $end_extrait=0;
+}
+if ( isNumber($start_extrait) == 0 )
+{
+ echo '<span class="notice">';
+ echo _('Donnée invalide');
+ echo '</span>';
+ $start_extrait=0;
+}
//-------------------------
// save
//-------------------------
@@ -60,7 +138,7 @@ if (isset($_POST['save']))
$cn->exec_sql('update jrn set jr_pj_number=$1 where
jr_id=$2', array($_POST['ext'], $array[$i]));
$tot = bcadd($tot, $cn->get_value('select qf_amount
from quant_fin where jr_id=$1', array($array[$i])));
}
- $diff = bcsub($_POST['end_extrait'], $_POST['start_extrait']);
+ $diff = bcsub($end_extrait, $start_extrait);
if ($diff != 0 && $diff != $tot)
{
$remain=bcsub($tot,$diff);
@@ -68,11 +146,26 @@ if (isset($_POST['save']))
alert("D'après l'extrait il y aurait du avoir un
montant de $diff à rapprocher alors qu'il y a $tot rapprochés, mise à jour
annulée, la différence est de $remain");
echo '<div class="error">';
echo '<p>'.$g_failed._("D'après l'extrait il y aurait
du avoir un montant de $diff à rapprocher alors qu'il y a $tot rapprochés, la
différence est de $remain <br>mise à jour annulée").'</p>';
+ /* if file : warning that file is not uploaded*/
+ echo '<p>'.
+ _('Attention : Fichier non chargé').
+ '</p>';
echo '</div>';
}
else
{
echo '<div class="content">'.$g_succeed.' Mise à jour
extrait '.$_POST['ext'].'</div>';
+ // -- chargement fichier
+ $oid=$cn->upload('file_receipt');
+
+ if ( $oid != false ) {
+ for ($i = 0; $i < count($array); $i++)
+ {
+ $cn->exec_sql("update jrn set jr_pj=$1 ,
jr_pj_name=$2,
+ jr_pj_type=$3 where jr_id=$4",
+ array($oid,$_FILES['file_receipt']['name']
,$_FILES['file_receipt']['type'],$array[$i]));
+ }
+ }
}
$cn->commit();
@@ -97,7 +190,7 @@ echo HtmlInput::submit('ref', 'Rafraîchir');
echo '</form>';
echo '<span id="bkname" style="display:block">' .
hb(h($Ledger->get_bank_name())) . '</span>';
-echo '<form method="post" id="rec1">';
+echo '<form method="post" id="rec1" enctype="multipart/form-data">';
echo dossier::hidden();
echo HtmlInput::get_to_hidden(array('sa', 'p_action', 'p_jrn'));
@@ -112,15 +205,22 @@ $operation = $cn->get_array("select jr_id,jr_internal,
echo '<p>';
$iextrait = new IText('ext');
if ( isset ($_POST['ext'])) $iextrait->value=$_POST['ext']; else
$iextrait->value = $Ledger->guess_pj();
+
$nstart_extrait = new INum('start_extrait');
-if( isset($_POST['start_extrait']))
$nstart_extrait->value=$_POST['start_extrait'];
+$nstart_extrait->value=$start_extrait;
+$nstart_extrait->javascript='onchange="format_number(this,2);update_delta();"';
+
$nend_extrait = new INum('end_extrait');
-if( isset($_POST['end_extrait'])) $nend_extrait->value=$_POST['end_extrait'];
+$nend_extrait->value=$end_extrait;
+$nend_extrait->javascript='onchange="format_number(this,2);update_delta();"';
echo "Extrait / relevé :" . $iextrait->input();
echo 'solde Début' . $nstart_extrait->input();
echo 'solde Fin' . $nend_extrait->input();
-echo IButton::tooggle_checkbox('rec1');
+$select_all=new IButton('select_all');
+$select_all->label=_('Inverser la sélection');
+$select_all->javascript="recompute('rec1')";
+echo $select_all->input();
echo '</p>';
echo '<p>';
echo _('Cherche').HtmlInput::infobulle(25);
@@ -141,6 +241,9 @@ echo tr($r);
$iradio = new ICheckBox('op[]');
$tot_not_reconcilied = 0;
$diff = 0;
+$delta=bcsub($end_extrait,$start_extrait);
+$selected_amount=0;
+$remain_amount=$delta;
for ($i = 0; $i < count($operation); $i++)
{
$row = $operation[$i];
@@ -156,6 +259,7 @@ for ($i = 0; $i < count($operation); $i++)
$tot_not_reconcilied+=$row['jr_montant'];
$iradio->value = $row['jr_id'];
$iradio->selected=false;
+ $iradio->javascript=sprintf(' onchange =
"update_selected(this,%s);update_remain(this,%s)"',$amount,$amount);
if (isset($_POST['op']))
{
for ($x=0;$x<count($_POST['op']);$x++)
@@ -163,11 +267,13 @@ for ($i = 0; $i < count($operation); $i++)
if ($row['jr_id']==$_POST['op'][$x])
{
$iradio->selected=true;
+ $selected_amount+=$amount;
+ $remain_amount-=$amount;
break;
}
}
}
- $r.=td(HtmlInput::hidden('jrid['.$i.']', $row['jr_id']) .
$iradio->input(), ' style="text-align:center" ');
+ $r.=td(HtmlInput::hidden('jrid['.$i.']', $row['jr_id']) .
$iradio->input(), 'sorttable_customkey="1" style="text-align:center" ');
if ($i % 2 == 0)
echo tr($r, ' class="odd" ');
else
@@ -186,7 +292,24 @@ $saldo_reconcilied =
$bk_card->get_solde_detail($filter_year . " and j_grpt in (
/* solde compte */
$saldo = $bk_card->get_solde_detail($filter_year);
-
+echo '<div
style="float:right;margin-right:100px;font-size:120%;font-weight:bolder">';
+echo '<table id="total_div_id">';
+echo '
+ <tr>
+ <td>'._('Différence relevé').'</td>
+ <td id="delta_amount" class="num" >'.$delta.'</td>
+ </tr>
+ <tr>
+ <td>'._('Montant sélectionné').'</td>
+ <td class="num" id="selected_amount">'.$selected_amount.'</td>
+ </tr>
+ <td>'._('Reste à selectionner').'</td>
+ <td class="num" id="remain_amount">'.$remain_amount.'</td>
+ </tr>
+
+';
+echo '</table>';
+echo '</div>';
echo '<table>';
echo '<tr>';
echo td("Solde compte ");
@@ -211,8 +334,13 @@ echo '</tr>';
echo '</table>';
+$receipt=new IFile('file_receipt');
+echo $receipt->input();
+echo '<p class="text-align:center">';
echo HtmlInput::submit('save', 'Mettre à jour le n° de relevé bancaire');
+echo '</p>';
echo '</form>';
echo '</div>';
return;
?>
+
diff --git a/include/lib/class_database.php b/include/lib/class_database.php
index 07de6b0..054605e 100644
--- a/include/lib/class_database.php
+++ b/include/lib/class_database.php
@@ -808,66 +808,84 @@ class Database
return $r;
}
-
- /**
- * \brief Save a "piece justificative"
+ /***
+ * \brief Save a "piece justificative" , the name must be pj
*
* \param $seq jr_grpt_id
* \return $oid of the lob file if success
* null if a error occurs
*
*/
+ function save_receipt($seq)
+ {
+ $oid=$this->upload('pj');
+ if ($oid==false)
+ {
+ return false;
+ }
+ // Remove old document
+ $ret=$this->exec_sql("select jr_pj from jrn where jr_grpt_id=$seq");
+ if (pg_num_rows($ret)!=0)
+ {
+ $r=pg_fetch_array($ret, 0);
+ $old_oid=$r['jr_pj'];
+ if (strlen($old_oid)!=0)
+ pg_lo_unlink($cn, $old_oid);
+ }
+ // Load new document
+ $this->exec_sql("update jrn set jr_pj=$1 , jr_pj_name=$2,
+ jr_pj_type=$3 where jr_grpt_id=$4",
+ array($oid,$_FILES['pj']['name']
,$_FILES['pj']['type'],$seq));
+ return $oid;
+ }
+ /***
+ * \brief Save a document into the database , it just puts the file in the
database
+ * and returns the corresponding OID , the mimetype , size ... of the
document
+ * must be set in the calling function.
+ *
+ * \param name of the variable in $_FILES
+ * \return $oid of the lob file if success
+ * false if a error occurs or if there is no file to upload
+ *
+ */
- function save_upload_document($seq)
+ function upload($p_name)
{
- /* there is
- no file to
- upload */
- if ($_FILES["pj"]["error"]==UPLOAD_ERR_NO_FILE)
+ /* there is no file to upload */
+ if ($_FILES[$p_name]["error"]==UPLOAD_ERR_NO_FILE)
{
- return;
+ return false;
}
- $new_name=tempnam($_ENV['TMP'], 'pj');
- if ($_FILES["pj"]["error"]>0)
+ $new_name=tempnam($_ENV['TMP'], $p_name);
+ if ($_FILES[$p_name]["error"]>0)
{
print_r($_FILES);
- echo_error(__FILE__.":".__LINE__."Error: ".$_FILES["pj"]["error"]);
+ echo_error(__FILE__.":".__LINE__."Error:
".$_FILES[$p_name]["error"]);
+ return false;
}
- if (strlen($_FILES['pj']['tmp_name'])!=0)
+ if (strlen($_FILES[$p_name]['tmp_name'])!=0)
{
- if (move_uploaded_file($_FILES['pj']['tmp_name'], $new_name))
+ if (move_uploaded_file($_FILES[$p_name]['tmp_name'], $new_name))
{
// echo "Image saved";
$oid=pg_lo_import($this->db, $new_name);
if ($oid==false)
{
- echo_error('postgres.php', __LINE__, "cannot upload
document");
+ echo_error(__FILE__, __LINE__, "cannot upload document");
$this->rollback();
- return;
- }
- // Remove old document
- $ret=$this->exec_sql("select jr_pj from jrn where
jr_grpt_id=$seq");
- if (pg_num_rows($ret)!=0)
- {
- $r=pg_fetch_array($ret, 0);
- $old_oid=$r['jr_pj'];
- if (strlen($old_oid)!=0)
- pg_lo_unlink($cn, $old_oid);
+ return false;
}
- // Load new document
- $this->exec_sql("update jrn set jr_pj=$1 , jr_pj_name=$2,
- jr_pj_type=$3 where jr_grpt_id=$4",
- array($oid,$_FILES['pj']['name']
,$_FILES['pj']['type'],$seq));
return $oid;
}
else
{
echo "<H1>Error</H1>";
$this->rollback();
+ return false;
}
}
- return 0;
+ return false;
}
/**\brief wrapper for the function pg_NumRows
diff --git a/unit-test/include/class_databaseTest.php
b/unit-test/include/class_databaseTest.php
index f876962..1efb91b 100644
--- a/unit-test/include/class_databaseTest.php
+++ b/unit-test/include/class_databaseTest.php
@@ -378,10 +378,10 @@ class DatabaseTest extends PHPUnit_Framework_TestCase
}
/**
- * @covers Database::save_upload_document
- * @todo Implement testSave_upload_document().
+ * @covers Database::save_receipt
+ * @todo Implement testsave_receipt().
*/
- public function testSave_upload_document()
+ public function testsave_receipt()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(