dolibarr 18.0.6
recruitmentcandidature_card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2020 Laurent Destailleur <eldy@users.sourceforge.net>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17
24// Load Dolibarr environment
25require_once '../main.inc.php';
26require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
27require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
28require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
29require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
30require_once DOL_DOCUMENT_ROOT.'/recruitment/class/recruitmentjobposition.class.php';
31require_once DOL_DOCUMENT_ROOT.'/recruitment/class/recruitmentcandidature.class.php';
32require_once DOL_DOCUMENT_ROOT.'/recruitment/lib/recruitment_recruitmentcandidature.lib.php';
33
34// Load translation files required by the page
35$langs->loadLangs(array("recruitment", "other", "users"));
36
37// Get parameters
38$id = GETPOST('id', 'int');
39$ref = GETPOST('ref', 'alpha');
40$action = GETPOST('action', 'aZ09');
41$confirm = GETPOST('confirm', 'alpha');
42$cancel = GETPOST('cancel', 'aZ09');
43$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'recruitmentcandidaturecard'; // To manage different context of search
44$backtopage = GETPOST('backtopage', 'alpha');
45$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
46$lineid = GETPOST('lineid', 'int');
47
48// Initialize technical objects
49$object = new RecruitmentCandidature($db);
50$extrafields = new ExtraFields($db);
51$diroutputmassaction = $conf->recruitment->dir_output.'/temp/massgeneration/'.$user->id;
52$hookmanager->initHooks(array('recruitmentcandidaturecard', 'globalcard')); // Note that conf->hooks_modules contains array
53
54// Fetch optionals attributes and labels
55$extrafields->fetch_name_optionals_label($object->table_element);
56
57$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
58
59// Initialize array of search criterias
60$search_all = GETPOST("search_all", 'alpha');
61$search = array();
62foreach ($object->fields as $key => $val) {
63 if (GETPOST('search_'.$key, 'alpha')) {
64 $search[$key] = GETPOST('search_'.$key, 'alpha');
65 }
66}
67
68if (empty($action) && empty($id) && empty($ref)) {
69 $action = 'create';
70}
71
72// Load object
73include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
74
75
76$permissiontoread = $user->hasRight('recruitment', 'recruitmentjobposition', 'read');
77$permissiontoadd = $user->hasRight('recruitment', 'recruitmentjobposition', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
78$permissiontodelete = $user->hasRight('recruitment', 'recruitmentjobposition', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
79$permissionnote = $user->hasRight('recruitment', 'recruitmentjobposition', 'write'); // Used by the include of actions_setnotes.inc.php
80$permissiondellink = $user->hasRight('recruitment', 'recruitmentjobposition', 'write'); // Used by the include of actions_dellink.inc.php
81$upload_dir = $conf->recruitment->multidir_output[isset($object->entity) ? $object->entity : 1];
82
83// Security check - Protection if external user
84//if ($user->socid > 0) accessforbidden();
85//if ($user->socid > 0) $socid = $user->socid;
86$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
87$result = restrictedArea($user, 'recruitment', $object->id, 'recruitment_recruitmentcandidature', 'recruitmentjobposition', '', 'rowid', $isdraft);
88
89
90/*
91 * Actions
92 */
93
94$parameters = array();
95$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
96if ($reshook < 0) {
97 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
98}
99
100if (empty($reshook)) {
101 $error = 0;
102
103 $backurlforlist = dol_buildpath('/recruitment/recruitmentcandidature_list.php', 1);
104
105 if (empty($backtopage) || ($cancel && empty($id))) {
106 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
107 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
108 $backtopage = $backurlforlist;
109 } else {
110 $backtopage = dol_buildpath('/recruitment/recruitmentcandidature_card.php', 1).'?id='.($id > 0 ? $id : '__ID__');
111 }
112 }
113 }
114 $triggermodname = 'RECRUITMENTCANDIDATURE_MODIFY'; // Name of trigger action code to execute when we modify record
115
116 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
117 $object->email_fields_no_propagate_in_actioncomm = 1;
118 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
119 $object->email_fields_no_propagate_in_actioncomm = 0;
120
121 // Actions when linking object each other
122 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
123
124 // Actions when printing a doc from card
125 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
126
127 // Action to move up and down lines of object
128 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
129
130 // Action to build doc
131 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
132
133 if ($action == 'classin' && $permissiontoadd) {
134 $object->setProject(GETPOST('projectid', 'int'));
135 }
136 if ($action == 'confirm_decline' && $confirm == 'yes' && $permissiontoadd) {
137 $result = $object->setStatut($object::STATUS_REFUSED, null, '', $triggermodname);
138 if ($result < 0) {
139 setEventMessages($object->error, $object->errors, 'errors');
140 }
141 }
142
143 if ($action == 'confirm_makeofferordecline' && $permissiontoadd && !GETPOST('cancel', 'alpha')) {
144 if (!(GETPOST('status', 'int') > 0)) {
145 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CloseAs")), null, 'errors');
146 $action = 'makeofferordecline';
147 } else {
148 // prevent browser refresh from closing proposal several times
149 if ($object->status == $object::STATUS_VALIDATED) {
150 $db->begin();
151
152 if (GETPOST('status', 'int') == $object::STATUS_REFUSED) {
153 $result = $object->setStatut($object::STATUS_REFUSED, null, '', $triggermodname);
154 if ($result < 0) {
155 setEventMessages($object->error, $object->errors, 'errors');
156 }
157 } else {
158 $result = $object->setStatut($object::STATUS_CONTRACT_PROPOSED, null, '', $triggermodname);
159 if ($result < 0) {
160 setEventMessages($object->error, $object->errors, 'errors');
161 }
162 }
163
164 if (!$error) {
165 $db->commit();
166 } else {
167 $db->rollback();
168 }
169 }
170 }
171 }
172
173 if ($action == 'confirm_closeas' && $permissiontoadd && !GETPOST('cancel', 'alpha')) {
174 if (!(GETPOST('status', 'int') > 0)) {
175 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CloseAs")), null, 'errors');
176 $action = 'makeofferordecline';
177 } else {
178 // prevent browser refresh from closing proposal several times
179 if ($object->status == $object::STATUS_CONTRACT_PROPOSED) {
180 $db->begin();
181
182 if (GETPOST('status', 'int') == $object::STATUS_CONTRACT_REFUSED) {
183 $result = $object->setStatut($object::STATUS_CONTRACT_REFUSED, null, '', $triggermodname);
184 if ($result < 0) {
185 setEventMessages($object->error, $object->errors, 'errors');
186 }
187 } else {
188 $result = $object->setStatut($object::STATUS_CONTRACT_SIGNED, null, '', $triggermodname);
189 if ($result < 0) {
190 setEventMessages($object->error, $object->errors, 'errors');
191 }
192 }
193
194 if (!$error) {
195 $db->commit();
196 } else {
197 $db->rollback();
198 }
199 }
200 }
201 }
202
203 // Create user from a member
204 if ($action == 'confirm_create_user' && $confirm == 'yes' && $user->hasRight('user', 'user', 'creer')) {
205 $jobposition = new RecruitmentJobPosition($db);
206 $jobposition->fetch($object->fk_recruitmentjobposition);
207
208 $db->begin();
209
210 // Creation user
211 $nuser = new User($db);
212 $nuser->login = GETPOST('login', 'alphanohtml');
213 $nuser->fk_soc = 0;
214 $nuser->employee = 1;
215 $nuser->firstname = $object->firstname;
216 $nuser->lastname = $object->lastname;
217 $nuser->email = '';
218 $nuser->personal_email = $object->email;
219 $nuser->personal_mobile = $object->phone;
220 $nuser->birth = $object->date_birth;
221 $nuser->salary = $object->remuneration_proposed;
222 $nuser->fk_user = $jobposition->fk_user_supervisor; // Supervisor
223 $nuser->email = $object->email;
224
225 $result = $nuser->create($user);
226
227 if ($result < 0) {
228 $error++;
229 $langs->load("errors");
230 setEventMessages($langs->trans($nuser->error), null, 'errors');
231 $action = 'create_user';
232 } else {
233 $object->fk_user = $result;
234
235 $object->update($user);
236 }
237
238 if (!$error) {
239 $db->commit();
240
241 setEventMessages($langs->trans("NewUserCreated", $nuser->login), null, 'mesgs');
242 $action = '';
243 } else {
244 $db->rollback();
245 }
246 }
247
248 // Actions to send emails
249 $triggersendname = 'RECRUITMENTCANDIDATURE_SENTBYMAIL';
250 $autocopy = 'MAIN_MAIL_AUTOCOPY_RECRUITMENTCANDIDATURE_TO';
251 $trackid = 'recruitmentcandidature'.$object->id;
252 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
253}
254
255
256
257
258/*
259 * View
260 *
261 * Put here all code to build page
262 */
263
264$form = new Form($db);
265$formfile = new FormFile($db);
266$formproject = new FormProjets($db);
267
268if ($action == 'create') {
269 $title = $langs->trans('NewCandidature');
270 $help_url = '';
271} else {
272 $title = $object->ref." - ".$langs->trans('Card');
273 $help_url = '';
274}
275
276llxHeader('', $title, $help_url);
277
278// Part to create
279if ($action == 'create') {
280 print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("RecruitmentCandidature")), '', 'object_'.$object->picto);
281
282 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
283 print '<input type="hidden" name="token" value="'.newToken().'">';
284 print '<input type="hidden" name="action" value="add">';
285 if ($backtopage) {
286 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
287 }
288 if ($backtopageforcancel) {
289 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
290 }
291
292 print dol_get_fiche_head(array(), '');
293
294 print '<table class="border centpercent tableforfieldcreate">'."\n";
295
296 // Common attributes
297 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
298
299 // Other attributes
300 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
301
302 print '</table>'."\n";
303
304 print dol_get_fiche_end();
305
306 print $form->buttonsSaveCancel("Create");
307
308 print '</form>';
309
310 //dol_set_focus('input[name="ref"]');
311}
312
313// Part to edit record
314if (($id || $ref) && $action == 'edit') {
315 print load_fiche_titre($langs->trans("RecruitmentCandidature"), '', 'object_'.$object->picto);
316
317 print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
318 print '<input type="hidden" name="token" value="'.newToken().'">';
319 print '<input type="hidden" name="action" value="update">';
320 print '<input type="hidden" name="id" value="'.$object->id.'">';
321 if ($backtopage) {
322 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
323 }
324 if ($backtopageforcancel) {
325 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
326 }
327
328 print dol_get_fiche_head();
329
330 print '<table class="border centpercent tableforfieldedit">'."\n";
331
332 // Common attributes
333 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
334
335 // Other attributes
336 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
337
338 print '</table>';
339
340 print dol_get_fiche_end();
341
342 print $form->buttonsSaveCancel();
343
344 print '</form>';
345}
346
347// Part to show record
348if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
349 $res = $object->fetch_optionals();
350
351 $head = recruitmentcandidaturePrepareHead($object);
352 print dol_get_fiche_head($head, 'card', $langs->trans("RecruitmentCandidature"), -1, $object->picto);
353
354 $formconfirm = '';
355
356 // Confirmation to delete
357 if ($action == 'delete') {
358 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteRecruitmentCandidature'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1);
359 }
360 // Confirmation to delete line
361 if ($action == 'deleteline') {
362 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1);
363 }
364 // Clone confirmation
365 if ($action == 'clone') {
366 // Create an array for form
367 $formquestion = array();
368 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
369 }
370
371 if ($action == 'makeofferordecline') {
372 $langs->load("propal");
373
374 //Form to close proposal (signed or not)
375 $formquestion = array(
376 array('type' => 'select', 'name' => 'status', 'label' => '<span class="fieldrequired">'.$langs->trans("CloseAs").'</span>', 'values' => array($object::STATUS_CONTRACT_PROPOSED => $object->LibStatut($object::STATUS_CONTRACT_PROPOSED), $object::STATUS_REFUSED => $object->LibStatut($object::STATUS_REFUSED))),
377 array('type' => 'text', 'name' => 'note_private', 'label' => $langs->trans("Note"), 'value' => '') // Field to complete private note (not replace)
378 );
379
380 $text = '';
381
382 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('SetAcceptedRefused'), $text, 'confirm_makeofferordecline', $formquestion, '', 1, 250);
383 }
384
385 if ($action == 'closeas') {
386 $langs->load("propal");
387
388 //Form to close proposal (signed or not)
389 $formquestion = array(
390 array('type' => 'select', 'name' => 'status', 'label' => '<span class="fieldrequired">'.$langs->trans("CloseAs").'</span>', 'values' => array($object::STATUS_CONTRACT_SIGNED => $object->LibStatut($object::STATUS_CONTRACT_SIGNED), $object::STATUS_CONTRACT_REFUSED => $object->LibStatut($object::STATUS_CONTRACT_REFUSED))),
391 array('type' => 'text', 'name' => 'note_private', 'label' => $langs->trans("Note"), 'value' => '') // Field to complete private note (not replace)
392 );
393
394 $text = '';
395
396 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('SetAcceptedRefused'), $text, 'confirm_closeas', $formquestion, '', 1, 250);
397 }
398
399 // Confirm create user
400 if ($action == 'create_user') {
401 $login = (GETPOSTISSET('login') ? GETPOST('login', 'alphanohtml') : $object->login);
402 if (empty($login)) {
403 // Full firstname and name separated with a dot : firstname.name
404 include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
405 $login = dol_buildlogin($object->lastname, $object->firstname);
406 }
407 if (empty($login)) {
408 $login = strtolower(substr($object->firstname, 0, 4)).strtolower(substr($object->lastname, 0, 4));
409 }
410
411 // Create a form array
412 $formquestion = array(
413 array('label' => $langs->trans("LoginToCreate"), 'type' => 'text', 'name' => 'login', 'value' => $login)
414 );
415 $text .= $langs->trans("ConfirmCreateLogin");
416 print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("CreateDolibarrLogin"), $text, "confirm_create_user", $formquestion, 'yes');
417 }
418
419 // Call Hook formConfirm
420 $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
421 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
422 if (empty($reshook)) {
423 $formconfirm .= $hookmanager->resPrint;
424 } elseif ($reshook > 0) {
425 $formconfirm = $hookmanager->resPrint;
426 }
427
428 // Print form confirm
429 print $formconfirm;
430
431
432 // Object card
433 // ------------------------------------------------------------
434 $linkback = '<a href="'.dol_buildpath('/recruitment/recruitmentcandidature_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
435
436 $morehtmlref = '<div class="refidno">';
437 $morehtmlref.= $object->getFullName('', 1);
438 /*
439 // Ref customer
440 $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
441 $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
442 // Thirdparty
443 $morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . (is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) : '');
444 // Project
445 if (isModEnabled('project'))
446 {
447 $langs->load("projects");
448 $morehtmlref .= '<br>'.$langs->trans('Project') . ' ';
449 if ($permissiontoadd)
450 {
451 //if ($action != 'classify') $morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&token='.newToken().'&id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> ';
452 $morehtmlref .= ' : ';
453 if ($action == 'classify') {
454 //$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 0, 1, '', 'maxwidth300');
455 $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
456 $morehtmlref .= '<input type="hidden" name="action" value="classin">';
457 $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
458 $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
459 $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
460 $morehtmlref .= '</form>';
461 } else {
462 $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
463 }
464 } else {
465 if (!empty($object->fk_project)) {
466 $proj = new Project($db);
467 $proj->fetch($object->fk_project);
468 $morehtmlref .= ': '.$proj->getNomUrl();
469 } else {
470 $morehtmlref .= '';
471 }
472 }
473 }*/
474 // Author
475 if (!empty($object->email_msgid)) {
476 $morehtmlref .= '<br>'.$langs->trans("CreatedBy").' ';
477
478 if ($object->fk_user_creat > 0) {
479 $fuser = new User($db);
480 $fuser->fetch($object->fk_user_creat);
481 $morehtmlref .= $fuser->getNomUrl(-1);
482 }
483 if (!empty($object->email_msgid)) {
484 $morehtmlref .= ' <small class="hideonsmartphone opacitymedium">('.$form->textwithpicto($langs->trans("CreatedByEmailCollector"), $langs->trans("EmailMsgID").': '.$object->email_msgid).')</small>';
485 }
486 } /* elseif (!empty($object->origin_email)) {
487 $morehtmlref .= $langs->trans("CreatedBy").' : ';
488 $morehtmlref .= img_picto('', 'email', 'class="paddingrightonly"');
489 $morehtmlref .= dol_escape_htmltag($object->origin_email).' <small class="hideonsmartphone opacitymedium">('.$langs->trans("CreatedByPublicPortal").')</small>';
490 } */
491 $morehtmlref .= '</div>';
492
493
494 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
495
496
497 print '<div class="fichecenter">';
498 print '<div class="fichehalfleft">';
499 print '<div class="underbanner clearboth"></div>';
500 print '<table class="border centpercent tableforfield">'."\n";
501
502 // Common attributes
503 $keyforbreak = 'description'; // We change column just before this field
504 unset($object->fields['email']); // Hide field already shown in banner
505 //unset($object->fields['fk_soc']); // Hide field already shown in banner
506 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
507
508 // Other attributes. Fields from hook formObjectOptions and Extrafields.
509 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
510
511 print '</table>';
512 print '</div>';
513 print '</div>';
514
515 print '<div class="clearboth"></div>';
516
517 print dol_get_fiche_end();
518
519 // Buttons for actions
520
521 if ($action != 'presend' && $action != 'editline') {
522 print '<div class="tabsAction">'."\n";
523 $parameters = array();
524 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
525 if ($reshook < 0) {
526 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
527 }
528
529 if (empty($reshook)) {
530 // Send
531 if (empty($user->socid)) {
532 print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&mode=init&sendto='.urlencode($object->email).'#formmailbeforetitle">'.$langs->trans('SendMail').'</a>'."\n";
533 }
534
535 // Back to draft
536 if ($object->status == $object::STATUS_VALIDATED) {
537 if ($permissiontoadd) {
538 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_setdraft&token='.newToken().'&confirm=yes">'.$langs->trans("SetToDraft").'</a>';
539 }
540 }
541
542 // Modify
543 if ($permissiontoadd) {
544 print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>'."\n";
545 } else {
546 print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans('Modify').'</a>'."\n";
547 }
548
549 // Validate
550 if ($object->status == $object::STATUS_DRAFT) {
551 if ($permissiontoadd) {
552 if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
553 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&token='.newToken().'&confirm=yes">'.$langs->trans("Validate").'</a>';
554 } else {
555 $langs->load("errors");
556 print '<a class="butActionRefused" href="" title="'.$langs->trans("ErrorAddAtLeastOneLineFirst").'">'.$langs->trans("Validate").'</a>';
557 }
558 }
559 }
560
561 // Make offer - Refuse - Decline
562 if ($object->status >= $object::STATUS_VALIDATED && $object->status < $object::STATUS_CONTRACT_PROPOSED) {
563 if ($permissiontoadd) {
564 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=makeofferordecline&token='.newToken().'">'.$langs->trans("MakeOffer").' / '.$langs->trans("Decline").'</a>';
565 }
566 }
567
568 // Contract refused / accepted
569 if ($object->status == $object::STATUS_CONTRACT_PROPOSED) {
570 if ($permissiontoadd) {
571 print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=closeas&token='.newToken().'">'.$langs->trans("Accept").' / '.$langs->trans("Decline").'</a>';
572 }
573 }
574
575 // Clone
576 if ($permissiontoadd) {
577 print dolGetButtonAction($langs->trans("ToClone"), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.(!empty($object->socid) ? '&socid='.$object->socid : '').'&action=clone&object=recruitmentcandidature', 'clone', $permissiontoadd);
578 }
579
580 // Button to convert into a user
581 if ($object->status == $object::STATUS_CONTRACT_SIGNED) {
582 if ($user->hasRight('user', 'user', 'creer')) {
583 $useralreadyexists = $object->fk_user;
584 if (empty($useralreadyexists)) {
585 print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=create_user">'.$langs->trans("CreateDolibarrLogin").'</a></div>';
586 } else {
587 print '<div class="inline-block divButAction"><a class="butActionRefused" href="#">'.$langs->trans("CreateDolibarrLogin").'</a></div>';
588 }
589 } else {
590 print '<div class="inline-block divButAction"><span class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans("CreateDolibarrLogin")."</span></div>";
591 }
592 }
593
594 // Cancel
595 if ($permissiontoadd) {
596 if ($object->status == $object::STATUS_VALIDATED) {
597 print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=close&token='.newToken().'">'.$langs->trans("Cancel").'</a>'."\n";
598 } elseif ($object->status == $object::STATUS_REFUSED || $object->status == $object::STATUS_CANCELED || $object->status == $object::STATUS_CONTRACT_REFUSED) {
599 print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.newToken().'">'.$langs->trans("Re-Open").'</a>'."\n";
600 }
601 }
602
603 // Delete
604 print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete);
605 }
606 print '</div>'."\n";
607 }
608
609
610 // Select mail models is same action as presend
611 if (GETPOST('modelselected')) {
612 $action = 'presend';
613 }
614
615 if ($action != 'presend') {
616 print '<div class="fichecenter"><div class="fichehalfleft">';
617 print '<a name="builddoc"></a>'; // ancre
618
619 $includedocgeneration = 1;
620
621 // Documents
622 if ($includedocgeneration) {
623 $objref = dol_sanitizeFileName($object->ref);
624 $relativepath = $objref.'/'.$objref.'.pdf';
625 $filedir = $conf->recruitment->dir_output.'/'.$object->element.'/'.$objref;
626 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
627 $genallowed = $user->hasRight('recruitment', 'recruitmentjobposition', 'read'); // If you can read, you can build the PDF to read content
628 $delallowed = $user->hasRight('recruitment', 'recruitmentjobposition', 'write'); // If you can create/edit, you can remove a file on card
629 print $formfile->showdocuments('recruitment:RecruitmentCandidature', $object->element.'/'.$objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
630 }
631
632 // Show links to link elements
633 $linktoelem = $form->showLinkToObjectBlock($object, null, array('recruitmentcandidature'));
634 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
635
636
637 print '</div><div class="fichehalfright">';
638
639 $MAXEVENT = 10;
640
641 $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/recruitment/recruitmentcandidature_agenda.php?id='.$object->id);
642
643 // List of actions on element
644 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
645 $formactions = new FormActions($db);
646 $somethingshown = $formactions->showactions($object, $object->element.'@recruitment', (is_object($object->thirdparty) ? $object->thirdparty->id : 0), 1, '', $MAXEVENT, '', $morehtmlcenter);
647
648 print '</div></div>';
649 }
650
651 //Select mail models is same action as presend
652 if (GETPOST('modelselected')) {
653 $action = 'presend';
654 }
655
656 // Presend form
657 $modelmail = 'recruitmentcandidature_send';
658 $defaulttopic = 'InformationMessage';
659 $diroutput = $conf->recruitment->dir_output;
660 $trackid = 'recruitmentcandidature'.$object->id;
661 $inreplyto = $object->email_msgid;
662
663 $job = new RecruitmentJobPosition($db);
664 $job->fetch($object->fk_recruitmentjobposition);
665
666 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
667 $recruiter = new User($db);
668 $recruiter->fetch($job->fk_user_recruiter);
669
670 $recruitername = $recruiter->getFullName('');
671 $recruitermail = (!empty($job->email_recruiter) ? $job->email_recruiter : $recruiter->email);
672
673 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
674}
675
676// End of page
677llxFooter();
678$db->close();
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:56
llxFooter()
Empty footer.
Definition wrapper.php:70
Class to manage standard extra fields.
Class to manage building of HTML components.
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 for RecruitmentCandidature.
Class for RecruitmentJobPosition.
Class to manage Dolibarr users.
dol_buildlogin($lastname, $firstname)
Build a login from lastname, firstname.
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.
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.
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.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.