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
68// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
69$hookmanager->initHooks(array('agendacontract', 'globalcard'));
70
71$result = restrictedArea($user, 'contrat', $fieldvalue, '', '', '', $fieldtype);
72
73$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
74$sortfield = GETPOST('sortfield', 'aZ09comma');
75$sortorder = GETPOST('sortorder', 'aZ09comma');
76$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
77if (empty($page) || $page == -1) {
78 $page = 0;
79} // If $page is not defined, or '' or -1
80$offset = $limit * $page;
81$pageprev = $page - 1;
82$pagenext = $page + 1;
83if (!$sortfield) {
84 $sortfield = 'a.datep,a.id';
85}
86if (!$sortorder) {
87 $sortorder = 'DESC,DESC';
88}
89
90
91$object = new Contrat($db);
92if ($id > 0 || !empty($ref)) {
93 $result = $object->fetch($id, $ref);
94}
95
96$permissiontoadd = $user->hasRight('contrat', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
97
98$result = restrictedArea($user, 'contrat', $object->id);
99
100
101/*
102 * Actions
103 */
104
105$parameters = array('id' => $id, 'ref' => $ref);
106$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
107if ($reshook < 0) {
108 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
109}
110
111if (empty($reshook)) {
112 // Cancel
113 if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
114 header("Location: ".$backtopage);
115 exit;
116 }
117
118 // Purge search criteria
119 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
120 $actioncode = '';
121 $search_agenda_label = '';
122 }
123}
124
125
126/*
127 * View
128 */
129
130$form = new Form($db);
131$formfile = new FormFile($db);
132if (isModEnabled('project')) {
133 $formproject = new FormProjets($db);
134}
135
136if ($object->id > 0) {
137 // Load object modContract
138 $module = (getDolGlobalString('CONTRACT_ADDON') ? $conf->global->CONTRACT_ADDON : 'mod_contract_serpis');
139 if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') {
140 $module = substr($module, 0, dol_strlen($module) - 4);
141 }
142 $result = dol_include_once('/core/modules/contract/'.$module.'.php');
143 if ($result > 0) {
144 $modCodeContract = new $module();
145 }
146
147 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
148 require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
149
150 $object->fetch_thirdparty();
151
152 $title = $langs->trans("Agenda");
153 if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/contractrefonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $object->ref) {
154 $title = $object->ref." - ".$title;
155 }
156 $help_url = 'EN:Module_Contracts|FR:Module_Contrat|ES:Contratos_de_servicio';
157
158 llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-contrat page-card_agenda');
159
160 if (isModEnabled('notification')) {
161 $langs->load("mails");
162 }
163 $head = contract_prepare_head($object);
164
165 print dol_get_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract');
166
167 $linkback = '<a href="'.DOL_URL_ROOT.'/contrat/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
168
169 $morehtmlref = '';
170 if (!empty($modCodeContract->code_auto)) {
171 $morehtmlref .= $object->ref;
172 } else {
173 $morehtmlref .= $form->editfieldkey("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 3);
174 $morehtmlref .= $form->editfieldval("", 'ref', $object->ref, $object, $user->hasRight('contrat', 'creer'), 'string', '', 0, 2);
175 }
176
177 $permtoedit = 0;
178
179 $morehtmlref .= '<div class="refidno">';
180 // Ref customer
181 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', 0, 1);
182 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedCustomerRef');
183 // Ref supplier
184 $morehtmlref .= '<br>';
185 $morehtmlref .= $form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', 0, 1);
186 $morehtmlref .= $form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $permtoedit, 'string', '', null, null, '', 1, 'getFormatedSupplierRef');
187 // Thirdparty
188 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
189 if (!getDolGlobalString('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
190 $morehtmlref .= ' (<a href="'.DOL_URL_ROOT.'/contrat/list.php?socid='.$object->thirdparty->id.'&search_name='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherContracts").'</a>)';
191 }
192 // Project
193 if (isModEnabled('project')) {
194 $langs->load("projects");
195 $morehtmlref .= '<br>';
196 if (0) {
197 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
198 if ($action != 'classify') {
199 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
200 }
201 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
202 } else {
203 if (!empty($object->fk_project)) {
204 $proj = new Project($db);
205 $proj->fetch($object->fk_project);
206 $morehtmlref .= $proj->getNomUrl(1);
207 if ($proj->title) {
208 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
209 }
210 }
211 }
212 }
213 $morehtmlref .= '</div>';
214
215 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref);
216
217 print '<div class="fichecenter">';
218
219 print '<div class="underbanner clearboth"></div>';
220
221 $object->info($object->id);
222 dol_print_object_info($object, 1);
223
224 print '</div>';
225
226 print dol_get_fiche_end();
227
228
229 // Actions buttons
230
231 /*$objthirdparty=$object;
232 $objcon=new stdClass();
233
234 $out='';
235 $permok=$user->rights->agenda->myactions->create;
236 if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)
237 {
238 //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
239 if (get_class($objthirdparty) == 'Societe') $out.='&amp;socid='.$objthirdparty->id;
240 $out.=(!empty($objcon->id)?'&amp;contactid='.$objcon->id:'').'&amp;backtopage=1';
241 //$out.=$langs->trans("AddAnAction").' ';
242 //$out.=img_picto($langs->trans("AddAnAction"),'filenew');
243 //$out.="</a>";
244 }*/
245
246
247 //print '<div class="tabsAction">';
248 //print '</div>';
249
250
251 $newcardbutton = '';
252 if (isModEnabled('agenda')) {
253 if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
254 $backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
255 $out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
256 $messagingUrl = DOL_URL_ROOT.'/contrat/messaging.php?id='.$object->id;
257 $newcardbutton .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1);
258 $messagingUrl = DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id;
259 $newcardbutton .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2);
260 $newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
261 }
262 }
263
264 if (isModEnabled('agenda') && ($user->hasRight('agenda', 'myactions', 'read') || $user->hasRight('agenda', 'allactions', 'read'))) {
265 print '<br>';
266
267 $param = '&id='.$object->id;
268 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
269 $param .= '&contextpage='.$contextpage;
270 }
271 if ($limit > 0 && $limit != $conf->liste_limit) {
272 $param .= '&limit='.$limit;
273 }
274
275 // Try to know count of actioncomm from cache
276 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
277 $cachekey = 'count_events_thirdparty_'.$object->id;
278 $nbEvent = dol_getcache($cachekey);
279
280 $titlelist = $langs->trans("ActionsOnContract").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>' : '');
281 if (!empty($conf->dol_optimize_smallscreen)) {
282 $titlelist = $langs->trans("Actions").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>' : '');
283 }
284
285 print_barre_liste($titlelist, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 0);
286
287 // List of all actions
288 $filters = array();
289 $filters['search_agenda_label'] = $search_agenda_label;
290 $filters['search_rowid'] = $search_rowid;
291
292 // TODO Replace this with same code than into list.php
293 show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder);
294 }
295}
296
297llxFooter();
298$db->close();
$id
Definition account.php:39
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 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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
getDolGlobalString($key, $default='')
Return a 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.