Skip to content
Snippets Groups Projects
Commit 9f4ccfab authored by Juanjo Menent's avatar Juanjo Menent
Browse files

FIX #3815 With higher quality

parent e33d9eb5
No related branches found
No related tags found
No related merge requests found
......@@ -196,8 +196,8 @@ $total = 0;
$i=0;
// Load arrays of datas
$x_coll= local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell', $local);
$x_paye = local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy', $local);
$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell');
$x_paye = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy');
echo '<table class="noborder" width="100%">';
......@@ -220,9 +220,9 @@ else
foreach(array_keys($x_coll) as $my_coll_rate)
{
$x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht'];
$x_both[$my_coll_rate]['coll']['vat'] = $x_coll[$my_coll_rate]['vat'];
$x_both[$my_coll_rate]['coll']['localtax'.$local] = $x_coll[$my_coll_rate]['localtax'.$local];
$x_both[$my_coll_rate]['paye']['totalht'] = 0;
$x_both[$my_coll_rate]['paye']['vat'] = 0;
$x_both[$my_coll_rate]['paye']['localtax'.$local] = 0;
$x_both[$my_coll_rate]['coll']['links'] = '';
$x_both[$my_coll_rate]['coll']['detail'] = array();
foreach($x_coll[$my_coll_rate]['facid'] as $id=>$dummy)
......@@ -399,7 +399,7 @@ else
print $langs->trans("NotUsedForGoods");
}
else {
print $fields['payment_amount'];
print price($fields['payment_amount']);
if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)';
}
print '</td>';
......@@ -559,7 +559,7 @@ else
}
else
{
print $fields['payment_amount'];
print price($fields['payment_amount']);
if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)';
}
print '</td>';
......@@ -637,6 +637,5 @@ else
$i++;
}
$db->close();
llxFooter();
$db->close();
......@@ -205,371 +205,6 @@ function vat_by_thirdparty($db, $y, $date_start, $date_end, $modetax, $direction
}
}
/**
* Gets LocalTaxes to collect for the given year (and given quarter or month)
* The function gets the LocalTaxes in split results, as the LocalTaxes declaration asks
* to report the amounts for different LocalTaxes rates as different lines.
*
* @param DoliDB $db Database handler object
* @param int $y Year
* @param int $q Quarter
* @param string $date_start Start date
* @param string $date_end End date
* @param int $modetax 0 or 1 (option on debit)
* @param int $direction 'sell' (customer invoice) or 'buy' (supplier invoices)
* @param int $local 1 for LocalTax1, 2 for LocalTax2
* @param int $m Month
* @return array List of quarters with LocalTaxes
*/
function local_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $local, $m=0)
{
global $conf;
$list=array();
if ($direction == 'sell')
{
$invoicetable='facture';
$invoicedettable='facturedet';
$fk_facture='fk_facture';
$fk_facture2='fk_facture';
$fk_payment='fk_paiement';
$total_tva='total_tva';
$total_localtax1='total_localtax1';
$total_localtax2='total_localtax2';
$paymenttable='paiement';
$paymentfacturetable='paiement_facture';
$invoicefieldref='facnumber';
$localtax_tx=$local==1?'localtax1_tx':'localtax2_tx';
}
if ($direction == 'buy')
{
$invoicetable='facture_fourn';
$invoicedettable='facture_fourn_det';
$fk_facture='fk_facture_fourn';
$fk_facture2='fk_facturefourn';
$fk_payment='fk_paiementfourn';
$total_tva='tva';
$total_localtax1='total_localtax1';
$total_localtax2='total_localtax2';
$paymenttable='paiementfourn';
$paymentfacturetable='paiementfourn_facturefourn';
$invoicefieldref='ref';
$localtax_tx=$local==1?'localtax1_tx':'localtax2_tx';
}
// BIENS
// Define sql request
$sql='';
if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services
{
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING))
{
$sql='TODO';
}
if (! empty($conf->global->MAIN_MODULE_COMPTABILITE))
{
// Count on delivery date (use invoice date as delivery is unknown)
$sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx,";
$sql.= " d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,";
$sql.= " d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, ";
$sql.= " d.date_start as date_start, d.date_end as date_end,";
$sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,";
$sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,";
$sql.= " 0 as payment_id, 0 as payment_amount";
$sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,";
$sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ;
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid";
$sql.= " WHERE f.entity = " . $conf->entity;
$sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely)
if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)";
else $sql.= " AND f.type IN (0,1,2,3)";
$sql.= " AND f.rowid = d.".$fk_facture;
if ($y && $m)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'";
}
else if ($y)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'";
}
if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")";
if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
$sql.= " AND (d.product_type = 0"; // Limit to products
$sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service
$sql.= " ORDER BY d.rowid, d.".$fk_facture;
}
}
else // Option vat on delivery for goods (payments) and payments for services
{
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING))
{
$sql='TODO';
}
if (! empty($conf->global->MAIN_MODULE_COMPTABILITE))
{
// Count on delivery date (use invoice date as delivery is unknown)
$sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,";
$sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, ";
$sql.= " d.date_start as date_start, d.date_end as date_end,";
$sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,";
$sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,";
$sql.= " 0 as payment_id, 0 as payment_amount";
$sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,";
$sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ;
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid";
$sql.= " WHERE f.entity = " . $conf->entity;
$sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely)
if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)";
else $sql.= " AND f.type IN (0,1,2,3)";
$sql.= " AND f.rowid = d.".$fk_facture;
if ($y && $m)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'";
}
else if ($y)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'";
}
if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")";
if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
$sql.= " AND (d.product_type = 0"; // Limit to products
$sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service
$sql.= " ORDER BY d.rowid, d.".$fk_facture;
}
}
if (! $sql) return -1;
if ($sql == 'TODO') return -2;
if ($sql != 'TODO')
{
dol_syslog("Tax.lib.php::vat_by_date sql=".$sql);
$resql = $db->query($sql);
if ($resql)
{
$lt=-1;
$oldrowid='';
while($assoc = $db->fetch_array($resql))
{
if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0;
if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0;
if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0;
if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0;
if ($assoc['rowid'] != $oldrowid)
{
$oldrowid=$assoc['rowid'];
$list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht'];
$list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat'];
$list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1'];
$list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2'];
}
$list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx'];
$list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx'];
$list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc'];
$list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype'];
$list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']);
$list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']);
$list[$assoc['localtax_tx']]['facid'][] = $assoc['facid'];
$list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum'];
$list[$assoc['localtax_tx']]['type'][] = $assoc['type'];
$list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc'];
$list[$assoc['localtax_tx']]['descr'][] = $assoc['descr'];
$list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht'];
$list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat'];
$list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1'];
$list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2'];
$list[$assoc['localtax_tx']]['pid'][] = $assoc['pid'];
$list[$assoc['localtax_tx']]['pref'][] = $assoc['pref'];
$list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype'];
$list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id'];
$list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount'];
$lt = $assoc['localtax_tx'];
}
}
else
{
dol_print_error($db);
return -3;
}
}
//SERVICES
// Define sql request
$sql='';
if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services
{
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING))
{
$sql='TODO';
}
if (! empty($conf->global->MAIN_MODULE_COMPTABILITE))
{
// Count on invoice date
$sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,";
$sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, ";
$sql.= " d.date_start as date_start, d.date_end as date_end,";
$sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,";
$sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,";
$sql.= " 0 as payment_id, 0 as payment_amount";
$sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,";
$sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ;
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid";
$sql.= " WHERE f.entity = " . $conf->entity;
$sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely)
if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)";
else $sql.= " AND f.type IN (0,1,2,3)";
$sql.= " AND f.rowid = d.".$fk_facture;
if ($y && $m)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'";
}
else if ($y)
{
$sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'";
$sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'";
}
if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")";
if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
$sql.= " AND (d.product_type = 1"; // Limit to services
$sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service
$sql.= " ORDER BY d.rowid, d.".$fk_facture;
}
}
else // Option on delivery for goods (payments) and payments for services
{
if (! empty($conf->global->MAIN_MODULE_ACCOUNTING))
{
$sql='TODO';
}
if (! empty($conf->global->MAIN_MODULE_COMPTABILITE))
{
// Count on payments date
$sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,";
$sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, ";
$sql.= " d.date_start as date_start, d.date_end as date_end,";
$sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,";
$sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,";
$sql.= " pf.".$fk_payment." as payment_id, pf.amount as payment_amount";
$sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,";
$sql.= " ".MAIN_DB_PREFIX.$paymentfacturetable." as pf,";
$sql.= " ".MAIN_DB_PREFIX.$paymenttable." as pa,";
$sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid";
$sql.= " WHERE f.entity = " . $conf->entity;
$sql.= " AND f.fk_statut in (1,2)"; // Paid (partially or completely)
if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)";
else $sql.= " AND f.type IN (0,1,2,3)";
$sql.= " AND f.rowid = d.".$fk_facture;;
$sql.= " AND pf.".$fk_facture2." = f.rowid";
$sql.= " AND pa.rowid = pf.".$fk_payment;
if ($y && $m)
{
$sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,$m,false))."'";
$sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,$m,false))."'";
}
else if ($y)
{
$sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,1,false))."'";
$sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,12,false))."'";
}
if ($q) $sql.= " AND (date_format(pa.datep,'%m') > ".(($q-1)*3)." AND date_format(pa.datep,'%m') <= ".($q*3).")";
if ($date_start && $date_end) $sql.= " AND pa.datep >= ".$db->idate($date_start)." AND pa.datep <= ".$db->idate($date_end);
$sql.= " AND (d.product_type = 1"; // Limit to services
$sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service
$sql.= " ORDER BY d.rowid, d.".$fk_facture.", pf.rowid";
}
}
if (! $sql)
{
dol_syslog("Tax.lib.php::vat_by_date no accountancy module enabled".$sql,LOG_ERR);
return -1; // -1 = Not accountancy module enabled
}
if ($sql == 'TODO') return -2; // -2 = Feature not yet available
if ($sql != 'TODO')
{
dol_syslog("Tax.lib.php::vat_by_date sql=".$sql);
$resql = $db->query($sql);
if ($resql)
{
$lt = -1;
$oldrowid='';
while($assoc = $db->fetch_array($resql))
{
if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0;
if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0;
if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0;
if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0;
if ($assoc['rowid'] != $oldrowid)
{
$oldrowid=$assoc['rowid'];
$list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht'];
$list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat'];
$list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1'];
$list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2'];
}
$list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx'];
$list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx'];
$list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc'];
$list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype'];
$list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']);
$list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']);
$list[$assoc['localtax_tx']]['facid'][] = $assoc['facid'];
$list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum'];
$list[$assoc['localtax_tx']]['type'][] = $assoc['type'];
$list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc'];
$list[$assoc['localtax_tx']]['descr'][] = $assoc['descr'];
$list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht'];
$list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat'];
$list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1'];
$list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2'];
$list[$assoc['localtax_tx']]['pid'][] = $assoc['pid'];
$list[$assoc['localtax_tx']]['pref'][] = $assoc['pref'];
$list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype'];
$list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id'];
$list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount'];
$lt = $assoc['localtax_tx'];
}
}
else
{
dol_print_error($db);
return -3;
}
}
return $list;
}
/**
* Gets VAT to collect for the given year (and given quarter or month)
* The function gets the VAT in split results, as the VAT declaration asks
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment