Code rewriting and improve of P0RAP for linked operations
This commit is contained in:
parent
a48140d3cc
commit
4a0c11d6c7
6 changed files with 735 additions and 580 deletions
|
|
@ -3952,3 +3952,44 @@ h2.h-section {
|
||||||
.nav-pills {
|
.nav-pills {
|
||||||
font-family:var(--font-title) !important;
|
font-family:var(--font-title) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Style for ACC_RECONCILIATION P0RAP
|
||||||
|
*/
|
||||||
|
.rpm_main {
|
||||||
|
display:grid;
|
||||||
|
grid-template-columns:1fr ;
|
||||||
|
row-gap: 0.5rem;
|
||||||
|
}
|
||||||
|
.rpm_operation {
|
||||||
|
display:grid;
|
||||||
|
grid-template-columns:10rem 10rem 10rem 10rem 1fr 1fr ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
.rpm_title {
|
||||||
|
color:white;
|
||||||
|
background-color: navy;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rpm_detail {
|
||||||
|
justify-self: stretch;
|
||||||
|
grid-column: 1 / span 6;
|
||||||
|
}
|
||||||
|
.rpm_detail > table {
|
||||||
|
width:90%;
|
||||||
|
margin-left:5%;
|
||||||
|
}
|
||||||
|
.rpm_detail > .highlight {
|
||||||
|
font-size: 130%;
|
||||||
|
font-stretch: extra-expanded;
|
||||||
|
color:blue;
|
||||||
|
margin-left:min(40rem,20%);
|
||||||
|
border: 1px navy dotted;
|
||||||
|
width: max(60%,40rem);
|
||||||
|
padding: 0.2rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -22,7 +22,7 @@ try
|
||||||
}
|
}
|
||||||
catch (Exception $exc)
|
catch (Exception $exc)
|
||||||
{
|
{
|
||||||
error_log($exc->getTraceAsString());
|
record_log($exc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,25 +19,24 @@
|
||||||
|
|
||||||
// Copyright Author Dany De Bontridder danydb@aevalys.eu
|
// Copyright Author Dany De Bontridder danydb@aevalys.eu
|
||||||
|
|
||||||
/*!\file
|
/*!
|
||||||
|
* \file
|
||||||
* \brief print the all the operation reconciled or not, with or without the same amount
|
* \brief print the all the operation reconciled or not, with or without the same amount
|
||||||
*/
|
*/
|
||||||
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
|
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
|
||||||
|
|
||||||
global $g_user;
|
global $g_user;
|
||||||
$http=new HttpInput();
|
$http=new HttpInput();
|
||||||
/**
|
|
||||||
*@file
|
|
||||||
*/
|
|
||||||
$aledger=$g_user->get_ledger('ALL',3);
|
$aledger=$g_user->get_ledger('ALL',3);
|
||||||
echo '<div class="noprint">';
|
echo '<div class="noprint">';
|
||||||
echo '<div class="content">';
|
echo '<div class="content">';
|
||||||
$rjrn='';
|
$rjrn='';
|
||||||
$radio=new IRadio('choice');
|
|
||||||
$choice=(isset($_GET['choice']))?$_GET['choice']:0;
|
$choice=$http->get("choice","string",0);
|
||||||
$r_jrn=(isset($_GET['r_jrn']))?$_GET['r_jrn']:'';
|
$r_jrn=$http->get("r_jrn","string","");
|
||||||
echo '<form method="GET">';
|
echo '<form method="GET">';
|
||||||
echo dossier::hidden().HtmlInput::hidden('ac',$_GET['ac']).HtmlInput::hidden('type','rec');
|
echo dossier::hidden().HtmlInput::hidden('ac',$http->request('ac')).HtmlInput::hidden('type','rec');
|
||||||
echo _('Filtre par journal');
|
echo _('Filtre par journal');
|
||||||
HtmlInput::button_choice_ledger(array('div'=>'','type'=>'ALL','all_type'=>1));
|
HtmlInput::button_choice_ledger(array('div'=>'','type'=>'ALL','all_type'=>1));
|
||||||
echo '<br/>';
|
echo '<br/>';
|
||||||
|
|
@ -61,30 +60,20 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Opérations entre ".$dstart->input()." jusque ".$dend->input();
|
echo "Opérations entre ".$dstart->input()." jusque ".$dend->input();
|
||||||
echo '<ol style="list-style-type:none;">';
|
|
||||||
|
|
||||||
$radio->selected=($choice==0)?true:false;
|
|
||||||
$radio->value=0;
|
|
||||||
echo '<li>'.$radio->input()._('Opérations rapprochées').'</li>';
|
|
||||||
|
|
||||||
$radio->selected=($choice==1)?true:false;
|
|
||||||
$radio->value=1;
|
|
||||||
echo '<li>'.$radio->input()._('Opérations rapprochées avec des montants différents').'</li>';
|
|
||||||
|
|
||||||
$radio->selected=($choice==2)?true:false;
|
|
||||||
$radio->value=2;
|
|
||||||
echo '<li>'.$radio->input()._('Opérations rapprochées avec des montants identiques').'</li>';
|
|
||||||
|
|
||||||
$radio->selected=($choice==3)?true:false;
|
|
||||||
$radio->value=3;
|
|
||||||
echo '<li>'.$radio->input()._('Opérations non rapprochées').'</li>';
|
|
||||||
|
|
||||||
echo '</ol>';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$select=new ISelect("choice");
|
||||||
|
$select->transform([
|
||||||
|
0=>_('Opérations rapprochées')
|
||||||
|
,1=>_('Opérations rapprochées avec des montants différents')
|
||||||
|
,2=>_('Opérations rapprochées avec des montants identiques')
|
||||||
|
,3=>_('Opérations non rapprochées')
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$select->selected=$choice;
|
||||||
|
echo $select->input();
|
||||||
|
echo '<p>';
|
||||||
echo HtmlInput::submit('vis',_('Visualisation'));
|
echo HtmlInput::submit('vis',_('Visualisation'));
|
||||||
|
echo '</p>';
|
||||||
echo '</form>';
|
echo '</form>';
|
||||||
echo '<hr>';
|
echo '<hr>';
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
|
|
@ -96,7 +85,7 @@ $acc_reconciliation=new Acc_Reconciliation($cn);
|
||||||
$acc_reconciliation->a_jrn=$r_jrn;
|
$acc_reconciliation->a_jrn=$r_jrn;
|
||||||
$acc_reconciliation->start_day=$dstart->value;
|
$acc_reconciliation->start_day=$dstart->value;
|
||||||
$acc_reconciliation->end_day=$dend->value;
|
$acc_reconciliation->end_day=$dend->value;
|
||||||
|
$acc_reconciliation->prepare_query_detail_quant();
|
||||||
$array=$acc_reconciliation->get_data($choice);
|
$array=$acc_reconciliation->get_data($choice);
|
||||||
|
|
||||||
$gDossier=Dossier::id();
|
$gDossier=Dossier::id();
|
||||||
|
|
|
||||||
|
|
@ -1,71 +1,96 @@
|
||||||
<?php
|
<?php
|
||||||
//This file is part of NOALYSS and is under GPL
|
//This file is part of NOALYSS and is under GPL
|
||||||
//see licence.txt
|
//see licence.txt
|
||||||
?><table class="result">
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<?php echo _("N°")?>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<?php echo _("Date")?>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<?php echo _("N° op")?>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<?php echo _("n° pièce")?>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<?php echo _("Libellé")?>
|
|
||||||
</th>
|
|
||||||
<th style="text-align:right">
|
|
||||||
<?php echo _("Montant")?>
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
for ($i=0;$i<count($array);$i++) {
|
|
||||||
$tot=$acc_reconciliation->get_amount_noautovat($array[$i]['first']['jr_id'],$array[$i]['first']['jr_montant']);
|
|
||||||
|
|
||||||
$r='';
|
|
||||||
$r.=td($i);
|
|
||||||
$r.=td(format_date($array[$i]['first']['jr_date']));
|
|
||||||
$detail = HtmlInput::detail_op($array[$i]['first']['jr_id'], $array[$i]['first']['jr_internal']);
|
|
||||||
$r.=td($detail);
|
|
||||||
$r.=td($array[$i]['first']['jr_pj_number']);
|
|
||||||
$r.=td($array[$i]['first']['jr_comment']);
|
|
||||||
$r.=td(nbm($tot),'style="text-align:right"');
|
|
||||||
echo tr($r);
|
|
||||||
// check if operation does exist in v_detail_quant
|
|
||||||
$ret=$acc_reconciliation->db->execute('detail_quant',array($array[$i]['first']['jr_id']));
|
|
||||||
$acc_reconciliation->show_detail($ret);
|
|
||||||
if ( isset($array[$i]['depend']) )
|
|
||||||
{
|
|
||||||
$tot2=0;
|
|
||||||
$limit=count($array[$i]['depend'])-1;
|
|
||||||
for ($e=0;$e<count($array[$i]['depend']);$e++) {
|
|
||||||
$r='';
|
|
||||||
$r.=td($i);
|
|
||||||
$r.=td(format_date($array[$i]['depend'][$e]['jr_date']));
|
|
||||||
$detail = HtmlInput::detail_op($array[$i]['depend'][$e]['jr_id'], $array[$i]['depend'][$e]['jr_internal']);
|
|
||||||
$r.=td($detail);
|
|
||||||
$r.=td($array[$i]['depend'][$e]['jr_pj_number']);
|
|
||||||
$r.=td($array[$i]['depend'][$e]['jr_comment']);
|
|
||||||
$r.=td(nbm($array[$i]['depend'][$e]['jr_montant']),'style="text-align:right"');
|
|
||||||
|
|
||||||
$amount_dep=$acc_reconciliation->get_amount_noautovat($array[$i]['depend'][$e]['jr_id'],$array[$i]['depend'][$e]['jr_montant']);
|
|
||||||
$tot2=bcadd($tot2,$amount_dep);
|
|
||||||
|
|
||||||
if ( $e==$limit)
|
|
||||||
echo '<tr>'.$r.'</tr>';
|
|
||||||
else
|
|
||||||
echo tr($r);
|
|
||||||
$ret=$acc_reconciliation->db->execute('detail_quant',array($array[$i]['depend'][$e]['jr_id']));
|
|
||||||
$acc_reconciliation->show_detail($ret);
|
|
||||||
}
|
|
||||||
echo tr(td(_('Total ')).td(_('opération')).td(nbm($tot)).td(_('opérations dépendantes')).td(nbm($tot2)).td(_('Delta')).td(bcsub($tot,$tot2)),' class="highlight"');
|
|
||||||
echo tr(td('<hr>',' colspan="6" style="witdh:auto"'));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
</table>
|
<div class="rpm_main">
|
||||||
|
<?php
|
||||||
|
for ($i = 0; $i < count($array); $i++) {
|
||||||
|
?>
|
||||||
|
<div class="rpm_operation rpm_title">
|
||||||
|
<div >
|
||||||
|
<?php echo _("N°") ?>
|
||||||
|
</div>
|
||||||
|
<div >
|
||||||
|
<?php echo _("Date") ?>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<?php echo _("Interne") ?>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<?php echo _("N° pièce") ?>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<?php echo _("Libellé") ?>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<?php echo _("Montant") ?>
|
||||||
|
</div>
|
||||||
|
<div></div>
|
||||||
|
</div>
|
||||||
|
<div class="rpm_operation ">
|
||||||
|
<div><?= $i ?></div>
|
||||||
|
<div><?=$array[$i]['str_jr1_jr_date']?></div>
|
||||||
|
<div><?= HtmlInput::detail_op($array[$i]['jr1_jr_id'], $array[$i]['jr1_jr_internal']) ?></div>
|
||||||
|
<div><?= $array[$i]['jr1_jr_pj_number'] ?></div>
|
||||||
|
<div><?= $array[$i]['jr1_jr_comment'] ?></div>
|
||||||
|
<?php
|
||||||
|
$x=($array[$i]['to1_sum_amount']!=0)?$array[$i]['to1_sum_amount']:$array[$i]['jr1_jr_montant'];
|
||||||
|
?>
|
||||||
|
<div><?=nbm($x)?></div>
|
||||||
|
|
||||||
|
<div class="rpm_detail">
|
||||||
|
<?php
|
||||||
|
$r = '';
|
||||||
|
|
||||||
|
// check if operation does exist in v_detail_quant
|
||||||
|
// $ret = $acc_reconciliation->db->execute('detail_quant', array($array[$i]['jr1_jr_id']));
|
||||||
|
// echo '<table>';
|
||||||
|
// $acc_reconciliation->show_detail($ret);
|
||||||
|
// echo '</table>';
|
||||||
|
|
||||||
|
if ( $array[$i]['depend_count']>0) {
|
||||||
|
$depend=$acc_reconciliation->db->get_array("select *
|
||||||
|
from temp_total_operation
|
||||||
|
where
|
||||||
|
jr1_jr_id=$1 and ra1_jra_concerned != jr1_jr_id"
|
||||||
|
,[$array[$i]['jr1_jr_id']]);
|
||||||
|
$nb_depend = count($depend);
|
||||||
|
$totdepend=0;$delta=$x;
|
||||||
|
?>
|
||||||
|
<div class="rpm_detail">
|
||||||
|
<h4><?=_("Opération liée")?></h4>
|
||||||
|
<?php
|
||||||
|
for ($e = 0; $e < $nb_depend ; $e++) {
|
||||||
|
$y=($depend[$e]['to2_sum_amount']!=0)?$depend[$e]['to2_sum_amount']:$depend[$e]['jr2_jr_montant'];
|
||||||
|
$totdepend=bcadd($totdepend,$y,2);
|
||||||
|
$delta=bcsub($delta,$y,2);
|
||||||
|
?>
|
||||||
|
<div class="rpm_operation">
|
||||||
|
<div><?= $i ?></div>
|
||||||
|
<div><?=$depend[$e]["str_jr2_jr_date"] ?></div>
|
||||||
|
<div><?= HtmlInput::detail_op($depend[$e]["ra1_jra_concerned"],$depend[$e]["jr2_jr_internal"]) ?></div>
|
||||||
|
<div><?=$depend[$e]["jr2_jr_pj_number"] ?></div>
|
||||||
|
<div><?=$depend[$e]["jr2_jr_comment"] ?></div>
|
||||||
|
<div><?= nbm($y) ?></div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
?></div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
} // end for ($e = 0; $e < count($array[$i]['depend']); $e++)
|
||||||
|
|
||||||
|
?></div>
|
||||||
|
<div class="rpm_detail highlight">
|
||||||
|
<?=sprintf(_("Total opération liée : %.2f Delta %.2f"),$totdepend,$delta)?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
} // if ( $array[$i]['depend_count']>1)
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
} // end for ($i=0;$i<count($array);$i++)
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
105
unit-test/include/class/Acc_ReconciliationTest.php
Normal file
105
unit-test/include/class/Acc_ReconciliationTest.php
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Author : Dany De Bontridder danydb@noalyss.eu
|
||||||
|
* Copyright (C) 2025 Dany De Bontridder <dany@alchimerys.be>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief noalyss
|
||||||
|
*/
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Class Acc_Reconciliation for operations links
|
||||||
|
* @backupGlobals enabled
|
||||||
|
* @coversDefaultClass Acc_Reconciliation
|
||||||
|
*/
|
||||||
|
class Acc_ReconciliationTest extends TestCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Fiche
|
||||||
|
*/
|
||||||
|
protected $object;
|
||||||
|
protected $connection;
|
||||||
|
private $g_user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @backupGlobals enabled
|
||||||
|
* Sets up the fixture, for example, opens a network connection.
|
||||||
|
* This method is called before a test method is executed.
|
||||||
|
*/
|
||||||
|
protected function setUp(): void {
|
||||||
|
require DIRTEST . '/global.php';
|
||||||
|
$this->connection = $g_connection;
|
||||||
|
$this->g_user = $g_user;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Count rows not linked
|
||||||
|
* @global $g_connection
|
||||||
|
*/
|
||||||
|
function testNotReconcilied() {
|
||||||
|
$acc_reconciliation = new \Acc_Reconciliation($this->connection);
|
||||||
|
$acc_reconciliation->prepare_query_detail_quant();
|
||||||
|
$array = $acc_reconciliation->get_data(3);
|
||||||
|
$this->assertEquals(18, count($array), "count number of rows found");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @brief build an object Acc_Reconciliation
|
||||||
|
* @return \Acc_Reconciliation
|
||||||
|
*/
|
||||||
|
function build_object() {
|
||||||
|
$acc_reconciliation = new \Acc_Reconciliation($this->connection);
|
||||||
|
$acc_reconciliation->start_day = '01.01.2019';
|
||||||
|
$acc_reconciliation->end_day = '01.01.2019';
|
||||||
|
return $acc_reconciliation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Count rows linked
|
||||||
|
* @backupGlobals enabled
|
||||||
|
*/
|
||||||
|
function testReconcilied() {
|
||||||
|
$acc_reconciliation = $this->build_object();
|
||||||
|
$array = $acc_reconciliation->get_data(0);
|
||||||
|
$this->assertEquals(8, count($array), "count number of rows found");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox Count rows linked but with different amount
|
||||||
|
* @backupGlobals enabled
|
||||||
|
*/
|
||||||
|
function testReconciliedDifferentAmount() {
|
||||||
|
$acc_reconciliation = new \Acc_Reconciliation($this->connection);
|
||||||
|
$array = $acc_reconciliation->get_data(1);
|
||||||
|
$this->assertEquals(0, count($array), "count number of rows found");
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBuild_temp_total_operation() {
|
||||||
|
$acc_reconciliation = new \Acc_Reconciliation($this->connection);
|
||||||
|
$acc_reconciliation->build_temp_total_operation();
|
||||||
|
$acc_reconciliation->build_temp_total_operation();
|
||||||
|
$acc_reconciliation->build_temp_total_operation();
|
||||||
|
$cnt = $this->connection->get_value("select count(*) from temp_total_operation");
|
||||||
|
$this->assertEquals(16, $cnt, " incorrect number of rows");
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue