improve setup meeting from task

This commit is contained in:
Peter Maquiran
2024-10-18 16:22:45 +01:00
parent 3f41e9e9c0
commit 661b449fb4
48 changed files with 253 additions and 995 deletions
+5 -12
View File
@@ -23,7 +23,7 @@ import { LoginUserRespose } from 'src/app/models/user.model';
import { DateAdapter } from '@angular/material/core';
import { eventSource } from 'src/app/models/agenda/eventSource';
import { CalendarStore } from 'src/app/store/calendar.service';
import { ListBoxService } from 'src/app/services/agenda/list-box.service';
import { ListBoxService } from 'src/app/ui/agenda/service/list-box.service';
import { ChangeProfileService } from 'src/app/services/change-profile.service';
import { BackgroundService } from 'src/app/services/background.service';
@@ -280,14 +280,7 @@ export class AgendaPage implements OnInit {
} else if (this.loggeduser.Profile == 'PR') {
this.profile = "pr";
} else {
if (this.eventService.usersCalendarIds.length >= 2) {
this.profile = "mdgpr";
} else if (this.eventService.hasOwnCalendar) {
this.profile = "mdgpr";
} else if (this.eventService.hasSharedCalendar) {
this.profile = "pr";
}
this.profile = "mdgpr";
}
this.calendarHeight = ["height-356"];
@@ -1315,9 +1308,9 @@ export class AgendaPage implements OnInit {
}
checkRoleInArray(str) {
return this.eventService.calendarRole.includes(str);
}
// checkRoleInArray(str) {
// return this.eventService.calendarRole.includes(str);
// }
validateEvent(year, month, day) {
console.log(year, month, day)
@@ -152,7 +152,7 @@ export class EditEventToApprovePage implements OnInit {
this.getTask();
}
this.getRecurrenceTypes();
// this.getRecurrenceTypes();
}
@@ -194,12 +194,12 @@ export class EditEventToApprovePage implements OnInit {
}
getRecurrenceTypes() {
this.eventsService.getRecurrenceTypes().subscribe(res => {
// getRecurrenceTypes() {
// this.eventsService.getRecurrenceTypes().subscribe(res => {
this.recurringTypes = res;
});
}
// this.recurringTypes = res;
// });
// }
@@ -196,7 +196,7 @@ export class NewEventPage implements OnInit {
this.initializeData()
})
this.getRecurrenceTypes();
// this.getRecurrenceTypes();
if (!this.restoreTemporaryData()) {
// clear
this.setCalendarByDefault(true)
@@ -444,12 +444,12 @@ export class NewEventPage implements OnInit {
this.cloneAllmobileComponent.emit({})
}
getRecurrenceTypes() {
this.eventService.getRecurrenceTypes().subscribe(res => {
// getRecurrenceTypes() {
// this.eventService.getRecurrenceTypes().subscribe(res => {
this.recurringTypes = res;
});
}
// this.recurringTypes = res;
// });
// }
calculetedLastOccurrence(type: number) {
@@ -18,7 +18,6 @@ import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
import { environment } from 'src/environments/environment';
import { ProcessesService } from 'src/app/services/processes.service';
import { TaskService } from 'src/app/services/task.service'
import { ContactsService } from 'src/app/services/contacts.service';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, ThemePalette } from '@angular/material/core';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { AgendaDataRepositoryService } from 'src/app/module/agenda/data/repository/agenda-data-repository.service';
@@ -132,7 +131,6 @@ export class NewEventPage implements OnInit {
private hhtpErrorHandle: HttpErrorHandle,
private processeService: ProcessesService,
public TaskService: TaskService,
private contactsService: ContactsService,
private agendaDataRepository: AgendaDataRepositoryService,
public RoleIdService: RoleIdService,
private AgendaService: AgendaService
@@ -476,20 +474,20 @@ export class NewEventPage implements OnInit {
}
//This method return calendar onwner user id
selectedCalendarUserId() {
// //This method return calendar onwner user id
// selectedCalendarUserId() {
if (this.eventService.calendarNamesType[this.CalendarName]?.['Oficial'] && this.postEvent.CalendarName == 'Oficial') {
return this.eventService.calendarNamesType[this.CalendarName]['OwnerId']
// if (this.eventService.calendarNamesType[this.CalendarName]?.['Oficial'] && this.postEvent.CalendarName == 'Oficial') {
// return this.eventService.calendarNamesType[this.CalendarName]['OwnerId']
} else if (this.eventService.calendarNamesType[this.CalendarName]?.['Pessoal'] && this.postEvent.CalendarName == 'Pessoal') {
// } else if (this.eventService.calendarNamesType[this.CalendarName]?.['Pessoal'] && this.postEvent.CalendarName == 'Pessoal') {
return this.eventService.calendarNamesType[this.CalendarName]['OwnerId']
// return this.eventService.calendarNamesType[this.CalendarName]['OwnerId']
} else {
return '11:11'
}
}
// } else {
// return '11:11'
// }
// }
async changeAgenda() {
@@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';
import { ListBoxService } from './list-box.service';
describe('ListBoxService', () => {
let service: ListBoxService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(ListBoxService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
@@ -0,0 +1,477 @@
import { Injectable } from '@angular/core';
import { CustomCalendarEvent, EventListStore } from 'src/app/models/agenda/AgendaEventList';
import { DateService } from '../../../services/date.service';
import { momentG } from 'src/plugin/momentG';
import { NativeNotificationService } from 'src/app/services/native-notification.service';
@Injectable({
providedIn: 'root'
})
export class ListBoxService {
height = "unset"
constructor(
private dateService: DateService,
){}
filterProfile(eventSource: EventListStore[] = [], profile: 'md' | 'pr' | 'all') {
return eventSource.filter((e) => e.profile == profile)
}
getEventInsideRange(eventSource: EventListStore[], 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
})
}
filterSegment(eventSource: EventListStore[], segment): EventListStore[] {
return eventSource.filter( data => data.calendarName == segment)
}
daysBetween(){ }
list(eventSource: EventListStore[], profile: 'md' | 'pr' | 'all', rangeStartDate, randEndDate, {segment = 'Combinado', selectedDate= null}): Year[] {
// // filter range
// if(selectedDate) {
// eventSource = eventSource.filter(data =>
// data.startTime.toLocaleDateString('pt') >= new Date(rangeStartDate).toLocaleDateString('pt') &&
// data.startTime.toLocaleDateString('pt') <= new Date(rangeStartDate).toLocaleDateString('pt')
// )
// }
if(segment!='Combinado') {
eventSource = this.filterSegment(eventSource, segment)
}
// if(profile != 'all') {
// eventSource = this.filterProfile(eventSource, profile)
// }
let newStracture:CustomCalendarEvent[];
newStracture = this.encapsulation(eventSource);
// const object = {}
// for (const e of newStracture.reverse()) {
// if(!object[momentG(new Date(e.start), 'MMMM yyyy')]) {
// object[momentG(new Date(e.start), 'MMMM yyyy')] = []
// }
// object[momentG(new Date(e.start), 'MMMM yyyy')].push(e)
// }
// const daysStringNum = Object.keys(object).reverse()
// const daysObject = {}
// for(const day of daysStringNum) {
// daysObject[day] = object[day]
// }
// console.log('newStracture', newStracture)
const data = this.display(newStracture, selectedDate)
return data.year
// const daysStringNum = Object.keys(daysObject)
// for(const day of daysStringNum) {
// daysObject[day] = daysObject[day].reverse()
// }
// daysObject = this.transformObjectKeyOrder(daysObject, daysStringNum)
// return daysObject
}
sortArrayISODate(myArray: any): any[] {
return myArray.sort((a,b) =>
Date.parse(b.start )
-
Date.parse(a.start))
}
display(list: CustomCalendarEvent[], selectedDate) {
let days = {};
const year: Year[] = []
this.sortArrayISODate(list).reverse().forEach( (event:CustomCalendarEvent, index) => {
var startDate: any = new Date(event.start);
var endDate: any = this.dateService.EventEndDateTreatment({
startTime: startDate,
endTime: event.end
})
const day = this.dateService.getDay(event.start)
event['manyDays'] = !this.dateService.isSameDate(event.start, event.end)
event['todayOnly'] = this.dateService.isSameDate(event.start, event.end)
if(!days.hasOwnProperty(day)) {
days[day] = []
}
const diffDays = this.dateService.deferenceBetweenDays(endDate, startDate)
if (this.dateService.notSameDate(startDate, endDate)) {
const cloneSelectedDate = new Date(selectedDate)
cloneSelectedDate.setHours(0)
cloneSelectedDate.setMinutes(0)
cloneSelectedDate.setSeconds(0)
if (diffDays >= 1) {
const StartEvent = this.transForm(event, {startMany: true, endMany: false, middle: false, hasMany: true})
if(this.CanPush(event, selectedDate) && (new Date(event.start)).getTime() >= cloneSelectedDate.getTime()) {
days[day].push(StartEvent); this.push(StartEvent, year)
}
let i = 1;
//create event between date
while (startDate.getFullYear() != endDate.getFullYear() ||
startDate.getMonth() != endDate.getMonth() ||
startDate.getDate() != endDate.getDate()) {
const newDate = startDate.setDate(startDate.getDate()+ i)
let otherDays = this.dateService.getDay(newDate)
const cloneEvent = {...event}
cloneEvent['other'] = true
cloneEvent.start = new Date(startDate)
if(!days.hasOwnProperty(otherDays)) {
days[otherDays] = []
}
if (!(startDate.getFullYear() != endDate.getFullYear() ||
startDate.getMonth() != endDate.getMonth() ||
startDate.getDate() != endDate.getDate())) {
// last push
const EndEvent = this.transForm(cloneEvent, {startMany: false, endMany: true, middle: false, hasMany: true})
if(this.CanPush(cloneEvent, selectedDate) && cloneEvent.start.getTime() >= cloneSelectedDate.getTime()) {
days[otherDays].push(EndEvent) ; this.push(EndEvent, year)
}
} else {
const EndEvent = this.transForm(cloneEvent, {startMany: false,endMany: false, middle: true, hasMany: true})
if(this.CanPush(cloneEvent, selectedDate) && cloneEvent.start.getTime() >= cloneSelectedDate.getTime()) {
days[otherDays].push(EndEvent) ; this.push(EndEvent, year)
} else {
if( cloneEvent.start.getFullYear() == cloneSelectedDate.getFullYear() && cloneEvent.start.getDate() == cloneSelectedDate.getDate() && cloneEvent.start.getMonth() == cloneSelectedDate.getMonth()) {
// console.log("00_00")
days[otherDays].push(EndEvent) ; this.push(EndEvent, year)
} else {
// console.log('0000000000000000000000000',cloneEvent.start.getTime(), cloneSelectedDate.getTime())
// console.log('0000000000000000000000000',cloneEvent.start, cloneSelectedDate)
}
}
}
days[otherDays] = days[otherDays].reverse()
}
} else {
if(this.CanPush(event, selectedDate)) { days[day].push(event) ; this.push(event, year) }
}
} else {
event['sameDay'] = true
if(this.CanPush(event, selectedDate) && diffDays != 2) { days[day].push(event) ; this.push(event, year) }
}
})
// remove days that haven't event
Object.entries(days).forEach(([index, value]) => {
const _value: any = value
if(_value.length == 0) {
delete days[index]
}
})
return {days, year}
}
push(event: any, year: Year[]) {
const date = new Date(event.start)
const yearName = momentG(new Date(date), 'yyyy')
const monthName = momentG(new Date(date), 'MMMM')
const dayName = momentG(new Date(date), 'dd')
let YearIndex = year.findIndex( x => x.yearInfo.yearName == yearName)
if(YearIndex == -1) {
YearIndex = year.push({
yearInfo: {
yearName: yearName
},
months: []
})
YearIndex--
}
let MonthNameIndex = year[YearIndex].months.findIndex( x => x.monthInfo.monthName == monthName)
if(MonthNameIndex == -1) {
MonthNameIndex = year[YearIndex].months.push({
monthInfo: {
monthName: monthName
},
days: []
})
MonthNameIndex --
}
let DayNameIndex = year[YearIndex].months[MonthNameIndex].days.findIndex( x => x.daysInfo.dayName == dayName)
if(DayNameIndex == -1) {
year[YearIndex].months[MonthNameIndex].days.push({
daysInfo: {
dayName: dayName
},
events: [event]
})
} else {
year[YearIndex].months[MonthNameIndex].days[DayNameIndex].events.push(event)
}
}
CanPush(event: any, selectedDate: Date) {
const cloneSelectedDate = new Date(selectedDate);
cloneSelectedDate.setHours(0)
cloneSelectedDate.setMinutes(0)
cloneSelectedDate.setSeconds(0)
const limite = this.endOfMonth(selectedDate)
limite.setDate(limite.getDate() + 10)
limite.setHours(0)
selectedDate.setHours(0);
selectedDate.setMinutes(0);
selectedDate.setSeconds(0);
return (selectedDate.getTime() <= new Date(event.start).getTime() || selectedDate.getTime() <= new Date(event.end).getTime()) &&
(limite.getTime() >= new Date(event.start).getTime() || limite.getTime() >= new Date(event.end).getTime())
}
encapsulation(eventsList:EventListStore[]): CustomCalendarEvent[] {
// remove all event
let events: CustomCalendarEvent[] = [];
eventsList.forEach((element, eventIndex) => {
events.push({
start: new Date(element.startTime),
end: new Date(element.endTime),
id: element.id,
event: element.event,
profile: element.profile
});
});
return events;
}
transForm(event: CustomCalendarEvent, {startMany, endMany, middle, hasMany = false}) {
let daysLeft = this.daysToEndWithJS(event.start, event.end);
let eventTotalDuration = this.daysToEndWithJS(event.event.StartDate, event.event.EndDate);
return Object.assign({}, {
start: event.start,
end: event.end,
id: event.id,
profile: event.profile,
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,
CalendarId: event.event.CalendarId,
daysLeft
},
eventTotalDuration,
hasMany,
duration: this.duration(event.start, event.event.EndDate),
daysLeft,
Subject: event.event.Subject,
startMany: startMany,
endMany: endMany,
middle: middle
})
}
daysToEndWithJS(startDateStr: any, endDateStr: any) {
// Define the start and end dates
const startDate: any = new Date(startDateStr);
const endDate: any = new Date(endDateStr);
startDate.setHours(0, 0, 0, 0); // Set hours, minutes, seconds, and milliseconds to 0
endDate.setHours(0, 0, 0, 0); // Set hours, minutes, seconds, and milliseconds to 0
// Calculate the difference in milliseconds between the two dates
const differenceMs = Math.abs(endDate - startDate);
// Convert milliseconds to days
const millisecondsPerDay = 1000 * 60 * 60 * 24;
const differenceDays = Math.ceil(differenceMs / millisecondsPerDay);
// console.log(`Number of days between the dates: ${differenceDays}`);
return differenceDays
}
duration(date1Str, date2Str) {
// Convert string dates to Date objects
const date1: any = new Date(date1Str);
const date2: any = new Date(date2Str);
// Calculate the difference in milliseconds
const timeDifferenceMs = date2 - date1;
// Convert difference to days, hours, and minutes
const totalMinutes = Math.floor(timeDifferenceMs / (1000 * 60));
const days = Math.floor(totalMinutes / (60 * 24));
const hours = Math.floor((totalMinutes % (60 * 24)) / 60);
const minutes = totalMinutes % 60;
return `${days}d`
}
transformObjectKeyOrder(originalObject, keyOrder) {
const transformedObject = {};
for (const key of keyOrder) {
if (originalObject.hasOwnProperty(key)) {
transformedObject[key] = originalObject[key];
}
}
// Include any remaining keys not in the specified order
for (const key in originalObject) {
if (!keyOrder.includes(key) && originalObject.hasOwnProperty(key)) {
transformedObject[key] = originalObject[key];
}
}
return transformedObject;
}
endOfMonth(myDate){
let date = new Date(myDate);
date.setDate(1); // Avoids edge cases on the 31st day of some months
date.setMonth(date.getMonth() +1);
date.setDate(0);
date.setHours(23);
date.setMinutes(59);
date.setSeconds(59);
return date;
}
}
interface DayInfo {
// Define properties for dayInfo here
dayName: string
}
interface Day {
// Define properties for day here
}
interface Month {
monthInfo: {
monthName: string
// Define properties for yearInfo inside months here
}
days: {
daysInfo: DayInfo;
events: Day[];
}[]
}
interface Year {
yearInfo: {
yearName: string
// Define properties for yearInfo here
};
months: Month[];
}
const years: Year[] = [
{
yearInfo: {
yearName: ""
// Define properties for yearInfo inside the first year here
},
months: [
{
monthInfo: {
monthName: "",
// Define properties for yearInfo inside the first month here
},
days: [
{
daysInfo: {
dayName: "",
// Define properties for dayInfo inside the first day here
},
events: [
{
// Define properties for the first day here
},
],
}
],
},
// Add more months here as needed
],
},
// Add more years here as needed
];