diff --git a/src/app/models/entiry/agenda/eventToApproveList.ts b/src/app/models/entiry/agenda/eventToApproveList.ts new file mode 100644 index 000000000..f1191c95a --- /dev/null +++ b/src/app/models/entiry/agenda/eventToApproveList.ts @@ -0,0 +1,30 @@ +import { z } from 'zod'; + +const WorkflowInstanceDataFieldsSchema = z.object({ + Agenda: z.string(), + EndDate: z.string(), + StartDate: z.string(), + Subject: z.string(), + Location: z.string(), + Status: z.string(), + IsAllDayEvent: z.boolean(), + InstanceId: z.string(), + originator: z.string().email(), +}); + +const EventToApproveListSchema = z.array( + z.object({ + serialNumber: z.string(), + taskStatus: z.string(), + taskStartDate: z.string(), + taskReceiveDate: z.string(), + deadline: z.null(), + workflowDisplayName: z.string(), + activityInstanceName: z.string(), + totalDocuments: z.number(), + workflowInstanceDataFields: WorkflowInstanceDataFieldsSchema, + }) +) ; + + +export type EventToApproveList = z.infer diff --git a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts index 3893f82f9..15f8925b4 100644 --- a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts @@ -1,12 +1,16 @@ import { Injectable } from '@angular/core'; import { AgendaDataService } from './agenda-data.service'; -import { map } from 'rxjs/operators'; +import { catchError, map } from 'rxjs/operators'; import { ListEventMapper } from './mapper/EventListMapper'; import { EventMapper } from './mapper/EventDetailsMapper'; import { Utils } from './utils'; import { EventInputDTO } from './agendaDataModels'; import { Event } from 'src/app/models/event.model'; import { SessionStore } from 'src/app/store/session.service'; +import { EventListToApproveMapper } from './mapper/eventToApproveListMapper'; +import { err, ok } from 'neverthrow'; +import { of } from 'rxjs'; +import { HttpErrorResponse } from '@angular/common/http'; @Injectable({ providedIn: 'root' @@ -34,10 +38,11 @@ export class AgendaDataRepositoryService { )) } - eventToApprove({userId, startDate = null, endDate = null, status = 0, category= null, type= null, calendarOwnerName = ''}) { + eventToApproveList({userId, startDate = null, endDate = null, status = 0, category= null, type= null, calendarOwnerName = ''}) { + return this.agendaDataService.getEvents(userId, startDate = null, endDate = null, status, category= null, type= null).pipe( map((response) => { - return ListEventMapper.toDomain(response.data, calendarOwnerName, userId) + return EventListToApproveMapper.toDomain(response.data, calendarOwnerName, userId) } )) } @@ -109,4 +114,15 @@ export class AgendaDataRepositoryService { console.log(error) })) } + + async deleteEvent1(eventId) { + + try { + const result = await this.agendaDataService.deleteEvent(eventId,false).toPromise() + return ok (result) + } catch (e) { + return err(e as HttpErrorResponse) + } + + } } diff --git a/src/app/services/Repositorys/Agenda/agenda-data.service.ts b/src/app/services/Repositorys/Agenda/agenda-data.service.ts index d0ba12b0c..41af8decd 100644 --- a/src/app/services/Repositorys/Agenda/agenda-data.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-data.service.ts @@ -2,6 +2,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { EventOutputDTO } from './model/eventDTOOutput'; +import { EventInputDTO } from './model/eventInputDTO'; @Injectable({ providedIn: 'root' @@ -34,7 +35,7 @@ export class AgendaDataService { } // Events Endpoints - createEvent(eventData: any): Observable { + createEvent(eventData: EventInputDTO): Observable { return this.http.post(`${this.baseUrl}/Events`, eventData); } diff --git a/src/app/services/Repositorys/Agenda/mapper/eventToApproveListMapper.ts b/src/app/services/Repositorys/Agenda/mapper/eventToApproveListMapper.ts new file mode 100644 index 000000000..985192937 --- /dev/null +++ b/src/app/services/Repositorys/Agenda/mapper/eventToApproveListMapper.ts @@ -0,0 +1,85 @@ +import { EventList } from "src/app/models/entiry/agenda/eventList" +import { EventListOutputDTO } from "../model/eventListDTOOutput" +import { EventToApproveListOutputDTO } from "../model/eventToApproveListOutputDTO"; +import { EventToApproveList } from "src/app/models/entiry/agenda/eventToApproveList"; + + +function getTextInsideParentheses(inputString): string { + var startIndex = inputString.indexOf('('); + var endIndex = inputString.indexOf(')'); + if (startIndex !== -1 && endIndex !== -1) { + return inputString.substring(startIndex + 1, endIndex); + } else { + return null; + } +} + +export class EventListToApproveMapper { + static toDomain(dto: EventToApproveListOutputDTO, calendarOwnerName: string, userId: string): EventToApproveList { + return dto.map((e) => ({ + serialNumber: e.id, + taskStatus: e.status, + taskStartDate: e.startDate, + taskReceiveDate: e.startDate, + deadline: null, + workflowDisplayName: "", + activityInstanceName: "", + totalDocuments: 0, + workflowInstanceDataFields: { + Agenda: e.category, + EndDate: e.endDate, + StartDate: e.startDate, + Subject: e.body, + Location: e.location, + Status: e.status, + IsAllDayEvent: e.isAllDayEvent, + InstanceId: "", + originator: "" + } + })) + } + + static toDTO() {} +} + + +// "serialNumber": "47315_184", +// "taskStatus": "Open", +// "taskStartDate": "2024-04-24T11:27:12.527", +// "taskReceiveDate": "2024-04-24T11:29:17.76", +// "deadline": null, +// "workflowDisplayName": "Agenda Oficial PR", +// "activityInstanceName": "Comunicar Evento", +// "totalDocuments": 0, +// "workflowInstanceDataFields": { +// "Agenda": "Oficial", +// "EndDate": "2024-04-25 11:30:00", +// "StartDate": "2024-04-24 11:30:00", +// "Subject": "Event 2 After MERGE", +// "Location": "lUANDA", +// "Status": "Active", +// "IsAllDayEvent": false, +// "InstanceId": "AAMkADVhOGY3ZDQzLTg4ZGEtNDYxMC1iMzc5LTJkMDgwNjMxOWFlZQBGAAAAAABEDW9nKs69TKQcVqQURj8YBwBR2HR2eO7pSpNdD9cc70l+AAAAAAFKAABR2HR2eO7pSpNdD9cc70l+AACK2Od9AAA=", +// "originator": "dlima@gabinetedigital.local" +// } + + + +// { +// "id": "5b170417-df57-4b5c-9a5e-3c73726a116d", +// "owner": null, +// "ownerType": "PR", +// "subject": "string", +// "body": "string", +// "location": "string", +// "startDate": "2024-05-29T00:00:00+00:00", +// "endDate": "2024-05-29T23:59:00+00:00", +// "type": "Meeting", +// "category": "Oficial", +// "isRecurring": false, +// "eventRecurrence": null, +// "hasAttachments": false, +// "isPrivate": false, +// "isAllDayEvent": true, +// "status": "Pending" +// } diff --git a/src/app/services/Repositorys/Agenda/model/eventInputDTO.ts b/src/app/services/Repositorys/Agenda/model/eventInputDTO.ts new file mode 100644 index 000000000..19a5f7541 --- /dev/null +++ b/src/app/services/Repositorys/Agenda/model/eventInputDTO.ts @@ -0,0 +1,42 @@ +import { z } from 'zod'; + +const attendeeSchema = z.object({ + name: z.string(), + emailAddress: z.string(), + attendeeType: z.number(), + wxUserId: z.number() +}); + +const attachmentSchema = z.object({ + docId: z.number(), + sourceName: z.string(), + description: z.string(), + applicationId: z.number() +}); + +const recurrenceSchema = z.object({ + frequency: z.number(), + occurrences: z.number() +}); + +const EventInputDTOSchema = z.object({ + userId: z.number(), + ownerType: z.number(), + subject: z.string(), + body: z.string(), + location: z.string(), + startDate: z.string().datetime(), + endDate: z.string().datetime(), + type: z.number(), + category: z.number(), + attendees: z.array(attendeeSchema), + attachments: z.array(attachmentSchema), + recurrence: recurrenceSchema, + organizerId: z.number(), + isAllDayEvent: z.boolean() +}); + + + +export type EventInputDTO = z.infer + diff --git a/src/app/services/Repositorys/Agenda/model/eventToApproveOutputDTO.ts b/src/app/services/Repositorys/Agenda/model/eventToApproveListOutputDTO.ts similarity index 80% rename from src/app/services/Repositorys/Agenda/model/eventToApproveOutputDTO.ts rename to src/app/services/Repositorys/Agenda/model/eventToApproveListOutputDTO.ts index 287b72c05..0d96fcc5d 100644 --- a/src/app/services/Repositorys/Agenda/model/eventToApproveOutputDTO.ts +++ b/src/app/services/Repositorys/Agenda/model/eventToApproveListOutputDTO.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -const EventToApproveList = z.object({ +const EventToApproveList = z.array(z.object({ id: z.string().uuid(), owner: z.string().nullable(), ownerType: z.enum(["PR", "MD", "Other"]), @@ -17,4 +17,6 @@ const EventToApproveList = z.object({ isPrivate: z.boolean(), isAllDayEvent: z.boolean(), status: z.enum(["Pending"]) -}); +})) + +export type EventToApproveListOutputDTO = z.infer; diff --git a/src/app/shared/agenda/event-list/event-list.page.html b/src/app/shared/agenda/event-list/event-list.page.html index 53506cdc8..04ada75ef 100644 --- a/src/app/shared/agenda/event-list/event-list.page.html +++ b/src/app/shared/agenda/event-list/event-list.page.html @@ -12,7 +12,7 @@ -
+
@@ -66,17 +66,17 @@

{{event.workflowInstanceDataFields.Subject}}

{{event.workflowInstanceDataFields.StartDate | date: 'd/M/yy' }} - {{ event.workflowInstanceDataFields.EndDate | date: 'dd/M/yy'}} | {{event.workflowInstanceDataFields.Location}}

{{event.workflowInstanceDataFields.StartDate | date: 'd/M/yy' }} | {{event.workflowInstanceDataFields.Location}}

- +
{{ event.activityInstanceName }}
-
+ - + diff --git a/src/app/shared/agenda/event-list/event-list.page.ts b/src/app/shared/agenda/event-list/event-list.page.ts index 2da2e0d50..2817fb53a 100644 --- a/src/app/shared/agenda/event-list/event-list.page.ts +++ b/src/app/shared/agenda/event-list/event-list.page.ts @@ -10,6 +10,7 @@ import { EventsService } from 'src/app/services/events.service'; import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.service'; import { environment } from 'src/environments/environment'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; +import { EventToApproveList } from 'src/app/models/entiry/agenda/eventToApproveList'; @Component({ selector: 'app-event-list', templateUrl: './event-list.page.html', @@ -19,7 +20,7 @@ export class EventListPage implements OnInit { // [desktop] event list to approve showLoader: boolean; - eventsList: any = [] + eventsList: EventToApproveList = [] eventPerson: EventPerson; eventBody: EventBody; @@ -92,61 +93,34 @@ export class EventListPage implements OnInit { return new Date(e).toDateString() } - - async LoadToApproveEvents() { - - /* if(SessionStore.user.Profile == 'PR') { - return false - } */ - this.showLoader = true; const segment: any = this.segment + let userId; if(this.segment == 'Meu calendario') { - // color - if(SessionStore.user.Profile == 'PR') { this.color = 'pr' } else { this.color = 'mdgpr' } - - let genericEvents = await this.processes.eventsToApprove(SessionStore.user.UserId,'mobile agenda').toPromise() - try { - this.eventsList = this.sortService.sortArrayByDate(genericEvents).reverse(); - } catch (error) { - this.eventsList = []; - this.showLoader = false; - } - - alert('my agenda') - this.eventoaprovacaostore.save(segment, this.eventsList) - - let a = await this.AgendaDataRepositoryService.eventToApprove({userId: this.SessionStore.user.UserId}).toPromise() - + userId = SessionStore.user.UserId } else if(segment) { - // console.log('segment', segment) - this.color = 'pr' - let allEvents = await this.processes.eventsToApprove(segment,'agenda desktop').toPromise() - try { - this.eventsList = this.sortService.sortArrayByDate(allEvents).reverse(); - } catch(error) { - this.eventsList = [] - this.showLoader = false; - } - - this.eventsList = this.eventsList - this.eventsList = this.eventsList - this.eventoaprovacaostore.save(segment, this.eventsList) + userId = segment } - this.showLoader = false; - + try { + let allEvents = await this.AgendaDataRepositoryService.eventToApproveList({userId}).toPromise() + this.eventsList = this.sortService.sortArrayByDate(allEvents).reverse(); + this.eventoaprovacaostore.save(segment, this.eventsList) + } catch (e) { + this.eventsList = []; + this.showLoader = false; + } } async LoadToApproveEventsNoLoader() {