noalyss-commit
[Top][All Lists]
Advanced

[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(



reply via email to

[Prev in Thread] Current Thread [Next in Thread]