1<?php 2/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net> 3 * Copyright (C) ---Put here your own copyright and developer email--- 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <https://www.gnu.org/licenses/>. 17 */ 18 19/** 20 * \file mo_agenda.php 21 * \ingroup mrp 22 * \brief Page of Mo events 23 */ 24 25// Load Dolibarr environment 26require '../main.inc.php'; 27 28require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; 29require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; 30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; 31require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; 32require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; 33dol_include_once('/mrp/class/mo.class.php'); 34dol_include_once('/mrp/lib/mrp_mo.lib.php'); 35 36 37// Load translation files required by the page 38$langs->loadLangs(array("mrp", "other")); 39 40// Get parameters 41$id = GETPOST('id', 'int'); 42$ref = GETPOST('ref', 'alpha'); 43$action = GETPOST('action', 'aZ09'); 44$cancel = GETPOST('cancel', 'aZ09'); 45$backtopage = GETPOST('backtopage', 'alpha'); 46 47if (GETPOST('actioncode', 'array')) { 48 $actioncode = GETPOST('actioncode', 'array', 3); 49 if (!count($actioncode)) { 50 $actioncode = '0'; 51 } 52} else { 53 $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)); 54} 55$search_agenda_label = GETPOST('search_agenda_label'); 56 57$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit; 58$sortfield = GETPOST("sortfield", 'alpha'); 59$sortorder = GETPOST("sortorder", 'alpha'); 60$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); 61if (empty($page) || $page == -1) { 62 $page = 0; 63} // If $page is not defined, or '' or -1 64$offset = $limit * $page; 65$pageprev = $page - 1; 66$pagenext = $page + 1; 67if (!$sortfield) { 68 $sortfield = 'a.datep,a.id'; 69} 70if (!$sortorder) { 71 $sortorder = 'DESC'; 72} 73 74// Initialize technical objects 75$object = new Mo($db); 76$extrafields = new ExtraFields($db); 77$diroutputmassaction = $conf->mrp->dir_output.'/temp/massgeneration/'.$user->id; 78$hookmanager->initHooks(array('moagenda', 'globalcard')); // Note that conf->hooks_modules contains array 79 80// Fetch optionals attributes and labels 81$extrafields->fetch_name_optionals_label($object->table_element); 82 83// Load object 84include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals 85if ($id > 0 || !empty($ref)) { 86 $upload_dir = $conf->mrp->multidir_output[$object->entity]."/".$object->id; 87} 88 89// Security check - Protection if external user 90//if ($user->socid > 0) accessforbidden(); 91//if ($user->socid > 0) $socid = $user->socid; 92$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0); 93$result = restrictedArea($user, 'mrp', $object->id, 'mrp_mo', '', 'fk_soc', 'rowid', $isdraft); 94 95 96/* 97 * Actions 98 */ 99 100$parameters = array('id'=>$socid); 101$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks 102if ($reshook < 0) { 103 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); 104} 105 106if (empty($reshook)) { 107 // Cancel 108 if (GETPOST('cancel', 'alpha') && !empty($backtopage)) { 109 header("Location: ".$backtopage); 110 exit; 111 } 112 113 // Purge search criteria 114 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 115 $actioncode = ''; 116 $search_agenda_label = ''; 117 } 118} 119 120 121 122/* 123 * View 124 */ 125 126$contactstatic = new Contact($db); 127 128$form = new Form($db); 129$formproject = new FormProjets($db); 130 131if ($object->id > 0) { 132 $title = $langs->trans("Agenda"); 133 //if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title; 134 $help_url = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Agenda'; 135 llxHeader('', $title, $help_url); 136 137 if (!empty($conf->notification->enabled)) { 138 $langs->load("mails"); 139 } 140 $head = moPrepareHead($object); 141 142 143 print dol_get_fiche_head($head, 'agenda', $langs->trans("ManufacturingOrder"), -1, $object->picto); 144 145 // Object card 146 // ------------------------------------------------------------ 147 $linkback = '<a href="'.dol_buildpath('/mrp/mo_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>'; 148 149 $morehtmlref = '<div class="refidno">'; 150 // Ref customer 151 //$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1); 152 //$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1); 153 // Thirdparty 154 $morehtmlref .= $langs->trans('ThirdParty').' : '.(is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : ''); 155 // Project 156 if (!empty($conf->projet->enabled)) { 157 $langs->load("projects"); 158 $morehtmlref .= '<br>'.$langs->trans('Project').' '; 159 if ($permissiontoadd) { 160 if ($action != 'classify') { 161 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : '; 162 } 163 if ($action == 'classify') { 164 //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->fk_soc, $object->fk_project, 'projectid', 0, 0, 1, 1); 165 $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">'; 166 $morehtmlref .= '<input type="hidden" name="action" value="classin">'; 167 $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">'; 168 $morehtmlref .= $formproject->select_projects($object->fk_soc, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1); 169 $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">'; 170 $morehtmlref .= '</form>'; 171 } else { 172 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_soc, $object->fk_project, 'none', 0, 0, 0, 1); 173 } 174 } else { 175 if (!empty($object->fk_project)) { 176 $proj = new Project($db); 177 $proj->fetch($object->fk_project); 178 $morehtmlref .= ': '.$proj->getNomUrl(); 179 } else { 180 $morehtmlref .= ''; 181 } 182 } 183 } 184 $morehtmlref .= '</div>'; 185 186 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref); 187 188 print '<div class="fichecenter">'; 189 print '<div class="underbanner clearboth"></div>'; 190 191 $object->info($object->id); 192 dol_print_object_info($object, 1); 193 194 print '</div>'; 195 196 print dol_get_fiche_end(); 197 198 199 200 // Actions buttons 201 202 $objthirdparty = $object; 203 $objcon = new stdClass(); 204 205 $out = '&origin='.$object->element.'&originid='.$object->id; 206 $permok = $user->rights->agenda->myactions->create; 207 if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) { 208 //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'; 209 if (get_class($objthirdparty) == 'Societe') { 210 $out .= '&socid='.$objthirdparty->id; 211 } 212 $out .= (!empty($objcon->id) ? '&contactid='.$objcon->id : '').'&backtopage=1&percentage=-1'; 213 //$out.=$langs->trans("AddAnAction").' '; 214 //$out.=img_picto($langs->trans("AddAnAction"),'filenew'); 215 //$out.="</a>"; 216 } 217 218 219 print '<div class="tabsAction">'; 220 221 if (!empty($conf->agenda->enabled)) { 222 if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) { 223 print '<a class="butAction" href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'">'.$langs->trans("AddAction").'</a>'; 224 } else { 225 print '<a class="butActionRefused classfortooltip" href="#">'.$langs->trans("AddAction").'</a>'; 226 } 227 } 228 229 print '</div>'; 230 231 if (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) { 232 $param = '&id='.$object->id.'&socid='.$socid; 233 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { 234 $param .= '&contextpage='.urlencode($contextpage); 235 } 236 if ($limit > 0 && $limit != $conf->liste_limit) { 237 $param .= '&limit='.urlencode($limit); 238 } 239 240 241 //print load_fiche_titre($langs->trans("ActionsOnMo"), '', ''); 242 243 // List of all actions 244 $filters = array(); 245 $filters['search_agenda_label'] = $search_agenda_label; 246 247 // TODO Replace this with same code than into list.php 248 show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); 249 } 250} 251 252// End of page 253llxFooter(); 254$db->close(); 255