This commit is contained in:
2021-06-10 19:23:55 +00:00
parent 7fd4bf9bb7
commit 3ac3b65a0e
7 changed files with 941 additions and 26 deletions

View File

@@ -383,13 +383,14 @@ todo: many biz objects are not using new PUT methodology
CURRENTLY DOING: Work order notifications
TODO: Notification related todos that came up:
Need to be able to open a wokrorder from a descendant and be taken directly to that item in the UI
scheduledonworkorder event for example will be a woitemscheduleduserid openable object
Need customer view of workorder just the basics
object opener needs to check if customer BEFORE it opens the work order as there needs to be a customer view with different data sent etc to avoid leaking private data
customerWorkorder object instead of workorder with summary I guess
Report can handle more detail when we get there
Need notifylinksubscription text in locale
OPENOBJECT HANDLER FOR WORKORDERS:
Need to be able to open a workorder from a descendant and be taken directly to that item in the UI
scheduledonworkorder event for example will be a woitemscheduleduserid openable object
Need customer view of workorder just the basics
object opener needs to check if customer BEFORE it opens the work order as there needs to be a customer view with different data sent etc to avoid leaking private data
customerWorkorder object instead of workorder with summary I guess
Report can handle more detail when we get there
Steps to test notifications:
plain in app delivery
@@ -405,19 +406,10 @@ Coded, tested, done:
ScheduledOnWorkorderImminent
OutsideServiceReceived
OutsideServiceOverdue
CustomerServiceImminent
todo 3: workorder notifications to code and test:
CustomerServiceImminent = 21,//* Workorder / WorkorderItemScheduledUser object?? THATS A LOT, MAYBE NO, WORKORDER SERVICE DATE OVERALL??K, notice that scheduled service is due, can set advance notice, CUSTOMER gets delivery
case 3725
No tag match remove from UI when using this one so customers can't see tags
User notification:
An age type notification with the days,hours,minutes etc note and a regular workorder link which client sees they are a customer (or head office) so it shows an alternative work order form and this goes with the alternative work order list available to customers in the UI as well.
No dates are shown in notifications by email only relative times. All users log in to get their correct date display.
Special message specifically for this type of notification saying service is upcoming click on link to view details.

View File

@@ -66,11 +66,11 @@ function initNavPanel() {
sub.push({
title: "CustomerServiceRequestList",
icon: "$ayiConciergeBell",
route: "/customer-csr-list",
route: "/customer-csr",
key: key++
});
window.$gz.store.commit("setHomePage", "/customer-csr-list");
window.$gz.store.commit("setHomePage", "/customer-csr");
CustomerHomePageSet = true;
}

View File

@@ -788,11 +788,25 @@ export default new Router({
)
},
{
path: "/customer-csr-list",
name: "customer-csr-list",
path: "/customer-workorders/:recordid",
name: "customer-workorder-edit",
component: () =>
import(
/* webpackChunkName: "customer" */ "./views/customer-csr-list.vue"
/* webpackChunkName: "customer" */ "./views/customer-workorder.vue"
)
},
{
path: "/customer-csr",
name: "customer-csr",
component: () =>
import(/* webpackChunkName: "customer" */ "./views/customer-csr.vue")
},
{
path: "/customer-csr/:recordid",
name: "customer-csr-edit",
component: () =>
import(
/* webpackChunkName: "customer" */ "./views/customer-csr-edit.vue"
)
},

View File

@@ -0,0 +1,909 @@
<template>
<div>
<gz-report-selector ref="reportSelector"></gz-report-selector>
<div v-if="formState.ready">
<gz-error :error-box-message="formState.errorBoxMessage"></gz-error>
<v-form ref="form">
<v-row>
<v-col cols="12" sm="6" lg="4" xl="3">
<h1>UNDER CONSTRUCTION</h1>
<h2>
Copied from service csr and not modified yet for customer usage
</h2>
<gz-pick-list
:aya-type="ayaTypes().Customer"
:show-edit-icon="true"
:include-inactive="true"
v-model="obj.customerId"
readonly
:label="$ay.t('Customer')"
ref="customerId"
data-cy="customerId"
></gz-pick-list>
</v-col>
<v-col cols="12" sm="6" lg="4" xl="3">
<v-select
:color="priorityColor()"
:item-color="priorityColor()"
v-model="obj.priority"
readonly
:items="selectLists.priorities"
item-text="name"
item-value="id"
:label="$ay.t('CustomerServiceRequestPriority')"
ref="priority"
data-cy="priority"
append-icon=""
>
<template v-slot:prepend
><v-icon :color="priorityColor()">
$ayiCircle
</v-icon>
</template></v-select
>
</v-col>
<v-col cols="12" sm="6" lg="4" xl="3">
<gz-date-picker
:label="$ay.t('Created')"
v-model="obj.dateRequested"
readonly
ref="dateRequested"
data-cy="dateRequested"
></gz-date-picker>
</v-col>
<v-col cols="12" sm="6" lg="4" xl="3">
<v-select
v-model="obj.status"
:items="selectLists.status"
item-text="name"
item-value="id"
readonly
:label="$ay.t('CustomerServiceRequestStatus')"
ref="status"
data-cy="status"
append-icon=""
></v-select>
</v-col>
<!-- //MIGRATE_OUTSTANDING put workorder picklist here and show if has a woitemid or whatever is required to link to the wo -->
<!-- ---------------------------------- -->
<v-col cols="12" sm="6" lg="4" xl="3">
<v-text-field
v-model="obj.name"
:readonly="formState.readOnly"
:label="$ay.t('CustomerServiceRequestTitle')"
:rules="[form().required(this, 'name')]"
:error-messages="form().serverErrors(this, 'name')"
ref="name"
data-cy="name"
@input="fieldValueChanged('name')"
></v-text-field>
</v-col>
<v-col
v-if="
form().showMe(
this,
'CustomerServiceRequestCustomerReferenceNumber'
)
"
cols="12"
sm="6"
lg="4"
xl="3"
>
<v-text-field
v-model="obj.customerReferenceNumber"
:readonly="formState.readOnly"
:label="$ay.t('CustomerServiceRequestCustomerReferenceNumber')"
ref="customerReferenceNumber"
data-cy="customerReferenceNumber"
:error-messages="
form().serverErrors(this, 'customerReferenceNumber')
"
@input="fieldValueChanged('customerReferenceNumber')"
></v-text-field>
</v-col>
<v-col
v-if="form().showMe(this, 'CustomerServiceRequestRequestedBy')"
cols="12"
sm="6"
lg="4"
xl="3"
>
<gz-pick-list
:aya-type="ayaTypes().User"
:variant="'outside'"
:show-edit-icon="true"
v-model="obj.requestedByUserId"
:readonly="formState.readOnly"
:label="$ay.t('CustomerServiceRequestRequestedBy')"
ref="requestedByUserId"
data-cy="requestedByUserId"
:error-messages="form().serverErrors(this, 'requestedByUserId')"
@input="fieldValueChanged('requestedByUserId')"
></gz-pick-list>
</v-col>
<v-col
v-if="form().showMe(this, 'CustomerServiceRequestItemUnitID')"
cols="12"
sm="6"
lg="4"
xl="3"
>
<gz-pick-list
:aya-type="ayaTypes().Unit"
:variant="'customerid:' + obj.customerId"
:show-edit-icon="true"
v-model="obj.unitId"
:readonly="formState.readOnly"
:label="$ay.t('CustomerServiceRequestItemUnitID')"
ref="unitId"
data-cy="unitId"
:error-messages="form().serverErrors(this, 'unitId')"
@input="fieldValueChanged('unitId')"
></gz-pick-list>
</v-col>
<!-- --------------------------------- -->
<v-col
v-if="form().showMe(this, 'CustomerServiceRequestDetails')"
cols="12"
>
<v-textarea
v-model="obj.notes"
:readonly="formState.readOnly"
:label="$ay.t('CustomerServiceRequestDetails')"
:error-messages="form().serverErrors(this, 'notes')"
ref="notes"
data-cy="notes"
@input="fieldValueChanged('notes')"
auto-grow
></v-textarea>
</v-col>
<v-col v-if="form().showMe(this, 'Tags')" cols="12">
<gz-tag-picker
v-model="obj.tags"
:readonly="formState.readOnly"
ref="tags"
data-cy="tags"
:error-messages="form().serverErrors(this, 'tags')"
@input="fieldValueChanged('tags')"
></gz-tag-picker>
</v-col>
<v-col cols="12">
<gz-custom-fields
v-model="obj.customFields"
:form-key="formCustomTemplateKey"
:readonly="formState.readOnly"
:parent-v-m="this"
ref="customFields"
data-cy="customFields"
:error-messages="form().serverErrors(this, 'customFields')"
@input="fieldValueChanged('customFields')"
></gz-custom-fields>
</v-col>
<v-col v-if="form().showMe(this, 'Wiki')" cols="12">
<gz-wiki
:aya-type="ayaType"
:aya-id="obj.id"
ref="wiki"
v-model="obj.wiki"
:readonly="formState.readOnly"
@input="fieldValueChanged('wiki')"
></gz-wiki
></v-col>
<v-col v-if="form().showMe(this, 'Attachments') && obj.id" cols="12">
<gz-attachments
:readonly="formState.readOnly"
:aya-type="ayaType"
:aya-id="obj.id"
></gz-attachments
></v-col>
</v-row>
</v-form>
<v-row justify="center">
<v-dialog v-model="woSelectorDialog" persistent max-width="300px">
<v-card>
<v-card-title>
<span class="text-h5">{{
$ay.t("CustomerServiceRequestAcceptToExisting")
}}</span>
</v-card-title>
<v-card-text>
<!-- //MIGRATE_OUTSTANDING awaiting workorder pick list, also this should be json variant data -->
<gz-pick-list
:aya-type="ayaTypes().WorkOrder"
:variant="'customerid:' + obj.customerId"
:show-edit-icon="false"
v-model="selectedWOId"
:label="$ay.t('WorkOrder')"
></gz-pick-list>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn
color="blue darken-1"
text
@click="woSelectorDialog = false"
>{{ $ay.t("Cancel") }}</v-btn
>
<v-btn color="blue darken-1" text @click="accept(selectedWOId)">{{
$ay.t("OK")
}}</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</div>
<template v-if="!formState.ready">
<v-progress-circular
indeterminate
color="primary"
:size="60"
></v-progress-circular>
</template>
</div>
</template>
<script>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* Xeslint-disable */
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
const FORM_KEY = "csr-edit";
const API_BASE_URL = "csr/";
const FORM_CUSTOM_TEMPLATE_KEY = "CustomerServiceRequest"; //<-- Should always be CoreBizObject AyaType name here where possible
export default {
async created() {
let vm = this;
try {
await initForm(vm);
vm.rights = window.$gz.role.getRights(
window.$gz.type.CustomerServiceRequest
);
vm.formState.readOnly = !vm.rights.change || vm.obj.status != 0;
window.$gz.eventBus.$on("menu-click", clickHandler);
//id 0 means create a new record don't load one
if (vm.$route.params.recordid != 0) {
//is there already an obj from a prior operation?
if (this.$route.params.obj) {
//yes, no need to fetch it
this.obj = this.$route.params.obj;
window.$gz.form.setFormState({
vm: vm,
loading: false
});
} else {
await vm.getDataFromApi(vm.$route.params.recordid); //let getdata handle loading
}
} else {
window.$gz.form.setFormState({
vm: vm,
loading: false
});
}
window.$gz.form.setFormState({
vm: vm,
dirty: false,
valid: true
});
generateMenu(vm);
} catch (error) {
window.$gz.errorHandler.handleFormError(error, vm);
} finally {
vm.formState.ready = true;
}
},
async beforeRouteLeave(to, from, next) {
if (!this.formState.dirty || JUST_DELETED) {
next();
return;
}
if ((await window.$gz.dialog.confirmLeaveUnsaved()) === true) {
next();
} else {
next(false);
}
},
beforeDestroy() {
window.$gz.eventBus.$off("menu-click", clickHandler);
},
data() {
return {
formCustomTemplateKey: FORM_CUSTOM_TEMPLATE_KEY,
selectedWOId: 0,
woSelectorDialog: false,
selectLists: {
status: [],
priorities: []
},
obj:
//IMPORTANT NOTE: Fields that are NON NULLABLE in the schema for the table but *are* hideable **MUST** have a default value set here or else there will be no way to save the record
//I.E. Serial, usertype fields, ACTIVE
//Also, if it's a non-nullable Enum backed field then it should have a valid selection i.e. not zero if there is no zero
/*{
"data": {
"id": 1,
"concurrency": 3058764,
"name": "We need to quantify the optical SQL circuit!",
"notes": "Ab impedit unde voluptate ipsam doloremque deserunt est eos ut.",
"wiki": null,
"customFields": null,
"tags": [
"green",
"violet"
],
"dateRequested": "2020-01-10T18:20:31.294229Z",
"customerId": 28,
"unitId": null,
"workorderItemId": null,
"requestedByUserId": 48,
"customerReferenceNumber": "65560804",
"status": 0,
"priority": 2
}
} */
{
id: 0,
concurrency: 0,
name: null,
active: true,
notes: null,
wiki: null,
customFields: "{}",
tags: [],
dateRequested: window.$gz.locale.nowUTC8601String(),
customerId: null,
unitId: null,
workorderItemId: null,
requestedByUserId: null, //window.$gz.store.state.userId, for outside version of this form
customerReferenceNumber: null,
status: 0,
priority: 0
},
formState: {
ready: false,
dirty: false,
valid: true,
readOnly: false,
loading: true,
errorBoxMessage: null,
appError: null,
serverError: {}
},
rights: window.$gz.role.defaultRightsObject(),
ayaType: window.$gz.type.CustomerServiceRequest
};
},
//WATCHERS
watch: {
formState: {
handler: function(val) {
//,oldval is available here too if necessary
if (this.formState.loading) {
return;
}
//enable / disable save button
if (val.dirty && val.valid && !val.readOnly) {
window.$gz.eventBus.$emit("menu-enable-item", FORM_KEY + ":save");
} else {
window.$gz.eventBus.$emit("menu-disable-item", FORM_KEY + ":save");
}
//enable / disable duplicate / new button
if (!val.dirty && val.valid && !val.readOnly) {
window.$gz.eventBus.$emit(
"menu-enable-item",
FORM_KEY + ":duplicate"
);
window.$gz.eventBus.$emit("menu-enable-item", FORM_KEY + ":new");
} else {
window.$gz.eventBus.$emit(
"menu-disable-item",
FORM_KEY + ":duplicate"
);
window.$gz.eventBus.$emit("menu-disable-item", FORM_KEY + ":new");
}
},
deep: true
}
},
methods: {
priorityColor: function() {
switch (this.obj.priority) {
case 1: //asap
return "warning";
case 2: //emergency
return "error";
default:
return "success";
}
},
canSave: function() {
return this.formState.valid && this.formState.dirty;
},
canDuplicate: function() {
return this.formState.valid && !this.formState.dirty;
},
ayaTypes: function() {
return window.$gz.type;
},
form() {
return window.$gz.form;
},
fieldValueChanged(ref) {
if (
this.formState.ready &&
!this.formState.loading &&
!this.formState.readOnly
) {
window.$gz.form.fieldValueChanged(this, ref);
}
},
async getDataFromApi(recordId) {
let vm = this;
window.$gz.form.setFormState({
vm: vm,
loading: true
});
if (!recordId) {
throw new Error(FORM_KEY + "::getDataFromApi -> Missing recordID!");
}
let url = API_BASE_URL + recordId;
try {
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.get(url);
if (res.error) {
//Not found?
if (res.error.code == "2010") {
window.$gz.form.handleObjectNotFound(vm);
}
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
vm.obj = res.data;
//modify the menu as necessary
generateMenu(vm);
//Update the form status
window.$gz.form.setFormState({
vm: vm,
dirty: false,
valid: true,
loading: false
});
vm.formState.readOnly = !vm.rights.change || vm.obj.status != 0;
}
} catch (error) {
window.$gz.errorHandler.handleFormError(error, vm);
} finally {
window.$gz.form.setFormState({
vm: vm,
loading: false
});
}
},
async submit() {
let vm = this;
if (vm.canSave == false) {
return;
}
try {
window.$gz.form.setFormState({
vm: vm,
loading: true
});
let url = API_BASE_URL; // + vm.$route.params.recordid;
//clear any errors vm might be around from previous submit
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.upsert(url, vm.obj);
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
//Logic for detecting if a post or put: if id then it was a post, if no id then it was a put
if (res.data.id) {
//POST - whole new object returned
vm.obj = res.data;
//Change URL to new record
//NOTE: will not cause a page re-render, almost nothing does unless forced with a KEY property or using router.GO()
this.$router.push({
name: "csr-edit",
params: {
recordid: res.data.id,
obj: res.data // Pass data object to new form
}
});
} else {
//PUT - only concurrency token is returned (**warning, if server changes object other fields then this needs to act more like POST above but is more efficient this way**)
//Handle "put" of an existing record (UPDATE)
vm.obj.concurrency = res.data.concurrency;
}
//Update the form status
window.$gz.form.setFormState({
vm: vm,
dirty: false,
valid: true
});
}
} catch (ex) {
window.$gz.errorHandler.handleFormError(ex, vm);
} finally {
window.$gz.form.setFormState({
vm: vm,
loading: false
});
}
},
async remove() {
let vm = this;
try {
let dialogResult = await window.$gz.dialog.confirmDelete();
if (dialogResult != true) {
return;
}
//do the delete
window.$gz.form.setFormState({
vm: vm,
loading: true
});
//No need to delete a new record, just abandon it...
if (vm.$route.params.recordid == 0) {
//this should not get offered for delete but to be safe and clear just in case:
JUST_DELETED = true;
// navigate backwards
vm.$router.go(-1);
} else {
let url = API_BASE_URL + vm.$route.params.recordid;
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.remove(url);
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
//workaround to prevent warning about leaving dirty record
//For some reason I couldn't just reset isdirty in formstate
JUST_DELETED = true;
// navigate backwards
vm.$router.go(-1);
}
}
} catch (error) {
//Update the form status
window.$gz.form.setFormState({
vm: vm,
loading: false
});
window.$gz.errorHandler.handleFormError(error, vm);
}
},
async reject() {
let vm = this;
if (vm.obj.status != 0 || vm.$route.params.recordid == 0) {
return;
}
window.$gz.form.setFormState({
vm: vm,
loading: true
});
let url = API_BASE_URL + "reject/" + vm.$route.params.recordid;
try {
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.upsert(url);
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
//Navigate to new record
this.$router.push({
name: "csr-edit",
params: {
recordid: res.data.id,
obj: res.data // Pass data object to new form
}
});
}
} catch (ex) {
window.$gz.errorHandler.handleFormError(ex, vm);
} finally {
window.$gz.form.setFormState({
vm: vm,
loading: false
});
}
},
async accept(toExistingId) {
let vm = this;
if (vm.obj.status != 0 || vm.$route.params.recordid == 0) {
return;
}
window.$gz.form.setFormState({
vm: vm,
loading: true
});
//get workorder if to existing
let url = `${API_BASE_URL}accept/${vm.$route.params.recordid}/${toExistingId}`;
try {
window.$gz.form.deleteAllErrorBoxErrors(vm);
let res = await window.$gz.api.upsert(url);
if (res.error) {
vm.formState.serverError = res.error;
window.$gz.form.setErrorBoxErrors(vm);
} else {
//Navigate to new record
this.$router.push({
name: "csr-edit",
params: {
recordid: res.data.id,
obj: res.data // Pass data object to new form
}
});
}
} catch (ex) {
window.$gz.errorHandler.handleFormError(ex, vm);
} finally {
window.$gz.form.setFormState({
vm: vm,
loading: false
});
}
}
//end methods
}
};
/////////////////////////////
//
//
async function clickHandler(menuItem) {
if (!menuItem) {
return;
}
let m = window.$gz.menu.parseMenuItem(menuItem);
if (m.owner == FORM_KEY && !m.disabled) {
switch (m.key) {
case "save":
m.vm.submit();
break;
case "delete":
m.vm.remove();
break;
case "reject":
m.vm.reject();
break;
case "acceptexisting":
m.vm.woSelectorDialog = true;
break;
case "acceptnew":
m.vm.accept(0);
break;
case "report":
if (m.id != null) {
//last report selected is in m.id
m.vm.$router.push({
name: "ay-report",
params: {
recordid: m.id,
ayatype: window.$gz.type.CustomerServiceRequest
}
});
} else {
//general report selector chosen
let res = await m.vm.$refs.reportSelector.open({
AType: window.$gz.type.CustomerServiceRequest,
selectedRowIds: [m.vm.obj.id]
});
//if null for no selection
//just bail out
if (res == null) {
return;
}
//persist last report selected
window.$gz.form.setLastReport(FORM_KEY, res);
//Now open the report viewer...
m.vm.$router.push({
name: "ay-report",
params: {
recordid: res.id,
ayatype: window.$gz.type.CustomerServiceRequest
}
});
}
break;
default:
window.$gz.eventBus.$emit(
"notify-warning",
FORM_KEY + "::context click: [" + m.key + "]"
);
}
}
}
//////////////////////
//
//
function generateMenu(vm) {
let menuOptions = {
isMain: false,
readOnly: vm.formState.readOnly || vm.obj.status != 0,
icon: "$ayiConciergeBell",
title: "CustomerServiceRequest",
helpUrl: "svc-csr",
formData: {
ayaType: window.$gz.type.CustomerServiceRequest,
recordId: vm.$route.params.recordid,
formCustomTemplateKey: FORM_CUSTOM_TEMPLATE_KEY,
recordName: vm.obj.name
},
menuItems: []
};
if (vm.rights.change) {
menuOptions.menuItems.push({
title: "Save",
icon: "$ayiSave",
surface: true,
key: FORM_KEY + ":save",
vm: vm
});
}
if (
vm.rights.delete &&
vm.$route.params.recordid != 0 &&
!vm.formState.readOnly
) {
menuOptions.menuItems.push({
title: "Delete",
icon: "$ayiTrashAlt",
surface: false,
key: FORM_KEY + ":delete",
vm: vm
});
}
//REPORTS
//Report not Print, print is a further option
menuOptions.menuItems.push({
title: "Report",
icon: "$ayiFileAlt",
key: FORM_KEY + ":report",
vm: vm
});
//get last report selected
let lastReport = window.$gz.form.getLastReport(FORM_KEY);
if (lastReport != null) {
menuOptions.menuItems.push({
title: lastReport.name,
icon: "$ayiFileAlt",
key: FORM_KEY + ":report:" + lastReport.id,
vm: vm
});
}
menuOptions.menuItems.push({ divider: true, inset: false });
if (vm.obj.status == 0) {
menuOptions.menuItems.push({
title: "CustomerServiceRequestAcceptToNew",
icon: null,
key: FORM_KEY + ":acceptnew",
vm: vm
});
menuOptions.menuItems.push({
title: "CustomerServiceRequestAcceptToExisting",
icon: null,
key: FORM_KEY + ":acceptexisting",
vm: vm
});
menuOptions.menuItems.push({
title: "CustomerServiceRequestReject",
icon: null,
key: FORM_KEY + ":reject",
vm: vm
});
}
menuOptions.menuItems.push({ divider: true, inset: false });
window.$gz.eventBus.$emit("menu-change", menuOptions);
}
let JUST_DELETED = false;
/////////////////////////////////
//
//
async function initForm(vm) {
await fetchTranslatedText();
await window.$gz.formCustomTemplate.get(FORM_CUSTOM_TEMPLATE_KEY, vm);
await populateSelectionLists(vm);
}
//////////////////////////////////////////////////////////
//
// Ensures UI translated text is available
//
async function fetchTranslatedText() {
await window.$gz.translation.cacheTranslations([
"CustomerServiceRequest",
"CustomerServiceRequestAcceptToNew",
"CustomerServiceRequestAcceptToExisting",
"CustomerServiceRequestReject",
"CustomerServiceRequestTitle",
"CustomerServiceRequestDetails",
"Created",
"Customer",
"CustomerServiceRequestItemUnitID",
"WorkOrder",
"CustomerServiceRequestRequestedBy",
"CustomerServiceRequestCustomerReferenceNumber",
"CustomerServiceRequestStatus",
"CustomerServiceRequestPriority",
"CustomerServiceRequestCustom1",
"CustomerServiceRequestCustom2",
"CustomerServiceRequestCustom3",
"CustomerServiceRequestCustom4",
"CustomerServiceRequestCustom5",
"CustomerServiceRequestCustom6",
"CustomerServiceRequestCustom7",
"CustomerServiceRequestCustom8",
"CustomerServiceRequestCustom9",
"CustomerServiceRequestCustom10",
"CustomerServiceRequestCustom11",
"CustomerServiceRequestCustom12",
"CustomerServiceRequestCustom13",
"CustomerServiceRequestCustom14",
"CustomerServiceRequestCustom15",
"CustomerServiceRequestCustom16"
]);
}
//////////////////////
//
//
async function populateSelectionLists(vm) {
//ensure the pick lists required are pre-fetched
await window.$gz.enums.fetchEnumList("CustomerServiceRequestStatus");
vm.selectLists.status = window.$gz.enums.getSelectionList(
"CustomerServiceRequestStatus"
);
await window.$gz.enums.fetchEnumList("CustomerServiceRequestPriority");
vm.selectLists.priorities = window.$gz.enums.getSelectionList(
"CustomerServiceRequestPriority"
);
}
</script>

View File

@@ -14,7 +14,7 @@ export default {
isMain: true,
icon: "$ayiConciergeBell",
title: "CustomerServiceRequestList",
helpUrl: "customer-csr-list"
helpUrl: "customer-csr"
});
}
};

View File

@@ -458,7 +458,7 @@ describe("SMOKE", () => {
.clear()
.type("CustomerFull{enter}");
cy.url({ timeout: 10000 }).should("include", "/customer-csr-list");
cy.url({ timeout: 10000 }).should("include", "/customer-csr");
cy.get("[data-cy=underconstruction]");
cy.visit("/customer-workorders");

View File

@@ -105,8 +105,8 @@ describe("TRANSLATION", () => {
.clear()
.type("CustomerLimited{enter}");
// we should be redirected to /customer-csr-list
cy.url().should("include", "/customer-csr-list");
// we should be redirected to /customer-csr
cy.url().should("include", "/customer-csr");
//nav to about form
// cy.get("[data-cy=contextmenu]").click();