dolibarr 21.0.0-alpha
agenda.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
4 * Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26require "../main.inc.php";
27require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
28require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
31require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
32if (isModEnabled('project')) {
33 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
35}
36
37// Load translation files required by the page
38$langs->loadLangs(array("companies", "contracts"));
39
40$action = GETPOST('action', 'alpha');
41$confirm = GETPOST('confirm', 'alpha');
42$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'contratagenda';
43
44if (GETPOST('actioncode', 'array')) {
45 $actioncode = GETPOST('actioncode', 'array', 3);
46 if (!count($actioncode)) {
47 $actioncode = '0';
48 }
49} else {
50 $actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT'));
51}
52
53$search_rowid = GETPOST('search_rowid');
54$search_agenda_label = GETPOST('search_agenda_label');
55
56$id = GETPOSTINT('id');
57$ref = GETPOST('ref', 'alpha');
58
59// Security check
60if ($user->socid) {
61 $socid = $user->socid;
62}
63
64// Security check
65$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
66$fieldtype = (!empty($id) ? 'rowid' : 'ref');
67$result = restrictedArea($user, 'contrat', $fieldvalue, '', '', '', $fieldtype);
68
69$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
70$sortfield = GETPOST('sortfield', 'aZ09comma');
71$sortorder = GETPOST('sortorder', 'aZ09comma');
72$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
73if (empty($page) || $page == -1) {
74 $page = 0;
75} // If $page is not defined, or '' or -1
76$offset = $limit * $page;
77$pageprev = $page - 1;
78$pagenext = $page + 1;
79if (!$sortfield) {
80 $sortfield = 'a.datep,a.id';
81}
82if (!$sortorder) {
83 $sortorder = 'DESC,DESC';
84}
85
86
87$object = new Contrat($db);
88if ($id > 0 || !empty($ref)) {
89 $result = $object->fetch($id, $ref);
90}
91
92// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
93$hookmanager->initHooks(array('agendacontract', 'globalcard'));
94
95$permissiontoadd = $user->hasRight('contrat', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
96
97$result = restrictedArea($user, 'contrat', $object->id);
98
99
100/*
101 * Actions
102 */
103
104$parameters = array('id' => $id, 'ref' => $ref);
105$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
106if ($reshook < 0) {
107 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
108}
109
110if (empty($reshook)) {
111 // Cancel
112 if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
113 header("Location: ".$backtopage);
114 exit;
115 }
116
117 // Purge search criteria
118 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
119 $actioncode = '';
120 $search_agenda_label = '';
121 }
122}
123
124
125/*
126 * View
127 */
128
129$form = new Form($db);
130$formfile = new FormFile($db);
131if (isModEnabled('project')) {
132 $formproject = new FormProjets($db);
133}
134
135if ($object->id > 0) {
136 // Load object modContract
137 $module = (getDolGlobalString('CONTRACT_ADDON') ? $conf->global->CONTRACT_ADDON : 'mod_contract_serpis');
138 if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') {
139 $module = substr($module, 0, dol_strlen($module) - 4);
140 }
141 $result = dol_include_once('/core/modules/contract/'.$module.'.php');
142 if ($result > 0) {
143 $modCodeContract = new $module();
144 }
145
146 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
147 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
148
149 $object->fetch_thirdparty();
150
151 $title = $langs->trans("Agenda");
152 if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/contractrefonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $object->ref) {
153 $title = $object->ref." - ".$title;
154 }
155 $help_url = 'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
156
157 llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-contrat page-card_agenda');
158
159 if (isModEnabled('notification')) {
160 $langs->load("mails");
161 }
162 $head = contract_prepare_head($object);
163
164 print dol_get_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract');
165
166 $linkback = '<a href="'.DOL_URL_ROOT.'/contrat/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
167
168 $morehtmlref = '';
169 if (!empty($modCodeContract->code_auto)) {
170 $morehtmlref .= $object->ref;
171 } else {
172 $morehtmlref .= $form->editfieldkey("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 3);
173 $morehtmlref .= $form->editfieldval("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 2);
174 }
175
176 $permtoedit = 0;
177
178 $morehtmlref .= '<div class="refidno">';
179 // Ref customer
180 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', 0, 1);
181 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedCustomerRef');
182 // Ref supplier
183 $morehtmlref .= '<br>';
184 $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1);
185 $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef');
186 // Thirdparty
187 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
188 if (!getDolGlobalString('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
189 $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/contrat/list.php?socid='.$object->thirdparty->id.'&search_name='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherContracts").'</a>)';
190 }
191 // Project
192 if (isModEnabled('project')) {
193 $langs->load("projects");
194 $morehtmlref .= '<br>';
195 if (0) {
196 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
197 if ($action != 'classify') {
198 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
199 }
200 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
201 } else {
202 if (!empty($object->fk_project)) {
203 $proj = new Project($db);
204 $proj->fetch($object->fk_project);
205 $morehtmlref .= $proj->getNomUrl(1);
206 if ($proj->title) {
207 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
208 }
209 }
210 }
211 }
212 $morehtmlref .= '</div>';
213
214 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref);
215
216 print '<div class="fichecenter">';
217
218 print '<div class="underbanner clearboth"></div>';
219
220 $object->info($object->id);
221 dol_print_object_info($object, 1);
222
223 print '</div>';
224
225 print dol_get_fiche_end();
226
227
228 // Actions buttons
229
230 /*$objthirdparty=$object;
231 $objcon=new stdClass();
232
233 $out='';
234 $permok=$user->rights->agenda->myactions->create;
235 if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
236 {
237 //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
238 if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id;
239 $out.=(!empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1';
240 //$out.=$langs->trans("AddAnAction").' ';
241 //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
242 //$out.="</a>";
243 }*/
244
245
246 //print '<div class="tabsAction">';
247 //print '</div>';
248
249
250 $newcardbutton = '';
251 if (isModEnabled('agenda')) {
252 if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
253 $backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
254 $out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
255 $messagingUrl = DOL_URL_ROOT.'/contrat/messaging.php?id='.$object->id;
256 $newcardbutton .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1);
257 $messagingUrl = DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id;
258 $newcardbutton .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2);
259 $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
260 }
261 }
262
263 if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) {
264 print '<br>';
265
266 $param = '&id='.$object->id;
267 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
268 $param .= '&contextpage='.$contextpage;
269 }
270 if ($limit > 0 && $limit != $conf->liste_limit) {
271 $param .= '&limit='.$limit;
272 }
273
274 // Try to know count of actioncomm from cache
275 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
276 $cachekey = 'count_events_thirdparty_'.$object->id;
277 $nbEvent = dol_getcache($cachekey);
278
279 print_barre_liste($langs->trans("ActionsOnContract"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 0);
280
281 // List of all actions
282 $filters = array();
283 $filters['search_agenda_label'] = $search_agenda_label;
284 $filters['search_rowid'] = $search_rowid;
285
286 // TODO Replace this with same code than into list.php
287 show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);
288 }
289}
290
291llxFooter();
292$db->close();
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
Class to manage contracts.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class to manage projects.
show_actions_done($conf, $langs, $db, $filterobj, $objcon=null, $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC', $module='')
Show html area with actions (done or not, ignore the name of function).
contract_prepare_head(Contrat $object)
Prepare array with list of tabs.
llxFooter()
Footer empty.
Definition document.php:107
dol_print_object_info($object, $usetable=0)
Show information on an object TODO Move this into html.formother.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_getcache($memoryid)
Read a memory area shared by all users, all sessions on server.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.