diff --git a/resources/assets/js/api/Cases.js b/resources/assets/js/api/Cases.js index ff4baab68..f522e9ca1 100644 --- a/resources/assets/js/api/Cases.js +++ b/resources/assets/js/api/Cases.js @@ -239,6 +239,21 @@ export let cases = { } }); }, + /** + * get the list of users to re-assign + * @param {*} data + * @returns + */ + getUsersToReassign(data) { + return Api.get({ + service: "GET_USERS_TO_REASSIGN", + data: {}, + keys: { + task_uid: data.TAS_UID, + app_uid: data.APP_UID + } + }); + }, reassingCase(data) { return Api.update({ service: "REASSIGN_CASE", @@ -254,6 +269,25 @@ export let cases = { } }); }, + /** + * Reassign a case to a new user + * @param {*} data + */ + reassingCaseSupervisor(data) { + return Api.update({ + service: "REASSIGN_CASE", + data: { + usr_uid_target: data.userSelected, + del_index: data.DEL_INDEX, + reason: data.reasonReassign, + sendMail: data.notifyUser, + usr_uid_source: data.USR_UID + }, + keys: { + app_uid: data.APP_UID + } + }); + }, /** * Claim case with endpoint * @param {*} data @@ -270,6 +304,38 @@ export let cases = { } }); }, + /** + * Assign case with endpoint + * @param {*} data + * @returns + */ + assignCase(data) { + return Api.update({ + service: "ASSIGN_CASE", + data: { + reason: data.reasonReassign, + sendMail: data.notifyUser, + index: data.DEL_INDEX + }, + keys: { + app_uid: data.APP_UID, + usr_uid: data.userSelected + } + }); + }, + /** + * Verify if the user is Supervisor + * @param {*} data + * @returns + */ + getIsSupervisor(data) { + return Api.get({ + service: "IS_SUPERVISOR", + keys: { + app_num: data + } + }); + }, /** * Service to jump a case by it's number * @param {object} dt diff --git a/resources/assets/js/api/Services.js b/resources/assets/js/api/Services.js index 71183beb5..bf3cae70b 100644 --- a/resources/assets/js/api/Services.js +++ b/resources/assets/js/api/Services.js @@ -1,4 +1,6 @@ export default { + ASSIGN_CASE: "/cases/{app_uid}/{usr_uid}/assign", + IS_SUPERVISOR: "/cases/{app_num}/supervisor", AUTHENTICATE_USER: "/oauth2/token", USER_DATA: "/light/user/data", GET_MAIN_MENU_COUNTERS: "/light/counters", @@ -10,6 +12,7 @@ GET_LISTS_PAUSED: "/light/paused", GET_LISTS_COMPLETED: "/light/completed", GET_USERS_PICTURES: "/light/users/data", + GET_USERS_TO_REASSIGN: "/cases/{task_uid}/{app_uid}/userstoreassign", FORMS_ARRAY: "/light/project/{pro_uid}/activity/{act_uid}/steps", GET_NEW_CASES: "/case/start-cases?type_view=category", GET_HISTORY_CASES: "/light/history/{app_uid}", diff --git a/resources/assets/js/home/CaseDetail.vue b/resources/assets/js/home/CaseDetail.vue index a2933414a..dde49e1f5 100755 --- a/resources/assets/js/home/CaseDetail.vue +++ b/resources/assets/js/home/CaseDetail.vue @@ -54,7 +54,7 @@
{{ $t("ID_CONTINUE") }}{{ $t("ID_UNPAUSE") }} + + + {{ $t("ID_ASSIGN") }} + + + + {{ $t("ID_REASSIGN") }} +
+
+ + + {{ $t("ID_REVIEW_CASE") }} + +
+ + + @@ -125,9 +154,11 @@ import CaseComment from "../components/home/caseDetail/CaseComment"; import CaseComments from "../components/home/caseDetail/CaseComments"; import TabsCaseDetail from "../home/TabsCaseDetail.vue"; import ButtonFleft from "../components/home/ButtonFleft.vue"; +import ModalAssignCase from "./modal/ModalAssignCase.vue"; import ModalCancelCase from "../home/modal/ModalCancelCase.vue"; import ModalNewRequest from "./ModalNewRequest.vue"; import ModalClaimCase from "./modal/ModalClaimCase.vue"; +import ModalReassignCase from "./modal/ModalReassignCase.vue"; import TaskCell from "../components/vuetable/TaskCell.vue"; import CurrentUserCell from "../components/vuetable/CurrentUserCell.vue" import utils from "./../utils/utils"; @@ -143,10 +174,12 @@ export default { AttachedDocumentsEdit, CaseComment, CaseComments, + ModalAssignCase, ModalCancelCase, ButtonFleft, ModalNewRequest, ModalClaimCase, + ModalReassignCase, TaskCell, CurrentUserCell }, @@ -230,7 +263,11 @@ export default { dataComments: { title: "Comments", items: [] - } + }, + dataCaseReview: {}, + app_num: this.$parent.dataCase.APP_NUMBER, + supervisor: false, + flagSupervising: false }; }, @@ -242,6 +279,7 @@ export default { //set dataCase this.dataCase = this.$parent.dataCase; this.$el.getElementsByClassName("VuePagination__count")[0].remove(); + this.changeFlagSupervising(this.dataCase.FLAG); this.getDataCaseSummary(); this.getInputDocuments(); this.getOutputDocuments(); @@ -506,6 +544,8 @@ export default { .pendingtask(that.$parent.dataCase) .then((response) => { dt = that.formatDataResponse(response.data); + this.dataCaseReview = dt[0]; + this.supervisor = that.isSupervisor(); resolutionFunc({ data: dt, count: response.data.length, @@ -538,7 +578,8 @@ export default { PRO_UID: v.PRO_UID, TAS_UID: v.TAS_UID, UNASSIGNED: v.UNASSIGNED, - USR_ID: v.USR_ID + USR_ID: v.USR_ID, + USR_UID: v.USR_UID }); }); return data; @@ -606,6 +647,21 @@ export default { this.$emit("onUpdatePage", "XCase"); } }, + /** + * Review case Click handler + * + * @param {object} data + */ + onClickReview(data) { + this.$emit("onUpdateDataCase", { + APP_UID: data.APP_UID, + DEL_INDEX: data.DEL_INDEX, + PRO_UID: data.PRO_UID, + TAS_UID: data.TAS_UID, + ACTION: "to_revise" + }); + this.$emit("onUpdatePage", "XCase"); + }, /** * Unpause click handler * @@ -622,6 +678,58 @@ export default { .catch((error) => { that.showAlert(error.response.data.error.message, 'danger'); }); + }, + /** + * Assign click handler + * + * @param {object} item + */ + onClickAssign(item) { + let that = this; + Api.cases.open(_.extend({ ACTION: "assign" }, item)).then(() => { + Api.cases.cases_open(_.extend({ ACTION: "todo" }, item)).then(() => { + that.$refs["modal-assign-case"].data = item; + that.$refs["modal-assign-case"].show(); + }); + }); + }, + /** + * Reassign click handler + * + * @param {object} item + */ + onClickReassign(item) { + let that = this; + item.FLAG = this.flagSupervising; + Api.cases.open(_.extend({ ACTION: "reassign" }, item)).then(() => { + Api.cases.cases_open(_.extend({ ACTION: "todo" }, item)).then(() => { + that.$refs["modal-reassign-case"].data = item; + that.$refs["modal-reassign-case"].show(); + }); + }); + }, + /** + * Is supervisor + * + * @return {bool} response + */ + isSupervisor() { + Api.cases.getIsSupervisor(this.app_num).then((response) => { + let res = false; + if (response.statusText === "OK" || response.status === 200) { + this.supervisor = response.data; + } + }) + }, + /** + * Change the flag supervisor + * + * @param {string} data + */ + changeFlagSupervising(data) { + if (data === 'SUPERVISING'){ + this.flagSupervising = true; + } }, /** * Claim case @@ -675,4 +783,7 @@ export default { padding-right: 10px; line-height: 40px; } +.table td, .table th { + vertical-align: middle; +} \ No newline at end of file diff --git a/resources/assets/js/home/MyCases/MyCases.vue b/resources/assets/js/home/MyCases/MyCases.vue index 72bc4ed0a..957dff815 100755 --- a/resources/assets/js/home/MyCases/MyCases.vue +++ b/resources/assets/js/home/MyCases/MyCases.vue @@ -358,6 +358,7 @@ export default { PRO_UID: item.PRO_UID, TAS_UID: item.TAS_UID, APP_NUMBER: item.CASE_NUMBER, + FLAG: this.filterHeader, ACTION: that.filterHeader === "SUPERVISING" ? "to_revise" diff --git a/resources/assets/js/home/modal/ModalAssignCase.vue b/resources/assets/js/home/modal/ModalAssignCase.vue new file mode 100644 index 000000000..83b5f39a8 --- /dev/null +++ b/resources/assets/js/home/modal/ModalAssignCase.vue @@ -0,0 +1,190 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/home/modal/ModalReassignCase.vue b/resources/assets/js/home/modal/ModalReassignCase.vue index d8e2f021f..d85490b15 100644 --- a/resources/assets/js/home/modal/ModalReassignCase.vue +++ b/resources/assets/js/home/modal/ModalReassignCase.vue @@ -7,7 +7,7 @@ > { + api.cases.getUserToReassign(this.data).then((response) => { var users = response.data.data, i; if (response.statusText == "OK" || response.status === 200) { @@ -146,25 +151,47 @@ export default { this.data.userSelected = this.userSelected; this.data.reasonReassign = this.reasonReassign; this.notifyUser = this.notifyUser; - api.cases.reassingCase(this.data).then((response) => { - if (response.statusText == "OK" || response.status === 200) { - that.$refs["modal-reassign-case"].hide(); - if (that.$parent.$refs["vueTable"] !== undefined) { - that.$parent.$refs["vueTable"].getData(); + if (!this.data.FLAG){ + api.cases.reassingCase(this.data).then((response) => { + if (response.statusText == "OK" || response.status === 200) { + that.$refs["modal-reassign-case"].hide(); + if (that.$parent.$refs["vueTable"] !== undefined) { + that.$parent.$refs["vueTable"].getData(); + } + if (that.$parent.$refs["vueListView"] !== undefined) { + that.$parent.$refs["vueListView"].getData(); + } + if (that.$parent.$refs["vueCardView"] !== undefined) { + that.$parent.$refs["vueCardView"].getData(); + } } - if (that.$parent.$refs["vueListView"] !== undefined) { - that.$parent.$refs["vueListView"].getData(); + }) + .catch((e) => { + if(e.response.data && e.response.data.error){ + that.showAlert(e.response.data.error.message, "danger"); } - if (that.$parent.$refs["vueCardView"] !== undefined) { - that.$parent.$refs["vueCardView"].getData(); + }); + } else { + api.cases.reassingCaseSupervisor(this.data).then((response) => { + if (response.statusText == "OK" || response.status === 200) { + that.$refs["modal-reassign-case"].hide(); + if (that.$parent.$refs["vueTable"] !== undefined) { + that.$parent.$refs["vueTable"].getData(); + } + if (that.$parent.$refs["vueListView"] !== undefined) { + that.$parent.$refs["vueListView"].getData(); + } + if (that.$parent.$refs["vueCardView"] !== undefined) { + that.$parent.$refs["vueCardView"].getData(); + } } - } - }) - .catch((e) => { - if(e.response.data && e.response.data.error){ - that.showAlert(e.response.data.error.message, "danger"); - } - }); + }) + .catch((e) => { + if(e.response.data && e.response.data.error){ + that.showAlert(e.response.data.error.message, "danger"); + } + }); + } }, /** * Show the alert message diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 55f2b251a..4e62b8735 100755 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -2419,6 +2419,12 @@ msgstr "Array of variables is empty" msgid "Assign" msgstr "Assign" +# TRANSLATION +# LABEL/ID_ASSIGN_CASE +#: LABEL/ID_ASSIGN_CASE +msgid "Assign Case" +msgstr "Assign Case" + # TRANSLATION # LABEL/ID_ASSIGNED_FIEDS #: LABEL/ID_ASSIGNED_FIEDS @@ -24017,6 +24023,12 @@ msgstr "Resume" msgid "Return" msgstr "Return" +# TRANSLATION +# LABEL/ID_REVIEW_CASE +#: LABEL/ID_REVIEW_CASE +msgid "Review Case" +msgstr "Review Case" + # TRANSLATION # LABEL/ID_RIGHT #: LABEL/ID_RIGHT diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index b101bb0b3..8da14ffab 100755 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57205,6 +57205,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ARE_YOU_SURE_UNPAUSE_TASK','en','Are you sure want to unpause the task?','2021-01-26') , ( 'LABEL','ID_ARRAY_VARIABLES_EMPTY','en','Array of variables is empty','2014-01-15') , ( 'LABEL','ID_ASSIGN','en','Assign','2014-01-15') , +( 'LABEL','ID_ASSIGN_CASE','en','Assign Case','2022-11-04') , ( 'LABEL','ID_ASSIGNED_FIEDS','en','ASSIGNED FIELDS','2014-01-15') , ( 'LABEL','ID_ASSIGNED_GROUPS','en','ASSIGNED GROUPS','2014-01-15') , ( 'LABEL','ID_ASSIGNED_MEMBERS','en','MEMBERS','2014-01-15') , @@ -60924,6 +60925,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_RESTORING_CASE','en','Restoring case','2015-09-15') , ( 'LABEL','ID_RESULT','en','Result','2014-01-15') , ( 'LABEL','ID_RESUME','en','Resume','2014-01-15') , +( 'LABEL','ID_REVIEW_CASE','en','Review Case','2022-11-10') , ( 'LABEL','ID_RETURN_ADVANCED_SEARCH','en','Return','2019-07-17') , ( 'LABEL','ID_RIGHT','en','right','2014-09-18') , ( 'LABEL','ID_RIGHT_MARGIN','en','Right Margin','2014-01-15') ,