New : 2178 Additional Tax : input in purchase and sale ledger
- tax with positive amount - tax with negative amount - tax in currency
This commit is contained in:
parent
c4645e68e1
commit
7256f1464d
12 changed files with 658 additions and 27 deletions
|
|
@ -2231,6 +2231,56 @@ class Acc_Ledger extends jrn_def_sql
|
|||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief retrieve the previous amount
|
||||
* @param $p_to from the start of exercice until p_to
|
||||
* @return array [other_tax_amount]
|
||||
*/
|
||||
function previous_other_tax($p_to) {
|
||||
$periode=new Periode($this->db, $p_to);
|
||||
$exercise=$periode->get_exercice();
|
||||
list ($min, $max)=$periode->get_limit($exercise);
|
||||
// transform min into date
|
||||
$min_date=$min->first_day();
|
||||
// transform $p_to into date
|
||||
$periode_max=new Periode($this->db, $p_to);
|
||||
$max_date=$periode_max->first_day();
|
||||
bcscale(2);
|
||||
// min periode
|
||||
if ($this->get_type()=='ACH')
|
||||
{
|
||||
|
||||
$sql="
|
||||
select j_montant
|
||||
from quant_purchase
|
||||
join jrnx using(j_id)
|
||||
join jrn_tax using (j_id)
|
||||
where j_date >= to_date($1,'DD.MM.YYYY') and j_date < to_date($2,'DD.MM.YYYY')
|
||||
and j_jrn_def = $3";
|
||||
$amount=$this->db->get_value($sql,
|
||||
array($min_date, $max_date, $this->id));
|
||||
|
||||
return array('other_tax_amount',$amount);
|
||||
|
||||
}
|
||||
if ($this->get_type()=='VEN')
|
||||
{
|
||||
|
||||
$sql="
|
||||
select j_montant
|
||||
from quant_sold
|
||||
join jrnx using(j_id)
|
||||
join jrn_tax using (j_id)
|
||||
where j_date >= to_date($1,'DD.MM.YYYY') and j_date < to_date($2,'DD.MM.YYYY')
|
||||
and j_jrn_def = $3";
|
||||
$amount=$this->db->get_value($sql,
|
||||
array($min_date, $max_date, $this->id));
|
||||
|
||||
return array('other_tax_amount',$amount);
|
||||
|
||||
}
|
||||
return array('other_tax_amount',0);
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// TEST MODULE
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -3296,6 +3346,69 @@ class Acc_Ledger extends jrn_def_sql
|
|||
$acc_operation->insert_related_action($s_related_action);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief form : display additional tax available for this ledger and value, set 2 values : checkbox if tax applies
|
||||
* and value
|
||||
*
|
||||
* @see template/form_ledger_detail.php
|
||||
* @returns string
|
||||
*/
|
||||
function input_additional_tax()
|
||||
{
|
||||
|
||||
if ($this->has_other_tax() == false ) { return "";}
|
||||
$amount=new INum("other_tax_amount",0);
|
||||
$msg=_("Montant");
|
||||
$row=$this->cn->get_row("select ac_id,ac_label,ac_rate from acc_other_tax where $1 = any (ajrn_def_id)",
|
||||
[$this->id]);
|
||||
$checkbox=new ICheckBox("other_tax",$row['ac_id']);
|
||||
$label=h($row['ac_label']);
|
||||
$title=_("Autre taxe");
|
||||
$out=<<<EOF
|
||||
<div id="additional_tax">
|
||||
<h2 class="h3">{$title}</h2>
|
||||
{$checkbox->input()} {$label} {$row['ac_rate']}%: {$msg} {$amount->input()}
|
||||
</div>
|
||||
|
||||
EOF;
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief in confirm screen , display the compute value for additional tax
|
||||
* @parameter $p_additional_tax acc_other_tax.ac_id
|
||||
*/
|
||||
function display_additional_tax($p_additional_tax,$p_amount)
|
||||
{
|
||||
$row=$this->cn->get_row("select ac_id,ac_label,ac_rate from acc_other_tax where ac_id=$1",
|
||||
[$p_additional_tax]);
|
||||
$label=h($row['ac_label']);
|
||||
$title=_("Autre taxe");
|
||||
$p_amount=h($p_amount);
|
||||
$out=<<<EOF
|
||||
<div id="additional_tax">
|
||||
<h2 class="h3">{$title}</h2>
|
||||
{$label} {$row['ac_rate']}%: $p_amount
|
||||
</div>
|
||||
|
||||
EOF;
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief returns true if the ledger has an additional tax
|
||||
*/
|
||||
function has_other_tax()
|
||||
{
|
||||
$cnt=$this->db->get_value('select count(*)
|
||||
from acc_other_tax
|
||||
where array_position(ajrn_def_id,$1) is not null',[$this->id]);
|
||||
if ($cnt == 0 ) return false;
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -355,4 +355,56 @@ abstract class Acc_Ledger_History
|
|||
}
|
||||
throw new Exception(_("Filter invalide ".$filter_operation),5);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief count the number of addition tax for the ledger
|
||||
* @return integer
|
||||
*/
|
||||
public function has_other_tax()
|
||||
{
|
||||
$str_ledger=join(',',$this->ma_ledger);
|
||||
$count=$this->db->get_value("select count(*)
|
||||
from jrn_tax
|
||||
join jrnx using (j_id)
|
||||
join jrn on (jr_grpt_id=j_grpt)
|
||||
where jr_tech_per>=$1 and jr_tech_per <=$2
|
||||
and jr_def_id in ($str_ledger) ",[$this->m_from,$this->m_to]);
|
||||
return $count;
|
||||
}
|
||||
/**
|
||||
* @brief add additional info about additional tax. Add to $this->data an array containing the
|
||||
* info about a additional tax. Concerns only purchase and sales ledgers
|
||||
* @verbatim
|
||||
$this->data[$i]['supp_tax']['ac_id'] id in Acc_Other_Tax
|
||||
$this->data[$i]['supp_tax']['j_montant'] Amount of this tax
|
||||
$this->data[$i]['supp_tax']['ac_label'] Label of this tax
|
||||
$this->data[$i]['supp_tax']['ac_rate'] Rate of this tax
|
||||
$this->data[$i]['supp_tax']['j_poste'] Accounting
|
||||
* @endverbatim
|
||||
*/
|
||||
protected function add_additional_tax_info()
|
||||
{
|
||||
$prepare=$this->db->is_prepare("supp_tax_info");
|
||||
if ( $prepare == false ){
|
||||
$this->db->prepare("supp_tax_info","
|
||||
select j_montant,jt1.ac_id,ac_label,ac_rate,j_poste
|
||||
from
|
||||
jrn_tax jt1
|
||||
join acc_other_tax using (ac_id)
|
||||
join jrnx using (j_id) where j_grpt=$1
|
||||
");
|
||||
|
||||
}
|
||||
$data=$this->get_data();
|
||||
$nb_row=count($data);
|
||||
|
||||
for ($i=0;$i<$nb_row;$i++)
|
||||
{
|
||||
$ret=$this->db->execute("supp_tax_info",array($data[$i]["jr_grpt_id"]));
|
||||
$array=Database::fetch_all($ret);
|
||||
$array=($array==false)?array():$array;
|
||||
$data[$i]["supp_tax"]=$array;
|
||||
}
|
||||
$this->set_data($data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -542,6 +542,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
try
|
||||
{
|
||||
bcscale(4);
|
||||
// total amount of the purchase
|
||||
$tot_amount=0;
|
||||
$tot_tva=0;
|
||||
$tot_debit=0;
|
||||
|
|
@ -585,8 +586,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
$amount_4=bcmul(${'e_march'.$i.'_price'},${'e_quant'.$i});
|
||||
|
||||
/* We have to compute all the amount thanks Acc_Compute */
|
||||
$amount=round($amount_4,2);
|
||||
|
||||
|
||||
$acc_amount=new Acc_Compute();
|
||||
$acc_amount->check=false;
|
||||
$acc_amount->set_parameter('amount',$amount_4);
|
||||
|
|
@ -770,7 +770,45 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
echo __LINE__." insert into operation currency oc_amount:{$acc_amount->amount_currency} oc_vat_amount {$acc_amount->amount_vat_currency} <br>";
|
||||
}
|
||||
} // end loop : save all items
|
||||
/* save total customer */
|
||||
|
||||
|
||||
/*** save other tax ****/
|
||||
if ( $this->has_other_tax() && isset($p_array['other_tax'])) {
|
||||
$row=$this->db->get_row("select ac_id,ac_label,ac_accounting
|
||||
from acc_other_tax
|
||||
where ac_id=$1 ",
|
||||
[$p_array['other_tax']]);
|
||||
if ( ! empty ($row )) {
|
||||
$other_tax_amount=bcmul($p_array['other_tax_amount'],$p_currency_rate);
|
||||
$acc_operation=new Acc_Operation($this->db);
|
||||
$acc_operation->date=$e_date;
|
||||
$acc_operation->poste=$row['ac_accounting'];
|
||||
$acc_operation->amount=$other_tax_amount;
|
||||
$acc_operation->grpt=$seq;
|
||||
$acc_operation->jrn=$p_jrn;
|
||||
$acc_operation->type='d';
|
||||
$acc_operation->periode=$tperiode;
|
||||
$acc_operation->desc=$row['ac_label'];
|
||||
$jrn_tax_sql=new Jrn_Tax_SQL($this->db);
|
||||
$jrn_tax_sql->j_id=$acc_operation->insert_jrnx();
|
||||
$jrn_tax_sql->ac_id=$row['ac_id'];
|
||||
$jrn_tax_sql->pcm_val=$row['ac_accounting'];
|
||||
$jrn_tax_sql->insert();
|
||||
$operation_currency=new Operation_currency_SQL($this->db);
|
||||
$operation_currency->oc_amount=$p_array['other_tax_amount'];
|
||||
$operation_currency->oc_vat_amount=0;
|
||||
$operation_currency->oc_price_unit=0;
|
||||
$operation_currency->j_id=$jrn_tax_sql->j_id;
|
||||
$operation_currency->insert();
|
||||
|
||||
$tot_debit=bcadd($tot_debit, abs($other_tax_amount));
|
||||
$tot_amount=bcadd($tot_amount,$other_tax_amount);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*** save total customer ***/
|
||||
if ( DEBUGNOALYSS > 1 ) {
|
||||
echo __LINE__." tot_amount $tot_amount<br>";
|
||||
echo __LINE__." tot_tva $tot_tva<br>";
|
||||
|
|
@ -847,6 +885,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
/* insert into jrn */
|
||||
$acc_operation=new Acc_Operation($this->db);
|
||||
$acc_operation->date=$e_date;
|
||||
|
|
@ -1038,7 +1077,9 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}//end try
|
||||
catch (Exception $e)
|
||||
{
|
||||
|
|
@ -1458,6 +1499,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
}
|
||||
// set focus on date
|
||||
$r.= create_script("$('".$Date->id."').focus()");
|
||||
$r.=$this->input_additional_tax();
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
|
@ -1721,7 +1763,8 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
// Format amount
|
||||
$tot_amount=nbm($tot_amount);
|
||||
$tot_tva=nbm($tot_tva);
|
||||
$tot=nbm($tot);
|
||||
$tot_str=nbm($tot);
|
||||
|
||||
if ( $g_parameter->MY_TVA_USE == 'Y') {
|
||||
$r.=<<<EOF
|
||||
<tr class="highlight">
|
||||
|
|
@ -1736,7 +1779,7 @@ class Acc_Ledger_Purchase extends Acc_Ledger
|
|||
{$tot_amount}
|
||||
</td>
|
||||
<td class="num">
|
||||
{$tot} {$str_code}
|
||||
{$tot_str} {$str_code}
|
||||
</td>
|
||||
</tr>
|
||||
EOF;
|
||||
|
|
@ -1774,7 +1817,7 @@ EOF;
|
|||
|
||||
</td>
|
||||
<td class="num">
|
||||
{$tot} {$str_code}
|
||||
{$tot_str} {$str_code}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="highlight">
|
||||
|
|
@ -1786,7 +1829,7 @@ EOF;
|
|||
<td>
|
||||
</td>
|
||||
<td class="num">
|
||||
{$tot} {$str_code}
|
||||
{$tot_str} {$str_code}
|
||||
</td>
|
||||
</tr>
|
||||
EOF;
|
||||
|
|
@ -1799,6 +1842,12 @@ EOF;
|
|||
|
||||
$r.=(! $p_summary )?'<div id="total_div_id" >':'<div>';
|
||||
$r.='<h2>Totaux</h2>';
|
||||
$other_tax_label="";
|
||||
$other_tax_amount="";
|
||||
if ( $this->has_other_tax() && isset($p_array['other_tax'])) {
|
||||
$other_tax_label=_("Autre taxe");
|
||||
$other_tax_amount=htmlspecialchars($p_array['other_tax_amount']);
|
||||
}
|
||||
/* use VAT */
|
||||
if ($g_parameter->MY_TVA_USE == 'Y') {
|
||||
$r.='<table>';
|
||||
|
|
@ -1812,9 +1861,17 @@ EOF;
|
|||
$r.=td(hb(nbm($tva[$i])),'class="num"');
|
||||
}
|
||||
$r.='<tr>'.td(_('Total TVA')).td(hb($tot_tva),'class="num"');
|
||||
if ( ! empty($other_tax_label) ) {
|
||||
$r.='<tr>'.td($other_tax_label).td(hb($other_tax_amount),'class="num"');
|
||||
}
|
||||
if ( $other_tax_amount!="") {$tot=bcadd($tot,$other_tax_amount,2);}
|
||||
$r.='<tr>'.td(_('Total TVAC')).td(hb($tot),'class="num"');
|
||||
$r.='</table>';
|
||||
} else {
|
||||
if ( ! empty($other_tax_label) ) {
|
||||
$r.='<tr>'.td($other_tax_label).td(hb($other_tax_amount),'class="num"');
|
||||
}
|
||||
if ( $other_tax_amount!="") {$tot=bcadd($tot,$other_tax_amount,2);}
|
||||
$r.='<br>Total '.hb($tot);
|
||||
}
|
||||
$r.='</div>';
|
||||
|
|
@ -1831,6 +1888,10 @@ EOF;
|
|||
$r.=HtmlInput::hidden('e_pj',$e_pj);
|
||||
$r.=HtmlInput::hidden('e_pj_suggest',$e_pj_suggest);
|
||||
$r.=HtmlInput::post_to_hidden(['p_currency_rate','p_currency_code']);
|
||||
if ( $this->has_other_tax() && isset($p_array["other_tax"])) {
|
||||
$r.=HtmlInput::hidden("other_tax",$p_array['other_tax']);
|
||||
$r.=HtmlInput::hidden("other_tax_amount",$p_array['other_tax_amount']);
|
||||
}
|
||||
$mt=microtime(true);
|
||||
$r.=HtmlInput::hidden('mt',$mt);
|
||||
|
||||
|
|
|
|||
|
|
@ -285,9 +285,13 @@ class Acc_Ledger_Sale extends Acc_Ledger {
|
|||
|
||||
bcscale(4);
|
||||
try {
|
||||
// total amount of the sales (credit)
|
||||
$tot_amount = 0;
|
||||
// total amount of the VAT
|
||||
$tot_tva = 0;
|
||||
// tot debit if item's amount < 0
|
||||
$tot_debit = 0;
|
||||
// total amount in currency
|
||||
$tot_amount_cur=0;
|
||||
|
||||
$this->db->start();
|
||||
|
|
@ -457,6 +461,43 @@ class Acc_Ledger_Sale extends Acc_Ledger {
|
|||
$tot_amount_cur=round(bcadd($tot_amount_cur,$tva_item_currency,4),4);
|
||||
}// end loop : save all items
|
||||
|
||||
/*** save other tax ****/
|
||||
if ( $this->has_other_tax() && isset($p_array['other_tax'])) {
|
||||
$row=$this->db->get_row("select ac_id,ac_label,ac_accounting
|
||||
from acc_other_tax
|
||||
where ac_id=$1 ",
|
||||
[$p_array['other_tax']]);
|
||||
if ( ! empty ($row )) {
|
||||
$other_tax_amount=bcmul($p_array['other_tax_amount'],$p_currency_rate);
|
||||
$acc_operation=new Acc_Operation($this->db);
|
||||
$acc_operation->date=$e_date;
|
||||
$acc_operation->poste=$row['ac_accounting'];
|
||||
$acc_operation->amount=$other_tax_amount;
|
||||
$acc_operation->grpt=$seq;
|
||||
$acc_operation->jrn=$p_jrn;
|
||||
$acc_operation->type='c';
|
||||
$acc_operation->periode=$tperiode;
|
||||
$acc_operation->desc=$row['ac_label'];
|
||||
$jrn_tax_sql=new Jrn_Tax_SQL($this->db);
|
||||
$jrn_tax_sql->j_id=$acc_operation->insert_jrnx();
|
||||
$jrn_tax_sql->ac_id=$row['ac_id'];
|
||||
$jrn_tax_sql->pcm_val=$row['ac_accounting'];
|
||||
$jrn_tax_sql->insert();
|
||||
$tot_amount=bcadd($tot_amount,$other_tax_amount);
|
||||
if ( $p_array['other_tax_amount'] < 0 ) {
|
||||
$tot_debit=bcadd($tot_debit,abs($other_tax_amount));
|
||||
}
|
||||
$operation_currency=new Operation_currency_SQL($this->db);
|
||||
$operation_currency->oc_amount=$p_array['other_tax_amount'];
|
||||
$operation_currency->oc_vat_amount=0;
|
||||
$operation_currency->oc_price_unit=0;
|
||||
$operation_currency->j_id=$jrn_tax_sql->j_id;
|
||||
$operation_currency->insert();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* save total customer */
|
||||
$cust_amount = bcadd($tot_amount, $tot_tva);
|
||||
$cust_amount = round($cust_amount,2);
|
||||
|
|
@ -965,7 +1006,7 @@ class Acc_Ledger_Sale extends Acc_Ledger {
|
|||
$decalage=($g_parameter->MY_TVA_USE == 'Y')?'<td></td><td></td><td></td><td></td>':'<td></td>';
|
||||
$tot = bcadd($tot_amount, $tot_tva, 2);
|
||||
$tot_eur=round(bcdiv($tot, $p_currency_rate),2);
|
||||
$tot=nbm($tot);
|
||||
$tot_str=nbm($tot);
|
||||
$str_tot=_('Totaux');
|
||||
|
||||
// Get currency code
|
||||
|
|
@ -994,7 +1035,7 @@ if ( $g_parameter->MY_TVA_USE=="Y") {
|
|||
{$tot_amount}
|
||||
</td>
|
||||
<td class="num">
|
||||
{$tot} {$str_code}
|
||||
{$tot_str} {$str_code}
|
||||
</td>
|
||||
</tr>
|
||||
EOF;
|
||||
|
|
@ -1035,7 +1076,7 @@ EOF;
|
|||
|
||||
</td>
|
||||
<td class="num">
|
||||
{$tot}
|
||||
{$tot_str}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="highlight">
|
||||
|
|
@ -1060,7 +1101,12 @@ EOF;
|
|||
$r.='<input type="button" class="button" value="' . _('Vérifiez Imputation Analytique') . '" onClick="verify_ca(\'\');">';
|
||||
$r.=(! $p_summary )?'<div id="total_div_id" >':'<div>';
|
||||
$r.='<h2>Totaux</h2>';
|
||||
|
||||
$other_tax_label="";
|
||||
$other_tax_amount="";
|
||||
if ( $this->has_other_tax() && isset($p_array['other_tax'])) {
|
||||
$other_tax_label=_("Autre taxe");
|
||||
$other_tax_amount=htmlspecialchars($p_array['other_tax_amount']);
|
||||
}
|
||||
/* use VAT */
|
||||
if ($g_parameter->MY_TVA_USE == 'Y') {
|
||||
$r.='<table>';
|
||||
|
|
@ -1074,9 +1120,17 @@ EOF;
|
|||
$r.=td(hb(nbm($tva[$i])),'class="num"');
|
||||
}
|
||||
$r.='<tr>'.td(_('Total TVA')).td(hb($tot_tva),'class="num"');
|
||||
if ( ! empty($other_tax_label) ) {
|
||||
$r.='<tr>'.td($other_tax_label).td(hb($other_tax_amount),'class="num"');
|
||||
}
|
||||
if ( $other_tax_amount!="") {$tot=bcadd($tot,$other_tax_amount,2);}
|
||||
$r.='<tr>'.td(_('Total TVAC')).td(hb($tot),'class="num"');
|
||||
$r.='</table>';
|
||||
} else {
|
||||
if ( ! empty($other_tax_label) ) {
|
||||
$r.='<tr>'.td($other_tax_label).td(hb($other_tax_amount),'class="num"');
|
||||
}
|
||||
if ( $other_tax_amount!="") {$tot=bcadd($tot,$other_tax_amount,2);}
|
||||
$r.='<br>Total '.hb($tot);
|
||||
}
|
||||
$r.='</div>';
|
||||
|
|
@ -1100,7 +1154,10 @@ EOF;
|
|||
$r.=HtmlInput::hidden('e_ech', $e_ech);
|
||||
$r.=HtmlInput::hidden('e_pj', $e_pj);
|
||||
$r.=HtmlInput::hidden('e_pj_suggest', $e_pj_suggest);
|
||||
|
||||
if ( $this->has_other_tax() && isset($p_array["other_tax"])) {
|
||||
$r.=HtmlInput::hidden("other_tax",$p_array['other_tax']);
|
||||
$r.=HtmlInput::hidden("other_tax_amount",$p_array['other_tax_amount']);
|
||||
}
|
||||
$e_mp = (isset($e_mp)) ? $e_mp : 0;
|
||||
$r.=HtmlInput::hidden('e_mp', $e_mp);
|
||||
|
||||
|
|
@ -1524,6 +1581,7 @@ EOF;
|
|||
$r.=HtmlInput::hidden('jrn_type', 'VEN');
|
||||
$r.= Html_Input_Noalyss::ledger_add_item("O");
|
||||
$r.= create_script("$('" . $Date->id . "').focus()");
|
||||
$r.=$this->input_additional_tax();
|
||||
return $r;
|
||||
}
|
||||
/**
|
||||
|
|
|
|||
84
include/class/acc_tax_purchase_sale.class.php
Normal file
84
include/class/acc_tax_purchase_sale.class.php
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<?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
|
||||
* 1/03/20
|
||||
*/
|
||||
/**
|
||||
* @file
|
||||
* @brief Compute , display additional tax for Sale and Purchase,
|
||||
*
|
||||
*/
|
||||
// Copyright Author Dany De Bontridder danydb@noalyss.eu 2022
|
||||
|
||||
class Acc_Tax_Purchase_Sale
|
||||
{
|
||||
private $jrn_tax_sql;
|
||||
|
||||
function __construct($p_cn, $p_id = -1)
|
||||
{
|
||||
$this->jrn_tax_sql = new Jrn_Tax_SQL($p_cn, $p_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Jrn_Tax_SQL
|
||||
*/
|
||||
public function getJrnTaxSql(): Jrn_Tax_SQL
|
||||
{
|
||||
return $this->jrn_tax_sql;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Jrn_Tax_SQL $jrn_tax_sql
|
||||
*/
|
||||
public function setJrnTaxSql(Jrn_Tax_SQL $jrn_tax_sql)
|
||||
{
|
||||
$this->jrn_tax_sql = $jrn_tax_sql;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief retrieve Jrn_Tax_SQL thx its jr_id
|
||||
* @param $p_jrid
|
||||
*/
|
||||
public function get_by_operation_id($p_jrid)
|
||||
{
|
||||
$jt_id= $this->jrn_tax_sql->get_cn()->get_value(
|
||||
"select jt_id from jrn_tax where jr_id=$1",
|
||||
[$p_jrid]);
|
||||
$jt_id=(empty($jt_id))?-1:$jt_id;
|
||||
$this->jrn_tax_sql->set("jt_id",$jt_id);
|
||||
if ($jt_id == -1 ) return;
|
||||
$this->jrn_tax_sql->load();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display in detail
|
||||
*/
|
||||
public function display()
|
||||
{
|
||||
echo_warning(__FILE__.":".__LINE__.__CLASS__."::".__FUNCTION__."not implemented");
|
||||
}
|
||||
public function save()
|
||||
{
|
||||
if ($this->jrn_tax_sql->get("jt_id") == -1 ) {
|
||||
$this->jrn_tax_sql->insert();
|
||||
return;
|
||||
}
|
||||
$this->jrn_tax_sql->update();
|
||||
}
|
||||
|
||||
}
|
||||
99
include/class/additional_tax.class.php
Normal file
99
include/class/additional_tax.class.php
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
<?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;
|
||||
}
|
||||
|
||||
static function get_by_operation($p_jrn_id,&$sum_euro,&$sum_currency)
|
||||
{
|
||||
bcscale(4);
|
||||
global $cn;
|
||||
$array = $cn->get_array('select j_montant,currency_id,
|
||||
oc.oc_amount,
|
||||
jt.ac_id,
|
||||
aot.ac_label,
|
||||
aot.ac_rate,
|
||||
aot.ac_accounting
|
||||
from jrn_tax jt
|
||||
join jrnx using (j_id)
|
||||
join jrn on (jrnx.j_grpt=jrn.jr_grpt_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;
|
||||
}
|
||||
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>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -58,4 +58,32 @@ class Html_Input_Noalyss extends HtmlInput
|
|||
|
||||
return $r;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the supplementax if any
|
||||
* @param $p_ledger_id jrn_def.jrn_def_id , id of the ledger
|
||||
*/
|
||||
static function ledger_supplemental_tax($p_ledger_id)
|
||||
{
|
||||
$cn=Dossier::connect();
|
||||
// if there is an additional tax for this ledger
|
||||
$has_suppl_tax=$cn->get_value("select count(*) from acc_other_tax where array_position(ajrn_def_id,$1)
|
||||
is not null",[$p_ledger_id]);
|
||||
if ($has_suppl_tax ==0 ) {
|
||||
return "";
|
||||
}
|
||||
if ( $has_suppl_tax>1) {
|
||||
throw new Exception("HIN76:too many supplemental taxes");
|
||||
}
|
||||
$ac_id=$cn->get_value("select ac_id
|
||||
from acc_other_tax
|
||||
where
|
||||
array_position(ajrn_def_id,$1) is not null",[$p_ledger_id]);
|
||||
|
||||
$ac_other_tax=new Acc_Other_Tax_SQL($cn,$ac_id);
|
||||
$msg=_("Autre taxe");
|
||||
$checkbox=new ICheckBox("new_tax",$ac_id);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -601,7 +601,9 @@ function noalyss_class_autoloader($class) {
|
|||
"pdf_anc_acc_list"=>"class/pdf_anc_acc_list.class.php",
|
||||
'acc_reconciliation_lettering'=>'class/acc_reconciliation_lettering.class.php',
|
||||
"acc_other_tax_mtable"=>'class/acc_other_tax_mtable.class.php',
|
||||
'acc_other_tax_sql'=>'database/acc_other_tax_sql.class.php'
|
||||
'acc_other_tax_sql'=>'database/acc_other_tax_sql.class.php',
|
||||
'jrn_tax_sql'=>'database/jrn_tax_sql.class.php',
|
||||
'additional_tax'=>'class/additional_tax.class.php'
|
||||
);
|
||||
if ( isset ($aClass[$class]) ) {
|
||||
require_once NOALYSS_INCLUDE."/".$aClass[$class];
|
||||
|
|
|
|||
68
include/database/jrn_tax_sql.class.php
Normal file
68
include/database/jrn_tax_sql.class.php
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Autogenerated file
|
||||
* 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* jrn_tax_sql.class.php
|
||||
*
|
||||
* @file
|
||||
* @brief abstract of the table public.jrn_tax */
|
||||
|
||||
/**
|
||||
* @class Jrn_Tax_SQL
|
||||
* @brief ORM of the table public.jrn_tax
|
||||
*/
|
||||
|
||||
class Jrn_Tax_SQL extends Table_Data_SQL
|
||||
{
|
||||
|
||||
function __construct(DatabaseCore $p_cn, $p_id=-1)
|
||||
{
|
||||
$this->table="public.jrn_tax";
|
||||
$this->primary_key="jt_id";
|
||||
/*
|
||||
* List of columns
|
||||
*/
|
||||
$this->name=array(
|
||||
"jt_id"=>"jt_id"
|
||||
, "j_id"=>"j_id"
|
||||
, "pcm_val"=>"pcm_val"
|
||||
, "ac_id"=>"ac_id"
|
||||
);
|
||||
/*
|
||||
* Type of columns
|
||||
*/
|
||||
$this->type=array(
|
||||
"jt_id"=>"number"
|
||||
, "j_id"=>"number"
|
||||
, "pcm_val"=>"text"
|
||||
, "ac_id"=>"ac_id"
|
||||
);
|
||||
|
||||
|
||||
$this->default=array(
|
||||
"jt_id"=>"auto"
|
||||
);
|
||||
|
||||
$this->date_format="DD.MM.YYYY";
|
||||
parent::__construct($p_cn, $p_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
//This file is part of NOALYSS and is under GPL
|
||||
//see licence.txt
|
||||
$str_anc="";
|
||||
global $div,$g_parameter,$cn,$access,$jr_id,$obj;
|
||||
?><?php require_once NOALYSS_TEMPLATE.'/ledger_detail_top.php'; ?>
|
||||
<div class="content" style="padding:0;">
|
||||
<?php
|
||||
|
|
@ -115,6 +116,9 @@ $str_anc="";
|
|||
$total_tvac = 0;
|
||||
echo th(_('Quick Code'));
|
||||
echo th(_('Description'));
|
||||
|
||||
echo th(_('Prix/Un.'), 'style="text-align:right"');
|
||||
echo th(_('Quantité'), 'style="text-align:right"');
|
||||
if ($owner->MY_TVA_USE == 'Y')
|
||||
{
|
||||
echo th(_('Taux TVA'), 'style="text-align:right"');
|
||||
|
|
@ -122,8 +126,6 @@ $str_anc="";
|
|||
{
|
||||
echo th('');
|
||||
}
|
||||
echo th(_('Prix/Un.'), 'style="text-align:right"');
|
||||
echo th(_('Quantité'), 'style="text-align:right"');
|
||||
echo th(_('Non ded'), 'style="text-align:right"');
|
||||
|
||||
if ($owner->MY_TVA_USE == 'Y')
|
||||
|
|
@ -194,10 +196,10 @@ $str_anc="";
|
|||
$input->value = $fiche->strAttribut(ATTR_DEF_NAME);
|
||||
}
|
||||
$row.=td($input->input() . $hidden);
|
||||
$row.=td($sym_tva, 'style="text-align:center"');
|
||||
$pu = $q['qp_unit'];
|
||||
$row.=td(nbm($pu,4), 'class="num"');
|
||||
$row.=td(nbm($q['qp_quantite'],4), 'class="num"');
|
||||
$row.=td($sym_tva, 'style="text-align:center"');
|
||||
|
||||
$no_ded = bcadd($q['qp_dep_priv'], $q['qp_nd_amount']);
|
||||
$row.=td(nbm($no_ded), ' style="text-align:right"');
|
||||
|
|
@ -257,14 +259,30 @@ $str_anc="";
|
|||
}
|
||||
echo tr($row,$class);
|
||||
}
|
||||
|
||||
if ($owner->MY_TVA_USE == 'Y')
|
||||
$row = td(_('Total'), ' style="font-style:italic;text-align:right;font-weight: bolder;width:auto" colspan="6"');
|
||||
else
|
||||
$row = td(_('Total'), ' style="font-style:italic;text-align:right;font-weight: bolder;width:auto" colspan="6"');
|
||||
/**
|
||||
* display additional tax if any + currency
|
||||
*/
|
||||
$sum_add_tax=0;$sum_add_tax_cur=0;
|
||||
Additional_Tax::display_row($jr_id,$sum_add_tax,$sum_add_tax_cur,2);
|
||||
$sum_charge_euro=bcadd($sum_charge_euro,$sum_add_tax_cur);
|
||||
|
||||
$total_tvac=bcadd($sum_add_tax,$total_tvac);
|
||||
if ($owner->MY_TVA_USE == 'N') {
|
||||
$total_htva=bcadd($sum_add_tax,$total_htva);
|
||||
}
|
||||
$row.=td(nbm($total_htva), 'class="num" style="font-style:italic;font-weight: bolder;"');
|
||||
if ($owner->MY_TVA_USE == 'Y')
|
||||
$row.=td("") . td("").td(nbm($total_tvac), 'class="num" style="font-style:italic;font-weight: bolder;"');
|
||||
|
||||
/**
|
||||
* display additional tax if any + currency
|
||||
*/
|
||||
|
||||
|
||||
//Display total in currency
|
||||
if ( $obj->det->currency_id != "" && $obj->det->currency_id > 0)
|
||||
{
|
||||
|
|
@ -276,6 +294,8 @@ $str_anc="";
|
|||
?>
|
||||
</table>
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* Info about currency if not in euro
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
<?php
|
||||
//This file is part of NOALYSS and is under GPL
|
||||
//see licence.txt
|
||||
?><?php require_once NOALYSS_TEMPLATE.'/ledger_detail_top.php'; ?>
|
||||
global $div,$g_parameter,$cn,$access,$jr_id,$obj;
|
||||
?>
|
||||
|
||||
<?php require_once NOALYSS_TEMPLATE.'/ledger_detail_top.php'; ?>
|
||||
<?php
|
||||
$tab_account=$div."account";
|
||||
$tab_rapprochement=$div."rapproch";
|
||||
|
|
@ -9,7 +12,7 @@
|
|||
$tab_document=$div."document";
|
||||
$str_anc="";
|
||||
?>
|
||||
<div class="content" style="padding:0;">
|
||||
<div class="content" style="padding:0px;">
|
||||
<?php
|
||||
$owner = new Noalyss_Parameter_Folder($cn);
|
||||
?>
|
||||
|
|
@ -266,12 +269,24 @@ echo $ipaid->input();
|
|||
$row = td(_('Total'), ' style="font-style:italic;text-align:right;font-weight: bolder;" colspan="5"');
|
||||
else
|
||||
$row = td(_('Total'), ' style="font-style:italic;text-align:right;font-weight: bolder;" colspan="5"');
|
||||
/**
|
||||
* display additional tax if any + currency
|
||||
*/
|
||||
$sum_add_tax=0;$sum_add_tax_cur=0;
|
||||
Additional_Tax::display_row($jr_id,$sum_add_tax,$sum_add_tax_cur);
|
||||
$sum_prod_currency=bcadd($sum_prod_currency,$sum_add_tax_cur);
|
||||
|
||||
$total_tvac=bcadd($sum_add_tax,$total_tvac);
|
||||
if ($owner->MY_TVA_USE == 'N') {
|
||||
$total_htva=bcadd($sum_add_tax,$total_htva);
|
||||
}
|
||||
$row.=td(nbm($total_htva), 'class="num" style="font-style:italic;font-weight: bolder;"');
|
||||
if ($owner->MY_TVA_USE == 'Y')
|
||||
if ($owner->MY_TVA_USE == 'Y') {
|
||||
$row.=td("") . td(nbm($total_tvac), 'class="num" style="font-style:italic;font-weight: bolder;"');
|
||||
|
||||
|
||||
//Display total in currency
|
||||
|
||||
}
|
||||
|
||||
//Display total in currency
|
||||
if ( $obj->det->currency_id != "" && $obj->det->currency_id > 0)
|
||||
{
|
||||
$row.= td(nbm($sum_prod_currency,4),' class="num" style="font-style:italic;font-weight: bolder;"');
|
||||
|
|
@ -279,7 +294,7 @@ echo $ipaid->input();
|
|||
echo tr($row);
|
||||
?>
|
||||
</table>
|
||||
</td>
|
||||
</form>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -300,7 +315,9 @@ echo $ipaid->input();
|
|||
echo _("Taux Réf"), " ",nbm($obj->det->currency_rate_ref,4).$four_space;
|
||||
echo _("Montant en devise"), " ",nbm($sum_prod_currency,4).$four_space;
|
||||
}
|
||||
?>
|
||||
|
||||
?>
|
||||
|
||||
<?php
|
||||
require_once NOALYSS_TEMPLATE.'/ledger_detail_bottom.php';
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -7,9 +7,38 @@ create table acc_other_tax
|
|||
ajrn_def_id integer[],
|
||||
ac_accounting account_type not null
|
||||
);
|
||||
comment on table acc_other_tax is 'Other tax ';
|
||||
comment on table acc_other_tax is 'Additional tax for Sale or Purchase ';
|
||||
comment on column acc_other_tax.ac_label is 'Label of the tax';
|
||||
comment on column acc_other_tax.ac_rate is 'rate of the tax in percent';
|
||||
comment on column acc_other_tax.ajrn_def_id is 'array of to FK jrn_def (jrn_def_id)';
|
||||
comment on column acc_other_tax.ac_accounting is 'FK tmp_pcmn (pcm_val)';
|
||||
|
||||
|
||||
ALTER TABLE public.jrn drop CONSTRAINT jrn_pkey ;
|
||||
ALTER TABLE public.jrn ADD CONSTRAINT jrn_pkey PRIMARY KEY (jr_id);
|
||||
|
||||
-- public.jrn_tax definition
|
||||
|
||||
-- Drop table
|
||||
|
||||
-- DROP TABLE public.jrn_tax;
|
||||
|
||||
CREATE TABLE public.jrn_tax (
|
||||
jt_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||||
j_id int8 NOT NULL, -- fk jrnx
|
||||
pcm_val public."account_type" NOT NULL, -- FK tmp_pcmn
|
||||
ac_id int4 NOT NULL, -- FK to acc_other_tax
|
||||
CONSTRAINT jrn_tax_pk PRIMARY KEY (jt_id)
|
||||
);
|
||||
|
||||
-- Column comments
|
||||
|
||||
COMMENT ON COLUMN public.jrn_tax.j_id IS 'fk jrnx';
|
||||
COMMENT ON COLUMN public.jrn_tax.pcm_val IS 'FK tmp_pcmn';
|
||||
COMMENT ON COLUMN public.jrn_tax.ac_id IS 'FK to acc_other_tax';
|
||||
|
||||
|
||||
-- public.jrn_tax foreign keys
|
||||
|
||||
ALTER TABLE public.jrn_tax ADD CONSTRAINT jrn_tax_acc_other_tax_fk FOREIGN KEY (ac_id) REFERENCES public.acc_other_tax(ac_id);
|
||||
ALTER TABLE public.jrn_tax ADD CONSTRAINT jrn_tax_fk FOREIGN KEY (j_id) REFERENCES public.jrnx(j_id);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue