PMCORE-2516

new methods ajax
This commit is contained in:
fabio
2020-12-07 14:33:27 -04:00
parent ccfa877170
commit 0609732022
6 changed files with 739 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
<template>
<Tabs>
<Tab
v-for="item in data.items"
:key="item.title"
:title="item.title"
v-on:click="selectedTab"
>
{{ item.title }}
</Tab>
</Tabs>
</template>
<script>
import { Tabs, Tab } from 'vue-slim-tabs'
export default {
props: {
data: Object
},
components: {
Tabs, Tab
},
data() {
return {
0: function() {
console.log(this.data.items[0].appUid);
}
};
},
methods: {
selectedTab(e, index) {
if (index === 0) {
console.log("fabio")
}
}
},
}
</script>
<style src="vue-slim-tabs/themes/default.css"></style>

View File

@@ -0,0 +1,92 @@
<template>
<div class="card v-case-summary-card" style="width: 20rem">
<div class="card-body">
<h6 class="card-subtitle mb-2 text-muted">{{ data.title }}</h6>
<div class="card-text">
<div
v-for="item in data.items"
:key="item.title"
class="v-attached-block"
>
<div class="v-list v-list-row block">
<div class="v-list-item">
<div class="v-attached-icon">
<i :class="classIcon(item.extension)"></i>
</div>
<div class="flex">
<div @click="item.onClick" class="v-item-except text-sm h-1x">
{{ item.title }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "AttachedDocuments",
props: {
data: Object,
},
data() {
return {
icon: {
pdf: "fas fa-file-pdf",
doc: "fas fa-file-word",
},
};
},
methods: {
classBtn(cls) {
return "btn v-btn-request " + cls;
},
classIcon(icon) {
return this.icon[icon];
},
},
};
</script>
<style>
.v-list-item {
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
}
.v-list-row .v-list-item {
-ms-flex-direction: row;
flex-direction: row;
-ms-flex-align: center;
align-items: center;
}
.block {
background: #fff;
border-width: 0;
border-radius: 0.25rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.v-list {
padding-left: 0;
padding-right: 0;
}
.v-item-except {
padding-left: 10px;
color: #6c757d !important;
}
.v-attached-icon {
font-size: 25px;
}
</style>

View File

@@ -0,0 +1,107 @@
<template>
<div class="card v-case-summary-card" style="width: 20rem">
<div class="card-body">
<h6 class="card-subtitle mb-2 text-muted">{{ data.title }}</h6>
<div class="card-text v-case-summary-card-body">
<div>
<span> {{ data.label.numberCase }} </span>:<span
class="font-weight-bold"
>
{{ data.text.numberCase }}</span
>
</div>
<div>
<span> {{ data.label.process }} </span>:<span
class="font-weight-bold"
>
{{ data.text.process }}</span
>
</div>
<div>
<span> {{ data.label.status }} </span>:<span class="font-weight-bold">
{{ data.text.status }}</span
>
</div>
<div>
<span> {{ data.label.caseTitle }} </span>:<span
class="font-weight-bold"
>
{{ data.text.caseTitle }}</span
>
</div>
<div>
<span> {{ data.label.created }} </span>:<span
class="font-weight-bold"
>
{{ data.text.created }}</span
>
</div>
<div>
<span> {{ data.label.delegationDate }} </span>:<span
class="font-weight-bold"
>
{{ data.text.delegationDate }}</span
>
</div>
<div>
<span> {{ data.label.duration }} </span>:<span
class="font-weight-bold"
>
{{ data.text.duration }}</span
>
</div>
</div>
<br />
<h6 class="card-subtitle mb-2 text-muted">{{ data.titleActions }}</h6>
<div v-if=data.btnType class="container v-case-summary-center">
<button
type="button"
class="btn btn-success btn-sm"
@click="data.onClick"
>
{{ data.btnLabel }}
</button>
</div>
<div v-else class="container v-case-summary-center">
<button
type="button"
class="btn btn-secondary btn-sm"
@click="data.onClick"
>
{{ data.btnLabel }}
</button>
</div>
</div>
</div>
</template>
<script>
export default {
name: "CaseSummary",
props: {
data: Object,
},
data() {
return {};
},
methods: {
classBtn(cls) {
return "btn v-btn-request " + cls;
},
},
};
</script>
<style>
.v-case-summary-card {
font-size: 13px;
}
.v-case-summary-card-body {
padding-left: 15px;
}
.v-case-summary-center {
text-align: center;
}
</style>

View File

@@ -0,0 +1,114 @@
<template>
<div class="card v-case-summary-card" style="width: 20rem">
<div class="card-body">
<h6 class="card-subtitle mb-2 text-muted">{{ data.titleInput }}</h6>
<div class="card-text">
<div
v-for="item in data.inputDocuments"
:key="item.title"
class="v-attached-block"
>
<div class="v-list v-list-row block">
<div class="v-list-item">
<div class="v-attached-icon">
<i :class="classIcon(item.extension)"></i>
</div>
<div class="flex">
<div @click="item.onClick" class="v-item-except text-sm h-1x">
{{ item.title }}
</div>
</div>
</div>
</div>
</div>
</div>
<br />
<h6 class="card-subtitle mb-2 text-muted">{{ data.titleOutput }}</h6>
<div class="card-text">
<div
v-for="item in data.outputDocuments"
:key="item.title"
class="v-attached-block"
>
<div class="v-list v-list-row block">
<div class="v-list-item">
<div class="v-attached-icon">
<i :class="classIcon(item.extension)"></i>
</div>
<div class="flex">
<div @click="item.onClick" class="v-item-except text-sm h-1x">
{{ item.title }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "IoDocuments",
props: {
data: Object,
},
data() {
return {
icon: {
pdf: "fas fa-file-pdf",
doc: "fas fa-file-word",
},
};
},
methods: {
classBtn(cls) {
return "btn v-btn-request " + cls;
},
classIcon(icon) {
return this.icon[icon];
},
},
};
</script>
<style>
.v-list-item {
position: relative;
display: -ms-flexbox;
display: flex;
-ms-flex-direction: column;
flex-direction: column;
min-width: 0;
word-wrap: break-word;
}
.v-list-row .v-list-item {
-ms-flex-direction: row;
flex-direction: row;
-ms-flex-align: center;
align-items: center;
}
.block {
background: #fff;
border-width: 0;
border-radius: 0.25rem;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}
.v-list {
padding-left: 0;
padding-right: 0;
}
.v-item-except {
padding-left: 10px;
color: #6c757d !important;
}
.v-attached-icon {
font-size: 25px;
}
</style>

View File

@@ -0,0 +1,300 @@
<template>
<div id="case-detail" ref="case-detail" class="v-container-mycases">
<div>
<p class="mb-2"><b-icon icon="arrow-left" @click="backSearch()"></b-icon><u>Back to Results</u></p>
</div>
<div class="row">
<div class="col-sm-8">
<div id="pending-task" ref="pending-task">
<v-server-table
:data="tableData"
:columns="columns"
:options="options"
ref="vueTable"
style="height:120px"
>
<div slot="task" slot-scope="props">
{{ props.row.TASK }}
</div>
<div slot="case_title" slot-scope="props">
{{ props.row.CASE_TITLE }}
</div>
<div slot="assignee" slot-scope="props">
{{ props.row.ASSIGNEE }}
</div>
<div slot="status" slot-scope="props">
{{ props.row.STATUS }}
</div>
<div slot="due_date" slot-scope="props">
{{ props.row.DUE_DATE }}
</div>
<div slot="actions">
<div class="btn-default">
<i class="fas fa-comments"></i>
<span class="badge badge-light">9</span>
<span class="sr-only">Continue</span>
</div>
</div>
</v-server-table>
</div>
<Tabs :data="dataTabs"></Tabs>
<div>
<p><b>Comments</b></p>
<div class="form-group">
<textarea class="form-control" name="comments" id="comments" cols="80" rows="5"></textarea>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="sendEmail">
<label class="form-check-label" for="sendEmail">Send email to Participants</label>
<button class="btn btn-secondary btn-sm" id="comment" name="comment">Comment</button>
</div>
</div>
</div>
</div>
<div class="col-sm4">
<case-summary :data="dataCaseSummary"></case-summary>
<io-documents :data="dataIoDocuments"></io-documents>
<attached-documents :data="dataAttachedDocuments"></attached-documents>
</div>
</div>
</div>
</template>
<script>
import Tabs from '../components/Tabs.vue';
import IoDocuments from '../components/cases/IoDocuments.vue';
import CaseSummary from '../components/cases/CaseSummary.vue';
import AttachedDocuments from '../components/cases/AttachedDocuments.vue';
export default {
name: "CaseDetail",
components: {
Tabs,
IoDocuments,
CaseSummary,
AttachedDocuments
},
props: {},
data () {
return {
columns: ["task", "case_title", "assignee", "status", "due_date", "actions"],
tableData:[{
task: "Approve Art",
case_title: "Case Title A",
assignee: "User 1",
status: "To Do",
due_date: "3 days",
}],
options: {
headings: {
task: this.$i18n.t("ID_TASK"),
case_title: this.$i18n.t("ID_CASE_TITLE"),
assignee: this.$i18n.t("ID_ASSIGNEE"),
status: this.$i18n.t("ID_STATUS"),
due_date: this.$i18n.t("ID_DUE_DATE"),
actions: this.$i18n.t("ID_ACTIONS")
},
selectable: {
mode: 'single', // or 'multiple'
only: function (row) {
return true // any condition
},
selectAllMode: 'all',// or 'page',
programmatic: false,
},
filterable: false
},
dataCaseSummary: {
title: "Case Summary",
titleActions: "Actions",
btnLabel: "Cancel Request",
btnType: false,
onClick: () => {
console.log("acitons");
},
label: {
numberCase: "Case #",
process: "Process",
status: "Status",
caseTitle: "Case title",
created: "Created",
delegationDate: "Delegation Date",
duration: "Duration",
},
text: {
numberCase: "",
process: "",
status: "",
caseTitle: "",
created: "",
delegationDate: "",
duration: "",
},
},
dataIoDocuments: {
titleInput: "Input Document",
inputDocuments: [
{
title: "Invoice January 2018.pdf",
extension: "pdf",
onClick: () => {
console.log("Attached document");
}
}
],
titleOutput: "Output Document",
outputDocuments: [
{
title: "Invoice January 2018.pdf",
extension: "pdf",
onClick: () => {
console.log("Attached document");
}
}
],
},
dataAttachedDocuments: {
title: "Attached Documents",
items: [
{
title: "Invoice January 2018.pdf",
extension: "pdf",
onClick: () => {
console.log("Attached document");
},
}
],
},
dataTabs: {
items: [
{
title: "Request Summary",
data: {
firstName: "Jason",
lastName: "Burne",
userName: "jburne@processmaker.com",
}
},
{
title: "Process Map",
data: [
{
pro_uid: "123dit"
}
]
},
{
title: "Case History"
},
{
title: "Change Log"
}
]
}
};
},
mounted() {
let that = this;
this.$el.getElementsByClassName('VuePagination__count')[0].remove();
this.getDataCaseSummary();
this.getDataIODocuments();
},
methods: {
getDataCaseSummary() {
var data = new FormData();
data.append('appUid', APP_UID);
data.append('delIndex', DEL_INDEX);
data.append('action', 'todo');
ProcessMaker.apiClient.post('../../../appProxy/getSummary', data).then((response) => {
var data = response.data;
this.dataCaseSummary = {
title: "Case Summary",
titleActions: "Actions",
btnLabel: "Cancel Request",
btnType: false,
onClick: () => {
console.log("acitons");
},
label: {
numberCase: data[2].label,
process: data[0].label,
status: data[3].label,
caseTitle: data[1].label,
created: data[6].label,
delegationDate: response.data[11].label,
duration: "Duration",
},
text: {
numberCase: data[2].value,
process: data[0].value,
status: data[3].value,
caseTitle: data[1].value,
created: data[6].value,
delegationDate: response.data[11].value.split(" ")[0],
duration: response.data[11].value.split(" ")[1],
},
}
}).catch((err) => {
throw new Error(err);
});
},
getDataIODocuments() {
this.getInputDocuments();
this.getOutputDocuments();
},
getInputDocuments() {
var data = new FormData();
data.append ('appUid', APP_UID);
data.append ('delIndex', DEL_INDEX);
ProcessMaker.apiClient.post('../../../cases/cases_Ajax.php?action=getCasesInputDocuments',data).then((response) => {
var data = response.data,
document = data.data,
i,
info;
if (data.totalCount > 0 && document !== []) {
this.dataIoDocuments.inputDocuments = [];
for (i = 0; i < data.totalCount; i += 1) {
info = {
"title" : document[i].TITLE,
"extension" : document[i].TITLE.split(".")[1],
"onClick" : document[i].DOWNLOAD_LINK
};
this.dataIoDocuments.inputDocuments.push(info);
}
}
}).catch((err) => {
throw new Error(err);
});
},
getOutputDocuments() {
var data = new FormData();
data.append ('appUid', APP_UID);
data.append ('delIndex', DEL_INDEX);
ProcessMaker.apiClient.post('../../../cases/cases_Ajax.php?action=getCasesOutputDocuments',data).then((response) => {
var data = response.data,
document = data.data,
i,
info;
if (data.totalCount > 0 && document !== []) {
this.dataIoDocuments.outputDocuments = [];
for (i = 0; i < data.totalCount; i += 1) {
info = {
"title" : document[i].TITLE,
"extension" : document[i].TITLE.split(".")[1],
"onClick" : document[i].DOWNLOAD_LINK
};
this.dataIoDocuments.outputDocuments.push(info);
}
}
}).catch((err) => {
throw new Error(err);
});
},
}
}
</script>

View File

@@ -541,6 +541,92 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) {
G::RenderPage('publish', 'raw');
break;
case 'getCasesInputDocuments':
$arrayToTranslation = array(
"INPUT" => G::LoadTranslation("ID_INPUT_DB"),
"OUTPUT" => G::LoadTranslation("ID_OUTPUT_DB"),
"ATTACHED" => G::LoadTranslation("ID_ATTACHED_DB")
);
$oCase = new Cases();
$fields = $oCase->loadCase($_POST['appUid']);
$sProcessUID = $fields['PRO_UID'];
$criteria = $oCase->getAllUploadedDocumentsCriteria(
$sProcessUID,
$_POST['appUid'],
'',
$_SESSION['USER_LOGGED'],
$_POST['delIndex']
);
if ($criteria->getDbName() == 'dbarray') {
$rs = ArrayBasePeer::doSelectRs($criteria);
} else {
$rs = GulliverBasePeer::doSelectRs($criteria);
}
$totalCount = $rs->getRecordCount();
if ($criteria->getDbName() == 'dbarray') {
$rs = ArrayBasePeer::doSelectRs($criteria);
} else {
$rs = GulliverBasePeer::doSelectRs($criteria);
}
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rs->next()) {
$result = $rs->getRow();
$result["TYPE"] = (array_key_exists($result["TYPE"], $arrayToTranslation)) ? $arrayToTranslation[$result["TYPE"]] : $result["TYPE"];
$result['CREATE_DATE'] = DateTime::convertUtcToTimeZone($result['CREATE_DATE']);
$aProcesses[] = $result;
}
$r = new stdclass();
$r->data = $aProcesses;
$r->totalCount = $totalCount;
echo Bootstrap::json_encode($r);
break;
case 'getCasesOutputDocuments':
$oCase = new Cases();
$fields = $oCase->loadCase($_POST['appUid']);
$sProcessUID = $fields['PRO_UID'];
$aProcesses = array();
$c = $oCase->getAllGeneratedDocumentsCriteria(
$sProcessUID,
$_POST['appUid'],
'',
$_SESSION['USER_LOGGED'],
$_POST['delIndex']
);
if ($c->getDbName() == 'dbarray') {
$rs = ArrayBasePeer::doSelectRs($c);
} else {
$rs = GulliverBasePeer::doSelectRs($c);
}
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$totalCount = 0;
for ($j = 0; $j < $rs->getRecordCount(); $j++) {
$result = $rs->getRow();
$result["FILEPDFEXIST"] = ($result["FILEPDF"]);
$result["DELETE_FILE"] = (isset($result['ID_DELETE']) && $result['ID_DELETE'] == 'Delete') ? true : false;
$result['CREATE_DATE'] = DateTime::convertUtcToTimeZone($result['CREATE_DATE']);
$aProcesses[] = $result;
$rs->next();
$totalCount++;
}
//!dateFormat
$conf = new Configurations();
try {
$globaleneralConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', '');
} catch (Exception $e) {
$generalConfCasesList = array();
}
$dateFormat = "";
$varFlag = isset($generalConfCasesList['casesListDateFormat']);
if ($varFlag && !empty($generalConfCasesList['casesListDateFormat'])) {
$dateFormat = $generalConfCasesList['casesListDateFormat'];
}
$r = new stdclass();
$r->data = $aProcesses;
$r->totalCount = $totalCount;
$r->dataFormat = $dateFormat;
echo Bootstrap::json_encode($r);
break;
case 'uploadDocumentGrid_Ajax':
global $G_PUBLISH;