diff --git a/src/app/models/agenda/eventSource.ts b/src/app/models/agenda/eventSource.ts index c1386cfae..6c5447e3e 100644 --- a/src/app/models/agenda/eventSource.ts +++ b/src/app/models/agenda/eventSource.ts @@ -3,7 +3,7 @@ export class eventSource { startTime: any endTime: any allDay: boolean - event: any + event: any | Object calendarName?: string segment?: string profile: 'md' | 'pr' diff --git a/src/app/pages/agenda/agenda.page.html b/src/app/pages/agenda/agenda.page.html index 2f90a689b..c97c56a84 100644 --- a/src/app/pages/agenda/agenda.page.html +++ b/src/app/pages/agenda/agenda.page.html @@ -85,7 +85,7 @@ , - private toastService: ToastService + private toastService: ToastService, + public calendarService: CalendarService ) { this.dateAdapter.setLocale('es'); @@ -177,6 +181,10 @@ export class AgendaPage implements OnInit { if(this.loggeduser.Profile == 'MDGPR') { this.mobileComponent.showEventList = true; } + + setTimeout(()=>{ + this.updateEventListBox() + }, 4000) } @@ -262,8 +270,7 @@ export class AgendaPage implements OnInit { //Show information of the event async onEventSelected(ev: { event: Event}){ - /* this.viewEventDetail(ev.event.EventId); */ - + this.router.navigate(["/home/agenda", ev.event.EventId, 'agenda']); } @@ -293,6 +300,7 @@ export class AgendaPage implements OnInit { this.rangeEndDate = ev.endTime; this.loadRangeEvents(this.rangeStartDate, this.rangeEndDate); + this.updateEventListBox() } // for calendar @@ -310,22 +318,8 @@ export class AgendaPage implements OnInit { events.forEach(element => { - const startTimeSamp = new Date(element.startTime).toLocaleDateString() - const endTimeSamp = new Date(element.endTime).toLocaleDateString() - - const endMinutes = new Date(element.endTime).getMinutes() - const endHours = new Date(element.endTime).getHours() - const endDay: number = new Date(element.endTime).getDate() - const startDay = new Date(element.startTime).getDate() - const profile_ = element.profile == 'md'? 'mdgpr': 'pr'; const eventtype = element.event.CalendarName; - - - // if (startTimeSamp < endTimeSamp && endDay == 29 && (endMinutes + endHours) == 0) { - // // console.log(id, (endMinutes + endHours)) - // classs.push(`calendar-event-border`); - // } classs.push(`calendar-event-border calendar-${profile_}-event-type-${eventtype}`); @@ -341,8 +335,6 @@ export class AgendaPage implements OnInit { get CalendarCurrentDay ():any { - /* console.log(this.viewDate.getDate(), '0_0') */ - // console.log(this.viewDate.getDate(), '0_0') return this.viewDate.getDate() } @@ -423,10 +415,6 @@ export class AgendaPage implements OnInit { } - get LL () { - return this.eventSource.length - } - loadRangeEvents(startTime: Date, endTime: Date) { this.eventSelectedDate = new Date(startTime); @@ -440,7 +428,6 @@ export class AgendaPage implements OnInit { switch (this.segment) { case "Combinado": //Inicializa o array eventSource - //this.eventSource=[]; if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR' ) { this.eventService.getAllMdEvents( momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59') ).then( @@ -448,42 +435,12 @@ export class AgendaPage implements OnInit { (response:any) => { // calendar - // this.eventSource=[]; + this.calendarService.removeRange(startTime, endTime, 'md') - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'md') { - return false - } - return true - }) - - const eventsList = response; // loop - eventsList.forEach((element, eventIndex) => { - - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile: 'md', - id: element.EventId, - }); - }); + this.calendarService.pushEvent(response, 'md'); - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'mdgpr'); - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - // optional - this.TimelineMD = list; - - console.log('TimelineMD', this.TimelineMD) + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', startTime, endTime, 'date') this.myCal.update(); this.myCal.loadEvents(); @@ -491,66 +448,31 @@ export class AgendaPage implements OnInit { this.showLoader = false; this.showTimeline = true; - }).finally(()=>{ this.showLoader = false; }) } else if(this.profile == "pr" && this.loggeduser.Profile == 'MDGPR') { - console.log('HERE PR'); - this.eventService.getAllSharedEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then( - (response:any) => { - + + this.eventService.getAllSharedEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then((response:any) => { + + this.calendarService.removeRange(startTime, endTime, 'pr') // calendar - //this.eventSource=[]; + this.calendarService.pushEvent(response, 'pr'); + + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - return false - } - return true - }) - - const eventsList = response; + this.myCal.update(); + this.myCal.loadEvents(); - // calendar - eventsList.forEach((element, eventIndex) => { - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile: 'pr', - id: element.EventId, - }); - - }); - - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - - this.TimelinePR = list; - - this.myCal.update(); - this.myCal.loadEvents(); - - this.showLoader = false; - this.showTimeline = true; - - + this.showLoader = false; + this.showTimeline = true; }).finally(()=>{ this.showLoader = false; - }) - + }) } else if(this.loggeduser.Profile == 'PR') { @@ -561,47 +483,21 @@ export class AgendaPage implements OnInit { // this.eventSource=[]; // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'pr') - const eventsList = response; - - // calendar - eventsList.forEach((element, eventIndex) => { - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile: 'pr', - id: element.EventId, - }); - - }); - - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - - this.TimelinePR = list; + this.calendarService.pushEvent(response, 'pr'); + + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') + this.myCal.update(); this.myCal.loadEvents(); this.showLoader = false; this.showTimeline = true; - - - + + }).finally(()=>{ this.showLoader = false; }) @@ -613,43 +509,14 @@ export class AgendaPage implements OnInit { if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR') { this.eventService.getAllMdPessoalEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then((response:any) => { - // this.eventSource=[]; - - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'md') { - return false - } - return true - }) - - + this.calendarService.removeRange(startTime, endTime, 'md') const eventsList = response.filter(data => data.CalendarName == "Pessoal"); // loop - eventsList.forEach((element, eventIndex) => { - - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile: 'md', - id: element.EventId, - }); - }); + this.calendarService.pushEvent(eventsList, 'md'); - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'mdgpr'); - - - this.TimelineMDList = this.eventListBox(list) - - - this.events = list; - this.TimelineMD = list; + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', startTime, endTime, 'date') this.myCal.update(); this.myCal.loadEvents(); @@ -666,35 +533,14 @@ export class AgendaPage implements OnInit { //this.eventSource=[]; // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'pr') const eventsList = response.filter(data => data.CalendarName == "Pessoal"); - eventsList.forEach(element => { - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - profile: 'pr', - id: element.EventId, - }); - }); + this.calendarService.pushEvent(eventsList, 'pr'); - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); - - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - // optional - this.TimelinePR = list; + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') + this.myCal.update(); this.myCal.loadEvents(); @@ -717,38 +563,14 @@ export class AgendaPage implements OnInit { this.eventService.getAllMdEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then((res:any) => { - // this.eventSource=[]; - - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'md') { - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'md') const eventsList = res.filter(data => data.CalendarName == "Oficial"); - eventsList.forEach(element => { - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - profile: 'md', - id: element.EventId, - }); - }); + this.calendarService.pushEvent(eventsList, 'md'); - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'mdgpr'); - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - // Petencial error - this.TimelinePR = list; + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', startTime, endTime, 'date') this.myCal.update(); this.myCal.loadEvents(); @@ -764,37 +586,14 @@ export class AgendaPage implements OnInit { // this.eventSource=[]; - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'pr') const eventsList = res.filter(data => data.CalendarName == "Oficial"); - eventsList.forEach(element => { - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - profile: 'pr', - id: element.EventId, - }); - }); + this.calendarService.pushEvent(eventsList, 'pr'); - const list = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); + + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') - - this.TimelineMDList = this.eventListBox(list) - - this.events = list; - // optional - this.TimelinePR = list; - this.myCal.update(); this.myCal.loadEvents(); @@ -813,56 +612,18 @@ export class AgendaPage implements OnInit { let counter = 0; if(this.loggeduser.Profile == 'MDGPR') { - console.log('MDGPR'); this.eventService.getAllMdEvents( momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59') ).then( (response:any) => { - let eventsList; - if(this.segment == 'Oficial') { - eventsList = response.filter(data => data.CalendarName == "Oficial"); - } else if (this.segment == 'Pessoal') { - eventsList = response.filter(data => data.CalendarName == "Pessoal"); - } else { - eventsList = response; - } - + let eventsList = response; - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'md') { - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'md') // loop - eventsList.forEach((element, eventIndex) => { - - // calendar - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: this.EventTretment({ - startTime: element.StartDate, - endTime: element.EndDate - }), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile: 'md', - id: element.EventId, - }); - - }); + this.calendarService.pushEvent(eventsList, 'md'); - const MDEventList = this.timelineFilter(this.timelineFilterState, eventsList, 'mdgpr'); + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', startTime, endTime, 'date') - this.TimelineMDList = this.eventListBox(MDEventList, 'md') - - this.events = MDEventList; - this.TimelineMD = MDEventList; - this.myCal.update(); this.myCal.loadEvents(); @@ -873,7 +634,7 @@ export class AgendaPage implements OnInit { this.showLoader = false; } - }).finally(()=>{ + }).finally(()=> { counter++; if(counter==2) { this.showLoader = false; @@ -882,56 +643,26 @@ export class AgendaPage implements OnInit { this.eventService.getAllSharedEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then((response:any) => { - let eventsList; - if(this.segment == 'Oficial') { - eventsList = response.filter(data => data.CalendarName == "Oficial"); - } else if (this.segment == 'Pessoal') { - eventsList = response.filter(data => data.CalendarName == "Pessoal"); - } else { - eventsList = response; + let eventsList = response; + + // clear the current month only + this.calendarService.removeRange(startTime, endTime, 'pr') + + this.calendarService.pushEvent(eventsList, 'pr'); + + + this.TimelinePRList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') + + this.myCal.update(); + this.myCal.loadEvents(); + + this.showTimelinePR = true; + + counter++; + + if(counter==2 || this.loggeduser.Profile == 'PR') { + this.showLoader = false; } - - // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - console.log('remove from agenda') - return false - } - return true - }) - - eventsList.forEach((element, eventIndex) => { - - // calendar - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile:'pr', - id: element.EventId, - }); - - }); - - this.TimelinePR = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); - - - this.TimelinePRList = this.eventListBox(this.TimelinePR) - - this.myCal.update(); - this.myCal.loadEvents(); - - this.showTimelinePR = true; - - counter++; - - if(counter==2 || this.loggeduser.Profile == 'PR') { - this.showLoader = false; - } }).finally(()=>{ counter++; @@ -940,7 +671,6 @@ export class AgendaPage implements OnInit { } }) - } else { this.eventService.getAllPrEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then((response:any) => { @@ -955,36 +685,13 @@ export class AgendaPage implements OnInit { } // clear the current month only - this.eventSource = this.eventSource.filter((e)=> { - if(new Date(startTime).getTime() <= new Date(e.startTime).getTime() && - new Date(endTime).getTime() >= new Date(e.endTime).getTime() && e.profile == 'pr') { - console.log('remove from agenda') - return false - } - return true - }) + this.calendarService.removeRange(startTime, endTime, 'pr') - eventsList.forEach((element, eventIndex) => { + this.calendarService.pushEvent(eventsList, 'pr'); - // calendar - this.eventSource.push({ - title: element.Subject, - startTime: new Date(element.StartDate), - endTime: new Date(element.EndDate), - allDay: false, - event: element, - calendarName: element.CalendarName, - profile:'pr', - id: element.EventId, - }); - - }); - - this.TimelinePR = this.timelineFilter(this.timelineFilterState, eventsList, 'pr'); + this.TimelinePRList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', startTime, endTime, 'date') - this.TimelinePRList = this.eventListBox(this.TimelinePR) - this.myCal.update(); this.myCal.loadEvents(); @@ -1007,6 +714,11 @@ export class AgendaPage implements OnInit { } } + updateEventListBox() { + this.TimelinePRList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, 'date') + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, 'date') + } + eventListBox(list, nice?) { let days = {}; @@ -1034,17 +746,12 @@ export class AgendaPage implements OnInit { if (new Date(startDate).toLocaleDateString() != new Date(endDate).toLocaleDateString()) { - console.log(new Date(startDate).toLocaleDateString(),'!=' , new Date(endDate).toLocaleDateString()) - console.log(startDate.toISOString(),'iso' , endDate.toISOString() ) - console.log(new Date(startDate).toLocaleTimeString('pt'),'time' , new Date(endDate).toLocaleTimeString('pt')) - // difference const diffTime = Math.abs(endDate - startDate); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); if (diffDays <= 150 && !event.event.IsAllDayEvent ) { - console.log(event) if (diffDays >= 1) { @@ -1204,13 +911,16 @@ export class AgendaPage implements OnInit { changeProfile() { - if(this.profile == "mdgpr"){ + if(this.profile == "mdgpr") { this.profile ="pr"; this.loadRangeEvents(this.rangeStartDate, this.rangeEndDate); + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, 'date') + } - else{ + else { this.profile ="mdgpr"; this.loadRangeEvents(this.rangeStartDate, this.rangeEndDate); + this.TimelineMDList = this.eventListBoxComponent.list(this.calendarService.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, 'date') } } @@ -1273,7 +983,7 @@ export class AgendaPage implements OnInit { // open component async viewEventDetail(eventId:any) { - console.log('View event '+eventId) + this.router.navigate(['/home/agenda', eventId, 'agenda']); /* console.log(this.profile); @@ -1515,7 +1225,7 @@ export class AgendaPage implements OnInit { } async showEventBox(event) { - + if ( event.event.CalendarName == this.segment || this.segment == 'Combinado') { return true } diff --git a/src/app/pages/agenda/eventListBox.ts b/src/app/pages/agenda/eventListBox.ts index cd6725cbd..37d80dc41 100644 --- a/src/app/pages/agenda/eventListBox.ts +++ b/src/app/pages/agenda/eventListBox.ts @@ -1,5 +1,253 @@ +import { eventSource } from 'src/app/models/agenda/eventSource'; +import { setHours, setMinutes } from 'date-fns'; + export class eventListBox { - filterProfile() {} - daysBetween(){} - list() {} + + constructor(){} + + EventEndDateTreatment ({startTime, endTime}) { + + const startTimeSamp = new Date(startTime).toLocaleDateString() + const endTimeSamp = new Date(endTime).toLocaleDateString() + + const endMinutes = new Date(endTime).getMinutes() + const endHours = new Date(endTime).getHours() + + + if (startTimeSamp < endTimeSamp && (endMinutes + endHours) == 0) { + endTime = new Date(endTime); + endTime.setSeconds(endTime.getSeconds() - 1); + return new Date(endTime) + } else { + return new Date(endTime) + } + + } + + filterProfile(eventSource: eventSource[], profile: 'md' | 'pr' | 'all') { + return eventSource.filter((e) => e.profile == profile) + } + + getEventInsideRange(eventSource: eventSource[], rangeStartDate, randEndDate) { + return eventSource.filter((e)=> { + if(new Date(rangeStartDate).getTime() <= new Date(e.startTime).getTime() && + new Date(randEndDate).getTime() >= new Date(e.endTime).getTime()) { + return true + } + return false + }) + } + + daysBetween(){ } + + list(eventSource: eventSource[], profile: 'md' | 'pr' | 'all', rangeStartDate, randEndDate, calendarDate) { + + if(profile != 'all') { + eventSource = this.filterProfile(eventSource, profile) + } + + + eventSource = this.getEventInsideRange(eventSource, rangeStartDate, randEndDate) + + if(profile == 'pr') { + console.log('run', profile) + console.log(eventSource) + } + + if(profile == 'md') { + eventSource = this.encapsulation(eventSource, 'mdgpr'); + } else { + eventSource = this.encapsulation(eventSource, 'pr'); + } + + return this.display(eventSource) + } + + display(list) { + let days = {}; + + list.forEach( (event:any, index)=> { + + var startDate: any = new Date(event.start); + + var endDate: any = this.EventEndDateTreatment({ + startTime: startDate, + endTime: event.end + }) + + const day = (((new Date (event.start)).getDate())).toString().padStart(2,'0') + + event.manyDays = false + + event.todayOnly = new Date(event.start).toLocaleDateString() == new Date(event.end).toLocaleDateString() + + if(!days.hasOwnProperty(day)) { + days[day] = [] + } + + if (new Date(startDate).toLocaleDateString() != new Date(endDate).toLocaleDateString()) { + + const diffTime = Math.abs(endDate - startDate); + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); + + if (diffDays <= 150 && !event.event.IsAllDayEvent ) { + + console.log(event) + + if (diffDays >= 1) { + + const StartEvent = Object.assign({}, { + title: event.title, + start: event.start, + end: event.end, + color: event.color, + id: event.id, + index: event.index, + profile: event.profile, + CalendarName: event.CalendarName, + event: { + Subject: event.event.Subject, + StartDate: event.event.StartDate, + EndDate: event.event.EndDate, + Location: event.event.Location, + EventId: event.event.EventId, + CalendarName: event.event.CalendarName + }, + startMany: true, + endMany: false, + middle: false + }) + + days[day].push(StartEvent) + + let i = 1; + + while (startDate.getFullYear() != endDate.getFullYear() || + startDate.getMonth() != endDate.getMonth() || + startDate.getDate() != endDate.getDate()) { + + const newDate = startDate.setDate(startDate.getDate()+ i) + + let otherDays = (((new Date (newDate)).getDate())).toString().padStart(2,'0') + + event.other = true + + event.start = newDate + if(!days.hasOwnProperty(otherDays)) { + + days[otherDays] = [] + } + + if (!(startDate.getFullYear() != endDate.getFullYear() || + startDate.getMonth() != endDate.getMonth() || + startDate.getDate() != endDate.getDate())) { + // last push + + const EndEvent = Object.assign({}, { + title: event.title, + start: event.start, + end: event.end, + color: event.color, + id: event.id, + index: event.index, + profile: event.profile, + CalendarName: event.CalendarName, + event: { + Subject: event.event.Subject, + StartDate: event.event.StartDate, + EndDate: event.event.EndDate, + Location: event.event.Location, + EventId: event.event.EventId, + CalendarName: event.event.CalendarName + }, + Subject: event.Subject, + startMany: false, + endMany: true, + middle: false + }) + + days[otherDays].push(EndEvent) + + } else { + const EndEvent = Object.assign({}, { + title: event.title, + start: event.start, + end: event.end, + color: event.color, + id: event.id, + index: event.index, + profile: event.profile, + CalendarName: event.CalendarName, + event: { + Subject: event.event.Subject, + StartDate: event.event.StartDate, + EndDate: event.event.EndDate, + Location: event.event.Location, + EventId: event.event.EventId, + CalendarName: event.event.CalendarName + }, + Subject: event.Subject, + startMany: false, + endMany: true, + middle: true + }) + days[otherDays].push(EndEvent) + } + + } + + } else { + days[day].push(event) + + } + } else { + days[day].push(event) + + } + + } + + days[day].push(event) + + }) + + setTimeout(()=>{ + document.querySelectorAll('.EventListBox-container .EventListBox').forEach((e)=>{ + if(e.childElementCount == 0) { + e.parentElement.style.display = 'none' + } else { + e.parentElement.style.display = 'block' + } + }) + }, 10) + + return days + } + + encapsulation(eventsList, profile) { + + // remove all event + let events = []; + + eventsList.forEach((element, eventIndex) => { + + events.push({ + start: new Date(element.StartDate || element.startTime), + end: new Date(element.EndDate || element.endTime), + color: { + primary: '#0000', + secondary: '#0000' + }, + id: element.EventId || element.id, + index: eventIndex, + profile: profile, + CalendarName: element.calendarName, + event: element.event, + }); + + }); + + return events; + } + } \ No newline at end of file diff --git a/src/app/pages/gabinete-digital/despachos/despachos.page.ts b/src/app/pages/gabinete-digital/despachos/despachos.page.ts index e4d2ec835..87d39f02b 100644 --- a/src/app/pages/gabinete-digital/despachos/despachos.page.ts +++ b/src/app/pages/gabinete-digital/despachos/despachos.page.ts @@ -1,20 +1,11 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { CalendarComponent } from 'ionic2-calendar'; - import { DailyWorkTask, tasksList } from '../../../models/dailyworktask.model'; import { ProcessesService } from 'src/app/services/processes.service'; -import { formatDate } from '@angular/common'; import { ModalController } from '@ionic/angular'; -import { ExpedienteDetailPage } from 'src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page'; import { AlertService } from 'src/app/services/alert.service'; - -import { ExpedientTaskModalPage } from 'src/app/pages/gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page'; -import { BookMeetingModalPage } from 'src/app/pages/gabinete-digital/expediente/book-meeting-modal/book-meeting-modal.page'; -import { DiscartExpedientModalPage } from 'src/app/pages/gabinete-digital/discart-expedient-modal/discart-expedient-modal.page'; - import { AuthService } from 'src/app/services/auth.service'; -import { DespachoPage } from 'src/app/pages/gabinete-digital/despachos/despacho/despacho.page'; -import { NavigationEnd, NavigationExtras, NavigationStart, Router } from '@angular/router'; +import { NavigationStart, Router } from '@angular/router'; @Component({ selector: 'app-despachos', diff --git a/src/app/store/calendar.service.spec.ts b/src/app/store/calendar.service.spec.ts new file mode 100644 index 000000000..18ba1f660 --- /dev/null +++ b/src/app/store/calendar.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { CalendarService } from './calendar.service'; + +describe('CalendarService', () => { + let service: CalendarService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(CalendarService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/store/calendar.service.ts b/src/app/store/calendar.service.ts new file mode 100644 index 000000000..cbeff654f --- /dev/null +++ b/src/app/store/calendar.service.ts @@ -0,0 +1,90 @@ +import { Injectable } from '@angular/core'; +import { eventSource } from '../models/agenda/eventSource'; +import { SHA1, SHA256, AES, enc } from 'crypto-js' +import { LocalstoreService } from './localstore.service' + +@Injectable({ + providedIn: 'root' +}) + +export class CalendarService { + + private _eventSource : eventSource[] = [] + + constructor(localstoreService: LocalstoreService) { + + const keyName = (SHA1(this.constructor.name+ 'eventSource')).toString() + + let restore = localstoreService.get(keyName, []) + + setTimeout(()=>{ + restore.forEach((element, eventIndex) => { + this._eventSource.push({ + title: element.title, + startTime: new Date(element.startTime), + endTime: new Date(element.endTime), + allDay: element.allDay, + event: element.event, + calendarName: element.calendarName, + profile: element.profile, + id: element.id, + }); + + }); + },1) + + setTimeout(() => { + setInterval(()=> { + + localstoreService.set(keyName, this._eventSource) + + }, 5000) + }, 10000) + + } + + ResetList(eventSource: eventSource[]) { + this._eventSource = eventSource + } + + get eventSource() { + return this._eventSource + } + + removeRange(rangeStartDate, rangeEndDate, profile) { + this._eventSource = this._eventSource.filter((e)=> { + if(new Date(rangeStartDate).getTime() <= new Date(e.startTime).getTime() && + new Date(rangeEndDate).getTime() >= new Date(e.endTime).getTime() && e.profile == profile) { + return false + } + return true + }) + } + + pushEvent(eventsList, profile: 'pr' | 'md') { + + let news = [] + eventsList.forEach((element, eventIndex) => { + news.push({ + title: element.Subject, + startTime: new Date(element.StartDate), + endTime: new Date(element.EndDate), + allDay: false, + event: element, + calendarName: element.CalendarName, + profile: profile, + id: element.EventId, + }); + + }); + + let instance = this._eventSource.concat(news) + + const ids = instance.map(o => o.id) + const filtered = instance.filter(({id}, index) => !ids.includes(id, index + 1)) + + this._eventSource = (filtered) + + } + +} \ No newline at end of file diff --git a/src/app/store/localstore.service.spec.ts b/src/app/store/localstore.service.spec.ts new file mode 100644 index 000000000..ce873bb42 --- /dev/null +++ b/src/app/store/localstore.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { LocalstoreService } from './localstore.service'; + +describe('LocalstoreService', () => { + let service: LocalstoreService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LocalstoreService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/store/localstore.service.ts b/src/app/store/localstore.service.ts new file mode 100644 index 000000000..782da8e28 --- /dev/null +++ b/src/app/store/localstore.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { SHA1, SHA256, AES, enc } from 'crypto-js' + +@Injectable({ + providedIn: 'root' +}) +export class LocalstoreService { + + constructor() { } + + + get( keyName, safe) { + + const ciphertext = localStorage.getItem(keyName) + + if(ciphertext) { + const bytes = AES.decrypt(ciphertext, keyName) + var decryptedData = JSON.parse(bytes.toString(enc.Utf8)); + return decryptedData; + } else { + return safe; + } + } + + set(key, value) { + + if(typeof(value) != 'string') { + value = JSON.stringify(value) + } + + const data = value + const encoded = AES.encrypt( data, key).toString(); + localStorage.setItem(key, encoded) + } + +}