From a0406bc7410a916ab2328aa93fbc1f2d8df88394 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 26 Nov 2017 20:21:01 +0100 Subject: [PATCH] Standardize view of events for products --- htdocs/core/lib/company.lib.php | 13 +- htdocs/core/lib/product.lib.php | 11 +- htdocs/langs/en_US/main.lang | 1 + htdocs/product/agenda.php | 208 ++++++++++++++++++++++++++++++++ htdocs/product/card.php | 6 +- htdocs/product/info.php | 123 ------------------- htdocs/societe/card.php | 4 +- 7 files changed, 234 insertions(+), 132 deletions(-) create mode 100644 htdocs/product/agenda.php delete mode 100644 htdocs/product/info.php diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 79c1b394876..9b0c9fd8a6c 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1099,7 +1099,7 @@ function show_actions_todo($conf,$langs,$db,$filterobj,$objcon='',$noprint=0,$ac * @param Conf $conf Object conf * @param Translate $langs Object langs * @param DoliDB $db Object db - * @param Adherent|Societe|Project $filterobj Object third party or member or project + * @param mixed $filterobj Object Adherent|Societe|Project|Product|CommandeFournisseur * @param Contact $objcon Object contact * @param int $noprint Return string but does not output it * @param string $actioncode Filter on actioncode @@ -1139,11 +1139,13 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= if (is_object($filterobj) && get_class($filterobj) == 'Societe') $sql.= ", sp.lastname, sp.firstname"; if (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", m.lastname, m.firstname"; if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", o.ref"; + if (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref"; $sql.= " FROM ".MAIN_DB_PREFIX."user as u, ".MAIN_DB_PREFIX."actioncomm as a"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; if (is_object($filterobj) && get_class($filterobj) == 'Societe') $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON a.fk_contact = sp.rowid"; if (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", ".MAIN_DB_PREFIX."adherent as m"; if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as o"; + if (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o"; $sql.= " WHERE u.rowid = a.fk_user_action"; $sql.= " AND a.entity IN (".getEntity('agenda').")"; if (is_object($filterobj) && get_class($filterobj) == 'Societe' && $filterobj->id) $sql.= " AND a.fk_soc = ".$filterobj->id; @@ -1155,8 +1157,13 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= } if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') { - $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'"; - if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; + $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'"; + if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; + } + if (is_object($filterobj) && get_class($filterobj) == 'Product') + { + $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'product'"; + if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; } if (is_object($objcon) && $objcon->id) $sql.= " AND a.fk_contact = ".$objcon->id; // Condition on actioncode diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php index 36372254b61..a2901c1d5e1 100644 --- a/htdocs/core/lib/product.lib.php +++ b/htdocs/core/lib/product.lib.php @@ -165,9 +165,14 @@ function product_prepare_head($object) complete_head_from_modules($conf,$langs,$object,$head,$h,'product', 'remove'); // Log - $head[$h][0] = DOL_URL_ROOT.'/product/info.php?id='.$object->id; - $head[$h][1] = $langs->trans("Info"); - $head[$h][2] = 'info'; + $head[$h][0] = DOL_URL_ROOT.'/product/agenda.php?id='.$object->id; + $head[$h][1] = $langs->trans("Events"); + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + $head[$h][1].= '/'; + $head[$h][1].= $langs->trans("Agenda"); + } + $head[$h][2] = 'agenda'; $h++; return $head; diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 274000b9e2d..597dea33118 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -425,6 +425,7 @@ ContactsAddressesForCompany=Contacts/addresses for this third party AddressesForCompany=Addresses for this third party ActionsOnCompany=Events about this third party ActionsOnMember=Events about this member +ActionsOnProduct=Events about this product NActionsLate=%s late RequestAlreadyDone=Request already recorded Filter=Filter diff --git a/htdocs/product/agenda.php b/htdocs/product/agenda.php new file mode 100644 index 00000000000..838e75a72a8 --- /dev/null +++ b/htdocs/product/agenda.php @@ -0,0 +1,208 @@ + + * Copyright (C) 2005 Brice Davoleau + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2006-2015 Laurent Destailleur + * Copyright (C) 2007 Patrick Raguin + * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2015 Marcos GarcĂ­a + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/product/agenda.php + * \ingroup product + * \brief Page of product events + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; + +$langs->load("companies"); + +if (GETPOST('actioncode','array')) +{ + $actioncode=GETPOST('actioncode','array',3); + if (! count($actioncode)) $actioncode='0'; +} +else +{ + $actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} +$search_agenda_label=GETPOST('search_agenda_label'); + +// Security check +$id = GETPOST('id','int'); +$ref = GETPOST('ref', 'alpha'); +if ($user->societe_id) $id=$user->societe_id; +$result=restrictedArea($user,'produit|service',$id,'product&product'); + +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield",'alpha'); +$sortorder = GETPOST("sortorder",'alpha'); +$page = GETPOST("page",'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield='a.datep,a.id'; +if (! $sortorder) $sortorder='DESC,DESC'; + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('agendathirdparty')); + + +/* + * Actions + */ + +$parameters=array('id'=>$id); +$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)) +{ + // Cancel + if (GETPOST('cancel','alpha') && ! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + + // Purge search criteria + if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers + { + $actioncode=''; + $search_agenda_label=''; + } +} + + + +/* + * View + */ + +$contactstatic = new Contact($db); + +$form = new Form($db); + +if ($id > 0) +{ + require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + + $langs->load("companies"); + + + $object = new Product($db); + $result = $object->fetch($id); + + $title=$langs->trans("Agenda"); + if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/productnameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title; + llxHeader('',$title); + + if (! empty($conf->notification->enabled)) $langs->load("mails"); + $type = $langs->trans('Product'); + if ($object->isService()) $type = $langs->trans('Service'); + + $head = product_prepare_head($object); + + $titre=$langs->trans("CardProduct".$object->type); + $picto=($object->type== Product::TYPE_SERVICE?'service':'product'); + dol_fiche_head($head, 'agenda', $titre, -1, $picto); + + $linkback = ''.$langs->trans("BackToList").''; + $object->next_prev_filter=" fk_product_type = ".$object->type; + + $shownav = 1; + if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; + + dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); + + print '
'; + + print '
'; + + $object->info($id); + print dol_print_object_info($object, 1); + + print '
'; + + dol_fiche_end(); + + + + // Actions buttons + + $objproduct=$object; + $objcon=new stdClass(); + + $out=''; + $permok=$user->rights->agenda->myactions->create; + if ((! empty($objproduct->id) || ! empty($objcon->id)) && $permok) + { + //$out.='trans("AddAnAction"),'filenew'); + //$out.=""; + } + + + //print '
'; + //print '
'; + + + $morehtmlcenter=''; + if (! empty($conf->agenda->enabled)) + { + if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) + { + $morehtmlcenter.=''.$langs->trans("AddAction").''; + } + else + { + $morehtmlcenter.=''.$langs->trans("AddAction").''; + } + } + + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + print '
'; + + $param='&id='.$id; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + + print_barre_liste($langs->trans("ActionsOnProduct"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $morehtmlcenter, 0, -1, '', '', '', '', 0, 1, 1); + + // List of all actions + $filters=array(); + $filters['search_agenda_label']=$search_agenda_label; + + // TODO Replace this with same code than into list.php + show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder); + } +} + + +llxFooter(); + +$db->close(); diff --git a/htdocs/product/card.php b/htdocs/product/card.php index ffefcc91d91..a6b431c4273 100644 --- a/htdocs/product/card.php +++ b/htdocs/product/card.php @@ -2162,10 +2162,14 @@ if ($action != 'create' && $action != 'edit' && $action != 'delete') $MAXEVENT = 10; + $morehtmlright = ''; + $morehtmlright.= $langs->trans("SeeAll"); + $morehtmlright.= ''; + // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; $formactions = new FormActions($db); - $somethingshown = $formactions->showactions($object, 'product', 0, 1, '', $MAXEVENT); + $somethingshown = $formactions->showactions($object, 'product', 0, 1, '', $MAXEVENT, '', $morehtmlright); // Show all action for product print ''; } diff --git a/htdocs/product/info.php b/htdocs/product/info.php deleted file mode 100644 index 1887e96df47..00000000000 --- a/htdocs/product/info.php +++ /dev/null @@ -1,123 +0,0 @@ - - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * \file htdocs/product/info.php - * \ingroup product - * \brief Information page for product - */ - -require '../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; - -$langs->load("product"); -$langs->load("other"); -if (! empty($conf->notification->enabled)) $langs->load("mails"); - -// Security check -$id = GETPOST('id','int'); -$ref = GETPOST('ref','alpha'); - -$result=restrictedArea($user,'produit|service',$id,'product&product'); - -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('infoproduct')); - -$object = new Product($db); - - -/* - * Actions - */ - -$parameters=array('id'=>$id); -$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'); - - - -/* - * View - */ - -$title = $langs->trans('ProductServiceCard'); -$helpurl = ''; -$shortlabel = dol_trunc($object->label,16); -if (GETPOST("type") == '0' || ($object->type == Product::TYPE_PRODUCT)) -{ - $title = $langs->trans('Product')." ". $shortlabel ." - ".$langs->trans('Info'); - $helpurl='EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos'; -} -if (GETPOST("type") == '1' || ($object->type == Product::TYPE_SERVICE)) -{ - $title = $langs->trans('Service')." ". $shortlabel ." - ".$langs->trans('Info'); - $helpurl='EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios'; -} - -llxHeader('', $title, $helpurl); - -$form=new Form($b); - -if ($id > 0 || $ref) -{ - $result = $object->fetch($id,$ref); - if (! $result) - { - $langs->load("errors"); - print $langs->trans("ErrorRecordNotFound"); - - llxFooter(); - $db->close(); - - exit; - } - - $head=product_prepare_head($object); - $titre=$langs->trans("CardProduct".$object->type); - $picto=($object->type== Product::TYPE_SERVICE?'service':'product'); - - dol_fiche_head($head, 'info', $titre, -1, $picto); - - $linkback = ''.$langs->trans("BackToList").''; - $object->next_prev_filter=" fk_product_type = ".$object->type; - - $shownav = 1; - if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0; - - dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); - - $object->info($object->id); - - print '
'; - - print '
'; - - print '
'; - - dol_print_object_info($object); - - print '
'; - - dol_fiche_end(); -} - - -llxFooter(); - -$db->close(); diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index de7ad0ddc58..fd3830a00ad 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2470,7 +2470,7 @@ else print ''; }