From 4e8ec132f3e5b760481a47d19914ef3633234e13 Mon Sep 17 00:00:00 2001 From: sparkyx Date: Sat, 9 Mar 2024 13:23:28 +0100 Subject: [PATCH] Correct Bug : receipt not computed with extourne --- include/class/acc_ledger.class.php | 21 ++++++++++++++++----- include/class/acc_operation.class.php | 13 +++++++++---- unit-test/include/class/acc_ledgerTest.php | 5 +++++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/include/class/acc_ledger.class.php b/include/class/acc_ledger.class.php index 69e22667c..b715c242b 100644 --- a/include/class/acc_ledger.class.php +++ b/include/class/acc_ledger.class.php @@ -353,6 +353,7 @@ class Acc_Ledger extends jrn_def_sql } + $old_receipt=$this->db->get_row("select jr_pj_number,jr_def_id from jrn where jr_id=$1",[$this->jr_id]); $sql="insert into jrn ( jr_id, jr_def_id, @@ -373,14 +374,24 @@ class Acc_Ledger extends jrn_def_sql $5, true,'EXT',currency_id,currency_rate,currency_rate_ref from jrn - where jr_id=$6"; - $Res=$this->db->exec_sql($sql, + where jr_id=$6 returning jr_id"; + try { + + $reverse_id=$this->db->get_value($sql, array($seq, $p_date, $grp_new, $p_internal, $per->p_id, $this->jr_id,$p_label)); + $reverse_accOp=new Acc_Operation($this->db); + $reverse_accOp->set_id($reverse_id); + $reverse_accOp->pj=$old_receipt['jr_pj_number']; + $reverse_accOp->jrn=$old_receipt['jr_def_id']; + $reverse_accOp->set_pj(); // Check return code - if ($Res==false) - { - throw (new Exception(__FILE__.__LINE__."SQL ERROR [ $sql ]")); + } catch (\Exception $e){ + throw new \Exception('Echec extourne'); + } + + + // reverse in QUANT_FIN table $Res=$this->db->exec_sql(" INSERT INTO quant_fin( qf_bank, qf_other, qf_amount,jr_id,j_id) diff --git a/include/class/acc_operation.class.php b/include/class/acc_operation.class.php index 73c3d1a1c..f2b144f30 100644 --- a/include/class/acc_operation.class.php +++ b/include/class/acc_operation.class.php @@ -266,15 +266,19 @@ EOF; { if ( noalyss_strlentrim($this->pj) == 0 ) { + echo __LINE__."debug {$this->pj} est vide"; $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $this->db->exec_sql($sql,array(null,$this->jr_id)); return ''; } /* is pj uniq ? */ - if ( $this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2", - array($this->pj,$this->jrn) + if ( $this->db->count_sql("select jr_id from jrn + where jr_pj_number=$1 and jr_def_id=$2 + and jr_id !=$3", + array($this->pj,$this->jrn,$this->jr_id) ) == 0 ) { + echo __LINE__."debug {$this->pj} est unique"; $sql="update jrn set jr_pj_number=$1 where jr_id=$2"; $this->db->exec_sql($sql,array($this->pj,$this->jr_id)); } @@ -300,8 +304,9 @@ EOF; $this->pj=$pref.$seq; /* check if the new pj numb exist */ - $c=$this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2", - array($this->pj,$this->jrn) + $c=$this->db->count_sql("select jr_id from jrn where jr_pj_number=$1 and jr_def_id=$2 + and jr_id !=$3", + array($this->pj,$this->jrn,$this->jr_id) ); if ( $c == 0 ) { diff --git a/unit-test/include/class/acc_ledgerTest.php b/unit-test/include/class/acc_ledgerTest.php index be2aa1ce6..a236e316a 100644 --- a/unit-test/include/class/acc_ledgerTest.php +++ b/unit-test/include/class/acc_ledgerTest.php @@ -198,6 +198,11 @@ class Acc_LedgerTest extends TestCase $this->object->reverse($date,'unit test'.$date); $check=$g_connection->get_value("select jr_id from jrn where jr_comment=$1",["unit test".$date]); $this->assertFalse(empty($check),"NOT REVERSED" ); + // check that the receipt number is correct + $receipt=$g_connection->get_value("select jr_pj_number from jrn where jr_id=$1",[$check]); + $this->assertFalse(empty($receipt)," no receipt number computed"); + $orig_receipt=$g_connection->get_value("select jr_pj_number from jrn where jr_id=$1",[$this->object->jr_id]); + $this->assertNotEquals($receipt, $orig_receipt,"Wrong Receipt number "); $this->object->jr_id=$check; $this->object->delete(); }