This commit is contained in:
2022-02-23 20:39:05 +00:00
parent 14eeff67ef
commit a793b3a5f5
4 changed files with 273 additions and 73 deletions

View File

@@ -3,11 +3,45 @@ const role = authorizationroles.AUTHORIZATION_ROLES;
export default { export default {
registry: [ registry: [
{ {
id: "dash-today-reminders-wo", id: "dash-today-reminders",
roles: [role.Tech, role.TechRestricted], roles: [
role.BizAdmin,
role.BizAdminRestricted,
role.ServiceRestricted,
role.Service,
role.InventoryRestricted,
role.Inventory,
role.Accounting,
role.Tech,
role.TechRestricted,
role.OpsAdmin,
role.OpsAdminRestricted,
role.Sales,
role.SalesRestricted
],
title: "ReminderList", title: "ReminderList",
type: "GzDashTodayReminders" type: "GzDashTodayReminders"
}, },
{
id: "dash-today-reviews",
roles: [
role.BizAdmin,
role.BizAdminRestricted,
role.ServiceRestricted,
role.Service,
role.InventoryRestricted,
role.Inventory,
role.Accounting,
role.Tech,
role.TechRestricted,
role.OpsAdmin,
role.OpsAdminRestricted,
role.Sales,
role.SalesRestricted
],
title: "ReviewList",
type: "GzDashTodayReviews"
},
{ {
id: "dash-today-scheduled-wo", id: "dash-today-scheduled-wo",
roles: [role.Tech, role.TechRestricted], roles: [role.Tech, role.TechRestricted],

View File

@@ -62,8 +62,18 @@ export default {
}, },
computed: {}, computed: {},
created() {
//console.log("reminders-created");
},
updated() {
//console.log("reminders-updated");
},
beforeUpdate() {
//console.log("reminders-beforeUpdate");
},
async mounted() { async mounted() {
//must be called from mounted to have refs available //must be called from mounted to have refs available
//console.log("reminders-mounted");
await this.getDataFromApi(); await this.getDataFromApi();
}, },
methods: { methods: {
@@ -80,6 +90,7 @@ export default {
}, },
async getDataFromApi() { async getDataFromApi() {
//console.log("reminders-getdata");
let now = new Date(); let now = new Date();
//set now for the calendar to trigger a refresh //set now for the calendar to trigger a refresh

View File

@@ -0,0 +1,149 @@
<template>
<gz-dash
icon="$ayiCalendarCheck"
:show-more-button="false"
:update-frequency="65000"
:error-message="errorMessage"
v-bind="$attrs"
@dash-refresh="getDataFromApi()"
v-on="$listeners"
>
<template slot="main">
<v-calendar
ref="rvwcalendar"
color="primary"
type="day"
hide-header
:now="now"
:interval-count="intervalCount"
:first-time="startAt"
:events="events"
:event-color="getEventColor"
:locale="languageName"
@click:event="showEvent"
>
<template v-slot:event="{ event, eventSummary }">
<div>
<!-- eslint-disable vue/no-v-html -->
<span
:class="event.textColor + '--text'"
v-html="eventSummary()"
/><v-icon v-if="!event.editable" x-small :color="event.textColor">
$ayiLock</v-icon
>
</div>
</template>
</v-calendar>
</template>
</gz-dash>
</template>
<script>
import GzDash from "./dash-base.vue";
export default {
components: {
GzDash
},
props: {
maxListItems: { type: Number, default: 10 }
},
data() {
return {
events: [],
errorMessage: null,
timeZoneName: window.$gz.locale.getResolvedTimeZoneName(),
languageName: window.$gz.locale.getResolvedLanguage(),
hour12: window.$gz.locale.getHour12(),
startAt: "00:00",
intervalCount: 24,
now: null
};
},
computed: {},
async mounted() {
//must be called from mounted to have refs available
await this.getDataFromApi();
},
methods: {
getEventColor(event) {
return event.color;
},
showEvent({ nativeEvent, event }) {
nativeEvent.stopPropagation();
window.$gz.eventBus.$emit("openobject", {
type: event.type,
id: event.id
});
},
async getDataFromApi() {
let now = new Date();
//set now for the calendar to trigger a refresh
//if this doesn't work then need to trigger the change event: https://vuetifyjs.com/en/api/v-calendar/#events
this.now = now.toLocaleString("sv-SE", {
timeZone: this.timeZoneName
});
this.$refs.rvwcalendar.scrollToTime({
hour: now.getHours(),
minute: 0
});
try {
this.errorMessage = null;
const now = window.$gz.locale.nowUTC8601String(this.timeZoneName);
const res = await window.$gz.api.post("schedule/personal", {
view: 1,
dark: this.$store.state.darkMode,
start: window.$gz.locale.addDurationToUTC8601String(now, {
hours: -24
}),
end: window.$gz.locale.addDurationToUTC8601String(now, { hours: 24 }),
wisu: false,
reviews: true,
reminders: false
});
if (res.error) {
this.errorMessage = res.error;
} else {
this.events.splice(0);
const timeZoneName = this.timeZoneName;
let i = res.data.length;
while (i--) {
const x = res.data[i];
this.events.push({
start: new Date(
new Date(x.start)
.toLocaleString("sv-SE", {
timeZone: timeZoneName
})
.replace(" ", "T")
).getTime(),
end: new Date(
new Date(x.end)
.toLocaleString("sv-SE", {
timeZone: timeZoneName
})
.replace(" ", "T")
).getTime(),
timed: true,
name: x.name,
color: x.color,
textColor: x.textColor,
type: x.type,
id: x.id,
editable: x.editable,
userId: x.userId
});
}
}
} catch (error) {
this.errorMessage = error.toString();
}
}
}
};
</script>

View File

@@ -1,74 +1,77 @@
<template> <template>
<v-row v-if="formState.ready"> <div>
<gz-error :error-box-message="formState.errorBoxMessage"></gz-error> <v-row v-if="formState.ready">
<v-col cols="12"> <gz-error :error-box-message="formState.errorBoxMessage"></gz-error>
<h2>DASHBOARD UNDER CONSTRUCTION</h2>
</v-col>
<v-col v-if="showSelector" cols="12">
<v-dialog
v-model="showSelector"
scrollable
max-width="600px"
data-cy="dashSelector"
@keydown.esc="cancel"
>
<v-card elevation="24">
<v-card-title class="text-h5 lighten-2" primary-title>
<span> {{ $ay.t("Add") }} </span>
</v-card-title>
<v-card-text style="height: 500px;"> <v-col v-if="showSelector" cols="12">
<v-list> <v-dialog
<v-list-item v-model="showSelector"
v-for="item in availableItems()" scrollable
:key="item.id" max-width="600px"
@click="addItem(item)" data-cy="dashSelector"
@keydown.esc="cancel"
>
<v-card elevation="24">
<v-card-title class="text-h5 lighten-2" primary-title>
<span> {{ $ay.t("Add") }} </span>
</v-card-title>
<v-card-text style="height: 500px;">
<v-list>
<v-list-item
v-for="item in availableItems()"
:key="item.id"
@click="addItem(item)"
>
<v-list-item-title>{{ $ay.t(item.title) }}</v-list-item-title>
</v-list-item>
</v-list>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-btn
color="primary"
text
data-cy="dashSelector:cancel"
@click.native="showSelector = false"
>{{ $ay.t("Cancel") }}</v-btn
> >
<v-list-item-title>{{ $ay.t(item.title) }}</v-list-item-title> </v-card-actions>
</v-list-item> </v-card>
</v-list> </v-dialog>
</v-card-text> </v-col>
</v-row>
<v-divider></v-divider> <v-row>
<v-card-actions> <v-col
<v-btn v-for="(item, i) in effectiveView"
color="primary" :key="i"
text class="d-flex child-flex"
data-cy="dashSelector:cancel" cols="12"
@click.native="showSelector = false" sm="6"
>{{ $ay.t("Cancel") }}</v-btn lg="4"
> xl="3"
</v-card-actions>
</v-card>
</v-dialog>
</v-col>
<v-col v-if="!hasItems()" cols="12">
<v-btn outlined @click.native="showSelector = true">{{
$ay.t("Add")
}}</v-btn>
</v-col>
<v-col
v-for="(item, i) in effectiveView"
:key="i"
class="d-flex child-flex"
cols="12"
sm="6"
lg="4"
xl="3"
>
<component
:is="item.type"
v-bind="item"
:max-list-items="10"
@dash-remove="dashRemove"
@dash-move-start="dashMoveStart"
@dash-move-back="dashMoveBack"
@dash-move-forward="dashMoveForward"
@dash-move-end="dashMoveEnd"
> >
</component> <component
</v-col> :is="item.type"
</v-row> :ref="item.ref"
v-bind="item"
:max-list-items="10"
@dash-remove="dashRemove"
@dash-move-start="dashMoveStart"
@dash-move-back="dashMoveBack"
@dash-move-forward="dashMoveForward"
@dash-move-end="dashMoveEnd"
>
</component>
</v-col>
<v-col cols="12">
<v-btn outlined @click.native="showSelector = true">{{
$ay.t("Add")
}}</v-btn>
</v-col>
</v-row>
</div>
</template> </template>
<script> <script>
@@ -81,6 +84,7 @@ import GzDashTestLineWidgetMonthlyTotalPrice from "../components/dash-test-line-
import GzDashTestDayCalendarWidget from "../components/dash-test-day-calendar-widget.vue"; import GzDashTestDayCalendarWidget from "../components/dash-test-day-calendar-widget.vue";
import GzDashTodayScheduledWo from "../components/dash-today-scheduled-wo.vue"; import GzDashTodayScheduledWo from "../components/dash-today-scheduled-wo.vue";
import GzDashTodayReminders from "../components/dash-today-reminders.vue"; import GzDashTodayReminders from "../components/dash-today-reminders.vue";
import GzDashTodayReviews from "../components/dash-today-reviews.vue";
export default { export default {
components: { components: {
@@ -89,7 +93,8 @@ export default {
GzDashTestLineWidgetMonthlyTotalPrice, GzDashTestLineWidgetMonthlyTotalPrice,
GzDashTestDayCalendarWidget, GzDashTestDayCalendarWidget,
GzDashTodayScheduledWo, GzDashTodayScheduledWo,
GzDashTodayReminders GzDashTodayReminders,
GzDashTodayReviews
}, },
data() { data() {
return { return {
@@ -139,9 +144,9 @@ export default {
} }
}, },
methods: { methods: {
hasItems: function() { // hasItems: function() {
return this.effectiveView && this.effectiveView.length > 0; // return this.effectiveView && this.effectiveView.length > 0;
}, // },
dashMoveStart: function(id) { dashMoveStart: function(id) {
this.move("start", id); this.move("start", id);
}, },
@@ -204,6 +209,7 @@ export default {
}, },
addItem: function(item) { addItem: function(item) {
this.showSelector = false; this.showSelector = false;
item.ref = "db" + Date.now();
this.effectiveView.push(item); this.effectiveView.push(item);
this.saveView(); this.saveView();
}, },