dolibarr 19.0.4
workstation_card.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
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
25// Load Dolibarr environment
26require '../main.inc.php';
27require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
28require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
29require_once DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php';
30require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
31require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php';
32require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstationusergroup.class.php';
33require_once DOL_DOCUMENT_ROOT.'/workstation/lib/workstation_workstation.lib.php';
34
35global $conf, $db, $hookmanager, $langs, $user;
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$confirm = GETPOST('confirm', 'alpha');
45$cancel = GETPOST('cancel', 'aZ09');
46$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
47$backtopage = GETPOST('backtopage', 'alpha');
48$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
49$backtopagejsfields = GETPOST('backtopagejsfields', 'alpha');
50$dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09');
51
52if (!empty($backtopagejsfields)) {
53 $tmpbacktopagejsfields = explode(':', $backtopagejsfields);
54 $dol_openinpopup = $tmpbacktopagejsfields[0];
55}
56
57$groups = GETPOST('groups', 'array:int');
58$resources = GETPOST('resources', 'array:int');
59//$lineid = GETPOST('lineid', 'int');
60
61// Initialize technical objects
62$object = new Workstation($db);
63
64//$extrafields = new ExtraFields($db);
65$diroutputmassaction = $conf->workstation->dir_output.'/temp/massgeneration/'.$user->id;
66$hookmanager->initHooks(array($object->element.'card', 'globalcard')); // Note that conf->hooks_modules contains array
67
68// Fetch optionals attributes and labels
69$extrafields->fetch_name_optionals_label($object->table_element);
70
71$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
72
73// Initialize array of search criterias
74$search_all = trim(GETPOST("search_all", 'alpha'));
75$search = array();
76foreach ($object->fields as $key => $val) {
77 if (GETPOST('search_'.$key, 'alpha')) {
78 $search[$key] = GETPOST('search_'.$key, 'alpha');
79 }
80}
81
82if (empty($action) && empty($id) && empty($ref)) {
83 $action = 'view';
84}
85
86// Load object
87include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
88
89// Permissions
90$permissiontoread = $user->hasRight('workstation', 'workstation', 'read');
91$permissiontoadd = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
92$permissiontodelete = $user->hasRight('workstation', 'workstation', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DISABLED);
93$permissionnote = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_setnotes.inc.php
94$permissiondellink = $user->hasRight('workstation', 'workstation', 'write'); // Used by the include of actions_dellink.inc.php
95
96$upload_dir = $conf->workstation->multidir_output[isset($object->entity) ? $object->entity : 1];
97
98// Security check
99$isdraft = 0;
100restrictedArea($user, $object->element, $object->id, $object->table_element, 'workstation', 'fk_soc', 'rowid', $isdraft);
101
102
103/*
104 * Actions
105 */
106
107$parameters = array();
108$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
109if ($reshook < 0) {
110 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
111}
112
113if (empty($reshook)) {
114 $error = 0;
115
116 $backurlforlist = dol_buildpath('/workstation/workstation_list.php', 1);
117
118 if (empty($backtopage) || ($cancel && empty($id))) {
119 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
120 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
121 $backtopage = $backurlforlist;
122 } else {
123 $backtopage = dol_buildpath('/workstation/workstation_card.php', 1).'?id='.($id > 0 ? $id : '__ID__');
124 }
125 }
126 }
127
128 $triggermodname = 'WORKSTATION_WORKSTATION_MODIFY'; // Name of trigger action code to execute when we modify record
129
130 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
131 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
132
133 // Actions when linking object each other
134 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
135
136 // Actions when printing a doc from card
137 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
138
139 // Action to move up and down lines of object
140 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
141
142 // Action to build doc
143 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
144
145 if ($action == 'confirm_enable' && $confirm == "yes" && $permissiontoadd) {
146 if (!empty($object->id)) {
147 $object->setStatus(1);
148 }
149 } elseif ($action == 'confirm_disable' && $confirm == "yes" && $permissiontoadd) {
150 if (!empty($object->id)) {
151 $object->setStatus(0);
152 }
153 }
154}
155
156
157
158/*
159 * View
160 */
161
162$form = new Form($db);
163$formfile = new FormFile($db);
164$formresource = new FormResource($db);
165
166$title = $langs->trans("Workstation")." - ".$langs->trans('Card');
167if ($action == 'create') {
168 $title = $langs->trans("NewObject", $langs->transnoentitiesnoconv("Workstation"));
169}
170$help_url = 'EN:Module_Workstation';
171
172llxHeader('', $title, $help_url);
173
174// jquery code
175?>
176 <script>
177
178 jQuery(document).ready(function() {
179 jQuery("#type").change(function() {
180 if($(this).val() === 'MACHINE') {
181 $('#usergroups').hide();
182 $('#nb_operators_required').parent('td').parent('tr').hide();
183 $('#wsresources').show();
184 } else if($(this).val() === 'HUMAN') {
185 $('#wsresources').hide();
186 $('#nb_operators_required').parent('td').parent('tr').show();
187 $('#usergroups').show();
188 }
189 else {
190 $('#usergroups').show();
191 $('#wsresources').show();
192 $('#nb_operators_required').parent('td').parent('tr').show();
193 }
194 });
195 jQuery("#type").trigger('change');
196 });
197
198 </script>
199<?php
200
201// Part to create
202if ($action == 'create') {
203 if (empty($permissiontoadd)) {
204 accessforbidden('NotEnoughPermissions', 0, 1);
205 }
206
207 // Set default value of the property ref
208 $object->fields['ref']['default'] = $object->getNextNumRef();
209
210 print load_fiche_titre($title, '', 'object_'.$object->picto);
211
212 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
213 print '<input type="hidden" name="token" value="'.newToken().'">';
214 print '<input type="hidden" name="action" value="add">';
215 if ($backtopage) {
216 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
217 }
218 if ($backtopageforcancel) {
219 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
220 }
221
222 print dol_get_fiche_head(array(), '');
223
224 print '<table class="border centpercent tableforfieldcreate">'."\n";
225
226 // Common attributes
227 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
228
229 print '<tr id="usergroups"';
230 print ' ><td>';
231 print $langs->trans('Groups');
232 print '</td>';
233 print '<td>';
234 print img_picto('', 'group');
235 print $form->select_dolgroups($groups, 'groups', 1, '', 0, '', '', $object->entity, true, 'quatrevingtpercent widthcentpercentminusx');
236 print '</td></tr>';
237
238 print '<tr id="wsresources"><td>';
239 print $langs->trans('Machines');
240 print '</td>';
241 print '<td>';
242 print img_picto('', 'resource');
243 print $formresource->select_resource_list($resources, 'resources', '', '', 0, '', '', $object->entity, true, 0, 'quatrevingtpercent widthcentpercentminusx', true);
244 print '</td></tr>';
245
246 // Other attributes
247 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
248
249 print '</table>'."\n";
250
251 print dol_get_fiche_end();
252
253 print $form->buttonsSaveCancel("Create");
254
255 print '</form>';
256
257 //dol_set_focus('input[name="ref"]');
258}
259
260// Part to edit record
261if (($id || $ref) && $action == 'edit') {
262 print load_fiche_titre($langs->trans("Workstation"), '', 'object_'.$object->picto);
263
264 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
265 print '<input type="hidden" name="token" value="'.newToken().'">';
266 print '<input type="hidden" name="action" value="update">';
267 print '<input type="hidden" name="id" value="'.$object->id.'">';
268 if ($backtopage) {
269 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
270 }
271 if ($backtopageforcancel) {
272 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
273 }
274
275 print dol_get_fiche_head();
276
277 print '<table class="border centpercent tableforfieldedit">'."\n";
278
279 // Common attributes
280 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
281
282 print '<tr id="usergroups"';
283 print '><td>';
284 print $langs->trans('Groups');
285 print '</td>';
286 print '<td>';
287 print img_picto('', 'group');
288 print $form->select_dolgroups(empty($groups) ? $object->usergroups : $groups, 'groups', 1, '', 0, '', '', $object->entity, true, 'quatrevingtpercent widthcentpercentminusx');
289 print '</td></tr>';
290
291 print '<tr id="wsresources"><td>';
292 print $langs->trans('Machines');
293 print '</td>';
294 print '<td>';
295 print img_picto('', 'resource');
296 print $formresource->select_resource_list(empty($resources) ? $object->resources : $resources, 'resources', '', '', 0, '', '', $object->entity, true, 0, 'quatrevingtpercent widthcentpercentminusx', true);
297 print '</td></tr>';
298
299 // Other attributes
300 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
301
302 print '</table>';
303
304 print dol_get_fiche_end();
305
306 print $form->buttonsSaveCancel();
307
308 print '</form>';
309}
310
311// Part to show record
312if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
313 $head = workstationPrepareHead($object);
314
315 print dol_get_fiche_head($head, 'card', $langs->trans("Workstation"), -1, $object->picto);
316
317 $formconfirm = '';
318
319 // Confirmation to delete (using preloaded confirm popup)
320 if ($action == 'delete' || ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile))) {
321 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteWorkstation'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 'action-delete');
322 }
323 // Clone confirmation
324 if ($action == 'clone') {
325 // Create an array for form
326 $formquestion = array();
327 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
328 }
329
330 // Confirmation of action xxxx
331 if ($action == 'enable') {
332 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('EnableAWorkstation'), $langs->trans("ConfirmEnableWorkstation", $object->ref), 'confirm_enable', $formquestion, 0, 1, 220);
333 } elseif ($action == 'disable') {
334 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DisableAWorkstation'), $langs->trans("ConfirmDisableWorkstation", $object->ref), 'confirm_disable', $formquestion, 0, 1, 220);
335 }
336
337 // Call Hook formConfirm
338 $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
339 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
340 if (empty($reshook)) {
341 $formconfirm .= $hookmanager->resPrint;
342 } elseif ($reshook > 0) {
343 $formconfirm = $hookmanager->resPrint;
344 }
345
346 // Print form confirm
347 print $formconfirm;
348
349
350 // Object card
351 // ------------------------------------------------------------
352 $linkback = '<a href="'.dol_buildpath('/workstation/workstation_list.php', 1).'?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
353
354 $morehtmlref = '<div class="refidno">';
355 /*
356 // Ref customer
357 $morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
358 $morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
359 // Thirdparty
360 $morehtmlref .= '<br>'.$langs->trans('ThirdParty') . ' : ' . (is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : '');
361 // Project
362 if (isModEnabled('project')) {
363 $langs->load("projects");
364 $morehtmlref .= '<br>';
365 if ($permissiontoadd) {
366 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
367 if ($action != 'classify') {
368 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
369 }
370 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
371 } else {
372 if (!empty($object->fk_project)) {
373 $proj = new Project($db);
374 $proj->fetch($object->fk_project);
375 $morehtmlref .= $proj->getNomUrl(1);
376 if ($proj->title) {
377 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
378 }
379 }
380 }
381 }
382 }
383 */
384 $morehtmlref .= '</div>';
385
386
387 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
388
389
390 print '<div class="fichecenter">';
391 print '<div class="fichehalfleft">';
392 print '<div class="underbanner clearboth"></div>';
393 print '<table class="border centpercent tableforfield">'."\n";
394
395 // Common attributes
396 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
397 //unset($object->fields['fk_project']); // Hide field already shown in banner
398 //unset($object->fields['fk_soc']); // Hide field already shown in banner
399 if ($object->type === 'MACHINE') {
400 $object->fields['nb_operators_required']['visible'] = 0;
401 }
402
403 // Common attributes
404 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
405 //unset($object->fields['fk_project']); // Hide field already shown in banner
406 //unset($object->fields['fk_soc']); // Hide field already shown in banner
407 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
408
409 // Groups
410 if ($object->type !== 'MACHINE') {
411 $toprint = array();
412 $g = new UserGroup($db);
413 foreach ($object->usergroups as $id_group) {
414 $g->fetch($id_group);
415 $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #bbb">' . $g->getNomUrl(1, '', 0, 'categtextwhite') . '</li>';
416 }
417
418 print '<tr><td>' . $langs->trans('Groups') . '</td><td>';
419 print '<div class="select2-container-multi-dolibarr"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
420 print '</td></tr>';
421 }
422
423 // Resources
424 if ($object->type !== 'HUMAN') {
425 $toprint = array();
426 $r = new Dolresource($db);
427 foreach ($object->resources as $id_resource) {
428 $r->fetch($id_resource);
429 $toprint[] = '<li class="select2-search-choice-dolibarr noborderoncategories" style="background: #bbb">' . $r->getNomUrl(1, '', '', 0, 'categtextwhite') . '</li>';
430 }
431
432 print '<tr><td>' . $langs->trans('Machines') . '</td><td>';
433 print '<div class="select2-container-multi-dolibarr"><ul class="select2-choices-dolibarr">' . implode(' ', $toprint) . '</ul></div>';
434 print '</td></tr>';
435 }
436
437 // Other attributes. Fields from hook formObjectOptions and Extrafields.
438 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
439
440 print '</table>';
441 print '</div>';
442 print '</div>';
443
444 print '<div class="clearboth"></div>';
445
446 print dol_get_fiche_end();
447
448
449 // Buttons for actions
450
451 if ($action != 'presend' && $action != 'editline') {
452 print '<div class="tabsAction">'."\n";
453 $parameters = array();
454 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
455 if ($reshook < 0) {
456 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
457 }
458
459 if (empty($reshook)) {
460 // Modify
461 print dolGetButtonAction('', $langs->trans('Modify'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
462
463 // Clone
464 if ($permissiontoadd) {
465 print dolGetButtonAction('', $langs->trans('ToClone'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.(!empty($object->socid) ? '&socid='.$object->socid : '').'&action=clone&token='.newToken(), '', $permissiontoadd);
466 }
467
468 // Disable / Enable
469 if ($permissiontoadd) {
470 if ($object->status == $object::STATUS_ENABLED) {
471 print dolGetButtonAction('', $langs->trans('Disable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=disable&token='.newToken(), '', $permissiontoadd);
472 } else {
473 print dolGetButtonAction('', $langs->trans('Enable'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=enable&token='.newToken(), '', $permissiontoadd);
474 }
475 }
476
477 // Delete (with preloaded confirm popup)
478 $deleteUrl = $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken();
479 $buttonId = 'action-delete-no-ajax';
480 if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) { // We can use preloaded confirm if not jmobile
481 $deleteUrl = '';
482 $buttonId = 'action-delete';
483 }
484 $params = array();
485 print dolGetButtonAction('', $langs->trans("Delete"), 'delete', $deleteUrl, $buttonId, $permissiontodelete, $params);
486 }
487 print '</div>'."\n";
488 }
489}
490
491// End of page
492llxFooter();
493$db->close();
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
DAO Resource object.
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 forms for the module resource.
Class to manage user groups.
Class for Workstation.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
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.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
workstationPrepareHead($object)
Prepare array of tabs for Workstation.