dolibarr 23.0.3
partnership_card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2017-2021 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2021 NextGestion <contact@nextgestion.com>
4 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
5 * Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
27// Load Dolibarr environment
28require '../main.inc.php';
37require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
38require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
39require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
40require_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
41require_once DOL_DOCUMENT_ROOT.'/partnership/lib/partnership.lib.php';
42
43// Load translation files required by the page
44$langs->loadLangs(array("partnership", "other"));
45
46// Get parameters
47$id = GETPOSTINT('id');
48$ref = GETPOST('ref', 'alpha');
49$action = GETPOST('action', 'aZ09');
50$confirm = GETPOST('confirm', 'alpha');
51$cancel = GETPOST('cancel');
52$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
53$backtopage = GETPOST('backtopage', 'alpha');
54$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
55$lineid = GETPOSTINT('lineid');
56$dol_openinpopup = GETPOST('dol_openinpopup', 'aZ09');
57
58// Initialize a technical objects
59$object = new Partnership($db);
60$extrafields = new ExtraFields($db);
61$diroutputmassaction = $conf->partnership->dir_output.'/temp/massgeneration/'.$user->id;
62$hookmanager->initHooks(array('partnershipcard', 'globalcard')); // Note that conf->hooks_modules contains array
63
64// Fetch optionals attributes and labels
65$extrafields->fetch_name_optionals_label($object->table_element);
66
67$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
68
69// Initialize array of search criteria
70$search_all = GETPOST("search_all", 'alpha');
71$search = array();
72
73foreach ($object->fields as $key => $val) {
74 if (GETPOST('search_'.$key, 'alpha')) {
75 $search[$key] = GETPOST('search_'.$key, 'alpha');
76 }
77}
78
79if (empty($action) && empty($id) && empty($ref)) {
80 $action = 'view';
81}
82
83// Load object
84include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be 'include', not 'include_once'.
85
86
87$permissiontoread = $user->hasRight('partnership', 'read');
88$permissiontoadd = $user->hasRight('partnership', 'write'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
89$permissiontodelete = $user->hasRight('partnership', 'delete') || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
90$permissionnote = $user->hasRight('partnership', 'write'); // Used by the include of actions_setnotes.inc.php
91$permissiondellink = $user->hasRight('partnership', 'write'); // Used by the include of actions_dellink.inc.php
92$upload_dir = $conf->partnership->multidir_output[isset($object->entity) ? $object->entity : 1];
93$managedfor = getDolGlobalString('PARTNERSHIP_IS_MANAGED_FOR', 'thirdparty');
94
95// Security check (enable the most restrictive one)
96//if ($user->socid > 0) accessforbidden();
97//if ($user->socid > 0) $socid = $user->socid;
98//$isdraft = (isset($object->status) && ($object->status == $object::STATUS_DRAFT) ? 1 : 0);
99//restrictedArea($user, $object->module, $object->id, $object->table_element, $object->element, 'fk_soc', 'rowid', $isdraft);
100if (!isModEnabled('partnership')) {
102}
103if (!$permissiontoread) {
105}
106if ($object->id > 0 && !($object->fk_member > 0) && $managedfor == 'member') {
108}
109if ($object->id > 0 && !($object->fk_soc > 0) && $managedfor == 'thirdparty') {
111}
112
113
114/*
115 * Actions
116 */
117
118$parameters = array();
119$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
120if ($reshook < 0) {
121 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
122}
123
124if (empty($reshook)) {
125 $error = 0;
126
127 $backurlforlist = dol_buildpath('/partnership/partnership_list.php', 1);
128
129 if (empty($backtopage) || ($cancel && empty($id))) {
130 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
131 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
132 $backtopage = $backurlforlist;
133 } else {
134 $backtopage = dol_buildpath('/partnership/partnership_card.php', 1).'?id='.($id > 0 ? $id : '__ID__');
135 }
136 }
137 }
138
139 $fk_partner = ($managedfor == 'member') ? GETPOSTINT('fk_member') : GETPOSTINT('fk_soc');
140 $obj_partner = ($managedfor == 'member') ? $object->fk_member : $object->fk_soc;
141
142 $triggermodname = 'PARTNERSHIP_MODIFY'; // Name of trigger action code to execute when we modify record
143
144 // Actions cancel, add, update, update_extras, confirm_validate, confirm_delete, confirm_deleteline, confirm_clone, confirm_close, confirm_setdraft, confirm_reopen
145 include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
146
147 // Action accept object
148 if ($action == 'confirm_validate' && $confirm == 'yes' && $permissiontoadd) {
149 $result = $object->validate($user);
150 if ($result >= 0) {
151 // Define output language
152 if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) {
153 $outputlangs = $langs;
154 $newlang = '';
155 if (getDolGlobalInt('MAIN_MULTILANGS') /* && empty($newlang) */ && GETPOST('lang_id', 'aZ09')) {
156 $newlang = GETPOST('lang_id', 'aZ09');
157 }
158 if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
159 $newlang = $object->thirdparty->default_lang;
160 }
161 if (!empty($newlang)) {
162 $outputlangs = new Translate("", $conf);
163 $outputlangs->setDefaultLang($newlang);
164 }
165
166 $ret = $object->fetch($id); // Reload to get new records
167
168 $model = $object->model_pdf;
169
170 $retgen = $object->generateDocument($model, $outputlangs, 0, 0, 0);
171 if ($retgen < 0) {
172 setEventMessages($object->error, $object->errors, 'warnings');
173 }
174 }
175 } else {
176 setEventMessages($object->error, $object->errors, 'errors');
177 }
178 } elseif ($action == 'confirm_accept' && $confirm == 'yes' && $permissiontoadd) {
179 $result = $object->approve($user);
180 if ($result >= 0) {
181 // Define output language
182 if (!getDolGlobalString('MAIN_DISABLE_PDF_AUTOUPDATE')) {
183 $outputlangs = $langs;
184 $newlang = '';
185 if (getDolGlobalInt('MAIN_MULTILANGS') /* && empty($newlang) */ && GETPOST('lang_id', 'aZ09')) {
186 $newlang = GETPOST('lang_id', 'aZ09');
187 }
188 if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
189 $newlang = $object->thirdparty->default_lang;
190 }
191 if (!empty($newlang)) {
192 $outputlangs = new Translate("", $conf);
193 $outputlangs->setDefaultLang($newlang);
194 }
195
196 $ret = $object->fetch($id); // Reload to get new records
197
198 $model = $object->model_pdf;
199
200 $retgen = $object->generateDocument($model, $outputlangs, 0, 0, 0);
201 if ($retgen < 0) {
202 setEventMessages($object->error, $object->errors, 'warnings');
203 }
204 }
205 } else {
206 setEventMessages($object->error, $object->errors, 'errors');
207 }
208 } elseif ($action == 'confirm_refuse' && $permissiontoadd && !GETPOST('cancel', 'alpha')) {
209 // Close proposal
210 if (!(GETPOST('reason_decline_or_cancel', 'alpha'))) {
211 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Refuse")), null, 'errors');
212 $action = 'refuse';
213 } else {
214 // prevent browser refresh from closing proposal several times
215 if ($object->status != $object::STATUS_REFUSED) {
216 $db->begin();
217
218 $result = $object->refused($user, GETPOST('reason_decline_or_cancel', 'restricthtml'));
219 if ($result < 0) {
220 setEventMessages($object->error, $object->errors, 'errors');
221 $error++;
222 } else {
223 $object->reason_decline_or_cancel = GETPOST('reason_decline_or_cancel', 'restricthtml');
224 }
225
226 if (!$error) {
227 $db->commit();
228 } else {
229 $db->rollback();
230 }
231 }
232 }
233 }
234 // Actions when linking object each other
235 include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';
236
237 // Actions when printing a doc from card
238 include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
239
240 // Action to move up and down lines of object
241 //include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';
242
243 // Action to build doc
244 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
245
246 if ($action == 'set_thirdparty' && $permissiontoadd) {
247 $object->setValueFrom('fk_soc', GETPOSTINT('fk_soc'), '', null, 'date', '', $user, $triggermodname);
248 }
249 if ($action == 'classin' && $permissiontoadd) {
250 $object->setProject(GETPOSTINT('projectid'));
251 }
252
253 // Actions to send emails
254 $triggersendname = 'PARTNERSHIP_SENTBYMAIL';
255 $autocopy = 'MAIN_MAIL_AUTOCOPY_PARTNERSHIP_TO';
256 $trackid = 'pship'.$object->id;
257 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
258
259 if (!empty($id) && !empty(GETPOST('confirm'))) {
260 header("Location: ".$_SERVER['PHP_SELF']."?id=".$id);
261 exit;
262 }
263}
264
265if ($object->id > 0 && $object->status == $object::STATUS_REFUSED) {
266 $object->fields['reason_decline_or_cancel']['visible'] = 3;
267}
268
269
270
271/*
272 * View
273 */
274
275$form = new Form($db);
276$formfile = new FormFile($db);
277$formproject = new FormProjets($db);
278
279$title = $langs->trans("Partnership");
280$help_url = '';
281llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-partnership page-card');
282
283// Part to create
284if ($action == 'create') {
285 if (empty($permissiontoadd)) {
286 accessforbidden('NotEnoughPermissions', 0, 1);
287 }
288
289 print load_fiche_titre($langs->trans("NewPartnership"), '', 'object_'.$object->picto);
290
291 print '<form method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
292 print '<input type="hidden" name="token" value="'.newToken().'">';
293 print '<input type="hidden" name="action" value="add">';
294 if ($backtopage) {
295 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
296 }
297 if ($backtopageforcancel) {
298 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
299 }
300
301 print dol_get_fiche_head(array(), '');
302
303 print '<table class="border centpercent tableforfieldcreate">'."\n";
304
305 // Common attributes
306 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';
307
308 // Other attributes
309 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
310
311 print '</table>'."\n";
312
313 print dol_get_fiche_end();
314
315 print $form->buttonsSaveCancel("Create");
316
317 print '</form>';
318
319 //dol_set_focus('input[name="ref"]');
320}
321
322// Part to edit record
323if (($id || $ref) && $action == 'edit') {
324 print load_fiche_titre($langs->trans("Partnership"), '', 'object_'.$object->picto);
325
326 print '<form method="POST" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
327 print '<input type="hidden" name="token" value="'.newToken().'">';
328 print '<input type="hidden" name="action" value="update">';
329 print '<input type="hidden" name="id" value="'.$object->id.'">';
330 if ($backtopage) {
331 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
332 }
333 if ($backtopageforcancel) {
334 print '<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.'">';
335 }
336
337 print dol_get_fiche_head();
338
339 print '<table class="border centpercent tableforfieldedit">'."\n";
340
341 // Common attributes
342 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';
343
344 // Other attributes
345 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
346
347 print '</table>';
348
349 print dol_get_fiche_end();
350
351 print $form->buttonsSaveCancel();
352
353 print '</form>';
354}
355
356// Part to show record
357if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
358 $head = partnershipPrepareHead($object);
359
360 print dol_get_fiche_head($head, 'card', $langs->trans("Partnership"), -1, $object->picto);
361
362 $formconfirm = '';
363
364 // Confirmation to delete
365 if ($action == 'delete') {
366 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeletePartnership'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1);
367 }
368 // Confirmation to delete line
369 if ($action == 'deleteline') {
370 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_deleteline', '', 0, 1);
371 }
372 // Clone confirmation
373 if ($action == 'clone') {
374 // Create an array for form
375 $formquestion = array();
376 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneAsk', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
377 }
378 // Close confirmation
379 if ($action == 'close') {
380 // Create an array for form
381 $formquestion = array();
382 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClose'), $langs->trans('ConfirmClosePartnershipAsk', $object->ref), 'confirm_close', $formquestion, 'yes', 1);
383 }
384 // Reopon confirmation
385 if ($action == 'reopen') {
386 // Create an array for form
387 $formquestion = array();
388 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('PartnershipToReopen'), $langs->trans('PartnershipConfirmReOpenAsk', $object->ref), 'confirm_reopen', $formquestion, 'yes', 1);
389 }
390
391 // Refuse confirmation
392 if ($action == 'refuse') {
393 //Form to close proposal (signed or not)
394 $formquestion = array(
395 array('type' => 'text', 'name' => 'reason_decline_or_cancel', 'label' => $langs->trans("Note"), 'morecss' => 'reason_decline_or_cancel minwidth400', 'value' => '') // Field to complete private note (not replace)
396 );
397
398 // if (isModEnabled('notification')) {
399 // require_once DOL_DOCUMENT_ROOT.'/core/class/notify.class.php';
400 // $notify = new Notify($db);
401 // $formquestion = array_merge($formquestion, array(
402 // array('type' => 'onecolumn', 'value' => $notify->confirmMessage('PARTNERSHIP_CLOSE_DENY', $object->socid, $object)),
403 // ));
404 // }
405
406 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToRefuse'), '', 'confirm_refuse', $formquestion, '', 1, 250);
407 }
408
409 // Call Hook formConfirm
410 $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
411 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
412 if (empty($reshook)) {
413 $formconfirm .= $hookmanager->resPrint;
414 } elseif ($reshook > 0) {
415 $formconfirm = $hookmanager->resPrint;
416 }
417
418 // Print form confirm
419 print $formconfirm;
420
421
422 // Object card
423 // ------------------------------------------------------------
424 $linkback = '<a href="'.dol_buildpath('/partnership/partnership_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
425
426 $morehtmlref = '<div class="refidno">';
427 $morehtmlref .= '</div>';
428
429 if ($managedfor == 'member') {
430 $object->next_prev_filter = "te.fk_member:>:0"; // usf filter
431 } else {
432 $object->next_prev_filter = "te.fk_soc:>:0"; // usf filter
433 }
434
435 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
436
437
438 print '<div class="fichecenter">';
439 print '<div class="fichehalfleft">';
440 print '<div class="underbanner clearboth"></div>';
441 print '<table class="border centpercent tableforfield">'."\n";
442
443 // Common attributes
444 //$keyforbreak='fieldkeytoswitchonsecondcolumn'; // We change column just before this field
445 //unset($object->fields['fk_project']); // Hide field already shown in banner
446 //unset($object->fields['fk_soc']); // Hide field already shown in banner
447 include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
448
449 // End of subscription date
450 if ($managedfor == 'member') {
451 $fadherent = new Adherent($db);
452 $fadherent->fetch($object->fk_member);
453 print '<tr><td>'.$langs->trans("SubscriptionEndDate").'</td><td class="valeur">';
454 if ($fadherent->datefin) {
455 print dol_print_date($fadherent->datefin, 'day');
456 if ($fadherent->hasDelay()) {
457 print " ".img_warning($langs->trans("Late"));
458 }
459 } else {
460 if (!$adht->subscription) {
461 print $langs->trans("SubscriptionNotRecorded");
462 if ($fadherent->status > 0) {
463 print " ".img_warning($langs->trans("Late")); // Display a delay picto only if it is not a draft and is not canceled
464 }
465 } else {
466 print $langs->trans("SubscriptionNotReceived");
467 if ($fadherent->status > 0) {
468 print " ".img_warning($langs->trans("Late")); // Display a delay picto only if it is not a draft and is not canceled
469 }
470 }
471 }
472 print '</td></tr>';
473 }
474
475 // Other attributes. Fields from hook formObjectOptions and Extrafields.
476 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
477
478 print '</table>';
479 print '</div>';
480 print '</div>';
481
482 print '<div class="clearboth"></div>';
483
484 print dol_get_fiche_end();
485
486
487 /*
488 * Lines
489 */
490
491 if (!empty($object->table_element_line)) {
492 // Show object lines
493 $result = $object->getLinesArray();
494
495 print ' <form name="addproduct" id="addproduct" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.(($action != 'editline') ? '' : '#line_'.GETPOSTINT('lineid')).'" method="POST">
496 <input type="hidden" name="token" value="' . newToken().'">
497 <input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline').'">
498 <input type="hidden" name="mode" value="">
499 <input type="hidden" name="page_y" value="">
500 <input type="hidden" name="id" value="' . $object->id.'">
501 ';
502
503 if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
504 include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
505 }
506
507 print '<div class="div-table-responsive-no-min">';
508 if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
509 print '<table id="tablelines" class="noborder noshadow" width="100%">';
510 }
511
512 if (!empty($object->lines)) {
513 $object->printObjectLines($action, $mysoc, null, GETPOSTINT('lineid'), 1);
514 }
515
516 // Form to add new line
517 if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') {
518 if ($action != 'editline') {
519 // Add products/services form
520
521 $parameters = array();
522 $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
523 if ($reshook < 0) {
524 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
525 }
526 if (empty($reshook)) {
527 $object->formAddObjectLine(1, $mysoc, $soc);
528 }
529 }
530 }
531
532 if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
533 print '</table>';
534 }
535 print '</div>';
536
537 print "</form>\n";
538 }
539
540
541 // Buttons for actions
542
543 if ($action != 'presend' && $action != 'editline') {
544 print '<div class="tabsAction">'."\n";
545 $parameters = array();
546 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
547 if ($reshook < 0) {
548 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
549 }
550
551 if (empty($reshook)) {
552 // Send
553 if (empty($user->socid)) {
554 print dolGetButtonAction('', $langs->trans('SendMail'), 'email', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=presend&token='.newToken().'&mode=init#formmailbeforetitle');
555 }
556
557 print dolGetButtonAction('', $langs->trans('Modify'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
558
559 // Back to draft
560 if ($object->status != $object::STATUS_DRAFT) {
561 print dolGetButtonAction('', $langs->trans('SetToDraft'), 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_setdraft&confirm=yes&token='.newToken(), '', $permissiontoadd);
562 }
563
564 // Validate
565 if ($object->status == $object::STATUS_DRAFT) {
566 if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
567 print dolGetButtonAction('', $langs->trans('Validate'), 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_validate&confirm=yes&token='.newToken(), '', $permissiontoadd);
568 } else {
569 $langs->load("errors");
570 print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Validate"), 'default', '#', '', 0);
571 }
572 }
573
574 // Approve
575 if ($object->status == $object::STATUS_VALIDATED) {
576 if (empty($object->table_element_line) || (is_array($object->lines) && count($object->lines) > 0)) {
577 print dolGetButtonAction($langs->trans('Approve'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_accept&confirm=yes&token='.newToken(), '', $permissiontoadd);
578 } else {
579 $langs->load("errors");
580 print dolGetButtonAction($langs->trans("ErrorAddAtLeastOneLineFirst"), $langs->trans("Approved"), 'default', '#', '', 0);
581 }
582 }
583
584 // Cancel
585 if ($permissiontoadd) {
586 if ($object->status == $object::STATUS_APPROVED) {
587 print dolGetButtonAction($langs->trans('Resiliate'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=close&token='.newToken(), '', $permissiontoadd);
588 } elseif ($object->status > $object::STATUS_APPROVED) {
589 // print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen&token='.newToken().'">'.$langs->trans("Re-Open").'</a>'."\n";
590 print dolGetButtonAction($langs->trans('Re-Open'), '', 'default', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.newToken(), '', $permissiontoadd);
591 }
592 }
593
594 // Refuse
595 if ($permissiontoadd) {
596 if ($object->status != $object::STATUS_DRAFT && $object->status != $object::STATUS_APPROVED && $object->status != $object::STATUS_CANCELED && $object->status != $object::STATUS_REFUSED) {
597 print dolGetButtonAction($langs->trans('Refuse'), '', 'default', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=refuse&token='.newToken(), '', $permissiontoadd);
598 }
599 }
600
601 // Delete (need delete permission, or if draft, just need create/modify permission)
602 print dolGetButtonAction($langs->trans('Delete'), '', 'delete', $_SERVER['PHP_SELF'].'?id='.$object->id.'&action=delete&token='.newToken(), '', $permissiontodelete || ($object->status == $object::STATUS_DRAFT && $permissiontoadd));
603 }
604 print '</div>'."\n";
605 }
606
607
608 // Select mail models is same action as presend
609 if (GETPOST('modelselected')) {
610 $action = 'presend';
611 }
612
613 if ($action != 'presend') {
614 print '<div class="fichecenter"><div class="fichehalfleft">';
615 print '<a name="builddoc"></a>'; // ancre
616
617 $includedocgeneration = 0;
618
619 // Documents
620 if ($includedocgeneration) {
621 $objref = dol_sanitizeFileName($object->ref);
622 $relativepath = $objref.'/'.$objref.'.pdf';
623 $filedir = $conf->partnership->dir_output.'/'.$object->element.'/'.$objref;
624 $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
625 $genallowed = $permissiontoread; // If you can read, you can build the PDF to read content
626 $delallowed = $permissiontoadd; // If you can create/edit, you can remove a file on card
627 print $formfile->showdocuments('partnership:Partnership', $object->element.'/'.$objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
628 }
629
630 // Show links to link elements
631 $tmparray = $form->showLinkToObjectBlock($object, array(), array('partnership'), 1);
632 $linktoelem = $tmparray['linktoelem'];
633 $htmltoenteralink = $tmparray['htmltoenteralink'];
634 print $htmltoenteralink;
635
636 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
637
638
639 print '</div><div class="fichehalfright">';
640
641 $MAXEVENT = 10;
642
643 $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/partnership/partnership_agenda.php?id='.$object->id);
644
645 // List of actions on element
646 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
647 $formactions = new FormActions($db);
648 $somethingshown = $formactions->showactions($object, $object->element.'@'.$object->module, (is_object($object->thirdparty) ? $object->thirdparty->id : 0), 1, '', $MAXEVENT, '', $morehtmlcenter);
649
650 print '</div></div>';
651 }
652
653 //Select mail models is same action as presend
654 if (GETPOST('modelselected')) {
655 $action = 'presend';
656 }
657
658 // Presend form
659 $modelmail = 'partnership_send';
660 $defaulttopic = 'InformationMessage';
661 $diroutput = $conf->partnership->dir_output;
662 $trackid = 'pship'.$object->id;
663
664 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
665}
666
667// End of page
668llxFooter();
669$db->close();
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
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:73
Class to manage members of a foundation.
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 Partnership.
Class to manage translations.
global $mysoc
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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, $morecssdiv='')
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_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
partnershipPrepareHead($object)
Prepare array of tabs for Partnership.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.