Optional attribute for using quantity

This commit is contained in:
Dany De Bontridder 2022-09-03 18:49:17 +02:00 committed by sparkyx
parent a308aed423
commit 868d78a862
6 changed files with 125 additions and 54 deletions

View file

@ -2575,8 +2575,8 @@ class Acc_Ledger extends jrn_def_sql
/* Load the card */
$card=$this->get_fiche_def();
$rdeb=explode(',', $card['deb']);
$rcred=explode(',', $card['cred']);
$rdeb=noalyss_explode(',', $card['deb']);
$rcred=noalyss_explode(',', $card['cred']);
/* Numbering (only FIN) */
$num_op=new ICheckBox('numb_operation');
if ($this->jrn_def_num_op==1)
@ -2607,8 +2607,11 @@ class Acc_Ledger extends jrn_def_sql
$negative=new InputSwitch('negative_amount',$this->jrn_def_negative_amount);
$negative_warning=new IText("negative_warning",_($this->jrn_def_negative_warning));
$negative_warning->size=80;
$negative_warning->size=55;
// use of quantity in ledger
$quantity=new InputSwitch('p_jrn_quantity',$this->jrn_def_quantity);
require_once NOALYSS_TEMPLATE.'/param_jrn.php';
}
@ -2654,12 +2657,14 @@ class Acc_Ledger extends jrn_def_sql
*/
function verify_ledger($array)
{
$p_jrn=$array['p_jrn'];
$p_jrn_deb_max_line=$array['p_jrn_deb_max_line'];
$p_jrn_name=$array['p_jrn_name'];
$p_jrn_type=$array['p_jrn_type'];
$http=new HttpInput();
$http->set_array($array);
$p_jrn=$http->extract('p_jrn',);
$p_jrn_deb_max_line=$http->extract('p_jrn_deb_max_line');
$p_jrn_name=$http->extract('p_jrn_name');
$p_jrn_type=$http->extract('p_jrn_type');
$p_jrn_quantity=$http->extract('p_jrn_quantity','number',0);
try
{
if (isNumber($p_jrn)==0)
@ -2711,39 +2716,55 @@ class Acc_Ledger extends jrn_def_sql
* @param type $array normally post
* @see verify_ledger
*/
function update($array='')
function update($array=null)
{
if ($array==null)
throw new Exception('save cannot use a empty array');
$this->jrn_def_quantity=(!isset($this->jrn_def_quantity)||$this->jrn_def_quantity===null)?1:$this->jrn_def_quantity;
extract($array, EXTR_SKIP);
$this->jrn_def_id=$p_jrn;
$this->jrn_def_name=$p_jrn_name;
$this->jrn_def_ech_lib=$p_ech_lib;
if ($array==null) {
// update with the current value
parent::update();
return;
}
$http=new HttpInput();
$http->set_array($array);
$p_jrn_deb_max_line=$http->extract("p_jrn_deb_max_line","number",-1);
$min_row=$http->extract("min_row");
$this->jrn_def_id=$http->extract('p_jrn');
$this->jrn_def_name=$http->extract('p_jrn_name');
$this->jrn_def_ech_lib=$http->extract('p_ech_lib');
$this->jrn_def_max_line_deb=($p_jrn_deb_max_line<1)?1:$p_jrn_deb_max_line;
$this->jrn_def_type=$p_jrn_type;
$this->jrn_def_pj_pref=$jrn_def_pj_pref;
$this->jrn_def_type=$http->extract('p_jrn_type');
$this->jrn_def_pj_pref=$http->extract('jrn_def_pj_pref');
$this->jrn_deb_max_line=($min_row<1)?1:$min_row;
$this->jrn_def_description=$p_description;
$this->jrn_enable=$jrn_enable;
$this->jrn_def_description=$http->extract('p_description');
$this->jrn_enable=$http->extract('jrn_enable');
$this->currency_id=0;
$this->jrn_def_negative_amount=(isset($negative_amount))?$negative_amount:'0';
$this->jrn_def_negative_warning=(isset ($negative_warning))?$negative_warning:_("Attention, ce journal doit utiliser des montants négatifs");
$this->jrn_def_negative_amount=$http->extract('negative_amount','string',0);
$this->jrn_def_negative_warning=$http->extract("negative_warning",'string',
_("Attention, ce journal doit utiliser des montants négatifs"));
$this->jrn_def_quantity=$http->extract('p_jrn_quantity','string',1);
$jrn_def_pj_seq=$http->extract("jrn_def_pj_seq");
switch ($this->jrn_def_type)
{
case 'ACH':
$this->jrn_def_fiche_cred=(isset($ACH_FICHECRED))?join(',',$ACH_FICHECRED):'';
$this->jrn_def_fiche_deb=(isset($ACH_FICHEDEB))?join(',',$ACH_FICHEDEB):"";
$ACH_FICHECRED=$http->extract('ACH_FICHECRED','array',array());
$ACH_FICHEDEB=$http->extract('ACH_FICHEDEB','array',array());
$this->jrn_def_fiche_cred=(!empty($ACH_FICHECRED))?join(',',$ACH_FICHECRED):'';
$this->jrn_def_fiche_deb=(!empty($ACH_FICHEDEB))?join(',',$ACH_FICHEDEB):"";
break;
case 'VEN':
$this->jrn_def_fiche_cred=(isset($VEN_FICHECRED))?join(',',$VEN_FICHECRED):'';
$this->jrn_def_fiche_deb=(isset($VEN_FICHEDEB))?join(',',$VEN_FICHEDEB):"";
$VEN_FICHECRED=$http->extract('VEN_FICHECRED','array',array());
$VEN_FICHEDEB=$http->extract('VEN_FICHEDEB','array',array());
$this->jrn_def_fiche_cred=(!empty($VEN_FICHECRED))?join(',',$VEN_FICHECRED):'';
$this->jrn_def_fiche_deb=(!empty($VEN_FICHEDEB))?join(',',$VEN_FICHEDEB):"";
break;
case 'ODS':
$this->jrn_def_class_deb=$p_jrn_class_deb;
$this->jrn_def_fiche_deb=(isset($ODS_FICHEDEB))?join(',',$ODS_FICHEDEB):''; ;
$this->jrn_def_class_deb=$http->extract('p_jrn_class_deb','string');
$ODS_FICHEDEB=$http->extract('ODS_FICHEDEB','array',array());
$this->jrn_def_fiche_deb=(!empty($ODS_FICHEDEB))?join(',',$ODS_FICHEDEB):''; ;
$this->jrn_def_fiche_cred=null;
break;
@ -2752,10 +2773,11 @@ class Acc_Ledger extends jrn_def_sql
$result=$a->get_by_qcode(trim(strtoupper($_POST['bank'])), false);
$bank=$a->id;
$this->jrn_def_bank=$bank;
$this->jrn_def_fiche_deb=(isset($FIN_FICHEDEB))?join(',',$FIN_FICHEDEB):"";
$FIN_FICHEDEB=$http->extract('FIN_FICHEDEB','array',array());
$this->jrn_def_fiche_deb=(!empty($FIN_FICHEDEB))?join(',',$FIN_FICHEDEB):"";
if ($result==-1)
throw new Exception(_("Aucun compte en banque n'est donné"));
$this->jrn_def_num_op=(isset($numb_operation))?1:0;
$this->jrn_def_num_op=$http->extract('numb_operation','string',0);
// if nb operation == 0 then update currency_id
$nb_operation = $this->db->get_value("select count(*) from jrn where jr_def_id=$1",
[$this->jrn_def_id]);
@ -2775,7 +2797,7 @@ class Acc_Ledger extends jrn_def_sql
//Reset sequence if needed
if ($jrn_def_pj_seq!=0)
{
$Res=$this->db->alter_seq("s_jrn_pj".$p_jrn, $jrn_def_pj_seq);
$Res=$this->db->alter_seq("s_jrn_pj".$this->jrn_def_id, $jrn_def_pj_seq);
}
}
/**
@ -2813,7 +2835,6 @@ class Acc_Ledger extends jrn_def_sql
$previous_p_jrn_name=$http->post('p_jrn_name', "string", '');
$previous_p_jrn_type=$http->post("p_jrn_type", "string", "");
// }
global $g_user;
$f_add_button=new ISmallButton('add_card');
$f_add_button->label=_('Créer une nouvelle fiche');
$f_add_button->tabindex=-1;
@ -2899,7 +2920,10 @@ class Acc_Ledger extends jrn_def_sql
$negative=new InputSwitch('negative_amount',0);
$negative_warning=new IText('negative_warning',_("Attention, ce journal doit utiliser des montants négatifs"));
$negative_warning->size=80;
$negative_warning->size="55";
// use of quantity in ledger
$quantity=new InputSwitch('p_jrn_quantity',1);
require_once NOALYSS_TEMPLATE.'/param_jrn.php';
}
@ -2958,7 +2982,7 @@ class Acc_Ledger extends jrn_def_sql
$this->currency_id=$defaultCurrency;
break;
}
$this->jrn_def_quantity=(!isset($this->jrn_def_quantity)||$this->jrn_def_quantity==null)?1:$this->jrn_def_quantity;
parent::insert();
}
@ -3239,6 +3263,21 @@ class Acc_Ledger extends jrn_def_sql
{
return $this->db->get_value("select jrn_enable from jrn_def where jrn_def_id=$1",[$this->id]);
}
/**
* Check if a ledger is enabled , 1 for yes and 0 if disabled
*/
function has_quantity()
{
return $this->jrn_def_quantity;
}
/**
* @brief set quantity for the ledger to 1 or 0,
* @note do not save in the DB
*/
function set_quantity($p_value)
{
$this->jrn_def_quantity=$p_value;
}
/**
* Check if the operation is used in the table quant*
* @param integer $p_grpt_id

View file

@ -115,7 +115,7 @@ if (!defined("NOALYSS_PACKAGE_REPOSITORY")) {
if (!defined("SYSINFO_DISPLAY")) {
define("SYSINFO_DISPLAY", TRUE);
}
define("DBVERSION", 176);
define("DBVERSION", 177);
define("MONO_DATABASE", 25);
define("DBVERSIONREPO", 20);
define('NOTFOUND', '--not found--');

View file

@ -58,6 +58,7 @@ class Jrn_def_SQL extends Table_Data_SQL
, "currency_id"=>"currency_id"
, "jrn_def_negative_amount"=>"jrn_def_negative_amount"
, "jrn_def_negative_warning"=>"jrn_def_negative_warning"
, 'jrn_def_quantity'=>'jrn_def_quantity'
);
/*
* Type of columns
@ -83,6 +84,7 @@ class Jrn_def_SQL extends Table_Data_SQL
, "currency_id"=>"numeric"
, "jrn_def_negative_amount"=>"text"
,"jrn_def_negative_warning"=>"text"
,'jrn_def_quantity'=>"numeric"
);
$this->default=array(

View file

@ -101,6 +101,8 @@ if ( $type == 'ACH' || $type == 'VEN'||$new):
echo $negative->input();
?>
</td>
</tr>
<tr id="row_warning">
<td style="white-space: nowrap">
@ -110,6 +112,17 @@ if ( $type == 'ACH' || $type == 'VEN'||$new):
<?php echo $negative_warning->input();?>
</td>
</tr>
<tr>
<td>
<?php echo _('Utilisation des quantités')?>
</td>
<td>
<?php
echo $quantity->input();
?>
</td>
</tr>
<?php
endif;
?>
@ -225,7 +238,7 @@ endif;
for ($i=0;$i<$num;$i++) {
$res=$cn->fetch($i);
$CHECKED=" unchecked";
foreach ( $rdeb as $element) {
foreach ( $rdeb as $element) {
if ( $element == $res['fd_id'] ) {
$CHECKED="CHECKED";
break;
@ -346,12 +359,7 @@ endif;
printf ('<TD> <INPUT TYPE="CHECKBOX" VALUE="%s" NAME="ODS_FICHEDEB[]" class="ods_fichedeb" %s>%s</TD>',
$res['fd_id'],$CHECKED,$res['fd_label']);
$CHECKED=" unchecked";
foreach ( $rcred as $element) {
if ( $element == $res['fd_id'] ) {
$CHECKED="CHECKED";
break;
}
}
echo '</TR>';
}
?>
@ -397,12 +405,7 @@ endif;
printf ('<TD> <INPUT TYPE="CHECKBOX" VALUE="%s" NAME="FIN_FICHEDEB[]" class="fin_fichedeb" %s>%s</TD>',
$res['fd_id'],$CHECKED,$res['fd_label']);
$CHECKED=" unchecked";
foreach ( $rcred as $element) {
if ( $element == $res['fd_id'] ) {
$CHECKED="CHECKED";
break;
}
}
echo '</TR>';
}
?>

View file

@ -40,5 +40,4 @@ $_SESSION[SESSION_KEY.'csv_encoding']='utf8';
$_SESSION[SESSION_KEY.'access_mode']='PC';
$g_user=new User($g_connection);
$_ENV['TMP']="/tmp/";
require_once __DIR__.'/facility.class.php';

View file

@ -20,7 +20,7 @@ class Acc_LedgerTest extends TestCase
/**
* Get an operation
* @global type $g_connection
* @return type
* @return type20
*/
private function get_jrn_id($p_ledger='ODS')
{
@ -61,6 +61,15 @@ class Acc_LedgerTest extends TestCase
{
}
/**
* @backupGlobals enabled
*/
static function tearDownAfterClass():void
{
global $g_connection;
$g_connection->exec_sql("update jrn_def set jrn_def_quantity=0 where jrn_def_id=4");
}
/**
* covers ::existing_vat
* covers ::get_type
@ -245,7 +254,7 @@ class Acc_LedgerTest extends TestCase
$this->object->id=2;
$array=$this->object->get_propertie();
// there are 16 columns in jrn_def
$this->assertEquals(count($array),20);
$this->assertEquals(count($array),21);
$this->object->id=0;
$array=$this->object->get_propertie();
$this->assertEquals(null,$array);
@ -399,6 +408,25 @@ class Acc_LedgerTest extends TestCase
}
}
/**
* @testdox Check if the column jrn_def_quantity is properly saved
* @return void
* @throws Exception
*/
function testQuantity()
{
global $g_connection;
$ledger=new Acc_Ledger($g_connection,4);
$ledger->set_quantity(1);
$ledger->update();
$ledger->load();
$this->assertEquals(1,$ledger->has_quantity(),'jrn_def_quantity is not saved');
$ledger->set_quantity(0);
$ledger->update();
$ledger->load();
$this->assertEquals(0,$ledger->has_quantity(),'jrn_def_quantity is not saved');
}
/**
* @covers Acc_Ledger::input
*/
@ -822,7 +850,7 @@ class Acc_LedgerTest extends TestCase
\Noalyss\Facility::save_file(__DIR__."/file", "acc_ledger-input_new.html", $result);
$size=filesize(__DIR__."/file/acc_ledger-input_new.html");
$this->assertEquals(15969,$size," output input_new is not what it is expected");
$this->assertEquals(16514,$size," output input_new is not what it is expected");
}
/**