diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php
index ac5cee3bebc..af9ffa6d778 100644
--- a/htdocs/comm/propal/list.php
+++ b/htdocs/comm/propal/list.php
@@ -84,7 +84,7 @@ $day=GETPOST("day","int");
$month=GETPOST("month","int");
$year=GETPOST("year","int");
-$limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit;
+$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
$sortfield = GETPOST("sortfield",'alpha');
$sortorder = GETPOST("sortorder",'alpha');
$page = GETPOST("page",'int');
@@ -242,6 +242,7 @@ $sql.= " typent.code as typent_code,";
$sql.= " state.code_departement as state_code, state.nom as state_name,";
$sql.= ' p.rowid, p.note_private, p.total_ht, p.tva as total_vat, p.total as total_ttc, p.localtax1, p.localtax2, p.ref, p.ref_client, p.fk_statut, p.fk_user_author, p.datep as dp, p.fin_validite as dfv,';
$sql.= ' p.datec as date_creation, p.tms as date_update,';
+$sql.= " pr.rowid as project_id, pr.ref as project_ref,";
if (! $user->rights->societe->client->voir && ! $socid) $sql .= " sc.fk_soc, sc.fk_user,";
$sql.= ' u.login';
// Add fields from extrafields
@@ -259,6 +260,7 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
if ($sall || $search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propaldet as pd ON p.rowid=pd.fk_propal';
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.'user as u ON p.fk_user_author = u.rowid';
+$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet as pr ON pr.rowid = p.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)
@@ -377,6 +379,7 @@ if ($resql)
if ($search_montant_ht) $param.='&search_montant_ht='.$search_montant_ht;
if ($search_login) $param.='&search_login='.$search_login;
if ($search_town) $param.='&search_town='.$search_town;
+ if ($search_zip) $param.='&search_zip='.$search_zip;
if ($socid > 0) $param.='&socid='.$socid;
if ($optioncss != '') $param.='&optioncss='.$optioncss;
// Add $param from extra fields
@@ -532,7 +535,7 @@ if ($resql)
$moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
$moreforfilter.='';
}
- // If the user can view prospects other than his'
+ // If the user can view products
if ($conf->categorie->enabled && ($user->rights->produit->lire || $user->rights->service->lire))
{
include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
@@ -566,7 +569,7 @@ if ($resql)
{
print '
';
print '';
- print '
';
+ print '';
}
if (! empty($arrayfields['p.ref_client']['checked']))
{
@@ -1001,7 +1004,6 @@ if ($resql)
else print '
';
}
print '';
-
}
$db->free($resql);
diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php
index 56f8df0f825..c5f994f8a10 100644
--- a/htdocs/supplier_proposal/list.php
+++ b/htdocs/supplier_proposal/list.php
@@ -61,8 +61,15 @@ $search_user=GETPOST('search_user','int');
$search_sale=GETPOST('search_sale','int');
$search_ref=GETPOST('sf_ref')?GETPOST('sf_ref','alpha'):GETPOST('search_ref','alpha');
$search_societe=GETPOST('search_societe','alpha');
-$search_montant_ht=GETPOST('search_montant_ht','alpha');
$search_author=GETPOST('search_author','alpha');
+$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_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('viewstatut','alpha')?GETPOST('viewstatut','alpha'):GETPOST('search_status','int');
$object_statut=$db->escape(GETPOST('supplier_proposal_statut'));
@@ -121,28 +128,28 @@ $fieldstosearchall = array(
'p.ref'=>'Ref',
's.nom'=>'Supplier',
'pd.description'=>'Description',
- 'p.note_private'=>"NotePrivate",
'p.note_public'=>'NotePublic',
);
+if (empty($user->socid)) $fieldstosearchall["p.note_private"]="NotePrivate";
-// TODO Use field of supplier proposal
+$checkedtypetiers=0;
$arrayfields=array(
- 'p.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
+ 'sp.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
's.nom'=>array('label'=>$langs->trans("Supplier"), '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),
- 'p.date'=>array('label'=>$langs->trans("Date"), 'checked'=>1),
- 'p.fin_validite'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1),
- 'p.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
- 'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
- 'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
+ 'sp.date_valid'=>array('label'=>$langs->trans("Date"), 'checked'=>1),
+ 'sp.date_livraison'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1),
+ 'sp.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
+ 'sp.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
+ 'sp.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10),
- 'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
- 'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
- 'p.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
+ 'sp.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
+ 'sp.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
+ 'sp.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
);
// Extra fields
if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
@@ -169,6 +176,7 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
+// Do we click on purge search criteria ?
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
{
$search_categ='';
@@ -177,6 +185,16 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPO
$search_ref='';
$search_societe='';
$search_montant_ht='';
+ $search_montant_vat='';
+ $search_montant_ttc='';
+ $search_login='';
+ $search_product_category='';
+ $search_town='';
+ $search_zip="";
+ $search_state="";
+ $search_type='';
+ $search_country='';
+ $search_type_thirdparty='';
$search_author='';
$yearvalid='';
$monthvalid='';
@@ -186,10 +204,6 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPO
$object_statut='';
}
-$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');
-
if (empty($reshook))
{
$objectclass='SupplierProposal';
@@ -215,15 +229,18 @@ $formpropal = new FormPropal($db);
$companystatic=new Societe($db);
$formcompany=new FormCompany($db);
-llxHeader('',$langs->trans('CommRequest'),'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur');
+$help_url='EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur';
+llxHeader('',$langs->trans('CommRequest'),$help_url);
$sql = 'SELECT';
if ($sall || $search_product_category > 0) $sql = 'SELECT DISTINCT';
-$sql.= ' s.rowid as socid, s.nom as name, s.town, s.client, s.code_client,';
+$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.= ' sp.rowid, sp.note_private, sp.total_ht, sp.ref, sp.fk_statut, sp.fk_user_author, sp.date_valid, sp.date_livraison as dp,';
+$sql.= ' sp.rowid, sp.note_private, sp.total_ht, sp.tva as total_vat, sp.total as total_ttc, sp.localtax1, sp.localtax2, sp.ref, sp.fk_statut, sp.fk_user_author, sp.date_valid, sp.date_livraison as dp,';
+$sql.= ' sp.datec as date_creation, sp.tms as date_update,';
$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.= " u.firstname, u.lastname, u.photo, u.login";
// Add fields from extrafields
foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : '');
@@ -231,7 +248,7 @@ foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->att
$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.= ' 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)";
@@ -254,10 +271,17 @@ if (! $user->rights->societe->client->voir && ! $socid) //restriction
{
$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
}
+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_ref) $sql .= natural_search('sp.ref', $search_ref);
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
if ($search_author) $sql .= natural_search('u.login', $search_author);
-if ($search_montant_ht) $sql.= " AND sp.total_ht='".$db->escape(price2num(trim($search_montant_ht)))."'";
+if ($search_montant_ht) $sql.= natural_search('sp.total_ht=', $search_montant_ht, 1);
+if ($search_montant_vat != '') $sql.= natural_search("sp.tva", $search_montant_vat, 1);
+if ($search_montant_ttc != '') $sql.= natural_search("sp.total", $search_montant_ttc, 1);
if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall);
if ($socid) $sql.= ' AND s.rowid = '.$socid;
if ($search_status >= 0 && $search_status != '') $sql.= ' AND sp.fk_statut IN ('.$search_status.')';
@@ -292,6 +316,23 @@ if ($search_user > 0)
{
$sql.= " AND c.fk_c_type_contact = tc.rowid AND tc.element='supplier_proposal' AND tc.source='internal' AND c.element_id = sp.rowid AND c.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);
$sql.=', sp.ref DESC';
@@ -300,14 +341,14 @@ $sql.=', sp.ref DESC';
$nbtotalofrecords = '';
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
{
- $result = $db->query($sql);
- $nbtotalofrecords = $db->num_rows($result);
+ $resql = $db->query($sql);
+ $nbtotalofrecords = $db->num_rows($resql);
}
$sql.= $db->plimit($limit + 1,$offset);
-$result=$db->query($sql);
-if ($result)
+$resql=$db->query($sql);
+if ($resql)
{
$objectstatic=new SupplierProposal($db);
$userstatic=new User($db);
@@ -323,7 +364,7 @@ if ($result)
$title = $langs->trans('ListOfSupplierProposals');
}
- $num = $db->num_rows($result);
+ $num = $db->num_rows($resql);
$arrayofselected=is_array($toselect)?$toselect:array();
@@ -339,6 +380,8 @@ if ($result)
if ($search_sale > 0) $param.='&search_sale='.$search_sale;
if ($search_montant_ht) $param.='&search_montant_ht='.$search_montant_ht;
if ($search_author) $param.='&search_author='.$search_author;
+ if ($search_town) $param.='&search_town='.$search_town;
+ if ($search_zip) $param.='&search_zip='.$search_zip;
if ($socid > 0) $param.='&socid='.$socid;
if ($search_status != '') $param.='&search_status='.$search_status;
if ($optioncss != '') $param.='&optioncss='.$optioncss;
@@ -495,6 +538,16 @@ if ($result)
$moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
$moreforfilter.='';
}
+ // If the user can view products
+ if ($conf->categorie->enabled && ($user->rights->produit->lire || $user->rights->service->lire))
+ {
+ include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
+ $moreforfilter.='
';
+ }
$parameters=array();
$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook
if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
@@ -512,46 +565,142 @@ if ($result)
if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
print '
';
+ }
+ }
+ }
+ // Fields from hook
+ $parameters=array('arrayfields'=>$arrayfields);
+ $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters); // Note that $action and $object may have been modified by hook
+ print $hookmanager->resPrint;
+ // Date creation
+ if (! empty($arrayfields['sp.datec']['checked']))
+ {
+ print '
';
+ print '
';
+ }
+ // Date modification
+ if (! empty($arrayfields['sp.tms']['checked']))
+ {
+ print '
';
+ print '
';
+ }
+ // Status
+ if (! empty($arrayfields['sp.fk_statut']['checked']))
+ {
+ print '
';
+ if (! $i) $totalarray['nbfield']++;
+ }
+ }
+ }
+ // Fields from hook
+ $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
+ $reshook=$hookmanager->executeHooks('printFieldListValue',$parameters); // Note that $action and $object may have been modified by hook
+ print $hookmanager->resPrint;
+ // Date creation
+ if (! empty($arrayfields['sp.datec']['checked']))
+ {
+ print '