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:
sparkyx 2022-05-22 12:02:12 +02:00
parent c4645e68e1
commit 7256f1464d
12 changed files with 658 additions and 27 deletions

View file

@ -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;
}
}
?>

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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;
}
/**

View 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();
}
}

View 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>';
}
}
}

View file

@ -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);
}
}

View file

@ -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];

View 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);
}
}

View file

@ -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
*/

View file

@ -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"), "&nbsp;",nbm($obj->det->currency_rate_ref,4).$four_space;
echo _("Montant en devise"), "&nbsp;",nbm($sum_prod_currency,4).$four_space;
}
?>
?>
<?php
require_once NOALYSS_TEMPLATE.'/ledger_detail_bottom.php';
?>

View file

@ -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);