diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 6d46876586a..11134f70194 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -88,7 +88,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,26,37,0,25,0); +$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); // Name of SQL tables of dictionaries $tabname=array(); diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 4b03886a714..8d021d48841 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -299,9 +299,9 @@ class FormTicket print $this->selectSeveritiesTickets((GETPOST('severity_code') ? GETPOST('severity_code') : $this->severity_code), 'severity_code', '', '2'); print ''; - // Category - print ''; - print $this->selectAnalyticCodesTickets((GETPOST('category_code') ? GETPOST('category_code') : $this->category_code), 'category_code', '', '2'); + // Group + print ''; + print $this->selectGroupTickets((GETPOST('category_code') ? GETPOST('category_code') : $this->category_code), 'category_code', '', '2'); print ''; // Notify thirdparty at creation @@ -532,7 +532,7 @@ class FormTicket * @param string $morecss More CSS * @return void */ - public function selectAnalyticCodesTickets($selected = '', $htmlname = 'ticketcategory', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0, $morecss = '') + public function selectGroupTickets($selected = '', $htmlname = 'ticketcategory', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0, $morecss = '') { global $langs, $user; diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index e08def907a1..e6deef76144 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -231,23 +231,9 @@ class modTicket extends DolibarrModules 'titre' => 'List', 'mainmenu' => 'ticket', 'leftmenu' => 'ticketlist', - 'url' => '/ticket/list.php', - 'langs' => 'ticket', - 'position' => 103, - 'enabled' => '$conf->ticket->enabled', - 'perms' => '$user->rights->ticket->read', - 'target' => '', - 'user' => 2); - $r++; - - $this->menu[$r] = array('fk_menu' => 'fk_mainmenu=ticket,fk_leftmenu=ticketlist', - 'type' => 'left', - 'titre' => 'MenuListNonClosed', - 'mainmenu' => 'ticket', - 'leftmenu' => 'ticketlist', 'url' => '/ticket/list.php?search_fk_status=non_closed', 'langs' => 'ticket', - 'position' => 104, + 'position' => 103, 'enabled' => '$conf->ticket->enabled', 'perms' => '$user->rights->ticket->read', 'target' => '', @@ -259,7 +245,7 @@ class modTicket extends DolibarrModules 'titre' => 'MenuTicketMyAssign', 'mainmenu' => 'ticket', 'leftmenu' => 'ticketmy', - 'url' => '/ticket/list.php?mode=my_assign', + 'url' => '/ticket/list.php?mode=mine&search_fk_status=non_closed', 'langs' => 'ticket', 'position' => 105, 'enabled' => '$conf->ticket->enabled', @@ -268,19 +254,6 @@ class modTicket extends DolibarrModules 'user' => 0); $r++; - $this->menu[$r] = array('fk_menu' => 'fk_mainmenu=ticket,fk_leftmenu=ticketmy', - 'type' => 'left', - 'titre' => 'MenuTicketMyAssignNonClosed', - 'mainmenu' => 'ticket', - 'url' => '/ticket/list.php?mode=my_assign&search_fk_status=non_closed', - 'langs' => 'ticket', - 'position' => 106, - 'enabled' => '$conf->ticket->enabled', - 'perms' => '$user->rights->ticket->read', - 'target' => '', - 'user' => 0); - $r++; - $this->menu[$r] = array('fk_menu' => 'fk_mainmenu=ticket,fk_leftmenu=ticket', 'type' => 'left', 'titre' => 'Statistics', diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 87766554735..477f611bf39 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -904,13 +904,13 @@ DictionaryRevenueStamp=Amount of tax stamps DictionaryPaymentConditions=Payment Terms DictionaryPaymentModes=Payment Modes DictionaryTypeContact=Contact/Address types -DictionaryTypeOfContainer=Type of website pages/containers +DictionaryTypeOfContainer=Website - Type of website pages/containers DictionaryEcotaxe=Ecotax (WEEE) DictionaryPaperFormat=Paper formats DictionaryFormatCards=Card formats DictionaryFees=Expense report - Types of expense report lines DictionarySendingMethods=Shipping methods -DictionaryStaff=No. of Employees +DictionaryStaff=Number of Employees DictionaryAvailability=Delivery delay DictionaryOrderMethods=Ordering methods DictionarySource=Origin of proposals/orders diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index f93de815d17..972712edeea 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -492,6 +492,8 @@ Drafts=Drafts StatusInterInvoiced=Invoiced Validated=Validated Opened=Open +OpenAll=Open (All) +ClosedAll=Closed (All) New=New Discount=Discount Unknown=Unknown diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang index 72a3cfe93f2..6366e93e375 100644 --- a/htdocs/langs/en_US/ticket.lang +++ b/htdocs/langs/en_US/ticket.lang @@ -27,9 +27,9 @@ Permission56003=Delete tickets Permission56004=Manage tickets Permission56005=See tickets of all third parties (not effective for external users, always be limited to the third party they depend on) -TicketDictType=Tickets type -TicketDictCategory=Tickets analytic code -TicketDictSeverity=Tickets severity +TicketDictType=Ticket - Types +TicketDictCategory=Ticket - Groupes +TicketDictSeverity=Ticket - Severities TicketTypeShortBUGSOFT=Dysfonctionnement logiciel TicketTypeShortBUGHARD=Dysfonctionnement matériel TicketTypeShortCOM=Commercial question @@ -123,13 +123,14 @@ TicketsAutoAssignTicket=Automatically assign the user who created the ticket TicketsAutoAssignTicketHelp=When creating a ticket, the user can be automatically assigned to the ticket. TicketNumberingModules=Tickets numbering module TicketNotifyTiersAtCreation=Notify third party at creation +TicketGroup=Group # # Index & list page # TicketsIndex=Ticket - home TicketList=List of tickets -TicketAssignedToMeInfos=This page display ticket list which are assigned to current user +TicketAssignedToMeInfos=This page display ticket list created by or assigned to current user NoTicketsFound=No ticket found TicketViewAllTickets=View all tickets TicketViewNonClosedOnly=View only open tickets diff --git a/htdocs/langs/fr_FR/ticket.lang b/htdocs/langs/fr_FR/ticket.lang index a2b29b577fb..fa4e5366ac0 100644 --- a/htdocs/langs/fr_FR/ticket.lang +++ b/htdocs/langs/fr_FR/ticket.lang @@ -27,9 +27,9 @@ Permission56003=Supprimer tickets Permission56004=Gérer les tickets Permission56005=Voir les tickets de tous les tiers (sauf pour les utilisateurs externes, toujours limité au tiers dont ils dépendent) -TicketDictType=Type de ticket -TicketDictCategory=Catégories de tickets -TicketDictSeverity=Sévérité des tickets +TicketDictType=Ticket - Types +TicketDictCategory=Ticket - Groupes +TicketDictSeverity=Ticket - Sévérités TicketTypeShortBUGSOFT=Dysfonctionnement logiciel TicketTypeShortBUGHARD=Dysfonctionnement matériel TicketTypeShortCOM=Question commerciale diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 1661807d634..f34c88ad5ce 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -471,7 +471,7 @@ if ($action == "view_ticketlist") if (!empty($arrayfields['category.code']['checked'])) { print ''; - $formTicket->selectAnalyticCodesTickets($search_category, 'search_category', '', 2, 1, 1); + $formTicket->selectGroupTickets($search_category, 'search_category', '', 2, 1, 1); print ''; } diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index ba80c61e4ca..36c81216f9c 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -2176,7 +2176,7 @@ class Societe extends CommonObject } $result.=$linkstart; - if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip valigntextbottom"'), 0, 0, $notooltip?0:1); + if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip valignmiddle"'), 0, 0, $notooltip?0:1); if ($withpicto != 2) $result.=($maxlen?dol_trunc($name, $maxlen):$name); $result.=$linkend; diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 3e18f07057f..81107d8c0d6 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -949,6 +949,7 @@ select.selectarrowonleft option { .width100 { width: 100px; } .width200 { width: 200px; } .minwidth100 { min-width: 100px; } + .minwidth150 { min-width: 150px; } .minwidth200 { min-width: 200px; } .minwidth300 { min-width: 300px; } .minwidth400 { min-width: 400px; } @@ -966,6 +967,7 @@ select.selectarrowonleft option { .width50 { width: 50px; } .width75 { width: 75px; } .width100 { width: 100px; } +.width150 { width: 150px; } .width200 { width: 200px; } .maxwidth25 { max-width: 25px; } .maxwidth50 { max-width: 50px; } diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c7485d7fd99..85ab07bb09a 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -919,6 +919,7 @@ select.selectarrowonleft option { .width100 { width: 100px; } .width200 { width: 200px; } .minwidth100 { min-width: 100px; } + .minwidth150 { min-width: 150px; } .minwidth200 { min-width: 200px; } .minwidth300 { min-width: 300px; } .minwidth400 { min-width: 400px; } @@ -933,10 +934,10 @@ select.selectarrowonleft option { } .widthauto { width: auto; } .width25 { width: 25px; } -.width75 { width: 75px; } .width50 { width: 50px; } .width75 { width: 75px; } .width100 { width: 100px; } +.width150 { width: 150px; } .width200 { width: 200px; } .maxwidth25 { max-width: 25px; } .maxwidth50 { max-width: 50px; } diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index e9c73e321be..c71a2211e7f 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -322,12 +322,12 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd { $morehtmlref.='
'.$langs->trans('ThirdParty') . ' '; if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) { - $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . ' : '; + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('Edit'), 0) . ' : '; } if ($action == 'editcustomer') { $morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1); } else { - $morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); + $morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1); } } @@ -551,7 +551,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd print ''; print $langs->trans('TicketChangeCategory'); print ''; - print $formticket->selectAnalyticCodesTickets($object->category_code, 'update_value_category', '', 2); + print $formticket->selectGroupTickets($object->category_code, 'update_value_category', '', 2); print ''; print ''; } else { @@ -571,8 +571,8 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd }*/ print ''; - // Category - print '' . $langs->trans("AnalyticCode") . ''; + // Group + print '' . $langs->trans("TicketGroup") . ''; print $langs->getLabelFromKey($db, $object->category_code, 'c_ticket_category', 'code', 'label'); /*if ($user->admin && !$noadmininfo) { print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 618eb654b1c..806bed19064 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -186,7 +186,7 @@ class Ticket extends CommonObject 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""), 'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), - 'category_code' => array('type'=>'varchar(32)', 'label'=>'Category', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), + 'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketGroup', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), 'severity_code' => array('type'=>'varchar(32)', 'label'=>'Severity', 'visible'=>1, 'enabled'=>1, 'position'=>22, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), 'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'searchall'=>1, 'help'=>"LinkToThirparty"), 'notify_tiers_at_create' => array('type'=>'integer', 'label'=>'NotifyThirdparty', 'visible'=>-1, 'enabled'=>0, 'position'=>51, 'notnull'=>1, 'index'=>1), diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 7466a0308e1..2e9f76ff8a3 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -354,8 +354,8 @@ if ($result) { print $objp->severity_label; print ""; - print ''; - print $tickesupstatic->getLibStatut(3); + print ''; + print $tickesupstatic->getLibStatut(5); print ""; print "\n"; diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 401645f6dfd..3bf3ae7b42f 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -82,6 +82,8 @@ $search_array_options=$extrafields->getOptionalsFromPost($object->table_element, if (! $sortfield) $sortfield="t.".key($object->fields); // Set here default search field. By default 1st field in definition. if (! $sortorder) $sortorder="ASC"; +if (GETPOST('search_fk_status','alpha') == 'non_closed') $_GET['search_fk_statut'][]='openall'; // For backward compatibility + // Initialize array of search criterias $search_all=trim(GETPOST("search_all", 'alpha')); $search=array(); @@ -211,11 +213,15 @@ $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; else $sql.=" WHERE 1 = 1"; + foreach($search as $key => $val) { if ($key == 'fk_statut') { - if ($search_fk_status == 'non_closed') $sql.= " AND ".$key." IN (0, 1, 3, 4, 5, 6)"; + $tmpstatus=''; + if ($search['fk_statut'] == 'openall' || in_array('openall', $search['fk_statut'])) $tmpstatus.=($tmpstatus?',':'')."'0', '1', '3', '4', '5', '6'"; + if ($search['fk_statut'] == 'closeall' || in_array('closeall', $search['fk_statut'])) $tmpstatus.=($tmpstatus?',':'')."'8', '9'"; + if ($tmpstatus) $sql.=" AND fk_statut IN (".$tmpstatus.")"; elseif (is_array($search[$key]) && count($search[$key])) $sql.=natural_search($key, join(',', $search[$key]), 2); continue; } @@ -225,8 +231,10 @@ foreach($search as $key => $val) if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all); if ($search_fk_soc) $sql.= natural_search('fk_soc', $search_fk_soc, 2); if ($search_fk_project) $sql.= natural_search('fk_project', $search_fk_project, 2); -if (!$user->societe_id && ($mode == "my_assign" || (!$user->admin && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY))) { - $sql.= " AND t.fk_user_assign=".$user->id; +if (! $user->societe_id && ($mode == "mine" || (!$user->admin && $conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY))) { + $sql.= " AND (t.fk_user_assign = ".$user->id; + if (empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY)) $sql.=" OR t.fk_user_create = ".$user->id; + $sql.=")"; } // Add where from extra fields @@ -461,7 +469,7 @@ if ($user->rights->ticket->write) print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_ticket', 0, $newcardbutton, '', $limit); -if ($mode == 'my_assign') { +if ($mode == 'mine') { print '
' . $langs->trans('TicketAssignedToMeInfos') . '

'; } // Add code for pre mass action (confirmation or email presend form) @@ -477,17 +485,6 @@ if ($sall) print '
'.$langs->trans("FilterOnInto", $sall) . join(', ', $fieldstosearchall).'
'; } -print '
'; -if ($search_fk_status == 'non_closed') { - print '
' . $langs->trans('TicketViewAllTickets') . '
'; - $param .= '&search_fk_status=non_closed'; -} else { - print '
' . $langs->trans('TicketViewNonClosedOnly') . '
'; - $param .= '&search_fk_status=-1'; -} -print '
'; - - $moreforfilter = ''; /*$moreforfilter.='
'; $moreforfilter.= $langs->trans('MyFilter') . ': '; @@ -525,19 +522,31 @@ foreach($object->fields as $key => $val) if (! empty($arrayfields['t.'.$key]['checked'])) { if ($key == 'type_code') { print ''; - $formTicket->selectTypesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200')); + $formTicket->selectTypesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth150')); print ''; } elseif ($key == 'category_code') { print ''; - $formTicket->selectAnalyticCodesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200')); + $formTicket->selectGroupTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth150')); print ''; } elseif ($key == 'severity_code') { print ''; - $formTicket->selectSeveritiesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200')); + $formTicket->selectSeveritiesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth150')); print ''; + } elseif ($key == 'fk_user_assign') { + print ''; + print $form->select_dolusers($search[$key], 'search_'.$key, 1, null, 0, '', '', '0', 0, 0, '', 0, '', ($val['css']?$val['css']:'maxwidth150')); + print ''; } elseif ($key == 'fk_statut') { - print ''; - print Form::multiselectarray('search_fk_statut', $object->statuts_short, $search[$key], 0, 0, '', 1, 0, '', '', ''); + $arrayofstatus = array(); + $arrayofstatus['openall']='-- '.$langs->trans('OpenAll').' --'; + foreach ($object->statuts_short as $key2 => $val2) + { + $arrayofstatus[$key2] = $val2; + if ($key2 == '6') $arrayofstatus['closeall']='-- '.$langs->trans('ClosedAll').' --'; + } + print ''; + //var_dump($arrayofstatus);var_dump($search['fk_statut']);var_dump(array_values($search[$key])); + print Form::multiselectarray('search_fk_statut', $arrayofstatus, array_values($search[$key]), 0, 0, 'minwidth150', 1, 0, '', '', ''); print ''; } else { @@ -610,6 +619,7 @@ while ($i < min($num, $limit)) { if (isset($obj->$key)) $object->$key = $obj->$key; } + $langs->load("ticket"); // Show here line of result print ''; @@ -629,7 +639,8 @@ while ($i < min($num, $limit)) print $val['css']; if ($cssforfield || $val['css']) print '"'; print '>'; - print $object->showOutputField($val, $key, $obj->$key, ''); + if ($key == 'fk_statut') print $object->getLibStatut(5); + else print $object->showOutputField($val, $key, $obj->$key, ''); print ''; if (! $i) $totalarray['nbfield']++; if (! empty($val['isameasure']))