diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php index ce0aa10cfb4c2be5636903da295d69c3a4aaf6ca..ad985dccf61aa630a570653d0b7fe99fb14df3b6 100755 --- a/apps/maarch_entreprise/lang/fr.php +++ b/apps/maarch_entreprise/lang/fr.php @@ -4644,6 +4644,12 @@ if (!defined('_REJECTION_WORKFLOW_PREVIOUS')) { if (!defined('_REJECTION_WORKFLOW_PREVIOUS_DESC')) { define('_REJECTION_WORKFLOW_PREVIOUS_DESC', "Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document ('process_date' de la table listinstance)."); } +if (!defined('_REJECTION_WORKFLOW_ENTITY')) { + define('_REJECTION_WORKFLOW_ENTITY', 'Refuser le visa - retour à l\'entité initiatrice'); +} +if (!defined('_REJECTION_WORKFLOW_ENTITY_DESC')) { + define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance) et le renvoit à l\'entité initiatrice.'); +} if (!defined('_VISA_MAIL')) { define('_VISA_MAIL', 'Viser le courrier'); } diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml index fbec250b34676a10a6c39c50c4de847b3420d244..00499e0c3628718cdb43e1ae839fed352cbb4690 100755 --- a/core/xml/actions_pages.xml +++ b/core/xml/actions_pages.xml @@ -333,7 +333,19 @@ An action page is described in a ACTIONPAGE tag : <COLL_ID>letterbox_coll</COLL_ID> </COLLECTIONS> </ACTIONPAGE> - <ACTIONPAGE> + <ACTIONPAGE> + <ID>rejection_visa_entity</ID> + <LABEL>_REJECTION_WORKFLOW_ENTITY</LABEL> + <NAME>rejection_visa_entity</NAME> + <DESC>_REJECTION_WORKFLOW_ENTITY_DESC</DESC> + <ORIGIN>module</ORIGIN> + <MODULE>visa</MODULE> + <FLAG_CREATE>false</FLAG_CREATE> + <COLLECTIONS> + <COLL_ID>letterbox_coll</COLL_ID> + </COLLECTIONS> + </ACTIONPAGE> + <ACTIONPAGE> <ID>send_to_visa</ID> <LABEL>_SEND_TO_VISA</LABEL> <NAME>send_to_visa</NAME> diff --git a/modules/visa/rejection_visa_entity.php b/modules/visa/rejection_visa_entity.php new file mode 100644 index 0000000000000000000000000000000000000000..1ae65ce22b3066e7b1b4a4c48bef411d935e042b --- /dev/null +++ b/modules/visa/rejection_visa_entity.php @@ -0,0 +1,152 @@ +<?php + +$confirm = false; +$etapes = ['form', 'empty_error']; +$frm_width = '355px'; +$frm_height = 'auto'; + +function get_form_txt($values, $path_manage_action, $id_action, $table, $module, $coll_id, $mode) +{ + require('modules/entities/entities_tables.php'); + require_once('modules/entities/class/EntityControler.php'); + require_once('apps/' . $_SESSION['config']['app_id'] . '/class/class_chrono.php'); + + $db = new Database(); + $cr7 = new chrono(); + $entity_ctrl = new EntityControler(); + + $servicesCompare = []; + $labelAction = ''; + + if ($id_action != '') { + $stmt = $db->query('select label_action from actions where id = ?', [$id_action]); + $resAction = $stmt->fetchObject(); + $labelAction = functions::show_string($resAction->label_action); + } + + $frm_str = '<div id="frm_error_' . $id_action . '" class="error"></div>'; + if ($labelAction != '') { + $frm_str .= '<h2 class="title">' . $labelAction . ' ' . _NUM; + } else { + $frm_str .= '<h2 class="title">' . _REDIRECT_MAIL . ' ' . _NUM; + } + $values_str = ''; + if (empty($_SESSION['stockCheckbox'])) { + for ($i = 0; $i < count($values); $i++) { + $values_str .= $values[$i] . ', '; + } + } else { + + for ($i = 0; $i < count($_SESSION['stockCheckbox']); $i++) { + $values_str .= $_SESSION['stockCheckbox'][$i] . ', '; + } + } + + $values_str = preg_replace('/, $/', '', $values_str); + if (_ID_TO_DISPLAY == 'res_id') { + $frm_str .= $values_str; + } else if (_ID_TO_DISPLAY == 'chrono_number') { + $chrono_number = $cr7->get_chrono_number($values_str, 'res_view_letterbox'); + $frm_str .= $chrono_number; + } + + $frm_str .= '</h2><br/>'; + require 'modules/templates/class/templates_controler.php'; + $templatesControler = new templates_controler(); + + $EntitiesIdExclusion = []; + $entities = $entity_ctrl->getAllEntities(); + $countEntities = count($entities); + + for ($cptAllEnt = 0; $cptAllEnt < $countEntities; $cptAllEnt++) { + if (!is_integer(array_search($entities[$cptAllEnt]->__get('entity_id'), $servicesCompare))) { + array_push($EntitiesIdExclusion, $entities[$cptAllEnt]->__get('entity_id')); + } + } + + $templates = $templatesControler->getAllTemplatesForSelect(); + $frm_str .= '<br/><b>' . _NOTES . ':</b><br/>'; + $frm_str .= '<select name="templateNotes" id="templateNotes" style="width:98%;margin-bottom: 10px;background-color: White;border: 1px solid #999;color: #666;text-align: left;" ' + . 'onchange="addTemplateToNote($(\'templateNotes\').value, \'' + . $_SESSION['config']['businessappurl'] . 'index.php?display=true' + . '&module=templates&page=templates_ajax_content_for_notes\');document.getElementById(\'notes\').focus();">'; + $frm_str .= '<option value="">' . _SELECT_NOTE_TEMPLATE . '</option>'; + for ($i = 0; $i < count($templates); $i++) { + if ($templates[$i]['TYPE'] == 'TXT' && ($templates[$i]['TARGET'] == 'notes' || $templates[$i]['TARGET'] == '')) { + $frm_str .= '<option value="'; + $frm_str .= $templates[$i]['ID']; + $frm_str .= '">'; + $frm_str .= $templates[$i]['LABEL']; + } + $frm_str .= '</option>'; + } + $frm_str .= '</select><br />'; + + $frm_str .= '<textarea style="width:98%;height:60px;resize:none;" name="notes" id="notes" onblur="document.getElementById(\'note_content_to_users\').value = document.getElementById(\'notes\').value;"></textarea>'; + $frm_str .= '<div id="form2" style="border:none;">'; + $frm_str .= '<form name="frm_redirect_dep" id="frm_redirect_dep" method="post" class="forms" action="#">'; + $frm_str .= '<input type="hidden" name="chosen_action" id="chosen_action" value="end_action" />'; + $frm_str .= '<input type="hidden" name="note_content_to_users" id="note_content_to_users" />'; + $frm_str .= '</form>'; + $frm_str .= '</div>'; + $frm_str .= '<hr />'; + + $frm_str .= '<div align="center">'; + $frm_str .= ' <input type="button" name="redirect_dep" value="' . _VALIDATE . '" id="redirect_dep" class="button" onclick="valid_action_form( \'frm_redirect_dep\', \'' . $path_manage_action . '\', \'' . $id_action . '\', \'' . $values_str . '\', \'' . $table . '\', \'' . $module . '\', \'' . $coll_id . '\', \'' . $mode . '\');" />'; + $frm_str .= ' <input type="button" name="cancel" id="cancel" class="button" value="' . _CANCEL . '" onclick="pile_actions.action_pop();destroyModal(\'modal_' . $id_action . '\');"/>'; + $frm_str .= '</div>'; + + return addslashes($frm_str); +} + +function check_form($form_id, $values) +{ + return true; +} + +function manage_form($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table, $values_form) +{ + if (empty($values_form) || count($arr_id) < 1) + return false; + + require_once('modules/notes/class/notes_controler.php'); + $note = new notes_controler(); + + $coll_id = $_SESSION['current_basket']['coll_id']; + $res_id = $arr_id[0]; + + $formValues = []; + for ($i = 0; $i < count($values_form); $i++) { + $id = $values_form[$i]['ID']; + $formValues[$id] = $values_form[$i]['VALUE']; + } + + # save note + if ($formValues['note_content_to_users'] != '') { + //Add notes + $note->addNote($res_id, $coll_id, $formValues['note_content_to_users']); + } + + return array('result' => $res_id . '#', 'history_msg' => ''); +} + +function manage_empty_error($arr_id, $history, $id_action, $label_action, $status) +{ + $db = new Database(); + $_SESSION['action_error'] = ''; + $res_id = $arr_id[0]; + + $db->query('UPDATE listinstance SET process_date = NULL WHERE res_id = ? AND difflist_type = ?', [$res_id, 'VISA_CIRCUIT']); + $stmt = $db->query('SELECT initiator FROM res_letterbox WHERE res_id = ?', [$res_id]); + $resInitiator = $stmt->fetch(); + $stmt = $db->query('SELECT item_id, item_type, item_mode FROM listmodels WHERE object_id = ?', [$resInitiator['initiator']]); + $resListModels = $stmt->fetchAll(); + foreach ($resListModels as $resListModel) { + if ($resListModel['item_mode'] == 'dest') { + $db->query('UPDATE listinstance SET item_id = ?, item_type = ? WHERE res_id = ? AND item_mode = ?', [$resListModel['item_id'], $resListModel['item_type'], $res_id, $resListModel['item_mode']]); + } + } + + return array('result' => $res_id . '#', 'history_msg' => $label_action); +} + diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php index e38b37d3afedd10b14188a2b732ba618f4e889a0..836f46f211216dad6f1ee36b1be2f0494a672a87 100644 --- a/src/core/lang/lang-en.php +++ b/src/core/lang/lang-en.php @@ -327,6 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Visa rejection - back to the previous au define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Reset visa date of previous supervisor in visa circuit of document (\'process_date\' of listinstance table).'); define('_REJECTION_WORKFLOW_REDACTOR', 'Visa rejection - back to the author'); define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Reset visa date of all supervisor in visa circuit of document (\'process_date\' of listinstance table).'); +define('_REJECTION_WORKFLOW_ENTITY', 'Visa rejection - back to the initiator entity'); +define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Reset visa date of all supervisor in visa circuit of document (\'process_date\' of listinstance table) and send it to the initiator entity.'); define('_INTERRUPT_WORKFLOW', 'Break the visa flow'); define('_INTERRUPT_WORKFLOW_DESC', 'Update visa date of current supervisor / signatory and all next supervisors in visa circuit of document (\'process_date\' of listinstance table). Insère également un message d\'interruption sur le viseur actuel (\'process_comment\' de la table listinstance).'); define('_PROCEED_WORKFLOW', 'continue the visa flow'); diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php index 4e68809a55567d996491381f2fd219647b2c8df5..1740ef5df81272c6323f76912ebb5bc0a1fddbe1 100644 --- a/src/core/lang/lang-fr.php +++ b/src/core/lang/lang-fr.php @@ -327,6 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Refuser le visa - retour au précédent define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document (\'process_date\' de la table listinstance).'); define('_REJECTION_WORKFLOW_REDACTOR', 'Refuser le visa - retour rédacteur'); define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance).'); +define('_REJECTION_WORKFLOW_ENTITY', 'Refuser le visa - retour à l\'entité initiatrice'); +define('_REJECTION_WORKFLOW_ENTITY_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance) et le renvoit à l\'entité initiatrice.'); define('_INTERRUPT_WORKFLOW', 'Interrompre le circuit de visa'); define('_INTERRUPT_WORKFLOW_DESC', 'Met à jour la date du visa de l\'actuel viseur / signataire et de tous les viseurs suivant présents dans le circuit de visa du document (\'process_date\' de la table listinstance). Insère également un message d\'interruption sur le viseur actuel (\'process_comment\' de la table listinstance).'); define('_PROCEED_WORKFLOW', 'Poursuivre le circuit de visa');