diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 73cfdff065913..b0a103ac51422 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -196,8 +196,8 @@ $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 ''; @@ -220,9 +220,9 @@ 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 @@ 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 ''; @@ -559,7 +559,7 @@ } else { - print $fields['payment_amount']; + print price($fields['payment_amount']); if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)'; } print ''; @@ -637,6 +637,5 @@ $i++; } -$db->close(); - llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index ae217004bbff9..b4ae09c6d7deb 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -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