add either pattern

This commit is contained in:
Peter Maquiran
2024-07-09 12:36:46 +01:00
parent 06417ead0f
commit a26fbbddba
45 changed files with 985 additions and 701 deletions
+23 -4
View File
@@ -1,4 +1,4 @@
import { Component, OnInit, ViewChild, Inject, LOCALE_ID } from '@angular/core';
import { Component, OnInit, ViewChild, Inject, LOCALE_ID, OnDestroy } from '@angular/core';
import { CalendarComponent } from 'ionic2-calendar';
import { ModalController } from '@ionic/angular';
import { EventsService } from 'src/app/services/events.service';
@@ -35,15 +35,17 @@ import { environment } from 'src/environments/environment';
import { RoleIdService } from 'src/app/services/role-id.service'
import { EventListStore } from 'src/app/models/agenda/AgendaEventList';
import { Cy } from 'cypress/enum'
import { Observable } from 'rxjs';
import { Observable, Subject, Subscription } from 'rxjs';
import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda-local-data-source.service';
import { map } from 'rxjs/operators';
import { map, throttleTime } from 'rxjs/operators';
import { EEventFilterStatus } from 'src/app/services/Repositorys/Agenda/model/enums';
import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer';
import { isHttpError } from 'src/app/services/http.service';
import { ToastService } from 'src/app/services/toast.service';
import { CalendarState, selectEventSource } from 'src/app/services/Repositorys/Agenda/agenda-memory-source.service';
import { Store } from '@ngrx/store';
import { NotificationRepositoryService } from 'src/app/module/notification/data/notification-repository.service';
import { Unsubscribable } from '../../../../android/app/build/intermediates/assets/debug/public/assets/dexie/dist/dexie';
@Component({
selector: 'app-agenda',
templateUrl: './agenda.page.html',
@@ -188,6 +190,9 @@ export class AgendaPage implements OnInit {
hasChangeCalendar = false
eventSource$ = this.store.select(selectEventSource);
private NotificationUpdate = new Subject<void>();
listenToEventNotificationSubscription!: Subscription;
constructor(
@Inject(LOCALE_ID) private locale: string,
@@ -203,9 +208,20 @@ export class AgendaPage implements OnInit {
public RoleIdService: RoleIdService,
public AgendaDataRepositoryService: AgendaDataRepositoryService,
private toastService: ToastService,
private store: Store<CalendarState>
private store: Store<CalendarState>,
private notificationRepository: NotificationRepositoryService
) {
this.NotificationUpdate.pipe(
throttleTime(1000) // Prevents the function from being called more than once per second
).subscribe(() => {
this.loadRangeEvents(this.rangeStartDate, this.rangeEndDate);
});
this.listenToEventNotificationSubscription = this.notificationRepository.listenToEventNotification().subscribe(() => {
this.NotificationUpdate.next()
})
this.selectedUserCalendar = SessionStore.user.UserId
this.AgendaDataRepositoryService.getSharedCalendar().then(async ()=> {
this.setCalendarByDefault(true)
@@ -291,6 +307,9 @@ export class AgendaPage implements OnInit {
this.weekToShow()
}
OnDestroy() {
this.listenToEventNotificationSubscription?.unsubscribe()
}
hasPrCalendar(data: TableSharedCalendar[]) {
for(const e of data) {
@@ -456,15 +456,18 @@ export class EditEventPage implements OnInit {
const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar)
if(calendar.isOk()) {
this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, this.editAllEvent, calendar.value, tracing).subscribe((value) => {
console.log(value)
this.close();
this.httpErrorHandle.httpsSucessMessagge('Editar evento')
tracing.setAttribute('outcome', 'success')
}, ((error) => {
tracing.setAttribute('outcome', 'failed')
console.log('edit event error: ', error)
}));
const value = await this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, this.editAllEvent, calendar.value, tracing)//.subscribe((value) => {
if(value.isOk()) {
console.log(value.value)
this.close();
this.httpErrorHandle.httpsSucessMessagge('Editar evento')
tracing.setAttribute('outcome', 'success')
} else {
tracing.setAttribute('outcome', 'failed')
console.log('edit event error: ', value.error)
}
console.log({serverCurrentList: this.serverCurrentList, Attendees: this.postEvent.Attendees})
@@ -472,7 +475,7 @@ export class EditEventPage implements OnInit {
console.log({insert, remove })
if(insert.length >= 1) {
this.agendaDataRepository.addEventAttendee(this.postEvent.EventId, insert).subscribe((value) => {
this.agendaDataRepository.addEventAttendee(this.postEvent.EventId, insert, tracing).subscribe((value) => {
console.log(value)
}, ((error) => {
tracing.setAttribute('failed.attendees', 'true')
@@ -62,24 +62,19 @@ export class EventActionsPopoverPage implements OnInit {
const loader = this.toastService.loading()
try {
/* await this.processes.PostTaskAction(body).toPromise() */
this.agendaDataRepository.approveEvent(this.serialNumber).subscribe((value) => {
console.log(value)
const value = await this.agendaDataRepository.approveEvent(this.serialNumber)// .subscribe((value) => {
if(value.isOk()) {
console.log(value.value)
this.TaskService.loadEventosParaAprovacao()
this.httpErrorHandle.httpsSucessMessagge('Evento aprovação')
this.goBack();
}, ((error) => {
console.log('aprove event error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}))
} else {
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
}
finally {
console.log('aprove event error: ', value.error)
this.httpErrorHandle.httpStatusHandle(value.error)
}
loader.remove()
}
}
@@ -130,22 +125,17 @@ export class EventActionsPopoverPage implements OnInit {
const loader = this.toastService.loading()
try {
/* await this.processes.PostTaskAction(body).toPromise(); */
this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Revision', res.data.note).subscribe((value) => {
this.httpErrorHandle.httpsSucessMessagge('Rever')
this.TaskService.loadEventosParaAprovacao()
this.goBack();
}, ((error) => {
console.log('send event to revision error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}));
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
}
finally {
loader.remove()
const result = await this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Revision', res.data.note)// .subscribe((value) => {
if(result.isOk()) {
this.httpErrorHandle.httpsSucessMessagge('Rever')
this.TaskService.loadEventosParaAprovacao()
this.goBack();
} else {
console.log('send event to revision error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
}
loader.remove()
} else {
}
@@ -160,22 +150,16 @@ export class EventActionsPopoverPage implements OnInit {
let body = { "serialNumber": this.serialNumber, "action": "Descartar" }
const loader = this.toastService.loading();
try {
/* await this.processes.PostTaskAction(body).toPromise(); */
this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Declined', '').subscribe((value) => {
this.TaskService.loadEventosParaAprovacao()
this.httpErrorHandle.httpsSucessMessagge('Rejeitar')
this.goBack();
}, ((error) => {
console.log('reject event error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}))
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
}
finally {
loader.remove();
const result = await this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Declined', '')//.subscribe((value) => {
if(result.isOk()) {
this.TaskService.loadEventosParaAprovacao()
this.httpErrorHandle.httpsSucessMessagge('Rejeitar')
this.goBack();
} else {
console.log('reject event error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
}
loader.remove();
}
@@ -498,20 +498,21 @@ export class NewEventPage implements OnInit {
this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc);
this.postEvent.IsAllDayEvent = this.allDayCheck;
try {
const value = await this.agendaDataRepository.createEvent(this.postEvent, this.documents, calendar.value, tracing).toPromise()
console.log(value)
const value = await this.agendaDataRepository.createEvent(this.postEvent, this.documents, calendar.value, tracing)
if(value.isOk()) {
console.log(value.value)
loader.remove()
this.hhtpErrorHandle.httpsSucessMessagge('new event')
let data = Object.assign(this.postEvent)
this.modalController.dismiss(data);
tracing.setAttribute('outcome', 'success');
} catch(error) {
} else {
tracing.setAttribute('outcome', 'failed');
console.log('create event error: ', error)
console.log('create event error: ', value.error)
loader.remove()
}
} else {
}
@@ -519,22 +520,6 @@ export class NewEventPage implements OnInit {
}
//This method return calendar id
selectedCalendarId() {
if (this.eventService.calendarNamesType[this.CalendarName]?.['Oficial'] && this.postEvent.CalendarName == 'Oficial') {
return this.eventService.calendarNamesType[this.CalendarName]['OficialId']
} else if (this.eventService.calendarNamesType[this.CalendarName]?.['Pessoal'] && this.postEvent.CalendarName == 'Pessoal') {
return this.eventService.calendarNamesType[this.CalendarName]['PessoalId']
} else {
return '11:11'
}
}
//This method return calendar onwner user id
selectedCalendarUserId() {
@@ -19,6 +19,7 @@ import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda
import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer';
import { isHttpError } from 'src/app/services/http.service';
import { PermissionService } from 'src/app/services/permission.service';
import { DeleteEventRecurrencePage, EventDeleteRecurrenceComponentReturn } from 'src/app/modals/delete-event-recurrence/delete-event-recurrence.page';
@Component({
selector: 'app-view-event',
@@ -186,42 +187,33 @@ export class ViewEventPage implements OnInit {
}
deleteYesOrNo() {
async deleteYesOrNo() {
if (this.loadedEvent.IsRecurring) {
this.alertController.create({
header: 'Eliminar evento?',
message: 'Este evento tem recorrência, deseja eliminar a Sequência de eventos?',
inputs: [
{
name: 'confirm',
type: 'checkbox',
label: '',
value: 'confirm',
checked: false,
}
],
buttons: [
{
text: 'Sim',
handler: (data) => {
if (data.includes('confirm')) {
this.deleteEvent(true);
} else {
this.deleteEvent(false);
}
}
},
{
text: 'Não',
handler: () => {
// sconsole.log('Let me think');
}
}
]
}).then(res => {
res.present();
const modal = await this.modalController.create({
component: DeleteEventRecurrencePage,
componentProps: {},
cssClass: 'event-recurrence-modal',
});
modal.onDidDismiss().then((res) => {
const data: EventDeleteRecurrenceComponentReturn = res.data
if(data =='DeleteAll') {
this.deleteEvent(true);
} else if (data == 'DeleteOne') {
this.deleteEvent(false);
} else if(data == 'Cancel') {
this.close()
} else {
this.close()
}
});
await modal.present();
} else {
this.alertController.create({
header: 'Eliminar evento?',
@@ -247,13 +239,14 @@ export class ViewEventPage implements OnInit {
}
deleteEvent(deleteAll) {
async deleteEvent(deleteAll) {
const loader = this.toastService.loading()
console.log(this.loadedEvent.EventId)
this.agendaDataRepository.deleteEvent(this.loadedEvent.EventId,deleteAll).subscribe(async () => {
const result = await this.agendaDataRepository.deleteEvent(this.loadedEvent.EventId,deleteAll)//.subscribe(async () => {
if(result.isOk()) {
const alert = await this.alertController.create({
cssClass: 'my-custom-class',
header: 'Evento removido',
@@ -265,14 +258,14 @@ export class ViewEventPage implements OnInit {
}, 1500);
this.goBack();
this.httpErrorHandle.httpsSucessMessagge('delete event')
}, (error) => {
console.log('delete event error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}, () => {
loader.remove();
});
} else {
console.log('delete event error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
}
loader.remove();
}
@@ -143,27 +143,22 @@ export class ApproveEventPage implements OnInit {
const loader = this.toastService.loading()
try {
const result = await this.AgendaDataRepositoryService.approveEvent(serialNumber)//.subscribe(async (value) => {
this.AgendaDataRepositoryService.approveEvent(serialNumber).subscribe(async (value) => {
if(result.isOk()) {
await this.processes.PostTaskAction(body).toPromise()
this.goBack();
this.httpErrorHandle.httpsSucessMessagge('Evento aprovação')
this.TaskService.loadEventosParaAprovacao();
await this.processes.PostTaskAction(body).toPromise()
this.goBack();
this.httpErrorHandle.httpsSucessMessagge('Evento aprovação')
this.TaskService.loadEventosParaAprovacao();
} else {
}, ((error) => {
console.log('aprove event error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}))
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
}
finally {
loader.remove()
console.log('aprove event error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
}
loader.remove()
}
async emendTask(serialNumber: string) {
@@ -193,28 +188,25 @@ export class ApproveEventPage implements OnInit {
}
const loader = this.toastService.loading()
const loader = this.toastService.loading()
try {
this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Revision', res.data.note).subscribe((value) => {
const result = await this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Revision', res.data.note)//.subscribe((value) => {
if(result.isOk()) {
this.httpErrorHandle.httpsSucessMessagge('Rever')
this.TaskService.loadEventosParaAprovacao();
this.goBack();
}, ((error) => {
console.log('send event to revision error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
this.offlineManager.storeRequestData('event-listRever', body);
}));
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
} finally {
} else {
console.log('send event to revision error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
this.offlineManager.storeRequestData('event-listRever', body);
}
loader.remove()
}
}
}, (error) => {
console.log(error)
});
@@ -227,22 +219,19 @@ export class ApproveEventPage implements OnInit {
let body = { "serialNumber": serialNumber, "action": "Descartar" }
const loader = this.toastService.loading()
try {
/* await this.processes.PostTaskAction(body).toPromise(); */
this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Declined', '').subscribe((value) => {
this.httpErrorHandle.httpsSucessMessagge('Rejeitar')
this.TaskService.loadEventosParaAprovacao();
this.goBack();
}, ((error) => {
console.log('reject event error: ', error)
this.httpErrorHandle.httpStatusHandle(error)
}))
} catch (error) {
this.httpErrorHandle.httpStatusHandle(error)
}
finally {
loader.remove()
/* await this.processes.PostTaskAction(body).toPromise(); */
const result = await this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Declined', '')//.subscribe((value) => {
if(result.isOk()) {
this.httpErrorHandle.httpsSucessMessagge('Rejeitar')
this.TaskService.loadEventosParaAprovacao();
this.goBack();
} else {
console.log('reject event error: ', result.error)
this.httpErrorHandle.httpStatusHandle(result.error)
}
loader.remove()
}
async viewDocument(DocId: string, Document) {
@@ -369,27 +369,29 @@ export class BookMeetingModalPage implements OnInit {
const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar)
if(calendar.isOk()) {
try {
const value = await this.agendaDataRepository.createEvent(postData, this.documents, calendar.value, tracing).toPromise()
console.log(value)
const value = await this.agendaDataRepository.createEvent(postData, this.documents, calendar.value, tracing)
if(value.isOk()) {
console.log(value.value)
this.httpErroHandle.httpsSucessMessagge('new event')
loader.remove();
tracing.setAttribute('outcome', 'success')
this.close();
} catch (error) {
} else {
if(!isHttpError(error)) {
if(!isHttpError(value.error)) {
this.toastService._badRequest('Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico. #1')
console.log(error)
console.log(value.error)
tracing.bugFlag()
} else {
this.httpErroHandle.httpStatusHandle(error.status)
this.httpErroHandle.httpStatusHandle(value.error.status)
}
console.log('create event error: ', error)
console.log('create event error: ', value.error)
tracing.setAttribute('outcome', 'failed')
}
} else {