// 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))."'";
}
elseif($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="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))."'";
}
elseif($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
$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))."'";
}
elseif($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