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