Merge branch 'release/3.6.0' of https://bitbucket.org/colosa/processmaker into debugger

This commit is contained in:
Henry Jordan
2021-01-21 18:16:41 +00:00
20 changed files with 526 additions and 69 deletions

View File

@@ -45,6 +45,16 @@ export let cases = {
keys: {} keys: {}
}); });
}, },
openSummary(data) {
var params = new FormData();
params.append('appUid', data.APP_UID);
params.append('delIndex', data.DEL_INDEX);
params.append('action', 'todo');
return axios.post(window.config.SYS_SERVER +
window.config.SYS_URI +
`appProxy/requestOpenSummary`, params);
},
inputdocuments(data) { inputdocuments(data) {
var params = new FormData(); var params = new FormData();
params.append('appUid', data.APP_UID); params.append('appUid', data.APP_UID);
@@ -73,7 +83,11 @@ export let cases = {
return axios.post(window.config.SYS_SERVER + return axios.post(window.config.SYS_SERVER +
window.config.SYS_URI + window.config.SYS_URI +
`appProxy/getSummary`, params); `appProxy/getSummary`, params, {
headers: {
'Cache-Control': 'no-cache'
}
});
}, },
casenotes(data) { casenotes(data) {
var params = new FormData(); var params = new FormData();

View File

@@ -72,11 +72,12 @@ export let filters = {
/** /**
* Service to get the users list * Service to get the users list
*/ */
taskList(query) { taskList(params) {
return Api.get({ return Api.get({
service: "TASKS", service: "TASKS",
params: { params: {
text: query, text: params.query,
proId: params.proId
}, },
keys: {}, keys: {},
}); });

View File

@@ -0,0 +1,47 @@
<template>
<div class="summaryForm">
<iframe
:width="width"
ref="IFrameSummaryForm"
frameborder="0"
:src="path"
:height="height"
allowfullscreen
>
</iframe>
</div>
</template>
<script>
export default {
name: "MoreInformation",
props: {
data: Object
},
data() {
return {
height: "500px",
width: "100%",
diffHeight: 10
};
},
computed: {
path() {
let url = "";
if (this.data && this.data.DYN_UID) {
url =
window.config.SYS_SERVER +
window.config.SYS_URI +
'/cases/summary?APP_UID='+this.data.APP_UID +
'&DEL_INDEX=' + this.data.DEL_INDEX +
'&DYN_UID=' + this.data.DYN_UID;
}
return url;
},
},
mounted() {},
methods: {
}
}
</script>

View File

@@ -30,7 +30,7 @@ export default {
isOnMobile: false, isOnMobile: false,
hideToggle: true, hideToggle: true,
selectedTheme: "", selectedTheme: "",
sidebarWidth: "310px", sidebarWidth: "260px",
}; };
}, },
computed: { computed: {

View File

@@ -127,6 +127,7 @@
{{ tagContent(tag) }} {{ tagContent(tag) }}
</div> </div>
<component <component
:filters="filters"
v-bind:is="tagComponent(tag)" v-bind:is="tagComponent(tag)"
v-bind:info="tagInfo(tag)" v-bind:info="tagInfo(tag)"
v-bind:tag="tag" v-bind:tag="tag"

View File

@@ -39,7 +39,7 @@ export default {
SearchPopover, SearchPopover,
Multiselect Multiselect
}, },
props: ["tag", "info", "filter"], props: ["tag", "info", "filters", "filter"],
data() { data() {
return { return {
taks: [], taks: [],
@@ -53,9 +53,12 @@ export default {
*/ */
asyncFind(query) { asyncFind(query) {
let params = {};
this.isLoading = true; this.isLoading = true;
params.proId = this.getProcess();
params.query = query;
api.filters api.filters
.taskList(query) .taskList(params)
.then((response) => { .then((response) => {
this.taks = response.data; this.taks = response.data;
this.isLoading = false; this.isLoading = false;
@@ -64,6 +67,13 @@ export default {
console.error(err); console.error(err);
}); });
}, },
/**
* Get the process id to manage the dependency
*/
getProcess() {
let component = _.find(this.filters, function(o) { return o.fieldId === "processName"; });
return component ? component.value : null;
},
/** /**
* Form validations review * Form validations review
*/ */

View File

@@ -0,0 +1,81 @@
<template>
<div v-if="data.length" class="grouped-cell">
<div v-for="(item, index) in data" v-bind:key="item.TITLE" class="d-flex mb-3">
<div class="avatar" :id="id + index">
<b-avatar
variant="info"
:src="item.AVATAR"
size="2em"
></b-avatar>
</div>
<b-popover
:target="id + index"
placement="top"
ref="popover"
triggers="hover"
>
<b-row >
<b-col md="3">
<b-avatar
variant="info"
:src="item.AVATAR"
size="4em"
></b-avatar>
</b-col>
<b-col md="9">
<div class="font-weight-bold">{{item.USERNAME_DISPLAY_FORMAT}}</div>
<div v-if="item.POSITION !== ''">{{item.POSITION}}</div>
<b-link :href="mailto(item.EMAIL)" >{{item.EMAIL}}</b-link>
</b-col>
</b-row>
</b-popover>
<div class="col ellipsis">
{{ item.USERNAME_DISPLAY_FORMAT }}
</div>
</div>
</div>
</template>
<script>
export default {
name: "CurrentUserCell",
props: ["data"],
data() {
return {
id: "avatar-" + _.random(1000000)
};
},
methods: {
/**
* Generates the mail link
*/
mailto: function(email) {
return "mailto:" + email;
}
}
};
</script>
<style>
.popover {
max-width: 600px !important;
min-width: 200px !important;
}
.grouped-cell {
font-size: small;
}
.ellipsis {
white-space: nowrap;
width: 140px;
overflow: hidden;
text-overflow: ellipsis;
}
.color {
color: red;
}
.avatar {
color: "red";
width: "1.3em";
}
</style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<div v-if="data.length" class="grouped-cell"> <div v-if="data.length" class="grouped-cell">
<div v-for="item in data" v-bind:key="item.TITLE" class="d-flex mb-3"> <div v-for="(item, index) in data" v-bind:key="item.TITLE" class="d-flex mb-3">
<div <div
v-bind:style="{ color: activeColor(item.STATUS) }" v-bind:style="{ color: activeColor(item.STATUS) }"
v-b-popover.hover.top="item.DELAYED_MSG" v-b-popover.hover.top="item.DELAYED_MSG"
@@ -10,7 +10,7 @@
<div class="col ellipsis" v-b-popover.hover.top="item.TAS_NAME"> <div class="col ellipsis" v-b-popover.hover.top="item.TAS_NAME">
{{ item.TAS_NAME }} {{ item.TAS_NAME }}
</div> </div>
<div class="avatar" :id="id"> <div class="avatar" :id="id + index">
<b-avatar <b-avatar
variant="info" variant="info"
:src="item.AVATAR" :src="item.AVATAR"
@@ -18,7 +18,7 @@
></b-avatar> ></b-avatar>
</div> </div>
<b-popover <b-popover
:target="id" :target="id + index"
placement="top" placement="top"
ref="popover" ref="popover"
triggers="hover" triggers="hover"

View File

@@ -55,11 +55,7 @@
{{ props.row.STATUS }} {{ props.row.STATUS }}
</div> </div>
<div slot="current_user" slot-scope="props"> <div slot="current_user" slot-scope="props">
<div class="v-user-cell" v-for="item in props.row.USER"> <CurrentUserCell :data="props.row.USER_DATA" />
<div class="col .v-user-cell-ellipsis">
{{ item.USER_DATA }}
</div>
</div>
</div> </div>
<div slot="start_date" slot-scope="props"> <div slot="start_date" slot-scope="props">
{{ props.row.START_DATE }} {{ props.row.START_DATE }}
@@ -87,6 +83,7 @@ import ButtonFleft from "../components/home/ButtonFleft.vue";
import ModalNewRequest from "./ModalNewRequest.vue"; import ModalNewRequest from "./ModalNewRequest.vue";
import AdvancedFilter from "../components/search/AdvancedFilter"; import AdvancedFilter from "../components/search/AdvancedFilter";
import TaskCell from "../components/vuetable/TaskCell.vue"; import TaskCell from "../components/vuetable/TaskCell.vue";
import CurrentUserCell from "../components/vuetable/CurrentUserCell.vue";
import ModalComments from "./modal/ModalComments.vue"; import ModalComments from "./modal/ModalComments.vue";
import api from "./../api/index"; import api from "./../api/index";
import utils from "./../utils/utils"; import utils from "./../utils/utils";
@@ -98,6 +95,7 @@ export default {
ButtonFleft, ButtonFleft,
ModalNewRequest, ModalNewRequest,
TaskCell, TaskCell,
CurrentUserCell,
ModalComments ModalComments
}, },
props: ["id", "name", "filters"], props: ["id", "name", "filters"],
@@ -231,7 +229,7 @@ export default {
CASE_TITLE: v.DEL_TITLE, CASE_TITLE: v.DEL_TITLE,
PROCESS_NAME: v.PRO_TITLE, PROCESS_NAME: v.PRO_TITLE,
TASK: this.formatTasks(v.THREAD_TASKS), TASK: this.formatTasks(v.THREAD_TASKS),
USER: this.formatUser(v.THREAD_USERS), USER_DATA: this.formatUser(v.THREAD_USERS),
START_DATE: v.APP_CREATE_DATE_LABEL, START_DATE: v.APP_CREATE_DATE_LABEL,
FINISH_DATE: v.APP_FINISH_DATE_LABEL, FINISH_DATE: v.APP_FINISH_DATE_LABEL,
DURATION: v.DURATION, DURATION: v.DURATION,
@@ -263,12 +261,17 @@ export default {
dataFormat = []; dataFormat = [];
for (i = 0; i < data.length; i += 1) { for (i = 0; i < data.length; i += 1) {
dataFormat.push({ dataFormat.push({
USER_DATA: utils.userNameDisplayFormat({ USERNAME_DISPLAY_FORMAT: utils.userNameDisplayFormat({
userName: data[i].usr_firstname, userName: data[i].usr_firstname,
firstName: data[i].usr_lastname, firstName: data[i].usr_lastname,
lastName: data[i].usr_username, lastName: data[i].usr_username,
format: window.config.FORMATS.format || null format: window.config.FORMATS.format || null
}), }),
EMAIL: data[i].usr_email,
POSITION: data[i].usr_position,
AVATAR: window.config.SYS_SERVER +
window.config.SYS_URI +
`users/users_ViewPhotoGrid?pUID=${data[i].user_id}`
}); });
} }
return dataFormat; return dataFormat;

View File

@@ -201,6 +201,7 @@ export default {
this.getInputDocuments(); this.getInputDocuments();
this.getOutputDocuments(); this.getOutputDocuments();
this.getCasesNotes(); this.getCasesNotes();
this.requestOpenSummary();
}, },
methods: { methods: {
postComment(comment, send, files) { postComment(comment, send, files) {
@@ -280,7 +281,7 @@ export default {
action = _.find(response.data, function(o) { return o.id == "ACTIONS"; }); action = _.find(response.data, function(o) { return o.id == "ACTIONS"; });
if(action){ if(action){
option = _.find(action.options, function(o) { return o.fn == "cancelCase"; }); option = _.find(action.options, function(o) { return o.fn == "cancelCase"; });
if(!option.hide){ if(option && !option.hide){
that.dataCaseSummary.onClick = () => { that.dataCaseSummary.onClick = () => {
that.$refs["modal-cancel-case"].show(); that.$refs["modal-cancel-case"].show();
}; };
@@ -504,7 +505,24 @@ export default {
ACTION: "todo", ACTION: "todo",
}); });
this.$emit("onUpdatePage", "XCase"); this.$emit("onUpdatePage", "XCase");
},
/**
* Verify if the case has the permission Summary Form
* to add dynUid in dataCase
*/
requestOpenSummary() {
Api.cases
.openSummary(this.dataCase)
.then((response) => {
var data = response.data;
if (data.dynUid !== "") {
this.dataCase.DYN_UID = data.dynUid;
} }
})
.catch((e) => {
console.error(e);
});
},
}, },
}; };
</script> </script>

View File

@@ -49,6 +49,7 @@ import ModalNewRequest from "./ModalNewRequest.vue";
import CasesFilter from "../components/search/CasesFilter"; import CasesFilter from "../components/search/CasesFilter";
import TaskCell from "../components/vuetable/TaskCell.vue"; import TaskCell from "../components/vuetable/TaskCell.vue";
import api from "./../api/index"; import api from "./../api/index";
import utils from "./../utils/utils";
export default { export default {
name: "Draft", name: "Draft",
@@ -59,7 +60,7 @@ export default {
TaskCell, TaskCell,
CasesFilter, CasesFilter,
}, },
props: {}, props: ["defaultOption"],
data() { data() {
return { return {
newCase: { newCase: {
@@ -106,7 +107,9 @@ export default {
singleClickTimer: null singleClickTimer: null
}; };
}, },
mounted() {}, mounted() {
this.openDefaultCase();
},
watch: {}, watch: {},
computed: { computed: {
/** /**
@@ -119,6 +122,21 @@ export default {
updated() {}, updated() {},
beforeCreate() {}, beforeCreate() {},
methods: { methods: {
/**
* Open a case when the component was mounted
*/
openDefaultCase() {
let params;
if(this.defaultOption) {
params = utils.getAllUrlParams(this.defaultOption);
if (params && params.app_uid && params.del_index) {
this.openCase({
APP_UID: params.app_uid,
DEL_INDEX: params.del_index
});
}
}
},
/** /**
* On row click event handler * On row click event handler
* @param {object} event * @param {object} event

View File

@@ -24,6 +24,7 @@
:id="pageId" :id="pageId"
:pageUri="pageUri" :pageUri="pageUri"
:name="pageName" :name="pageName"
:defaultOption="defaultOption"
@onSubmitFilter="onSubmitFilter" @onSubmitFilter="onSubmitFilter"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdatePage="onUpdatePage" @onUpdatePage="onUpdatePage"
@@ -78,7 +79,7 @@ export default {
collapsed: false, collapsed: false,
selectedTheme: "", selectedTheme: "",
isOnMobile: false, isOnMobile: false,
sidebarWidth: "310px", sidebarWidth: "260px",
pageId: null, pageId: null,
pageName: null, pageName: null,
pageUri: null, pageUri: null,
@@ -93,7 +94,8 @@ export default {
CONSOLIDATED_CASES: "batch-routing", CONSOLIDATED_CASES: "batch-routing",
CASES_TO_REASSIGN: "task-reassignments", CASES_TO_REASSIGN: "task-reassignments",
CASES_FOLDERS: "my-documents" CASES_FOLDERS: "my-documents"
} },
defaultOption: window.config.defaultOption || ''
}; };
}, },
mounted() { mounted() {
@@ -311,7 +313,7 @@ export default {
<style lang="scss"> <style lang="scss">
#home { #home {
padding-left: 310px; padding-left: 260px;
transition: 0.3s; transition: 0.3s;
} }
#home.collapsed { #home.collapsed {

View File

@@ -441,6 +441,7 @@ export default {
onClick: (obj) => { onClick: (obj) => {
that.title = obj.title; that.title = obj.title;
that.filterHeader = obj.item; that.filterHeader = obj.item;
that.$refs["vueTable"].setPage(1); // Reset the page when change the header filter
that.$refs["vueTable"].getData(); that.$refs["vueTable"].getData();
}, },
class: info[v.id].class class: info[v.id].class

View File

@@ -92,7 +92,6 @@ export default {
"case_title", "case_title",
"process_name", "process_name",
"task", "task",
"current_user",
"due_date", "due_date",
"delegation_date", "delegation_date",
"priority", "priority",

View File

@@ -4,6 +4,10 @@
<tab :name="$t('ID_SUMMARY')"> <tab :name="$t('ID_SUMMARY')">
<PmCaseSummary :data="dataCaseSummary"> </PmCaseSummary> <PmCaseSummary :data="dataCaseSummary"> </PmCaseSummary>
</tab> </tab>
<tab :name="$t('ID_MORE_INFORMATION')">
<MoreInformation :data="dataCase" v-if="currentTab == $t('ID_MORE_INFORMATION')">
</MoreInformation>
</tab>
<tab :name="$t('ID_PROCESS_MAP')"> <tab :name="$t('ID_PROCESS_MAP')">
<ProcessMap :data="dataCase" v-if="currentTab == $t('ID_PROCESS_MAP')"> <ProcessMap :data="dataCase" v-if="currentTab == $t('ID_PROCESS_MAP')">
</ProcessMap> </ProcessMap>
@@ -25,6 +29,7 @@ import PmCaseSummary from "./../components/home/caseDetail/PmCaseSummary.vue";
import ProcessMap from "./../components/home/caseDetail/ProcessMap.vue"; import ProcessMap from "./../components/home/caseDetail/ProcessMap.vue";
import CaseHistory from "./../components/home/caseDetail/CaseHistory.vue"; import CaseHistory from "./../components/home/caseDetail/CaseHistory.vue";
import ChangeLog from "./../components/home/caseDetail/ChangeLog.vue"; import ChangeLog from "./../components/home/caseDetail/ChangeLog.vue";
import MoreInformation from './../components/home/caseDetail/MoreInformation.vue';
import Api from "../api/index"; import Api from "../api/index";
export default { export default {
@@ -36,6 +41,7 @@ export default {
PmCaseSummary, PmCaseSummary,
CaseHistory, CaseHistory,
ChangeLog, ChangeLog,
MoreInformation
}, },
props: { props: {
dataCase: Object, dataCase: Object,

View File

@@ -70,6 +70,7 @@ export default {
TaskCell, TaskCell,
CasesFilter, CasesFilter,
}, },
props: ["defaultOption"],
data() { data() {
return { return {
newCase: { newCase: {
@@ -85,7 +86,6 @@ export default {
"case_title", "case_title",
"process_name", "process_name",
"task", "task",
"current_user",
"due_date", "due_date",
"delegation_date", "delegation_date",
"priority", "priority",
@@ -136,6 +136,21 @@ export default {
updated() {}, updated() {},
beforeCreate() {}, beforeCreate() {},
methods: { methods: {
/**
* Open a case when the component was mounted
*/
openDefaultCase() {
let params;
if(this.defaultOption) {
params = utils.getAllUrlParams(this.defaultOption);
if (params && params.app_uid && params.del_index) {
this.openCase({
APP_UID: params.app_uid,
DEL_INDEX: params.del_index
});
}
}
},
/** /**
* On row click event handler * On row click event handler
* @param {object} event * @param {object} event

View File

@@ -13,11 +13,79 @@ export default {
format: '(@lastName, @firstName) @userName' format: '(@lastName, @firstName) @userName'
}; };
_.assignIn(defaultValues, params); _.assignIn(defaultValues, params);
console.log(defaultValues);
aux = defaultValues.format; aux = defaultValues.format;
aux = aux.replace('@userName',defaultValues.userName); aux = aux.replace('@userName',defaultValues.userName);
aux = aux.replace('@firstName',defaultValues.firstName); aux = aux.replace('@firstName',defaultValues.firstName);
aux = aux.replace('@lastName',defaultValues.lastName); aux = aux.replace('@lastName',defaultValues.lastName);
return aux; return aux;
},
/**
* Parse an url string and prepare an object of the parameters
* @param {string} url
* @returns {object}
*/
getAllUrlParams(url) {
// get query string from url (optional) or window
var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
// we'll store the parameters here
var obj = {};
// if query string exists
if (queryString) {
// stuff after # is not part of query string, so get rid of it
queryString = queryString.split('#')[0];
// split our query string into its component parts
var arr = queryString.split('&');
for (var i = 0; i < arr.length; i++) {
// separate the keys and the values
var a = arr[i].split('=');
// set parameter name and value (use 'true' if empty)
var paramName = a[0];
var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];
// (optional) keep case consistent
paramName = paramName.toLowerCase();
if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();
// if the paramName ends with square brackets, e.g. colors[] or colors[2]
if (paramName.match(/\[(\d+)?\]$/)) {
// create key if it doesn't exist
var key = paramName.replace(/\[(\d+)?\]/, '');
if (!obj[key]) obj[key] = [];
// if it's an indexed array e.g. colors[2]
if (paramName.match(/\[\d+\]$/)) {
// get the index value and add the entry at the appropriate position
var index = /\[(\d+)\]/.exec(paramName)[1];
obj[key][index] = paramValue;
} else {
// otherwise add the value to the end of the array
obj[key].push(paramValue);
}
} else {
// we're dealing with a string
if (!obj[paramName]) {
// if it doesn't exist, create property
obj[paramName] = paramValue;
} else if (obj[paramName] && typeof obj[paramName] === 'string'){
// if property does exist and it's a string, convert it to an array
obj[paramName] = [obj[paramName]];
obj[paramName].push(paramValue);
} else {
// otherwise add the property
obj[paramName].push(paramValue);
}
}
}
}
return obj;
} }
} }

View File

@@ -32,10 +32,26 @@
<b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback> <b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_PORT')"> <b-form-group :label="$root.translation('ID_PORT')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.port=!disabledField.port;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.port" <b-form-input v-model="form.port"
:state="validateState('port')" :state="validateState('port')"
:disabled="disabledField.port"
autocomplete="off"/> autocomplete="off"/>
<b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback> <b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback>
</b-input-group>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_ENABLE_AUTOMATIC_REGISTER')" <b-form-group :label="$root.translation('ID_ENABLE_AUTOMATIC_REGISTER')"
label-cols-lg="8"> label-cols-lg="8">
@@ -93,30 +109,108 @@
<b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback> <b-form-invalid-feedback>{{$root.translation('ID_IS_REQUIRED')}}</b-form-invalid-feedback>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_USER_IDENTIFIER')"> <b-form-group :label="$root.translation('ID_USER_IDENTIFIER')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.userIdentifier=!disabledField.userIdentifier;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.userIdentifier" <b-form-input v-model="form.userIdentifier"
autocomplete="off" autocomplete="off"
readonly/> :disabled="disabledField.userIdentifier"/>
</b-input-group>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_GROUP_IDENTIFIER')"> <b-form-group :label="$root.translation('ID_GROUP_IDENTIFIER')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.groupIdentifier=!disabledField.groupIdentifier;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.groupIdentifier" <b-form-input v-model="form.groupIdentifier"
autocomplete="off" autocomplete="off"
readonly/> :disabled="disabledField.groupIdentifier"/>
</b-input-group>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_FILTER_TO_SEARCH_USERS')"> <b-form-group :label="$root.translation('ID_FILTER_TO_SEARCH_USERS')">
<b-form-input v-model="form.filterToSearchUsers" <b-form-input v-model="form.filterToSearchUsers"
autocomplete="off"/> autocomplete="off"/>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_USER_CLASS_IDENTIFIER')"> <b-form-group :label="$root.translation('ID_USER_CLASS_IDENTIFIER')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.userClassIdentifier=!disabledField.userClassIdentifier;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.userClassIdentifier" <b-form-input v-model="form.userClassIdentifier"
:disabled="disabledField.userClassIdentifier"
autocomplete="off"/> autocomplete="off"/>
</b-input-group>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_GROUP_CLASS_IDENTIFIER')"> <b-form-group :label="$root.translation('ID_GROUP_CLASS_IDENTIFIER')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.groupClassIdentifier=!disabledField.groupClassIdentifier;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.groupClassIdentifier" <b-form-input v-model="form.groupClassIdentifier"
:disabled="disabledField.groupClassIdentifier"
autocomplete="off"/> autocomplete="off"/>
</b-input-group>
</b-form-group> </b-form-group>
<b-form-group :label="$root.translation('ID_DEPARTMENT_CLASS_IDENTIFIER')"> <b-form-group :label="$root.translation('ID_DEPARTMENT_CLASS_IDENTIFIER')">
<b-input-group>
<template #append>
<b-input-group-text class="p-0">
<b-button size="md"
variant="outline-light"
class="border-0"
@click="disabledField.departmentClassIdentifier=!disabledField.departmentClassIdentifier;">
<b-icon icon="pencil-fill"
aria-hidden="true"
variant="primary">
</b-icon>
</b-button>
</b-input-group-text>
</template>
<b-form-input v-model="form.departmentClassIdentifier" <b-form-input v-model="form.departmentClassIdentifier"
:disabled="disabledField.departmentClassIdentifier"
autocomplete="off"/> autocomplete="off"/>
</b-input-group>
</b-form-group> </b-form-group>
</b-col> </b-col>
</b-row> </b-row>
@@ -228,7 +322,14 @@
{value: "ds", text: "389 DS"} {value: "ds", text: "389 DS"}
], ],
roles: [], roles: [],
show: true disabledField: {
port: true,
userIdentifier: true,
groupIdentifier: true,
userClassIdentifier: true,
groupClassIdentifier: true,
departmentClassIdentifier: true
}
}; };
}, },
methods: { methods: {

View File

@@ -698,4 +698,35 @@ class Home extends Api
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
} }
} }
/**
* Get the process debug status
*
* @url GET /process-debug-status
*
* @param string $processUid
*
* @return bool
*
* @throws Exception
*
* @access protected
* @class AccessControl {@permission PM_CASES}
*/
public function getProcessDebugStatus($processUid)
{
try {
// Get the process requested
$process = Process::query()->select(['PRO_DEBUG'])->where('PRO_UID', '=', $processUid)->first();
if (!is_null($process)) {
return $process->PRO_DEBUG === 1;
}
} catch (Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
// If not exists the requested process throw an 404 error
if (is_null($process)) {
throw new RestException(404, "Process with Uid '{$processUid}'.");
}
}
} }

View File

@@ -1080,26 +1080,39 @@ Ext.onReady(function(){
var data = Ext.util.JSON.decode(result.responseText); var data = Ext.util.JSON.decode(result.responseText);
if (data.status == true) { if (data.status == true) {
if (!isBrowserIE()) { if (!isBrowserIE()) {
if (typeof parent.notify !== "undefined") {
// The case was cancelled // The case was cancelled
parent.notify('', _("ID_CASE_CANCELLED", stringReplace("\\: ", "", _APP_NUM))); parent.notify('', _("ID_CASE_CANCELLED", stringReplace("\\: ", "", _APP_NUM)));
}
if (typeof parent.updateCasesTree !== "undefined") {
parent.updateCasesTree(); parent.updateCasesTree();
}
if (typeof parent.highlightCasesTree !== "undefined") {
parent.highlightCasesTree(); parent.highlightCasesTree();
} }
}
} else { } else {
if (!isBrowserIE()) { if (!isBrowserIE()) {
if (typeof parent.notify !== "undefined") {
// The case wasn't cancel // The case wasn't cancel
parent.notify('', data.msg); parent.notify('', data.msg);
} }
} }
}
} catch (e) { } catch (e) {
if (isBrowserIE()) { if (isBrowserIE()) {
Ext.MessageBox.alert(_('ID_FAILED'), _('ID_SOMETHING_WRONG')); Ext.MessageBox.alert(_('ID_FAILED'), _('ID_SOMETHING_WRONG'));
} else { } else {
if (typeof parent.notify !== "undefined") {
parent.notify('', _('ID_SOMETHING_WRONG')); parent.notify('', _('ID_SOMETHING_WRONG'));
} }
} }
}
if (typeof parent.postMessage !== "undefined") {
parent.postMessage("redirect=todo","*");
} else {
location.href = 'casesListExtJs'; location.href = 'casesListExtJs';
}
}, },
failure: function (result, request) { failure: function (result, request) {
Ext.MessageBox.alert(_('ID_FAILED'), result.responseText); Ext.MessageBox.alert(_('ID_FAILED'), result.responseText);
@@ -1361,13 +1374,22 @@ Ext.onReady(function(){
var data = Ext.util.JSON.decode(result.responseText); var data = Ext.util.JSON.decode(result.responseText);
if( data.status == 0 ) { if( data.status == 0 ) {
try { try {
if (typeof parent.notify !== "undefined") {
parent.notify('', data.msg); parent.notify('', data.msg);
}
if (typeof parent.updateCasesTree !== "undefined") {
parent.updateCasesTree(); parent.updateCasesTree();
}
if (typeof parent.highlightCasesTree !== "undefined") {
parent.highlightCasesTree(); parent.highlightCasesTree();
} }
catch (e) { } catch (e) {
} }
if (typeof parent.postMessage !== "undefined") {
parent.postMessage("redirect=todo", "*");
} else {
location.href = 'casesListExtJs'; location.href = 'casesListExtJs';
}
} else { } else {
alert(data.msg); alert(data.msg);
} }
@@ -1562,12 +1584,22 @@ Ext.onReady(function(){
success : function(res, req) { success : function(res, req) {
if(req.result.success) { if(req.result.success) {
try { try {
if (typeof parent.notify !== "undefined") {
parent.notify('PAUSE CASE', req.result.msg); parent.notify('PAUSE CASE', req.result.msg);
parent.updateCasesTree();
parent.highlightCasesTree();
}catch (e) {
} }
if (typeof parent.updateCasesTree !== "undefined") {
parent.updateCasesTree();
}
if (typeof parent.highlightCasesTree !== "undefined") {
parent.highlightCasesTree();
}
} catch (e) {
}
if (typeof parent.postMessage !== "undefined") {
parent.postMessage("redirect=todo", "*");
} else {
location.href = urlToRedirectAfterPause; location.href = urlToRedirectAfterPause;
}
} else { } else {
PMExt.error(_('ID_ERROR'), req.result.msg); PMExt.error(_('ID_ERROR'), req.result.msg);
} }
@@ -1657,13 +1689,22 @@ Ext.onReady(function(){
var data = Ext.util.JSON.decode(result.responseText); var data = Ext.util.JSON.decode(result.responseText);
if( data.success ) { if( data.success ) {
try { try {
if (typeof parent.PMExt.updateCasesTree !== "undefined") {
parent.PMExt.notify(_('ID_DELETE_ACTION'), data.msg); parent.PMExt.notify(_('ID_DELETE_ACTION'), data.msg);
}
if (typeof parent.updateCasesTree !== "undefined") {
parent.updateCasesTree(); parent.updateCasesTree();
}
if (typeof parent.highlightCasesTree !== "undefined") {
parent.highlightCasesTree(); parent.highlightCasesTree();
} }
catch (e) { } catch (e) {
} }
if (typeof parent.postMessage !== "undefined") {
parent.postMessage("redirect=todo", "*");
} else {
location.href = 'casesListExtJs'; location.href = 'casesListExtJs';
}
} else { } else {
PMExt.error(_('ID_ERROR'), data.msg); PMExt.error(_('ID_ERROR'), data.msg);
} }