- Load Events

- Edit Events
- When a field is updated: undate also memory list record

- Duplicate Event
This commit is contained in:
Paolo Arena
2019-10-20 22:44:18 +02:00
parent b8ec241b37
commit 9656b14cd0
11 changed files with 348 additions and 75 deletions

View File

@@ -349,7 +349,7 @@ export default class CEventsCalendar extends Vue {
}
public getEndTime(eventparam) {
let endTime = new Date(eventparam.date + ' ' + eventparam.time + ':00')
let endTime = new Date(eventparam.date)
endTime = date.addToDate(endTime, { minutes: eventparam.dur })
endTime = date.formatDate(endTime, 'HH:mm')
return endTime
@@ -421,8 +421,8 @@ export default class CEventsCalendar extends Vue {
this.resetForm()
this.contextDay = { ...eventparam }
let timestamp
if (eventparam.time) {
timestamp = eventparam.date + ' ' + eventparam.time
if (eventparam.withtime) {
timestamp = eventparam.date
const startTime = new Date(timestamp)
const endTime = date.addToDate(startTime, { minutes: eventparam.dur })
this.eventForm.dateTimeStart = this.formatDate(startTime) + ' ' + this.formatTime(startTime) // endTime.toString()
@@ -431,7 +431,7 @@ export default class CEventsCalendar extends Vue {
timestamp = eventparam.date
this.eventForm.dateTimeStart = timestamp
}
this.eventForm.allDay = !eventparam.time
this.eventForm.allDay = !eventparam.withtime
this.eventForm.bgcolor = eventparam.bgcolor
this.eventForm.icon = eventparam.icon
this.eventForm.title = eventparam.title
@@ -515,7 +515,7 @@ export default class CEventsCalendar extends Vue {
// an add
}
const data: IEvents = {
time: '',
withtime: false,
dur: 0,
dur2: 0,
title: form.title,
@@ -526,7 +526,7 @@ export default class CEventsCalendar extends Vue {
}
if (form.allDay === false) {
// get time into separate var
data.time = String(form.dateTimeStart).slice(11, 16)
// data.time = String(form.dateTimeStart).slice(11, 16)
data.dur = self.getDuration(form.dateTimeStart, form.dateTimeEnd, 'minutes')
}
if (update === true) {
@@ -685,7 +685,8 @@ export default class CEventsCalendar extends Vue {
return this.draggedEvent.date !== day.date
} else if (type === 'interval') {
stopAndPrevent(ev)
return this.draggedEvent.date !== day.date && this.draggedEvent.time !== day.time
// return this.draggedEvent.date !== day.date && this.draggedEvent.time !== day.time
return this.draggedEvent.date !== day.date
}
}
@@ -697,7 +698,7 @@ export default class CEventsCalendar extends Vue {
this.draggedEvent.side = void 0
} else if (type === 'interval') {
this.draggedEvent.date = day.date
this.draggedEvent.time = day.time
// this.draggedEvent.time = day.time
this.draggedEvent.side = void 0
}
}
@@ -724,6 +725,16 @@ export default class CEventsCalendar extends Vue {
return this.dateFormatter.format(mydate)
}
public getTeacherName(teacherusername) {
const op = CalendarStore.state.operators.find((myop) => myop.username === teacherusername)
return (op) ? `${op.name} ${op.surname}` : ''
}
public getTeacherImg(teacherusername) {
const op = CalendarStore.state.operators.find((myop) => myop.username === teacherusername)
return (op) ? op.img : 'avatar/noimage.png'
}
public badgeClasses(eventparam, type) {
const cssColor = tools.isCssColor(eventparam.bgcolor)
const isHeader = type === 'header'
@@ -743,7 +754,7 @@ export default class CEventsCalendar extends Vue {
s.color = colors.luminosity(eventparam.bgcolor) > 0.5 ? 'black' : 'white'
}
if (timeStartPos) {
s.top = timeStartPos(eventparam.time) + 'px'
s.top = timeStartPos(tools.getstrTime(eventparam.date)) + 'px'
}
if (timeDurationHeight) {
s.height = timeDurationHeight(eventparam.dur) + 'px'
@@ -786,7 +797,8 @@ export default class CEventsCalendar extends Vue {
for (let i = 0; i < CalendarStore.state.eventlist.length; ++i) {
// console.log(' ciclo i = ', i, CalendarStore.state.eventlist[i])
const dateEvent = new Date(CalendarStore.state.eventlist[i].date + ' 00:00:00')
// const dateEvent = new Date(CalendarStore.state.eventlist[i].date + ' 00:00:00')
const dateEvent = new Date(CalendarStore.state.eventlist[i].date)
if (dateEvent >= datenow) {
eventsloc.push(CalendarStore.state.eventlist[i])
@@ -802,14 +814,15 @@ export default class CEventsCalendar extends Vue {
for (let i = 0; i < CalendarStore.state.eventlist.length; ++i) {
let added = false
// console.log(' ciclo i = ', i, CalendarStore.state.eventlist[i])
if (CalendarStore.state.eventlist[i].date === dt) {
if (CalendarStore.state.eventlist[i].time) {
if (tools.getstrYYMMDDDate(CalendarStore.state.eventlist[i].date) === dt) {
// if (CalendarStore.state.eventlist[i].time) {
if (eventsloc.length > 0) {
// check for overlapping times
const startTime = new Date(CalendarStore.state.eventlist[i].date + ' ' + CalendarStore.state.eventlist[i].time)
// const startTime = new Date(CalendarStore.state.eventlist[i].date + ' ' + CalendarStore.state.eventlist[i].time)
const startTime = new Date(CalendarStore.state.eventlist[i].date)
const endTime = date.addToDate(startTime, { minutes: CalendarStore.state.eventlist[i].dur })
for (let j = 0; j < eventsloc.length; ++j) {
const startTime2 = new Date(eventsloc[j].date + ' ' + eventsloc[j].time)
const startTime2 = new Date(eventsloc[j].date)
const endTime2 = date.addToDate(startTime2, { minutes: eventsloc[j].dur2 })
if (date.isBetweenDates(startTime, startTime2, endTime2) || date.isBetweenDates(endTime, startTime2, endTime2)) {
eventsloc[j].side = 'left'
@@ -820,14 +833,15 @@ export default class CEventsCalendar extends Vue {
}
}
}
}
// }
if (!added) {
// CalendarStore.state.eventlist[i].side = void 0
eventsloc.push(CalendarStore.state.eventlist[i])
}
} else if (CalendarStore.state.eventlist[i].days) {
// check for overlapping dates
const startDate = new Date(CalendarStore.state.eventlist[i].date + ' 00:00:00')
// const startDate = new Date(CalendarStore.state.eventlist[i].date + ' 00:00:00')
const startDate = new Date(CalendarStore.state.eventlist[i].date)
const endDate = date.addToDate(startDate, { days: CalendarStore.state.eventlist[i].days })
if (date.isBetweenDates(dt, startDate, endDate)) {
eventsloc.push(CalendarStore.state.eventlist[i])
@@ -866,7 +880,8 @@ export default class CEventsCalendar extends Vue {
// check if event is in the past
const datenow = tools.addDays(tools.getDateNow(), -1)
let dateEvent = new Date(myevent.date + ' 00:00:00')
// let dateEvent = new Date(myevent.date + ' 00:00:00')
let dateEvent = new Date(myevent.date)
if (myevent.days) {
dateEvent = tools.addDays(dateEvent, myevent.days)

View File

@@ -32,16 +32,16 @@
<span class="cal__teacher-content">
<q-chip>
<q-avatar>
<img :src="`../../statics/images/avatar/` + myevent.avatar">
<img :src="`../../statics/images/` + getTeacherImg(myevent.teacher)">
</q-avatar>
<span class="cal__teacher-content">{{myevent.teacher}}</span>
<span class="cal__teacher-content">{{getTeacherName(myevent.teacher)}}</span>
</q-chip>
<span v-if="myevent.avatar2 && myevent.teacher2" class="margin_avatar2"></span>
<q-chip v-if="myevent.avatar2 && myevent.teacher2">
<span v-if="getTeacherImg(myevent.teacher2) && myevent.teacher2" class="margin_avatar2"></span>
<q-chip v-if="getTeacherImg(myevent.teacher2) && myevent.teacher2">
<q-avatar>
<img :src="`../../statics/images/avatar/` + myevent.avatar2">
<img :src="`../../statics/images/` + getTeacherImg(myevent.teacher2)">
</q-avatar>
<span class="cal__teacher-content">{{myevent.teacher2}}</span>
<span class="cal__teacher-content">{{getTeacherName(myevent.teacher2)}}</span>
</q-chip>
</span>
</div>
@@ -68,10 +68,10 @@
<span class="cal__hours-content">{{ myevent.infoextra }} </span>
</span>
<span v-else>
<span v-if="myevent.time" class="cal__hours">
<span v-if="myevent.withtime" class="cal__hours">
-
<span class="cal__hours-title">{{$t('cal.hours')}}: </span>
<span class="cal__hours-content">{{$t('cal.starttime')}} {{ myevent.time }} {{$t('cal.endtime')}}: {{
<span class="cal__hours-content">{{$t('cal.starttime')}} {{ tools.getstrTime(myevent.date) }} {{$t('cal.endtime')}}: {{
getEndTime(myevent) }}</span>
</span>
</span>
@@ -242,10 +242,10 @@
<span class="cal__hours-content">{{ myevent.infoextra }} </span>
</span>
<span v-else>
<span v-if="myevent.time" class="cal__hours">
<span v-if="myevent.withtime" class="cal__hours">
-
<span class="cal__hours-title">{{$t('cal.hours')}}: </span>
<span class="cal__hours-content"><span v-if="!tools.isMobile()">{{$t('cal.starttime')}} </span>{{ myevent.time }} <span v-if="!tools.isMobile()">{{$t('cal.endtime')}} </span><span v-else> - </span> {{
<span class="cal__hours-content"><span v-if="!tools.isMobile()">{{$t('cal.starttime')}} </span>{{ tools.getstrTime(myevent.date) }} <span v-if="!tools.isMobile()">{{$t('cal.endtime')}} </span><span v-else> - </span> {{
getEndTime(myevent) }}</span>
</span>
</span>
@@ -386,7 +386,7 @@
<div class="row justify-center">
<template v-for="(event, index) in eventsMap[date]">
<q-badge
v-if="!event.time"
v-if="!event.withtime"
:key="index"
style="width: 100%; cursor: pointer;"
class="ellipsis"
@@ -416,7 +416,7 @@
<template #day-body="{ date, timeStartPos, timeDurationHeight }">
<template v-for="(event, index) in getEvents(date)">
<q-badge
v-if="event.time"
v-if="event.withtime"
:key="index"
class="my-event justify-center ellipsis"
:class="badgeClasses(event, 'body')"
@@ -463,7 +463,7 @@
<div v-else>
<div v-if="event.date" class="listaev__date">
{{func_tools.getDateStr(event.date)}}
<span v-if="event.time" class="cal__hours-content"> - {{ event.time }} <span
<span v-if="event.withtime" class="cal__hours-content"> - {{ tools.getstrTime(event.date) }} <span
v-if="event.dur">- {{ getEndTime(event) }}</span></span>
<span v-if="event.days > 1"><br/>{{func_tools.getDateStr(tools.addDays(event.date, event.days - 1))}}</span>
</div>
@@ -506,16 +506,16 @@
<q-chip>
<q-avatar>
<img :src="`../../statics/images/avatar/` + event.avatar">
<img :src="`../../statics/images/` + getTeacherImg(event.teacher)">
</q-avatar>
<span class="cal__teacher-content">{{event.teacher}}</span>
<span class="cal__teacher-content">{{getTeacherName(event.teacher)}}</span>
</q-chip>
<span v-if="event.avatar2" class="margin_avatar2"></span>
<q-chip v-if="event.avatar2 && event.teacher2">
<span v-if="getTeacherImg(event.teacher2)" class="margin_avatar2"></span>
<q-chip v-if="getTeacherImg(event.teacher2) && event.teacher2">
<q-avatar>
<img :src="`../../statics/images/avatar/` + event.avatar2">
<img :src="`../../statics/images/` + getTeacherImg(event.teacher2)">
</q-avatar>
<span class="cal__teacher-content">{{event.teacher2}}</span>
<span class="cal__teacher-content">{{getTeacherName(event.teacher2)}}</span>
</q-chip>
<span v-if="event.where" class="">

View File

@@ -125,10 +125,10 @@ export default class CGridTableRec extends Vue {
this.colVisib = []
this.colExtra = []
this.mycolumns.forEach((elem) => {
if (elem.field !== '')
if (elem.field !== tools.NOFIELD)
this.colVisib.push(elem.field)
if (elem.visible && elem.field === '')
if (elem.visible && elem.field === tools.NOFIELD)
this.colExtra.push(elem.name)
})
@@ -298,9 +298,9 @@ export default class CGridTableRec extends Vue {
// Save on Server
GlobalStore.actions.saveFieldValue(mydata).then((esito) => {
if (esito)
if (esito) {
tools.showPositiveNotif(this.$q, this.$t('db.recupdated'))
else {
} else {
tools.showNegativeNotif(this.$q, this.$t('db.recfailed'))
this.undoVal()
}
@@ -325,10 +325,13 @@ export default class CGridTableRec extends Vue {
}
}
public ActionAfterYes(action, item) {
public ActionAfterYes(action, item, data) {
if (action === lists.MenuAction.DELETE_RECTABLE) {
if (this.serverData.length > 0)
this.serverData.splice(this.serverData.indexOf(item), 1)
} else if (action === lists.MenuAction.DUPLICATE_RECTABLE) {
// Add record duplicated
this.serverData.push(data)
}
}
@@ -345,7 +348,7 @@ export default class CGridTableRec extends Vue {
}
public visuValByType(col, val) {
if (col.isdate) {
if (col.fieldtype === 'date') {
if (val === undefined) {
return '[]'
} else {
@@ -369,7 +372,7 @@ export default class CGridTableRec extends Vue {
let mytab = null
if (this.tablesList) {
if (!this.tablesel) {
this.tablesel = this.tablesList[0].value
this.tablesel = this.tablesList[1].value
}
mytab = this.tablesList.find((rec) => rec.value === this.tablesel)

View File

@@ -1,5 +1,6 @@
<template>
<div class="q-pa-sm">
<q-table
:data="serverData"
:columns="mycolumns"
@@ -83,8 +84,8 @@
<q-tr v-if="mytable" slot="body" slot-scope="props" :props="props">
<q-td v-for="col in mycolumns" :key="col.name" :props="props" v-if="colVisib.includes(col.field)">
<div v-if="col.isdate">
<div style="max-width: 250px">
<div v-if="col.fieldtype === 'date'">
<div style="max-width: 250px; min-width: 200px">
<q-input dense v-model="props.row[col.name]">
<template v-slot:prepend>
<q-icon name="event" class="cursor-pointer">
@@ -117,6 +118,9 @@
</q-input>
</div>
</div>
<div v-if="col.fieldtype === 'boolean'">
<q-checkbox v-model="props.row[col.name])" label="" />
</div>
<div v-else>
<div :class="getclassCol(col)">
{{ visuValByType(col, props.row[col.name]) }}