diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php
index 0a886230100..5fa90b6f14d 100644
--- a/htdocs/compta/facture/list.php
+++ b/htdocs/compta/facture/list.php
@@ -29,7 +29,7 @@
/**
* \file htdocs/compta/facture/list.php
* \ingroup facture
- * \brief Page to create/see an invoice
+ * \brief List of customer invoices
*/
require '../../main.inc.php';
@@ -37,6 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
@@ -50,7 +51,6 @@ if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/projet/c
$langs->load('bills');
$langs->load('companies');
$langs->load('products');
-$langs->load('main');
$sall=trim(GETPOST('sall'));
$projectid=(GETPOST('projectid')?GETPOST('projectid','int'):0);
@@ -78,8 +78,19 @@ $search_zip=GETPOST('search_zip','alpha');
$search_state=trim(GETPOST("search_state"));
$search_country=GETPOST("search_country",'int');
$search_type_thirdparty=GETPOST("search_type_thirdparty",'int');
+$search_user = GETPOST('search_user','int');
+$search_sale = GETPOST('search_sale','int');
+$day = GETPOST('day','int');
+$month = GETPOST('month','int');
+$year = GETPOST('year','int');
+$day_lim = GETPOST('day_lim','int');
+$month_lim = GETPOST('month_lim','int');
+$year_lim = GETPOST('year_lim','int');
+$toselect = GETPOST('toselect', 'array');
+
$option = GETPOST('option');
if ($option == 'late') $filter = 'paye:0';
+$filtre = GETPOST('filtre');
$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
$sortfield = GETPOST("sortfield",'alpha');
@@ -96,17 +107,6 @@ $pagenext = $page + 1;
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
$contextpage='invoicelist';
-$search_user = GETPOST('search_user','int');
-$search_sale = GETPOST('search_sale','int');
-$day = GETPOST('day','int');
-$month = GETPOST('month','int');
-$year = GETPOST('year','int');
-$day_lim = GETPOST('day_lim','int');
-$month_lim = GETPOST('month_lim','int');
-$year_lim = GETPOST('year_lim','int');
-$filtre = GETPOST('filtre');
-$toselect = GETPOST('toselect', 'array');
-
// Security check
$fieldid = (! empty($ref)?'facnumber':'rowid');
if (! empty($user->societe_id)) $socid=$user->societe_id;
@@ -140,14 +140,14 @@ $checkedtypetiers=0;
$arrayfields=array(
'f.facnumber'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
'f.ref_client'=>array('label'=>$langs->trans("RefCustomer"), 'checked'=>1),
+ 'f.date'=>array('label'=>$langs->trans("DateInvoice"), 'checked'=>1),
+ 'f.date_lim_reglement'=>array('label'=>$langs->trans("DateDue"), 'checked'=>1),
's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1),
's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1),
'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0),
'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>$checkedtypetiers),
- 'f.date'=>array('label'=>$langs->trans("DateInvoice"), 'checked'=>1),
- 'f.date_lim_reglement'=>array('label'=>$langs->trans("DateDue"), 'checked'=>1),
'f.fk_mode_reglement'=>array('label'=>$langs->trans("PaymentMode"), 'checked'=>1),
'f.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
'f.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
@@ -189,6 +189,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter") || GETPOS
$search_product_category='';
$search_ref='';
$search_refcustomer='';
+ $search_project='';
$search_societe='';
$search_montant_ht='';
$search_montant_vat='';
@@ -624,8 +625,6 @@ if (empty($reshook))
* View
*/
-llxHeader('',$langs->trans('Bill'),'EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes');
-
$form = new Form($db);
$formother = new FormOther($db);
$formfile = new FormFile($db);
@@ -633,6 +632,8 @@ $bankaccountstatic=new Account($db);
$facturestatic=new Facture($db);
$formcompany=new FormCompany($db);
+llxHeader('',$langs->trans('CustomersInvoices'),'EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes');
+
$sql = 'SELECT';
if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
$sql.= ' f.rowid as facid, f.facnumber, f.ref_client, f.type, f.note_private, f.note_public, f.increment, f.fk_mode_reglement, f.total as total_ht, f.tva as total_vat, f.total_ttc,';
@@ -687,6 +688,7 @@ if ($filtre)
}
if ($search_ref) $sql .= natural_search('f.facnumber', $search_ref);
if ($search_refcustomer) $sql .= natural_search('f.ref_client', $search_refcustomer);
+if ($search_project) $sql .= natural_search('p.ref', $search_project);
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
if ($search_town) $sql.= natural_search('s.town', $search_town);
if ($search_zip) $sql.= natural_search("s.zip",$search_zip);
@@ -795,23 +797,23 @@ if ($resql)
$param='&socid='.$socid;
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
- if ($day) $param.='&day='.$day;
- if ($month) $param.='&month='.$month;
- if ($year) $param.='&year=' .$year;
- if ($day_lim) $param.='&day_lim='.$day_lim;
- if ($month_lim) $param.='&month_lim='.$month_lim;
- if ($year_lim) $param.='&year_lim=' .$year_lim;
- if ($search_ref) $param.='&search_ref=' .$search_ref;
- if ($search_refcustomer) $param.='&search_refcustomer=' .$search_refcustomer;
- if ($search_societe) $param.='&search_societe=' .$search_societe;
- if ($search_sale > 0) $param.='&search_sale=' .$search_sale;
- if ($search_user > 0) $param.='&search_user=' .$search_user;
- if ($search_product_category > 0) $param.='$search_product_category=' .$search_product_category;
- if ($search_montant_ht != '') $param.='&search_montant_ht='.$search_montant_ht;
- if ($search_montant_vat != '') $param.='&search_montant_vat='.$search_montant_vat;
- if ($search_montant_ttc != '') $param.='&search_montant_ttc='.$search_montant_ttc;
- if ($search_status != '') $param.='&search_status='.$search_status;
- if ($search_paymentmode > 0) $param.='search_paymentmode='.$search_paymentmode;
+ if ($day) $param.='&day='.urlencode($day);
+ if ($month) $param.='&month='.urlencode($month);
+ if ($year) $param.='&year=' .urlencode($year);
+ if ($day_lim) $param.='&day_lim='.urlencode($day_lim);
+ if ($month_lim) $param.='&month_lim='.urlencode($month_lim);
+ if ($year_lim) $param.='&year_lim=' .urlencode($year_lim);
+ if ($search_ref) $param.='&search_ref=' .urlencode($search_ref);
+ if ($search_refcustomer) $param.='&search_refcustomer=' .urlencode($search_refcustomer);
+ if ($search_societe) $param.='&search_societe=' .urlencode($search_societe);
+ if ($search_sale > 0) $param.='&search_sale=' .urlencode($search_sale);
+ if ($search_user > 0) $param.='&search_user=' .urlencode($search_user);
+ if ($search_product_category > 0) $param.='$search_product_category=' .urlencode($search_product_category);
+ if ($search_montant_ht != '') $param.='&search_montant_ht='.urlencode($search_montant_ht);
+ if ($search_montant_vat != '') $param.='&search_montant_vat='.urlencode($search_montant_vat);
+ if ($search_montant_ttc != '') $param.='&search_montant_ttc='.urlencode($search_montant_ttc);
+ if ($search_status != '') $param.='&search_status='.urlencode($search_status);
+ if ($search_paymentmode > 0) $param.='search_paymentmode='.urlencode($search_paymentmode);
if ($show_files) $param.='&show_files=' .$show_files;
if ($option) $param.="&option=".$option;
if ($optioncss != '') $param.='&optioncss='.$optioncss;
@@ -1061,12 +1063,12 @@ if ($resql)
// Thirpdarty
if (! empty($arrayfields['s.nom']['checked']))
{
- print '
| ' . $langs->trans("SuppliersCategoriesShort") . ' | ';
print '';
print $form->showCategories($object->id, 'supplier', 1);
diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php
index 7481574ddd9..88f01c1e837 100644
--- a/htdocs/fourn/facture/list.php
+++ b/htdocs/fourn/facture/list.php
@@ -31,17 +31,21 @@
*/
require '../../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
-require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
-require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
if (!$user->rights->fournisseur->facture->lire) accessforbidden();
-$langs->load("companies");
$langs->load("bills");
+$langs->load("companies");
+$langs->load('products');
$socid = GETPOST('socid','int');
@@ -56,68 +60,161 @@ if ($user->societe_id > 0)
$mode=GETPOST("mode");
$modesearch=GETPOST("mode_search");
-$page=GETPOST("page",'int');
-$sortorder = GETPOST("sortorder",'alpha');
-$sortfield = GETPOST("sortfield",'alpha');
+$search_product_category=GETPOST('search_product_category','int');
+$search_ref=GETPOST('sf_ref')?GETPOST('sf_ref','alpha'):GETPOST('search_ref','alpha');
+$search_refsupplier=GETPOST('search_refsupplier','alpha');
+$search_project=GETPOST('search_project','alpha');
+$search_societe=GETPOST('search_societe','alpha');
+$search_montant_ht=GETPOST('search_montant_ht','alpha');
+$search_montant_vat=GETPOST('search_montant_vat','alpha');
+$search_montant_ttc=GETPOST('search_montant_ttc','alpha');
+$search_status=GETPOST('search_status','int');
+$search_paymentmode=GETPOST('search_paymentmode','int');
+$search_town=GETPOST('search_town','alpha');
+$search_zip=GETPOST('search_zip','alpha');
+$search_state=trim(GETPOST("search_state"));
+$search_country=GETPOST("search_country",'int');
+$search_type_thirdparty=GETPOST("search_type_thirdparty",'int');
+$search_user = GETPOST('search_user','int');
+$search_sale = GETPOST('search_sale','int');
+$day = GETPOST('day','int');
+$month = GETPOST('month','int');
+$year = GETPOST('year','int');
+$day_lim = GETPOST('day_lim','int');
+$month_lim = GETPOST('month_lim','int');
+$year_lim = GETPOST('year_lim','int');
+$toselect = GETPOST('toselect', 'array');
-$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
-if ($page == -1) { $page = 0 ; }
-$offset = $limit * $page ;
-$pageprev = $page - 1;
-$pagenext = $page + 1;
-if (! $sortorder) $sortorder="DESC";
-if (! $sortfield) $sortfield="fac.datef,fac.rowid";
+$option = GETPOST('option');
+if ($option == 'late') $filter = 'paye:0';
$search_all = GETPOST('sall');
-$search_ref = GETPOST("search_ref","int");
-$search_ref_supplier = GETPOST("search_ref_supplier","alpha");
$search_label = GETPOST("search_label","alpha");
$search_company = GETPOST("search_company","alpha");
$search_amount_no_tax = GETPOST("search_amount_no_tax","alpha");
$search_amount_all_tax = GETPOST("search_amount_all_tax","alpha");
$search_status=GETPOST('search_status','alpha');
-$day = GETPOST("day","int");
-$month = GETPOST("month","int");
-$year = GETPOST("year","int");
-$day_lim = GETPOST('day_lim','int');
-$month_lim = GETPOST('month_lim','int');
-$year_lim = GETPOST('year_lim','int');
$optioncss = GETPOST('optioncss','alpha');
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter") || GETPOST("button_removefilter.x")) // All test must be present to be compatible with all browsers
-{
- $search_all="";
- $search_ref="";
- $search_ref_supplier="";
- $search_label="";
- $search_company="";
- $search_amount_no_tax="";
- $search_amount_all_tax="";
- $search_status="";
- $year="";
- $month="";
- $day="";
- $year_lim="";
- $month_lim="";
- $day_lim="";
-}
+$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
+$sortfield = GETPOST("sortfield",'alpha');
+$sortorder = GETPOST("sortorder",'alpha');
+$page=GETPOST("page",'int');
+if ($page == -1) { $page = 0 ; }
+$offset = $limit * $page ;
+$pageprev = $page - 1;
+$pagenext = $page + 1;
+if (! $sortorder) $sortorder="DESC";
+if (! $sortfield) $sortfield="f.datef,f.rowid";
+
+// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
+$contextpage='supplierinvoicelist';
+
+$diroutputmassaction=$conf->facture->dir_output . '/temp/massgeneration/'.$user->id;
+
+$object=new FactureFournisseur($db);
+
+$now=dol_now();
+
+// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
+$hookmanager->initHooks(array('supplierinvoicelist'));
+$extrafields = new ExtraFields($db);
+
+// fetch optionals attributes and labels
+$extralabels = $extrafields->fetch_name_optionals_label('facture_fourn');
+$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
// List of fields to search into when doing a "search in all"
$fieldstosearchall = array(
- 'fac.ref'=>'Ref',
- 'fac.ref_supplier'=>'RefSupplier',
+ 'f.ref'=>'Ref',
+ 'f.ref_supplier'=>'RefSupplier',
//'fd.description'=>'Description',
's.nom'=>"ThirdParty",
- 'fac.note_public'=>'NotePublic',
+ 'f.note_public'=>'NotePublic',
);
-if (empty($user->socid)) $fieldstosearchall["fac.note_private"]="NotePrivate";
+if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate";
+$checkedtypetiers=0;
+$arrayfields=array(
+ 'f.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
+ 'f.ref_supplier'=>array('label'=>$langs->trans("RefSupplier"), 'checked'=>1),
+ 'f.label'=>array('label'=>$langs->trans("Label"), 'checked'=>0),
+ 'f.datef'=>array('label'=>$langs->trans("DateInvoice"), 'checked'=>1),
+ 'f.date_lim_reglement'=>array('label'=>$langs->trans("DateDue"), 'checked'=>1),
+ 'p.ref'=>array('label'=>$langs->trans("Project"), 'checked'=>0),
+ 's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
+ 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1),
+ 's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1),
+ 'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
+ 'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0),
+ 'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>$checkedtypetiers),
+ 'f.fk_mode_reglement'=>array('label'=>$langs->trans("PaymentMode"), 'checked'=>1),
+ 'f.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
+ 'f.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
+ 'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
+ 'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
+ 'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
+ 'f.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
+);
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+ foreach($extrafields->attribute_label as $key => $val)
+ {
+ $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>$extrafields->attribute_list[$key], 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>$extrafields->attribute_perms[$key]);
+ }
+}
/*
* Actions
*/
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction')) { $massaction=''; }
+
+$parameters=array('socid'=>$socid);
+$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
+if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
+
+include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
+
+if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter") || GETPOST("button_removefilter.x")) // All test must be present to be compatible with all browsers
+{
+ $search_all="";
+ $search_user='';
+ $search_sale='';
+ $search_product_category='';
+ $search_ref="";
+ $search_refsupplier="";
+ $search_label="";
+ $search_project='';
+ $search_societe="";
+ $search_company="";
+ $search_amount_no_tax="";
+ $search_amount_all_tax="";
+ $search_montant_ht='';
+ $search_montant_vat='';
+ $search_montant_ttc='';
+ $search_status='';
+ $search_paymentmode='';
+ $search_town='';
+ $search_zip="";
+ $search_state="";
+ $search_type='';
+ $search_country='';
+ $search_type_thirdparty='';
+ $year="";
+ $month="";
+ $day="";
+ $year_lim="";
+ $month_lim="";
+ $day_lim="";
+ $search_array_options=array();
+ $filter='';
+ $option='';
+}
+
if ($mode == 'search')
{
if ($modesearch == 'soc')
@@ -139,94 +236,130 @@ if ($mode == 'search')
}
}
+if (empty($reshook))
+{
+ // Mass actions. Controls on number of lines checked
+ $maxformassaction=1000;
+ if (! empty($massaction) && count($toselect) < 1)
+ {
+ $error++;
+ setEventMessages($langs->trans("NoLineChecked"), null, "warnings");
+ }
+ if (! $error && count($toselect) > $maxformassaction)
+ {
+ setEventMessages($langs->trans('TooManyRecordForMassAction',$maxformassaction), null, 'errors');
+ $error++;
+ }
+
+
+}
+
/*
* View
*/
-$now=dol_now();
$form=new Form($db);
$formother=new FormOther($db);
$formfile = new FormFile($db);
+$bankaccountstatic=new Account($db);
+$facturestatic=new FactureFournisseur($db);
+$formcompany=new FormCompany($db);
llxHeader('',$langs->trans("SuppliersInvoices"),'EN:Suppliers_Invoices|FR:FactureFournisseur|ES:Facturas_de_proveedores');
-$sql = "SELECT s.rowid as socid, s.nom as name, ";
-$sql.= " fac.rowid as facid, fac.ref, fac.ref_supplier, fac.datef, fac.date_lim_reglement as date_echeance,";
-$sql.= " fac.total_ht, fac.total_ttc, fac.paye as paye, fac.fk_statut as fk_statut, fac.libelle,";
+$sql = "SELECT";
+if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
+$sql.= " f.rowid as facid, f.ref, f.ref_supplier, f.datef, f.date_lim_reglement as datelimite,";
+$sql.= " f.total_ht, f.total_ttc, f.paye as paye, f.fk_statut as fk_statut, f.libelle as label,";
+$sql.= ' s.rowid as socid, s.nom as name, s.town, s.zip, s.fk_pays, s.client, s.code_client, ';
+$sql.= " typent.code as typent_code,";
+$sql.= " state.code_departement as state_code, state.nom as state_name,";
$sql.= " p.rowid as project_id, p.ref as project_ref";
if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user ";
-$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as fac";
-$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = fac.fk_projet";
-if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
-$sql.= " WHERE fac.entity = ".$conf->entity;
-$sql.= " AND fac.fk_soc = s.rowid";
-if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
-if ($socid)
+// Add fields from extrafields
+foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : '');
+// Add fields from hooks
+$parameters=array();
+$reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters); // Note that $action and $object may have been modified by hook
+$sql.=$hookmanager->resPrint;
+$sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s';
+$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
+$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
+$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
+$sql.= ', '.MAIN_DB_PREFIX.'facture_fourn as f';
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn_extrafields as ef on (f.rowid = ef.fk_object)";
+else $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn_det as fd ON fd.fk_facture_fourn = f.rowid';
+if ($sall || $search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn_det as pd ON f.rowid=pd.fk_facture_fourn';
+if ($search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=pd.fk_product';
+$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = f.fk_projet";
+// We'll need this table joined to the select in order to filter by sale
+if ($search_sale > 0 || (! $user->rights->societe->client->voir && ! $socid)) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
+if ($search_user > 0)
{
- $sql .= " AND s.rowid = ".$socid;
+ $sql.=", ".MAIN_DB_PREFIX."element_contact as ec";
+ $sql.=", ".MAIN_DB_PREFIX."c_type_contact as tc";
}
+$sql.= ' WHERE f.fk_soc = s.rowid';
+$sql.= " AND f.entity = ".$conf->entity;
+if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
+if ($search_product_category > 0) $sql.=" AND cp.fk_categorie = ".$search_product_category;
+if ($socid > 0) $sql .= ' AND s.rowid = '.$socid;
if ($search_all)
{
$sql.= natural_search(array_keys($fieldstosearchall), $search_all);
}
if ($search_ref)
{
- if (is_numeric($search_ref)) $sql .= natural_search(array('fac.ref'), $search_ref);
- else $sql .= natural_search('fac.ref', $search_ref);
-}
-if ($search_ref_supplier)
-{
- $sql .= natural_search('fac.ref_supplier', $search_ref_supplier);
+ if (is_numeric($search_ref)) $sql .= natural_search(array('f.ref'), $search_ref);
+ else $sql .= natural_search('f.ref', $search_ref);
}
+if ($search_ref) $sql .= natural_search('f.ref', $search_ref);
+if ($search_ref_supplier) $sql .= natural_search('f.ref_supplier', $search_ref_supplier);
+if ($search_project) $sql .= natural_search('p.ref', $search_project);
+if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
+if ($search_town) $sql.= natural_search('s.town', $search_town);
+if ($search_zip) $sql.= natural_search("s.zip",$search_zip);
+if ($search_state) $sql.= natural_search("state.nom",$search_state);
+if ($search_country) $sql .= " AND s.fk_pays IN (".$search_country.')';
+if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')';
+if ($search_company) $sql .= natural_search('s.nom', $search_company);
+if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1);
+if ($search_montant_vat != '') $sql.= natural_search('f.total_tva', $search_montant_vat, 1);
+if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1);
+if ($search_status != '' && $search_status >= 0) $sql.= " AND f.fk_statut = ".$db->escape($search_status);
+if ($search_paymentmode > 0) $sql .= " AND f.fk_mode_reglement = ".$search_paymentmode."";
if ($month > 0)
{
if ($year > 0 && empty($day))
- $sql.= " AND fac.datef BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'";
+ $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'";
else if ($year > 0 && ! empty($day))
- $sql.= " AND fac.datef BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
+ $sql.= " AND f.datef BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
else
- $sql.= " AND date_format(fac.datef, '%m') = '".$month."'";
+ $sql.= " AND date_format(f.datef, '%m') = '".$month."'";
}
else if ($year > 0)
{
- $sql.= " AND fac.datef BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
+ $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
}
if ($month_lim > 0)
{
if ($year_lim > 0 && empty($day_lim))
- $sql.= " AND fac.date_lim_reglement BETWEEN '".$db->idate(dol_get_first_day($year_lim,$month_lim,false))."' AND '".$db->idate(dol_get_last_day($year_lim,$month_lim,false))."'";
+ $sql.= " AND f.date_lim_reglement BETWEEN '".$db->idate(dol_get_first_day($year_lim,$month_lim,false))."' AND '".$db->idate(dol_get_last_day($year_lim,$month_lim,false))."'";
else if ($year_lim > 0 && ! empty($day_lim))
- $sql.= " AND fac.date_lim_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_lim, $day_lim, $year_lim))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_lim, $day_lim, $year_lim))."'";
+ $sql.= " AND f.date_lim_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month_lim, $day_lim, $year_lim))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month_lim, $day_lim, $year_lim))."'";
else
- $sql.= " AND date_format(fac.date_lim_reglement, '%m') = '".$month_lim."'";
+ $sql.= " AND date_format(f.date_lim_reglement, '%m') = '".$month_lim."'";
}
else if ($year_lim > 0)
{
- $sql.= " AND fac.datef BETWEEN '".$db->idate(dol_get_first_day($year_lim,1,false))."' AND '".$db->idate(dol_get_last_day($year_lim,12,false))."'";
+ $sql.= " AND f.date_lim_reglement BETWEEN '".$db->idate(dol_get_first_day($year_lim,1,false))."' AND '".$db->idate(dol_get_last_day($year_lim,12,false))."'";
}
-if ($search_label)
-{
- $sql .= natural_search('fac.libelle', $search_label);
-}
-
-if ($search_company)
-{
- $sql .= natural_search('s.nom', $search_company);
-}
-
-if ($search_amount_no_tax != '')
-{
- $sql .= natural_search('fac.total_ht', $search_amount_no_tax, 1);
-}
-
-if ($search_amount_all_tax != '')
-{
- $sql .= natural_search('fac.total_ttc', $search_amount_all_tax, 1);
-}
-
+if ($option == 'late') $sql.=" AND f.date_lim_reglement < '".$db->idate(dol_now() - $conf->facture->fournisseur->warning_delay)."'";
+if ($filter == 'paye:0') $sql.= " AND f.fk_statut = 1";
+if ($search_label) $sql .= natural_search('f.libelle', $search_label);
if ($search_status != '' && $search_status >= 0)
{
- $sql.= " AND fac.fk_statut = ".$search_status;
+ $sql.= " AND f.fk_statut = ".$search_status;
}
if ($filter && $filter != -1)
{
@@ -237,6 +370,30 @@ if ($filter && $filter != -1)
$sql .= ' AND ' . trim($filt[0]) . ' = ' . trim($filt[1]);
}
}
+if ($search_sale > 0) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$search_sale;
+if ($search_user > 0)
+{
+ $sql.= " AND ec.fk_c_type_contact = tc.rowid AND tc.element='invoice_supplier' AND tc.source='internal' AND ec.element_id = f.rowid AND ec.fk_socpeople = ".$search_user;
+}
+// Add where from extra fields
+foreach ($search_array_options as $key => $val)
+{
+ $crit=$val;
+ $tmpkey=preg_replace('/search_options_/','',$key);
+ $typ=$extrafields->attribute_type[$tmpkey];
+ $mode=0;
+ if (in_array($typ, array('int','double'))) $mode=1; // Search on a numeric
+ if ($val && ( ($crit != '' && ! in_array($typ, array('select'))) || ! empty($crit)))
+ {
+ $sql .= natural_search('ef.'.$tmpkey, $crit, $mode);
+ }
+}
+// Add where from hooks
+$parameters=array();
+$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters); // Note that $action and $object may have been modified by hook
+$sql.=$hookmanager->resPrint;
+
+$sql.= $db->order($sortfield,$sortorder);
$nbtotalofrecords = 0;
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
@@ -245,21 +402,25 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
$nbtotalofrecords = $db->num_rows($result);
}
-$sql.= $db->order($sortfield,$sortorder);
$sql.= $db->plimit($limit+1, $offset);
+//print $sql;
$resql = $db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
- $i = 0;
- if ($socid) {
+ $arrayofselected=is_array($toselect)?$toselect:array();
+
+ if ($socid)
+ {
$soc = new Societe($db);
$soc->fetch($socid);
}
$param='&socid='.$socid;
+ if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+ if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
if ($day) $param.='&day='.urlencode($day);
if ($month) $param.='&month='.urlencode($month);
if ($year) $param.='&year=' .urlencode($year);
@@ -267,17 +428,31 @@ if ($resql)
if ($month_lim) $param.='&month_lim='.urlencode($month_lim);
if ($year_lim) $param.='&year_lim=' .urlencode($year_lim);
if ($search_ref) $param.='&search_ref='.urlencode($search_ref);
- if ($search_ref_supplier) $param.='&search_ref_supplier'.urlencode($search_ref_supplier);
+ if ($search_refsupplier) $param.='&search_refsupplier'.urlencode($search_refsupplier);
if ($search_label) $param.='&search_label='.urlencode($search_label);
if ($search_company) $param.='&search_company='.urlencode($search_company);
+ if ($search_montant_ht != '') $param.='&search_montant_ht='.urlencode($search_montant_ht);
+ if ($search_montant_vat != '') $param.='&search_montant_vat='.urlencode($search_montant_vat);
+ if ($search_montant_ttc != '') $param.='&search_montant_ttc='.urlencode($search_montant_ttc);
if ($search_amount_no_tax) $param.='&search_amount_no_tax='.urlencode($search_amount_no_tax);
if ($search_amount_all_tax) $param.='&search_amount_all_tax='.urlencode($search_amount_all_tax);
+ if ($search_status >= 0) $param.="&search_status=".urlencode($search_status);
if ($optioncss != '') $param.='&optioncss='.$optioncss;
- if ($search_status >= 0) $param.="&search_status=".$search_status;
-
- print '\n";
}
else
{
|