altocompta/include/class/additional_tax.class.php
2022-05-31 13:48:53 +02:00

177 lines
5.1 KiB
PHP

<?php
/*
* This file is part of NOALYSS.
*
* NOALYSS 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.
*
* NOALYSS 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 NOALYSS; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// Copyright 2022 Author Dany De Bontridder dany@alchimerys.be
class Additional_Tax
{
private $tax_amount;
private $currency_amount;
private $currency_id;
private $ac_id;
private $ac_label;
private $ac_rate;
private $ac_accounting;
function __construct($tax_amount,$currency_amount,$currency_id,$ac_id,$ac_label,$ac_rate,$ac_accounting)
{
$this->tax_amount=round($tax_amount,2);
$this->currency_amount=round($currency_amount,4);
$this->currency_id=$currency_id;
$this->ac_id=$ac_id;
$this->ac_label=$ac_label;
$this->ac_rate=$ac_rate;
$this->ac_accounting=$ac_accounting;
}
/**
* @return float
*/
public function getTaxAmount(): float
{
return $this->tax_amount;
}
/**
* @return float
*/
public function getCurrencyAmount(): float
{
return $this->currency_amount;
}
/**
* @return mixed
*/
public function getCurrencyId()
{
return $this->currency_id;
}
/**
* @return mixed
*/
public function getAcId()
{
return $this->ac_id;
}
/**
* @return mixed
*/
public function getAcLabel()
{
return $this->ac_label;
}
/**
* @return mixed
*/
public function getAcRate()
{
return $this->ac_rate;
}
/**
* @return mixed
*/
public function getAcAccounting()
{
return $this->ac_accounting;
}
/**
* @brief create an array of Additional_Tax
* @param $p_jrn_id
* @param $sum_euro
* @param $sum_currency
* @return array
*/
static function get_by_operation($p_jrn_id,&$sum_euro,&$sum_currency)
{
bcscale(4);
global $cn;
$array = $cn->get_array("select
case when j_debit is false and jn.jrn_def_type='ACH' then 0-j_montant
when j_debit is true and jn.jrn_def_type='VEN' then 0-j_montant
else j_montant end j_montant,
jrn.currency_id,
oc_amount,
jt.ac_id,
jrnx.j_debit,
aot.ac_label,
aot.ac_rate,
aot.ac_accounting,
jn.jrn_def_type
from jrn_tax jt
join jrnx using (j_id)
join jrn on (jrnx.j_grpt=jrn.jr_grpt_id)
join jrn_def jn on (jrn.jr_def_id=jn.jrn_def_id)
join acc_other_tax aot on (jt.ac_id=aot.ac_id)
left join operation_currency oc ON (oc.j_id=jt.j_id)
where
jr_id=$1", [$p_jrn_id]);
$sum_currency=0;$sum_euro=0;
if (empty($array)) { return array();}
$nb=count($array);
$a_additional_tax=array();
for ($i=0;$i<$nb;$i++) {
$a_additional_tax[]=new Additional_Tax($array[$i]['j_montant'],
$array[$i]['oc_amount'],
$array[$i]['currency_id'],
$array[$i]['ac_id'],
$array[$i]['ac_label'],
$array[$i]['ac_rate'],
$array[$i]['ac_accounting'],
);
$sum_euro=bcadd($sum_euro,$array[$i]['j_montant']);
$sum_currency=bcadd($sum_currency,$array[$i]['oc_amount']);
}
$sum_euro=round($sum_euro,2);
return $a_additional_tax;
}
/**
* @brief display the additional_tax in the ledger_detail for Sales and Purchase
* @param $p_jrn_id
* @param $sum_euro
* @param $sum_currency
* @param int $decalage
*/
static function display_row($p_jrn_id,&$sum_euro,&$sum_currency,$decalage=0)
{
$a_additional_tax=Additional_Tax::get_by_operation($p_jrn_id,$sum_euro,$sum_currency);
$nb=count($a_additional_tax);
for ($i=0;$i<$nb;$i++) {
echo '<tr>';
echo td($a_additional_tax[$i]->ac_accounting);
echo td($a_additional_tax[$i]->ac_label." ( ".$a_additional_tax[$i]->ac_rate." %)");
echo td(nbm($a_additional_tax[$i]->tax_amount),'class="num"');
echo td("").td("").td("").td("");
for ($e=0;$e<$decalage;$e++) { echo td("");}
echo td(nbm($a_additional_tax[$i]->tax_amount),'class="num"');
if ( $a_additional_tax[$i]->currency_id !=0 ) {
echo td(nbm($a_additional_tax[$i]->currency_amount),'class="num"');
}
echo '</tr>';
}
}
}