From 7c2a2152e9f0b7233c7f0aa6472dfe6f0d27c9cb Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 08:51:52 +0100 Subject: [PATCH 01/28] add counting --- src/app/OtherService/document-counter.service.ts | 8 ++++---- src/app/home/home.page.html | 4 ++-- src/app/home/home.page.ts | 4 ++-- .../gabinete-digital/gabinete-digital.page.html | 2 +- .../pages/gabinete-digital/gabinete-digital.page.ts | 13 ++++++++++++- src/app/store/despacho-store.service.ts | 2 +- src/app/store/despachospr-store.service.ts | 2 +- src/app/store/eventoaprovacao-store.service.ts | 11 ++++++----- src/app/store/expedientegd-store.service.ts | 2 +- src/app/store/expedientepr-store.service.ts | 2 +- src/app/store/pedidos-store.service.ts | 4 ++-- src/app/store/pendestes-store.service.ts | 3 +-- 12 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/app/OtherService/document-counter.service.ts b/src/app/OtherService/document-counter.service.ts index a2b8c2059..93a91d208 100644 --- a/src/app/OtherService/document-counter.service.ts +++ b/src/app/OtherService/document-counter.service.ts @@ -25,15 +25,15 @@ export class DocumentCounterService { constructor() { } // falta a contagem dos deplomas - get mdTotalDocument() { + get mdTotalDocument(): number { return this.despachoStore.count + this.expedienteGbStore.count + this.pedidosStore.countdeferimento + this.pedidosStore.countparecer + this.expedientePrStore.count + this.despachoPrStore.count + this.pendentesStore.count - + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasListCount + + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount } - get prTotalDocument() { + get prTotalDocument(): number { return this.despachoStore.count + this.expedienteGbStore.count + this.pedidosStore.countdeferimento + this.pedidosStore.countparecer + this.expedientePrStore.count + this.despachoPrStore.count + this.pendentesStore.count - + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasListCount + + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount } } diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 1eb5d189e..55a31a0c0 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -15,8 +15,8 @@ - {{ totalDocumentStore.count }} - {{ totalDocumentStore.count }} + {{ documentCounterService.mdTotalDocument }} + {{ documentCounterService.prTotalDocument }} Gabinete diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index cef00976b..070babc46 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -73,9 +73,9 @@ export class HomePage implements OnInit { private notificatinsservice: NotificationsService, private platform: Platform, private activeroute: ActivatedRoute, - public documentCounterService: DocumentCounterService, // private network: NetworkService, - public p: PermissionService) { + public p: PermissionService, + public documentCounterService: DocumentCounterService) { this.router.events.subscribe((val) => { document.querySelectorAll('ion-modal').forEach((e: any) => e.remove()) diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.html b/src/app/pages/gabinete-digital/gabinete-digital.page.html index 4d406fe15..0f3d1709e 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.html +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.html @@ -103,7 +103,7 @@

Eventos para Aprovação

-

{{eventoaprovacaostore.count}} Documentos

+

{{eventoaprovacaostore.countMd + eventoaprovacaostore.countPr}} Documentos

diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index 373732873..c971df302 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -501,6 +501,18 @@ export class GabineteDigitalPage implements OnInit, DoCheck { break; } + + let mdEventsOficial = await this.processesbackend.GetTasksList('Agenda Oficial MDGPR', false).toPromise(); + let mdEventsPessoal = await this.processesbackend.GetTasksList('Agenda Pessoal MDGPR', false).toPromise(); + const eventsMDGPRList = mdEventsOficial.concat(mdEventsPessoal); + this.eventoaprovacaostore.resetmd(eventsMDGPRList); + + let prEventsOficial = await this.processesbackend.GetTasksList('Agenda Oficial PR', false).toPromise(); + let prEventsPessoal = await this.processesbackend.GetTasksList('Agenda Pessoal PR', false).toPromise(); + const eventsPRList = prEventsOficial.concat(prEventsPessoal); + this.eventoaprovacaostore.resetpr(eventsPRList); + + let diplomasValidar = despachospr.filter(data => data.activityInstanceName == "Revisar Diploma"); this.count_dip_pv = Object.keys(diplomasValidar).length; this.deplomasStore.resetDiplomasReview(diplomasValidar) @@ -518,7 +530,6 @@ export class GabineteDigitalPage implements OnInit, DoCheck { this.processesbackend.GetToApprovedEvents('Agenda','true').subscribe(res=>{ this.count_ev_apr = res; }); - this.eventoaprovacaostore.count; this.showLoader = false; diff --git a/src/app/store/despacho-store.service.ts b/src/app/store/despacho-store.service.ts index 9282a06fd..8633dfe9f 100644 --- a/src/app/store/despacho-store.service.ts +++ b/src/app/store/despacho-store.service.ts @@ -31,7 +31,7 @@ export class DespachoStoreService { } get count() { - return this._count + return this._count || 0 } set count(value: number) { diff --git a/src/app/store/despachospr-store.service.ts b/src/app/store/despachospr-store.service.ts index 09a345fb6..24e50fadb 100644 --- a/src/app/store/despachospr-store.service.ts +++ b/src/app/store/despachospr-store.service.ts @@ -30,7 +30,7 @@ get list() { return this._list || [] } -get count() { return this._count } +get count() { return this._count || 0 } set count(value: number) { this._count = value this.save() diff --git a/src/app/store/eventoaprovacao-store.service.ts b/src/app/store/eventoaprovacao-store.service.ts index c8745e4b8..494300f69 100644 --- a/src/app/store/eventoaprovacao-store.service.ts +++ b/src/app/store/eventoaprovacao-store.service.ts @@ -39,17 +39,17 @@ export class EventoaprovacaoStoreService { get listpr() { return this._listPr } get listmd() { return this._listMd } - get count() { return this._count } + get count() { return this._count || 0 } set count(value: number) { this._count = value } - get countPr() { return this._countPr } - set countPr (value) { + get countPr() { return this._countPr || 0 } + set countPr (value: number) { this._countPr = value } - get countMd() { return this._countMd } + get countMd() { return this._countMd || 0 } set countMd (value) { this._countMd = value } @@ -72,7 +72,7 @@ export class EventoaprovacaoStoreService { } private saveMd() { - setTimeout(()=>{ + setTimeout(()=>{ localstoreService.set(this.keyNamemd,{ lisMd: this._listMd, countListMd: this._countMd @@ -80,6 +80,7 @@ export class EventoaprovacaoStoreService { }, 10) } + private savePr() { setTimeout(()=>{ localstoreService.set(this.keyNamepr,{ diff --git a/src/app/store/expedientegd-store.service.ts b/src/app/store/expedientegd-store.service.ts index c139f8096..c4f03fd18 100644 --- a/src/app/store/expedientegd-store.service.ts +++ b/src/app/store/expedientegd-store.service.ts @@ -29,7 +29,7 @@ export class ExpedientegdStoreService { return this._list } get count() { - return this._count + return this._count || 0 } set count(value: number) { this._count = value diff --git a/src/app/store/expedientepr-store.service.ts b/src/app/store/expedientepr-store.service.ts index 860730f03..5fd2c0fb2 100644 --- a/src/app/store/expedientepr-store.service.ts +++ b/src/app/store/expedientepr-store.service.ts @@ -26,7 +26,7 @@ export class ExpedienteprStoreService { get list() { return this._list || [] } - get count() { return this._count } + get count() { return this._count || 0 } set count(value: number) { this._count = value this.save() diff --git a/src/app/store/pedidos-store.service.ts b/src/app/store/pedidos-store.service.ts index d9225cd3c..0357446a7 100644 --- a/src/app/store/pedidos-store.service.ts +++ b/src/app/store/pedidos-store.service.ts @@ -42,7 +42,7 @@ export class PedidosStoreService { } get countparecer() { - return this._countparecer + return this._countparecer || 0 } set countparecer(value: number) { this._countparecer = value @@ -50,7 +50,7 @@ export class PedidosStoreService { } get countdeferimento() { - return this._countDeferiemnto + return this._countDeferiemnto || 0 } set countdeferimento(value: number ) { this._countDeferiemnto = value diff --git a/src/app/store/pendestes-store.service.ts b/src/app/store/pendestes-store.service.ts index 0603f80b3..89d06bc7c 100644 --- a/src/app/store/pendestes-store.service.ts +++ b/src/app/store/pendestes-store.service.ts @@ -31,8 +31,7 @@ export class PendestesStoreService { } get count() { - return this._count - this.save() + return this._count || 0 } set count(value) { this._count = value From 54ee7701c81533e0e98f74c41bca0b48b8a7e4db Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 09:38:13 +0100 Subject: [PATCH 02/28] Fix go back --- .../event-actions-popover.page.ts | 19 ++++++------------- .../approve-event/approve-event.page.html | 16 ++++++++-------- src/app/store/chat/chat-user.service.ts | 11 ++++++----- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts b/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts index 9ec489bbb..6294005fd 100644 --- a/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts +++ b/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts @@ -7,6 +7,7 @@ import { EditEventToApproveComponent } from 'src/app/shared/gabinete-digital/edi import { BadRequestPage } from 'src/app/shared/popover/bad-request/bad-request.page'; import { SuccessMessagePage } from 'src/app/shared/popover/success-message/success-message.page'; import { EmendMessageModalPage } from '../emend-message-modal/emend-message-modal.page'; +import { Location } from '@angular/common'; @Component({ selector: 'app-event-actions-popover', @@ -24,7 +25,8 @@ export class EventActionsPopoverPage implements OnInit { private modalController: ModalController, private popoverController: PopoverController, private animationController: AnimationController, - private toastService: ToastService,) { + private toastService: ToastService, + private location: Location) { this.serialNumber = this.navParams.get('serialNumber'); this.instanceId = this.navParams.get('InstanceId'); } @@ -37,22 +39,13 @@ export class EventActionsPopoverPage implements OnInit { }; } - goBack(){ + goBack() { this.closePopover(); - if (window.innerWidth <= 801) { - this.router.navigate(['/home/gabinete-digital/event-list']); - } else { - let navigationExtras: NavigationExtras = { - queryParams: { - 'eventos': true - } - } - this.router.navigate(['/home/gabinete-digital'], navigationExtras); - } + this.location.back() } - closePopover(){ + closePopover() { this.popoverController.dismiss(); } diff --git a/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.html b/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.html index 71f3bd2f2..977fe6f70 100644 --- a/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.html +++ b/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.html @@ -104,13 +104,13 @@ -
- - - - - - +
+ + + + + + -
+
diff --git a/src/app/store/chat/chat-user.service.ts b/src/app/store/chat/chat-user.service.ts index 1fa1166b2..eb60b2941 100644 --- a/src/app/store/chat/chat-user.service.ts +++ b/src/app/store/chat/chat-user.service.ts @@ -8,7 +8,7 @@ import { SHA1 } from 'crypto-js' export class ChatUserService { // main data - private _userList = [] + private _userList = {} // local storage keyName private keyName: string; @@ -17,8 +17,8 @@ export class ChatUserService { this.keyName = ('chat'+SHA1(this.constructor.name)).toString() setTimeout(()=>{ - let restore = localstoreService.get(this.keyName, []) - this._userList = restore.userList + let restore = localstoreService.get(this.keyName, {}) + this._userList = restore.userList || {} }, 10) } @@ -27,8 +27,9 @@ export class ChatUserService { return this._userList } - reset(userList: any[]) { - this._userList = userList + add(roomId:string, userList: any[] = []) { + + this._userList[roomId] = userList this.save() } From 8ba32333e725ce83582d98700dbe9e8b4c5583f8 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 10:02:12 +0100 Subject: [PATCH 03/28] git status --- src/app/modals/create-process/create-process.page.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/modals/create-process/create-process.page.ts b/src/app/modals/create-process/create-process.page.ts index 68bdd26f1..4f315f1f5 100644 --- a/src/app/modals/create-process/create-process.page.ts +++ b/src/app/modals/create-process/create-process.page.ts @@ -282,7 +282,8 @@ export class CreateProcessPage implements OnInit { try { await this.processes.postDespatcho(this.postData).toPromise(); - await this.FinalizarDespacho(loader, 'Despacho criado'); + await this.despachoService.EfectuarDespacho({serialnumber: this.task.serialNumber}).toPromise(); + this.modalController.dismiss(); } catch (error) { this.toastService.badRequest('Processo não efectuado'); From 4195e321bbd39cbb3ff51cee17687a39211d166a Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 10:40:17 +0100 Subject: [PATCH 04/28] fix --- src/app/home/home.page.ts | 11 ++++++----- src/app/modals/create-process/create-process.page.ts | 2 +- src/app/modals/delegar/delegar.page.ts | 2 +- src/app/modals/forward/forward.page.ts | 2 +- src/app/pages/events/edit-event/edit-event.page.ts | 2 +- .../event-detail-modal/event-detail-modal.page.ts | 2 +- .../pages/events/event-detail/event-detail.page.ts | 2 +- .../despachos/despacho/despacho.page.ts | 2 +- src/app/services/socket/synchro.service.ts | 3 ++- 9 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 070babc46..29b4d2352 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -2,17 +2,16 @@ /* tslint:disable */ /// /// -import { Component, OnInit, NgZone, Inject } from '@angular/core'; -import { EventsService } from '../services/events.service'; +import { Component, OnInit, NgZone } from '@angular/core'; import { Event } from '../models/event.model'; -import { ProcessesService } from '../services/processes.service'; import { NotificationsService } from '../services/notifications.service'; -import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular'; +import { AlertController, Platform } from '@ionic/angular'; import { Router, ActivatedRoute } from '@angular/router'; import { ToDayEventStorage } from '../store/to-day-event-storage.service'; import { DocumentCounterService } from 'src/app/OtherService/document-counter.service' import { PermissionService } from '../OtherService/permission.service'; -import { TotalDocumentService, TotalDocumentStore } from '../store/total-document.service'; +import { TotalDocumentStore } from '../store/total-document.service'; +import { connection } from '../services/socket/synchro.service'; // import { NetworkService } from '../services/network.service'; @@ -67,6 +66,8 @@ export class HomePage implements OnInit { postEvent: any; folderId: string; + connection = connection + constructor(private zone: NgZone, private router: Router, public modalCtrl: AlertController, diff --git a/src/app/modals/create-process/create-process.page.ts b/src/app/modals/create-process/create-process.page.ts index 4f315f1f5..059bdfccf 100644 --- a/src/app/modals/create-process/create-process.page.ts +++ b/src/app/modals/create-process/create-process.page.ts @@ -506,7 +506,7 @@ export class CreateProcessPage implements OnInit { taskParticipants: this.taskParticipants, taskParticipantsCc: this.taskParticipantsCc }, - cssClass: 'modal attendee', + cssClass: 'modal attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/modals/delegar/delegar.page.ts b/src/app/modals/delegar/delegar.page.ts index c9ce5ab44..1a1116285 100644 --- a/src/app/modals/delegar/delegar.page.ts +++ b/src/app/modals/delegar/delegar.page.ts @@ -129,7 +129,7 @@ export class DelegarPage implements OnInit { taskParticipants: this.taskParticipants, taskParticipantsCc: this.taskParticipantsCc }, - cssClass: 'modal attendee', + cssClass: 'modal attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/modals/forward/forward.page.ts b/src/app/modals/forward/forward.page.ts index 02c92198a..ede8b6f3b 100644 --- a/src/app/modals/forward/forward.page.ts +++ b/src/app/modals/forward/forward.page.ts @@ -167,7 +167,7 @@ export class ForwardPage implements OnInit { taskParticipants: this.taskParticipants, taskParticipantsCc: this.taskParticipantsCc }, - cssClass: 'modal attendee', + cssClass: 'modal attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/pages/events/edit-event/edit-event.page.ts b/src/app/pages/events/edit-event/edit-event.page.ts index b6c51d26a..994fa65a8 100644 --- a/src/app/pages/events/edit-event/edit-event.page.ts +++ b/src/app/pages/events/edit-event/edit-event.page.ts @@ -91,7 +91,7 @@ export class EditEventPage implements OnInit { componentProps: { eventAttendees: this.loadedEvent.Attendees }, - cssClass: 'attendee', + cssClass: 'attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/pages/events/event-detail-modal/event-detail-modal.page.ts b/src/app/pages/events/event-detail-modal/event-detail-modal.page.ts index 66940fd16..65585077c 100644 --- a/src/app/pages/events/event-detail-modal/event-detail-modal.page.ts +++ b/src/app/pages/events/event-detail-modal/event-detail-modal.page.ts @@ -93,7 +93,7 @@ export class EventDetailModalPage implements OnInit { componentProps: { eventAttendees: this.loadedEvent.Attendees }, - cssClass: 'attendee', + cssClass: 'attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/pages/events/event-detail/event-detail.page.ts b/src/app/pages/events/event-detail/event-detail.page.ts index bc5a58008..96a642ed8 100644 --- a/src/app/pages/events/event-detail/event-detail.page.ts +++ b/src/app/pages/events/event-detail/event-detail.page.ts @@ -91,7 +91,7 @@ export class EventDetailPage implements OnInit { componentProps: { eventAttendees: this.loadedEvent.Attendees }, - cssClass: 'attendee', + cssClass: 'attendee modal-desktop', backdropDismiss: false }); diff --git a/src/app/pages/gabinete-digital/despachos/despacho/despacho.page.ts b/src/app/pages/gabinete-digital/despachos/despacho/despacho.page.ts index 3629425c9..1c7e55605 100644 --- a/src/app/pages/gabinete-digital/despachos/despacho/despacho.page.ts +++ b/src/app/pages/gabinete-digital/despachos/despacho/despacho.page.ts @@ -302,7 +302,7 @@ export class DespachoPage implements OnInit { async openExpedientActionsModal(taskAction: any, task: any) { let classs; - if( window.innerWidth <= 800){ + if( window.innerWidth <= 800) { classs = 'modal modal-desktop' } else { classs = 'modal modal-desktop showAsideOptions' diff --git a/src/app/services/socket/synchro.service.ts b/src/app/services/socket/synchro.service.ts index 3d9d261eb..537ee72ff 100644 --- a/src/app/services/socket/synchro.service.ts +++ b/src/app/services/socket/synchro.service.ts @@ -116,4 +116,5 @@ export class SynchroService { export const connection = new SynchroService() connection.setUrl() -connection.connect() \ No newline at end of file +connection.connect() + From f469fa0588874214fd39b17c596b7d5eefc75fa7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 10:49:17 +0100 Subject: [PATCH 05/28] Improve option centralization --- src/app/shared/popover/chat-popover/chat-popover.page.html | 2 +- src/app/shared/popover/chat-popover/chat-popover.page.scss | 2 +- .../shared/popover/deploma-options/deploma-options.page.html | 2 +- .../shared/popover/deploma-options/deploma-options.page.scss | 2 +- .../popover/despachos-options/despachos-options.page.html | 2 +- .../popover/despachos-options/despachos-options.page.scss | 2 +- .../popover/despachos-pr-options/despachos-pr-options.page.html | 2 +- .../popover/despachos-pr-options/despachos-pr-options.page.scss | 2 +- .../popover/opts-expediente-pr/opts-expediente-pr.page.html | 2 +- .../popover/opts-expediente-pr/opts-expediente-pr.page.scss | 2 +- .../shared/popover/opts-expediente/opts-expediente.page.html | 2 +- .../shared/popover/opts-expediente/opts-expediente.page.scss | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/app/shared/popover/chat-popover/chat-popover.page.html b/src/app/shared/popover/chat-popover/chat-popover.page.html index 10bab132a..f179b830e 100644 --- a/src/app/shared/popover/chat-popover/chat-popover.page.html +++ b/src/app/shared/popover/chat-popover/chat-popover.page.html @@ -1,4 +1,4 @@ - +
-
+
Documentos Anexados
-
  • +
  • {{attach.SourceName}} diff --git a/src/app/shared/agenda/view-event/view-event.page.ts b/src/app/shared/agenda/view-event/view-event.page.ts index a04ef85cf..4a9c0f6fd 100644 --- a/src/app/shared/agenda/view-event/view-event.page.ts +++ b/src/app/shared/agenda/view-event/view-event.page.ts @@ -22,7 +22,6 @@ export class ViewEventPage implements OnInit { isEventEdited: boolean; eventBody: EventBody; loadedAttachments:any; - loadedEventAttachments: Attachment[]; pageId: string; showLoader: boolean; @@ -44,7 +43,6 @@ export class ViewEventPage implements OnInit { constructor( private eventsService: EventsService, - private attachmentsService: AttachmentsService, public alertController: AlertController, private iab: InAppBrowser, private processes: ProcessesService, @@ -96,7 +94,6 @@ export class ViewEventPage implements OnInit { this.loadedEvent = res; this.today = new Date(res.StartDate); this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]); - this.getAttachments(this.loadedEvent.EventId); }, (error)=> { console.log('errer', ) @@ -142,12 +139,6 @@ export class ViewEventPage implements OnInit { } - getAttachments(eventId){ - this.attachmentsService.getAttachmentsById(eventId).subscribe(res=>{ - this.loadedAttachments = res; - console.log(res); - }); - } async editEvent() { this.viewEventDetailDismiss.emit({ diff --git a/src/app/store/chat/chat-message.service.ts b/src/app/store/chat/chat-message.service.ts index e9e5fe84d..0ae5cf854 100644 --- a/src/app/store/chat/chat-message.service.ts +++ b/src/app/store/chat/chat-message.service.ts @@ -13,7 +13,7 @@ export class ChatMessageService { constructor() { - this.keyName = ('chat'+SHA1(this.constructor.name)).toString() + this.keyName = (SHA1('chat'+this.constructor.name)).toString() setTimeout(()=> { let restore = localstoreService.get(this.keyName, {}) diff --git a/src/app/store/chat/chat-user.service.ts b/src/app/store/chat/chat-user.service.ts index e18ce4ad5..af9876222 100644 --- a/src/app/store/chat/chat-user.service.ts +++ b/src/app/store/chat/chat-user.service.ts @@ -14,7 +14,7 @@ export class ChatUserService { constructor() { - this.keyName = ('chat'+SHA1(this.constructor.name)).toString() + this.keyName = (SHA1('chat'+this.constructor.name)).toString() setTimeout(()=> { let restore = localstoreService.get(this.keyName, {}) diff --git a/src/app/store/localstore.service.ts b/src/app/store/localstore.service.ts index bdf55dab8..548c1e7cb 100644 --- a/src/app/store/localstore.service.ts +++ b/src/app/store/localstore.service.ts @@ -6,7 +6,7 @@ import { AES, enc, SHA1 } from 'crypto-js' }) export class LocalstoreService { - private prefix = 'v14-' + private prefix = 'v15-' constructor() { From c15c45243fd446244c8ce7f32821afc82d522d9e Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 13:04:26 +0100 Subject: [PATCH 09/28] Fix --- src/app/pages/agenda/view-event/view-event.page.ts | 1 - src/app/shared/agenda/view-event/view-event.page.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/app/pages/agenda/view-event/view-event.page.ts b/src/app/pages/agenda/view-event/view-event.page.ts index 242beef54..6b2fa3ca7 100644 --- a/src/app/pages/agenda/view-event/view-event.page.ts +++ b/src/app/pages/agenda/view-event/view-event.page.ts @@ -1,6 +1,5 @@ import { Component, OnInit } from '@angular/core'; import { AlertController, ModalController, PopoverController } from '@ionic/angular'; -import { Attachment } from 'src/app/models/attachment.model'; import { EventBody } from 'src/app/models/eventbody.model'; import { AttachmentsService } from 'src/app/services/attachments.service'; import { EventsService } from 'src/app/services/events.service'; diff --git a/src/app/shared/agenda/view-event/view-event.page.ts b/src/app/shared/agenda/view-event/view-event.page.ts index 4a9c0f6fd..862f72ccd 100644 --- a/src/app/shared/agenda/view-event/view-event.page.ts +++ b/src/app/shared/agenda/view-event/view-event.page.ts @@ -2,7 +2,6 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { AlertController, ModalController, PopoverController } from '@ionic/angular'; import { Attachment } from 'src/app/models/attachment.model'; import { EventBody } from 'src/app/models/eventbody.model'; -import { AttachmentsService } from 'src/app/services/attachments.service'; import { EventsService } from 'src/app/services/events.service'; import { Event } from 'src/app/models/event.model'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; From e76df5c22f3c1fff9146078672c06df54dde7d4a Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 15:23:30 +0100 Subject: [PATCH 10/28] Fix refresh --- .../agenda/new-event/new-event.page.html | 3 -- .../pages/agenda/new-event/new-event.page.ts | 4 --- .../publication-detail.page.ts | 17 +++++++---- .../view-publications.page.ts | 3 +- .../agenda/new-event/new-event.page.html | 5 +--- .../shared/agenda/new-event/new-event.page.ts | 30 +++---------------- .../agenda/view-event/view-event.page.ts | 2 +- .../view-publications.page.ts | 4 ++- src/app/store/deplomas.service.ts | 1 + 9 files changed, 23 insertions(+), 46 deletions(-) diff --git a/src/app/pages/agenda/new-event/new-event.page.html b/src/app/pages/agenda/new-event/new-event.page.html index 63ef2105f..b7aa03b6c 100644 --- a/src/app/pages/agenda/new-event/new-event.page.html +++ b/src/app/pages/agenda/new-event/new-event.page.html @@ -123,7 +123,6 @@ displayFormat="D MMM YYYY H:mm" minuteValues="0,15,30,45" monthShortNames="Jan, Fev, Mar, Abr, Mai, Jun, Jul, Aug, Sep, Out, Nov, Dez" - min="{{minDate}}" max="2025" > @@ -144,7 +143,6 @@ displayFormat="D MMM YYYY H:mm" minuteValues="0,15,30,45" monthShortNames="Jan, Fev, Mar, Abr, Mai, Jun, Jul, Aug, Sep, Out, Nov, Dez" - min="{{minDate}}" max="2025" > @@ -182,7 +180,6 @@ [(ngModel)]="postEvent.EventRecurrence.LastOccurrence" displayFormat="DD MMM YYYY" monthShortNames="Jan, Fev, Mar, Abr, Mai, Jun, Jul, Aug, Sep, Out, Nov, Dez" - min="2021" max="2045" > diff --git a/src/app/pages/agenda/new-event/new-event.page.ts b/src/app/pages/agenda/new-event/new-event.page.ts index dbe92c75b..2b52cab02 100644 --- a/src/app/pages/agenda/new-event/new-event.page.ts +++ b/src/app/pages/agenda/new-event/new-event.page.ts @@ -31,8 +31,6 @@ export class NewEventPage implements OnInit { public showSeconds = false; public touchUi = false; public enableMeridian = false; - public minDate = new Date().toISOString().slice(0,10) - public endMinDate = new Date(new Date().getTime() + 15 * 60000); public stepHour = 1; public stepMinute = 5; public stepSecond = 5; @@ -81,8 +79,6 @@ export class NewEventPage implements OnInit { this.selectedDate = this.navParams.get('eventSelectedDate'); this.taskParticipants = this.navParams.get('attendees'); - console.log(this.taskParticipants); - this.postEvent.StartDate = new Date() this.postEvent.EndDate = (new Date(new Date().getTime() + 15 * 60000)) } diff --git a/src/app/pages/publications/publication-detail/publication-detail.page.ts b/src/app/pages/publications/publication-detail/publication-detail.page.ts index 035353783..a13637b80 100644 --- a/src/app/pages/publications/publication-detail/publication-detail.page.ts +++ b/src/app/pages/publications/publication-detail/publication-detail.page.ts @@ -5,6 +5,7 @@ import { PublicationsService } from 'src/app/services/publications.service'; import { ToastService } from 'src/app/services/toast.service'; import { ImageModalPage } from '../gallery/image-modal/image-modal.page'; import { NewPublicationPage } from '../new-publication/new-publication.page'; +import { Location } from '@angular/common'; @Component({ @@ -23,8 +24,8 @@ export class PublicationDetailPage implements OnInit { private navParams:NavParams, private publications:PublicationsService, private animationController: AnimationController, - private toastService: ToastService - ) { + private toastService: ToastService, + private location: Location ) { alert('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') @@ -56,7 +57,7 @@ export class PublicationDetailPage implements OnInit { }, 2000); } - getPublicationDetail(){ + getPublicationDetail() { this.showLoader = true; console.log(this.publicationId); /* console.log(this.folderId); */ @@ -78,17 +79,21 @@ export class PublicationDetailPage implements OnInit { }); } - close(){ - this.modalController.dismiss(); + close() { + this.location.back() + } - async deletePost(){ + async deletePost() { const loader = this.toastService.loading() try { await this.publications.DeletePublication(this.folderId, this.publicationId).toPromise(); this.toastService.successMessage('Publicação eliminado') + if(window['app-view-publications-page-doRefresh']) { + window['app-view-publications-page-doRefresh']() + } this.close(); } catch (error) { this.toastService.badRequest('Publicação não eliminado') diff --git a/src/app/pages/publications/view-publications/view-publications.page.ts b/src/app/pages/publications/view-publications/view-publications.page.ts index 1888cb060..c4d58a5a6 100644 --- a/src/app/pages/publications/view-publications/view-publications.page.ts +++ b/src/app/pages/publications/view-publications/view-publications.page.ts @@ -47,6 +47,7 @@ export class ViewPublicationsPage implements OnInit { console.log(params["params"]); } + window['app-view-publications-page-doRefresh'] = this.doRefresh }); } @@ -73,7 +74,7 @@ export class ViewPublicationsPage implements OnInit { this.getPublications(); } - doRefresh(event) { + doRefresh =(event) => { setTimeout(() => { this.getPublicationDetail(); this.getPublications(); diff --git a/src/app/shared/agenda/new-event/new-event.page.html b/src/app/shared/agenda/new-event/new-event.page.html index c06351678..0dce0afc6 100644 --- a/src/app/shared/agenda/new-event/new-event.page.html +++ b/src/app/shared/agenda/new-event/new-event.page.html @@ -108,7 +108,6 @@ @@ -140,7 +139,6 @@ @@ -207,8 +205,7 @@ diff --git a/src/app/shared/agenda/new-event/new-event.page.ts b/src/app/shared/agenda/new-event/new-event.page.ts index 4a28ebb23..755dc8789 100644 --- a/src/app/shared/agenda/new-event/new-event.page.ts +++ b/src/app/shared/agenda/new-event/new-event.page.ts @@ -21,10 +21,9 @@ import { FormControl } from '@angular/forms'; import { NgxMatDateFormats } from '@angular-material-components/datetime-picker'; import { ThemePalette } from '@angular/material/core'; -import { NgZone, ViewChild } from '@angular/core'; +import { ViewChild } from '@angular/core'; import { FormGroup, Validators } from '@angular/forms'; import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker'; -import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-event.page'; const moment = _rollupMoment || _moment; @@ -61,8 +60,6 @@ export class NewEventPage implements OnInit { public showSeconds = false; public touchUi = false; public enableMeridian = false; - public minDate = new Date().toISOString().slice(0,10) - public endMinDate = new Date(new Date().getTime() + 15 * 60000); public stepHour = 1; public stepMinute = 5; public stepSecond = 5; @@ -110,13 +107,9 @@ export class NewEventPage implements OnInit { public stepMinutes = [1, 5, 10, 15, 20, 25]; public stepSeconds = [1, 5, 10, 15, 20, 25]; - public dateControlOccurrence = new FormControl(moment("DD MM YYYY hh")); showLoader = false - get dateOccurrence () { - return this.dateControlOccurrence.value - } constructor( private modalController: ModalController, @@ -131,7 +124,7 @@ export class NewEventPage implements OnInit { this.loggeduser = userService.ValidatedUser; this.postEvent = new Event(); - this.postEvent.StartDate = new Date(); + this.postEvent.StartDate = new Date() this.postEvent.EndDate = new Date(new Date().getTime() + 15 * 60000); } @@ -216,7 +209,6 @@ export class NewEventPage implements OnInit { this.date = new Date(2021,9,4,5,6,7); - this.getDatepickerData() this.injectValidation(); @@ -251,7 +243,7 @@ export class NewEventPage implements OnInit { dateEnd: new FormControl(this.postEvent.EndDate, [ Validators.required ]), - dateOccurrence: new FormControl(this.postEvent.EventRecurrence.Type.toString() == '-1' ? ['ok']: this.dateOccurrence, [ + dateOccurrence: new FormControl(this.postEvent.EventRecurrence.Type.toString() == '-1' ? ['ok']: this.postEvent.EventRecurrence.LastOccurrence, [ Validators.required ]), participantes: new FormControl(this.taskParticipants, [ @@ -334,17 +326,6 @@ export class NewEventPage implements OnInit { } } - getDatepickerData() { - if (this.postEvent) { - this.postEvent.EventRecurrence.LastOccurrence = this.dateOccurrence - } - } - - restoreDatepickerData() { - if (this.postEvent) { - this.dateControlOccurrence = new FormControl(moment(this.postEvent.EventRecurrence.LastOccurrence, "DD MM YYYY HH:mm")) - } - } @@ -358,7 +339,6 @@ export class NewEventPage implements OnInit { return false } - this.getDatepickerData() this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc); @@ -483,7 +463,6 @@ export class NewEventPage implements OnInit { } afterSave() { - this.getDatepickerData() this.deleteTemporaryData(); this.onAddEvent.emit(this.postEvent); @@ -521,7 +500,6 @@ export class NewEventPage implements OnInit { } saveTemporaryData() { - this.getDatepickerData() window['temp.path:/home/agenda/new-event.component.ts'] = { postEvent: this.postEvent, eventBody: this.eventBody, @@ -545,7 +523,7 @@ export class NewEventPage implements OnInit { this.segment = restoredData.segment // restore dater for date and hours picker - this.restoreDatepickerData() + return true; } else { diff --git a/src/app/shared/agenda/view-event/view-event.page.ts b/src/app/shared/agenda/view-event/view-event.page.ts index 862f72ccd..04d844b06 100644 --- a/src/app/shared/agenda/view-event/view-event.page.ts +++ b/src/app/shared/agenda/view-event/view-event.page.ts @@ -146,7 +146,7 @@ export class ViewEventPage implements OnInit { }) } - viewDocument(sourceId){ + viewDocument(sourceId) { this.processes.GetDocumentUrl(sourceId, '8').subscribe(res=>{ console.log(res); const url: string = res.replace("webTRIX.Viewer","webTRIX.Viewer.Branch1"); diff --git a/src/app/shared/publication/view-publications/view-publications.page.ts b/src/app/shared/publication/view-publications/view-publications.page.ts index b2469dba3..70016f30e 100644 --- a/src/app/shared/publication/view-publications/view-publications.page.ts +++ b/src/app/shared/publication/view-publications/view-publications.page.ts @@ -54,6 +54,8 @@ export class ViewPublicationsPage implements OnInit { this.getPublications(); this.getPublicationDetail(); + + window['app-view-publications-page-doRefresh'] = this.doRefresh } ngOnChanges(changes: any): void { @@ -71,7 +73,7 @@ export class ViewPublicationsPage implements OnInit { } - doRefresh(event) { + doRefresh =(event) => { this.getPublications(); setTimeout(() => { diff --git a/src/app/store/deplomas.service.ts b/src/app/store/deplomas.service.ts index 99f1dba71..d00f1f0f1 100644 --- a/src/app/store/deplomas.service.ts +++ b/src/app/store/deplomas.service.ts @@ -48,6 +48,7 @@ export class DeplomasService { } set deplomasReviewCount(arg: number) { this._diplomasReviewCount = arg + this.saveDiplomasReviewList() } get countDiplomasAssinadoListCount() { From 629027f0b539380eb3e3908aad7187fbd85226af Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 15:29:06 +0100 Subject: [PATCH 11/28] Remove code --- src/app/store/localstore.service.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/app/store/localstore.service.ts b/src/app/store/localstore.service.ts index 548c1e7cb..921c7a385 100644 --- a/src/app/store/localstore.service.ts +++ b/src/app/store/localstore.service.ts @@ -60,17 +60,3 @@ export class LocalstoreService { export const localstoreService = new LocalstoreService() console.log( AES.encrypt( 'pode ser qualquer', 'ayrton').toString() ) - -// // Create WebSocket connection. -// const socket = new WebSocket('ws://localhost:8080'); - -// // Listen for messages -// socket.addEventListener('message', function (event) { -// console.log('Message from server ', event.data); // Message from server mobile first é fraco - -// var p = Promise.resolve(event.data); -// p.then(function(v) { -// console.log(v); // mobile first é fraco -// }); - -// }); From b1f800b2fe5c52be17ba362c9f78652aeed8eef3 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 16:02:40 +0100 Subject: [PATCH 12/28] Fix counting --- package-lock.json | 14 ++++++++++++++ package.json | 1 + src/app/OtherService/document-counter.service.ts | 8 ++++---- src/app/app.module.ts | 5 +++++ src/app/pages/events/events.module.ts | 3 +++ src/app/pages/events/events.page.html | 7 +++++++ src/app/pages/events/events.page.ts | 3 ++- .../gabinete-digital/gabinete-digital.page.html | 2 +- .../gabinete-digital/gabinete-digital.page.ts | 7 +------ 9 files changed, 38 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0356fc6d8..327dd8601 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21752,6 +21752,15 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, + "ng2-pdf-viewer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-7.0.1.tgz", + "integrity": "sha512-kjjsvHd5t1Ff7ydb3Far3d6cSyw/XJH5KXgcp/0bFzSFBAV2c5aOghxoY/yQVjgG+R6F16nVUh2UrZdngLXLSg==", + "requires": { + "pdfjs-dist": "~2.7.570", + "tslib": "^2.0.0" + } + }, "ngx-socket-io": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ngx-socket-io/-/ngx-socket-io-3.2.0.tgz", @@ -22617,6 +22626,11 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "pdfjs-dist": { + "version": "2.7.570", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.7.570.tgz", + "integrity": "sha512-/ZkA1FwkEOyDaq11JhMLazdwQAA0F9uwrP7h/1L9Akt9KWh1G5/tkzS+bPuUELq2s2GDFnaT+kooN/aSjT7DXQ==" + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", diff --git a/package.json b/package.json index 8e99fe4b8..d4d5367b1 100644 --- a/package.json +++ b/package.json @@ -93,6 +93,7 @@ "jetifier": "^1.6.6", "lite-server": "^2.6.1", "moment": "^2.29.1", + "ng2-pdf-viewer": "^7.0.1", "ngx-socket-io": "^3.2.0", "puppeteer": "^10.1.0", "rxjs": "~6.6.3", diff --git a/src/app/OtherService/document-counter.service.ts b/src/app/OtherService/document-counter.service.ts index 93a91d208..bf9f37521 100644 --- a/src/app/OtherService/document-counter.service.ts +++ b/src/app/OtherService/document-counter.service.ts @@ -26,14 +26,14 @@ export class DocumentCounterService { // falta a contagem dos deplomas get mdTotalDocument(): number { - return this.despachoStore.count + this.expedienteGbStore.count + this.pedidosStore.countdeferimento - + this.pedidosStore.countparecer + this.expedientePrStore.count + this.despachoPrStore.count + this.pendentesStore.count + return this.despachoStore.count + /** this.expedientePrStore.count + */ this.pedidosStore.countdeferimento + + this.pedidosStore.countparecer + this.expedienteGbStore.count + this.despachoPrStore.count + this.pendentesStore.count + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount } get prTotalDocument(): number { - return this.despachoStore.count + this.expedienteGbStore.count + this.pedidosStore.countdeferimento - + this.pedidosStore.countparecer + this.expedientePrStore.count + this.despachoPrStore.count + this.pendentesStore.count + return this.despachoStore.count + /** this.expedientePrStore.count + */ this.pedidosStore.countdeferimento + + this.pedidosStore.countparecer + this.expedienteGbStore.count + this.despachoPrStore.count + this.pendentesStore.count + this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c8f7c50b9..ea7ce1aef 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -54,6 +54,9 @@ import { far } from '@fortawesome/free-regular-svg-icons' import { fab } from '@fortawesome/free-brands-svg-icons' import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; + + @NgModule({ declarations: [AppComponent], entryComponents: [], @@ -84,6 +87,8 @@ import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx'; MatSelectModule, MatDialogModule, + // + PdfViewerModule ], providers: [ { provide: MAT_DATE_LOCALE, useValue: 'pt' }, diff --git a/src/app/pages/events/events.module.ts b/src/app/pages/events/events.module.ts index df42957a9..dbac51237 100644 --- a/src/app/pages/events/events.module.ts +++ b/src/app/pages/events/events.module.ts @@ -11,6 +11,7 @@ import { EventsPage } from './events.page'; import { HeaderNoSearchPageModule } from 'src/app/shared/headers/header-no-search/header-no-search.module'; import { HeaderPageModule } from 'src/app/shared/header/header.module'; +import { PdfViewerModule } from 'ng2-pdf-viewer'; @NgModule({ imports: [ @@ -19,6 +20,8 @@ import { HeaderPageModule } from 'src/app/shared/header/header.module'; IonicModule, EventsPageRoutingModule, HeaderPageModule, + // + PdfViewerModule ], declarations: [EventsPage], schemas: [CUSTOM_ELEMENTS_SCHEMA] diff --git a/src/app/pages/events/events.page.html b/src/app/pages/events/events.page.html index 7e067c269..f600014db 100644 --- a/src/app/pages/events/events.page.html +++ b/src/app/pages/events/events.page.html @@ -112,4 +112,11 @@

  • + + + + diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index 8bca24ba2..da6483b96 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -69,7 +69,8 @@ export class EventsPage implements OnInit { loggeduser: User; existingScreenOrientation: string; - + pdfSrc = "https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf"; + constructor( private eventService: EventsService, private router: Router, diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.html b/src/app/pages/gabinete-digital/gabinete-digital.page.html index 0f3d1709e..a68f3bbb2 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.html +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.html @@ -120,7 +120,7 @@

    Expediente Presidente

    Expediente

    -

    {{expedienteprstore.count}} Documentos

    +

    not {{expedienteprstore.count}} Documentos

    diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index c971df302..1c5977f2c 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -95,7 +95,7 @@ export class GabineteDigitalPage implements OnInit, DoCheck { despachoStore = DespachoStore; eventoaprovacaostore = EventoAprovacaoStore; pedidosstore = PedidosStore; - expedienteprstore = ExpedienteprStore; + // expedienteprstore = ExpedienteprStore; despachoprstore = DespachosprStore; totalDocumentStore = TotalDocumentStore deplomasStore = DeplomasStore @@ -459,11 +459,6 @@ export class GabineteDigitalPage implements OnInit, DoCheck { this.expedientegbstore.count = this.count_exp_dailywork; this.expedientegbstore.reset(expedientes) - let expedientes_pr = await this.processesbackend.GetTasksList("Expediente", false).toPromise(); - expedientes_pr = expedientes_pr.filter(data => data.workflowInstanceDataFields.Status == "Active") - this.count_exp_pr = Object.keys(expedientes_pr).length; - this.expedienteprstore.count = this.count_exp_pr; - this.expedienteprstore.reset(expedientes_pr) let despachos = await this.processesbackend.GetTasksList("Despacho", false).toPromise(); despachos = despachos.filter(data => data.workflowInstanceDataFields.Status == "Active") From 07435162e12e42437c43ac894bad4be11c64e70e Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 16:20:25 +0100 Subject: [PATCH 13/28] fix counting --- src/app/OtherService/document-counter.service.ts | 2 +- .../pages/gabinete-digital/gabinete-digital.page.html | 9 --------- src/app/pages/gabinete-digital/gabinete-digital.page.ts | 6 +++++- src/app/store/eventoaprovacao-store.service.ts | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/app/OtherService/document-counter.service.ts b/src/app/OtherService/document-counter.service.ts index bf9f37521..671d4243a 100644 --- a/src/app/OtherService/document-counter.service.ts +++ b/src/app/OtherService/document-counter.service.ts @@ -18,7 +18,7 @@ export class DocumentCounterService { despachoStore = DespachoStore; eventoAprovacaoStore = EventoAprovacaoStore; pedidosStore = PedidosStore; - expedientePrStore = ExpedienteprStore; + // expedientePrStore = ExpedienteprStore; despachoPrStore = DespachosprStore; deplomasStore = DeplomasStore diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.html b/src/app/pages/gabinete-digital/gabinete-digital.page.html index a68f3bbb2..5dae4bfa1 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.html +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.html @@ -114,15 +114,6 @@

    {{expedientegbstore.count}} Documentos

    -
    -
    - -
    -

    Expediente Presidente

    -

    Expediente

    -

    not {{expedienteprstore.count}} Documentos

    -
    -
    diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index 1c5977f2c..34acf1aaa 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -112,7 +112,6 @@ export class GabineteDigitalPage implements OnInit, DoCheck { constructor( private processesbackend:ProcessesService, private modalController: ModalController, - private alertService: AlertService, private activatedRoute: ActivatedRoute, private router: Router, authService: AuthService, @@ -500,14 +499,19 @@ export class GabineteDigitalPage implements OnInit, DoCheck { let mdEventsOficial = await this.processesbackend.GetTasksList('Agenda Oficial MDGPR', false).toPromise(); let mdEventsPessoal = await this.processesbackend.GetTasksList('Agenda Pessoal MDGPR', false).toPromise(); const eventsMDGPRList = mdEventsOficial.concat(mdEventsPessoal); + this.eventoaprovacaostore.countMd = eventsMDGPRList.length this.eventoaprovacaostore.resetmd(eventsMDGPRList); + + let prEventsOficial = await this.processesbackend.GetTasksList('Agenda Oficial PR', false).toPromise(); let prEventsPessoal = await this.processesbackend.GetTasksList('Agenda Pessoal PR', false).toPromise(); const eventsPRList = prEventsOficial.concat(prEventsPessoal); + this.eventoaprovacaostore.countPr = eventsPRList.length this.eventoaprovacaostore.resetpr(eventsPRList); + let diplomasValidar = despachospr.filter(data => data.activityInstanceName == "Revisar Diploma"); this.count_dip_pv = Object.keys(diplomasValidar).length; this.deplomasStore.resetDiplomasReview(diplomasValidar) diff --git a/src/app/store/eventoaprovacao-store.service.ts b/src/app/store/eventoaprovacao-store.service.ts index 494300f69..5e8f5a187 100644 --- a/src/app/store/eventoaprovacao-store.service.ts +++ b/src/app/store/eventoaprovacao-store.service.ts @@ -14,8 +14,8 @@ export class EventoaprovacaoStoreService { private keyNamemd: string; private keyNamepr: string; private _count = 0 - _countPr = 0 - _countMd = 0 + private _countPr = 0 + private _countMd = 0 constructor() { From a928241dbb60ae575daba9a620cf97279ee0e866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eudes=20In=C3=A1cio?= Date: Wed, 25 Aug 2021 16:29:15 +0100 Subject: [PATCH 14/28] IBM Web notification config add --- src/app/home/home.page.ts | 6 ++++-- src/app/services/webnotifications.service.ts | 6 ++++-- src/index.html | 8 ++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 070babc46..946a63ea8 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -7,6 +7,7 @@ import { EventsService } from '../services/events.service'; import { Event } from '../models/event.model'; import { ProcessesService } from '../services/processes.service'; import { NotificationsService } from '../services/notifications.service'; +import { WebNotificationsService } from '../services/webnotifications.service'; import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular'; import { Router, ActivatedRoute } from '@angular/router'; import { ToDayEventStorage } from '../store/to-day-event-storage.service'; @@ -73,7 +74,7 @@ export class HomePage implements OnInit { private notificatinsservice: NotificationsService, private platform: Platform, private activeroute: ActivatedRoute, - // private network: NetworkService, + private webnotification: WebNotificationsService, public p: PermissionService, public documentCounterService: DocumentCounterService) { @@ -105,7 +106,8 @@ export class HomePage implements OnInit { this.network.checkNetworkDisconnection; */ console.log('Active route ', this.router.url) if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - console.log('Notifications not supported') + this.webnotification.webconnection(); + this.webnotification.onReceviNotificationWeb(); } else { this.mobilefirstConnect(); this.notificatinsservice.getAndpostToken2(); diff --git a/src/app/services/webnotifications.service.ts b/src/app/services/webnotifications.service.ts index c528bc51c..ec446a1e8 100644 --- a/src/app/services/webnotifications.service.ts +++ b/src/app/services/webnotifications.service.ts @@ -32,10 +32,10 @@ export class WebNotificationsService { webconnection() { - MFPPush.initialize({ + /* MFPPush.initialize({ appId: "com.gpr.gabinetedigital", mfpContextRoot: "/mfp", - }); + }); */ MFPPush.registerDevice() .then((res) => { @@ -72,7 +72,9 @@ async onReceviNotificationWeb() { if(message.actionName){ //this.notificatinsRoutes(data); + console.log("Web notification") } else { + console.log("Web notification") //this.toastService.notificationMessage(message.alert,this.notificatinsRoutes, data); } diff --git a/src/index.html b/src/index.html index f1e90bcc6..553bfaa3f 100644 --- a/src/index.html +++ b/src/index.html @@ -7,11 +7,11 @@ - - + + - + From f8991b785b9a1a3bd9682dd4fb1b62af68c06f0b Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Wed, 25 Aug 2021 16:32:02 +0100 Subject: [PATCH 15/28] Fix counting --- .../publication/new-publication/new-publication.page.ts | 1 - src/app/store/eventoaprovacao-store.service.ts | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/app/shared/publication/new-publication/new-publication.page.ts b/src/app/shared/publication/new-publication/new-publication.page.ts index dc0322bc3..a6beb44ca 100644 --- a/src/app/shared/publication/new-publication/new-publication.page.ts +++ b/src/app/shared/publication/new-publication/new-publication.page.ts @@ -1,5 +1,4 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { AnimationController, ModalController } from '@ionic/angular'; import { SafeResourceUrl } from '@angular/platform-browser'; import { PublicationsService } from 'src/app/services/publications.service'; import { Publication } from 'src/app/models/publication'; diff --git a/src/app/store/eventoaprovacao-store.service.ts b/src/app/store/eventoaprovacao-store.service.ts index 5e8f5a187..a238bee55 100644 --- a/src/app/store/eventoaprovacao-store.service.ts +++ b/src/app/store/eventoaprovacao-store.service.ts @@ -27,10 +27,10 @@ export class EventoaprovacaoStoreService { let restoreMd = localstoreService.get(this.keyNamemd, {}) let restorePr = localstoreService.get(this.keyNamepr, {}) - this._listPr = restorePr.lisMd || [] - this._listMd = restoreMd.listPr || [] + this._listPr = restorePr.listPr || [] + this._listMd = restoreMd.lisMd || [] this._countMd = parseInt(restoreMd.countListMd) || 0 - this._countPr = parseInt(restoreMd.countListPr) || 0 + this._countPr = parseInt(restorePr.countListPr) || 0 this._count = (this._countMd + this._countPr) || 0 }, 10) From 246b6266003498e4c58be915bb03480e20bb8bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eudes=20In=C3=A1cio?= Date: Wed, 25 Aug 2021 16:37:45 +0100 Subject: [PATCH 16/28] Callback add at home page edit --- src/app/home/home.page.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 7ee901507..1b58abf19 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -5,12 +5,8 @@ import { Component, OnInit, NgZone } from '@angular/core'; import { Event } from '../models/event.model'; import { NotificationsService } from '../services/notifications.service'; -<<<<<<< HEAD import { WebNotificationsService } from '../services/webnotifications.service'; import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular'; -======= -import { AlertController, Platform } from '@ionic/angular'; ->>>>>>> 07435162e12e42437c43ac894bad4be11c64e70e import { Router, ActivatedRoute } from '@angular/router'; import { ToDayEventStorage } from '../store/to-day-event-storage.service'; import { DocumentCounterService } from 'src/app/OtherService/document-counter.service' From f4de729e2fe705938eab1b0122b1c4658cf9eb78 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Thu, 26 Aug 2021 13:48:29 +0100 Subject: [PATCH 17/28] Improve local storage and fix expediente task strature --- .../OtherService/document-counter.service.ts | 1 - src/app/Rules/deploma.service.ts | 8 ++ src/app/Rules/despacho.service.ts | 57 +++++++++++++- src/app/home/home.page.html | 6 +- src/app/home/home.page.ts | 27 ++++--- .../create-process/create-process.page.ts | 2 + src/app/modals/profile/profile.page.html | 75 ++++++++++--------- src/app/modals/profile/profile.page.scss | 2 - src/app/models/Expediente.ts | 16 ++++ src/app/models/dailyworktask.model.ts | 14 ++++ src/app/pages/events/events.page.html | 10 +-- src/app/pages/events/events.page.ts | 32 ++++---- .../despachos/despachos.page.html | 8 +- .../despachos/despachos.page.ts | 52 +++---------- .../expediente/expediente.page.html | 8 +- .../expediente/expediente.page.ts | 38 +++------- .../expedientes-pr/expedientes-pr.page.html | 6 +- .../expedientes-pr/expedientes-pr.page.ts | 32 +++----- .../gabinete-digital/gabinete-digital.page.ts | 20 +++-- src/app/pipes/expediente-task.pipe.spec.ts | 8 ++ src/app/pipes/expediente-task.pipe.ts | 28 +++++++ src/app/pipes/pipes.module.ts | 3 +- src/app/services/events.service.ts | 2 - src/app/services/notifications.service.ts | 20 ++--- src/app/services/processes.service.ts | 19 +++++ .../despachos/despachos.page.ts | 38 +++------- .../expedientes-pr/expedientes-pr.page.html | 8 +- .../expedientes-pr/expedientes-pr.page.ts | 14 ++-- .../expedients/expedients.page.html | 2 +- .../expedients/expedients.page.ts | 45 +++-------- .../gabinete-digital/pedidos/pedidos.page.ts | 2 - .../despachos-page-store.service.spec.ts | 16 ---- src/app/store/despachos-page-store.service.ts | 60 --------------- ...expediente-storage-service.service.spec.ts | 16 ---- .../expediente-storage-service.service.ts | 62 --------------- src/app/store/expedientegd-store.service.ts | 3 +- .../store/expedientepr-store.service.spec.ts | 16 ---- src/app/store/expedientepr-store.service.ts | 54 ------------- src/app/store/loader.service.spec.ts | 16 ++++ src/app/store/loader.service.ts | 28 +++++++ src/assets/images/icons-nav-home.svg | 6 +- 41 files changed, 373 insertions(+), 507 deletions(-) create mode 100644 src/app/models/Expediente.ts create mode 100644 src/app/pipes/expediente-task.pipe.spec.ts create mode 100644 src/app/pipes/expediente-task.pipe.ts delete mode 100644 src/app/store/despachos-page-store.service.spec.ts delete mode 100644 src/app/store/despachos-page-store.service.ts delete mode 100644 src/app/store/expediente-storage-service.service.spec.ts delete mode 100644 src/app/store/expediente-storage-service.service.ts delete mode 100644 src/app/store/expedientepr-store.service.spec.ts delete mode 100644 src/app/store/expedientepr-store.service.ts create mode 100644 src/app/store/loader.service.spec.ts create mode 100644 src/app/store/loader.service.ts diff --git a/src/app/OtherService/document-counter.service.ts b/src/app/OtherService/document-counter.service.ts index 671d4243a..6891c3cfa 100644 --- a/src/app/OtherService/document-counter.service.ts +++ b/src/app/OtherService/document-counter.service.ts @@ -4,7 +4,6 @@ import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.servic import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { PendentesStore } from 'src/app/store/pendestes-store.service'; import { PedidosStore } from 'src/app/store/pedidos-store.service'; -import { ExpedienteprStore } from 'src/app/store/expedientepr-store.service'; import { DespachosprStore } from 'src/app/store/despachospr-store.service'; import { DeplomasStore } from '../store/deplomas.service'; diff --git a/src/app/Rules/deploma.service.ts b/src/app/Rules/deploma.service.ts index 26d9b0acd..a5f3ec12c 100644 --- a/src/app/Rules/deploma.service.ts +++ b/src/app/Rules/deploma.service.ts @@ -1,4 +1,5 @@ import { Injectable } from '@angular/core'; +import { CustomTaskPipe } from '../pipes/custom-task.pipe'; import { ProcessesService } from '../services/processes.service'; @Injectable({ @@ -20,6 +21,8 @@ export class DeplomaService { ] } + customTaskPipe = new CustomTaskPipe() + constructor( private processes: ProcessesService, ) { } @@ -83,4 +86,9 @@ export class DeplomaService { return this.processes.CompleteTask(body) } + + async getList() { + + } + } diff --git a/src/app/Rules/despacho.service.ts b/src/app/Rules/despacho.service.ts index 24a261d96..d270feb1d 100644 --- a/src/app/Rules/despacho.service.ts +++ b/src/app/Rules/despacho.service.ts @@ -1,8 +1,11 @@ import { Injectable } from '@angular/core'; +import { customTask, fullTask } from '../models/dailyworktask.model'; import { AttachmentList } from '../models/Excludetask'; import { PermissionService } from '../OtherService/permission.service'; +import { CustomTaskPipe } from '../pipes/custom-task.pipe'; import { ProcessesService } from '../services/processes.service'; - +import { DespachoStore } from '../store/despacho-store.service'; +import { LoaderService } from 'src/app/store/loader.service' @Injectable({ providedIn: 'root' }) @@ -20,10 +23,14 @@ export class DespachoService { 'Tarefa do Despacho': 'Tarefa de Despacho' | 'Concluir' | 'rexecucao' } - constructor( + customTaskPipe = new CustomTaskPipe() + despachoStore = DespachoStore; + + constructor( private processes: ProcessesService, - public p: PermissionService - ) { } + public p: PermissionService, + public LoaderService: LoaderService + ) { } arquivar(note:string, documents:AttachmentList, serialnumber) { @@ -181,4 +188,46 @@ export class DespachoService { return this.processes.CompleteTask(body) } + + async getList({updateStore = false}): Promise { + + this.LoaderService.push({}) + + let result: fullTask[] = [] + + try { + result = await this.processes.GetTasksList("Despacho", false).toPromise(); + } catch (error) { + + } finally { + this.LoaderService.pop({}) + } + + + result = result.filter(data => data.workflowInstanceDataFields.Status == "Active") + + let despachoList: customTask[] = new Array(); + + result.forEach((element, index) => { + + let task: customTask = this.customTaskPipe.transform(element); + despachoList.push(task); + + }); + + despachoList = this.sortArrayISODate(despachoList).reverse(); + + if(updateStore) { + this.despachoStore.reset(despachoList); + } + + return despachoList + } + + sortArrayISODate(myArray: any) { + return myArray.sort(function(a, b) { + return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0); + }); + } + } diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 55a31a0c0..1cdc523ab 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -3,14 +3,14 @@ - {{toDayEventStorage.eventsList.length}} + {{toDayEventStorage.eventsList.length + expedienteGdStore.count}} Início - Agenda + Agenda @@ -21,7 +21,7 @@ - Ações + Ações diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 1bf94036b..f8485409d 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -12,6 +12,8 @@ import { DocumentCounterService } from 'src/app/OtherService/document-counter.se import { PermissionService } from '../OtherService/permission.service'; import { TotalDocumentStore } from '../store/total-document.service'; import { connection } from '../services/socket/synchro.service'; +import { DespachoService } from '../Rules/despacho.service'; +import { ExpedienteGdStore } from '../store/expedientegd-store.service'; // import { NetworkService } from '../services/network.service'; @@ -44,6 +46,7 @@ export class HomePage implements OnInit { toDayEventStorage = ToDayEventStorage totalDocumentStore = TotalDocumentStore + expedienteGdStore = ExpedienteGdStore adding: "intervenient" | "CC" = "intervenient"; mobileComponent = { @@ -68,7 +71,8 @@ export class HomePage implements OnInit { connection = connection - constructor(private zone: NgZone, + constructor( + private zone: NgZone, private router: Router, public modalCtrl: AlertController, private notificationsService: NotificationsService, @@ -76,12 +80,15 @@ export class HomePage implements OnInit { private activeroute: ActivatedRoute, // private network: NetworkService, public p: PermissionService, - public documentCounterService: DocumentCounterService) { + public documentCounterService: DocumentCounterService, + private despachoRule: DespachoService) { this.router.events.subscribe((val) => { document.querySelectorAll('ion-modal').forEach((e: any) => e.remove()) }); + this.updateList() + // if (typeof Worker !== 'undefined') { // // Create a new @@ -99,14 +106,6 @@ export class HomePage implements OnInit { //this.folderId = this.navParams.get('folderId'); } - - this.notificationsService.registerCallback( - 'Create Depacho', - () =>{ - this.refreshing() - } - ) - } refreshing() { @@ -162,8 +161,16 @@ export class HomePage implements OnInit { }); } } + } + updateList() { + this.notificationsService.registerCallback( + 'despachos', + () => { + this.despachoRule.getList({updateStore: true}) + } + ) } diff --git a/src/app/modals/create-process/create-process.page.ts b/src/app/modals/create-process/create-process.page.ts index 059bdfccf..7092329d1 100644 --- a/src/app/modals/create-process/create-process.page.ts +++ b/src/app/modals/create-process/create-process.page.ts @@ -287,6 +287,8 @@ export class CreateProcessPage implements OnInit { this.modalController.dismiss(); } catch (error) { this.toastService.badRequest('Processo não efectuado'); + + } finally { loader.remove() } diff --git a/src/app/modals/profile/profile.page.html b/src/app/modals/profile/profile.page.html index 937def0e4..7b55af5c7 100644 --- a/src/app/modals/profile/profile.page.html +++ b/src/app/modals/profile/profile.page.html @@ -1,5 +1,4 @@ - - +
    - + +
    - +
    {{loggeduser.RoleDescription}}
    @@ -28,39 +28,46 @@
    -
    -
    {{notificationdata.length}} novas notificações - -
    -
    -
    - - - - +
    + + + +
    + +
    + + +
    +
    +
    + + + + +
    +
    +

    {{item.dateInit}}

    +

    {{item.dateEnd}}

    +
    +
    +

    {{item.Location}}

    +

    {{item.alert}}

    +

    {{item.desc}}

    +
    +
    -
    -

    {{item.dateInit}}

    -

    {{item.dateEnd}}

    -
    -
    -

    {{item.Location}}

    -

    {{item.alert}}

    -

    {{item.desc}}

    -
    -
    -
    - - - + + +
    +
    diff --git a/src/app/modals/profile/profile.page.scss b/src/app/modals/profile/profile.page.scss index 7ec24baa5..a3541af59 100644 --- a/src/app/modals/profile/profile.page.scss +++ b/src/app/modals/profile/profile.page.scss @@ -3,7 +3,6 @@ // background-color: #0782c9; padding: 20px 20px; border: 0!important; - overflow: auto; .div-logo{ background: transparent; @@ -67,7 +66,6 @@ ion-list{ .notifications-content{ padding: 0px 20px; .item{ - display: flex; border-radius: 15px; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.07); border: solid 1px #e9e9e9; diff --git a/src/app/models/Expediente.ts b/src/app/models/Expediente.ts new file mode 100644 index 000000000..1b035eb56 --- /dev/null +++ b/src/app/models/Expediente.ts @@ -0,0 +1,16 @@ + +export interface ExpedienteFullTaskWorkflowInstanceDataFields { + FolderID: number; + Sender: string; + Subject: string; + Status: string; +} + +export interface ExpedienteFullTask { + serialNumber: string; + taskStartDate: string; + workflowDisplayName: string; + activityInstanceName: string; + totalDocuments: number; + workflowInstanceDataFields: ExpedienteFullTaskWorkflowInstanceDataFields; +} \ No newline at end of file diff --git a/src/app/models/dailyworktask.model.ts b/src/app/models/dailyworktask.model.ts index bba984a56..c57ec15b1 100644 --- a/src/app/models/dailyworktask.model.ts +++ b/src/app/models/dailyworktask.model.ts @@ -113,4 +113,18 @@ export interface expedienteTask { DispatchNumber: any AttachmentsProcessLastInstanceID: any InstanceID: any +} + + + +export interface ExpedienteTask { + SerialNumber: string + Senders : string + CreateDate : string + DocumentsQty : number + WorkflowName : string + activityInstanceName : string + Status : string + taskStartDate: string + Subject: string } \ No newline at end of file diff --git a/src/app/pages/events/events.page.html b/src/app/pages/events/events.page.html index f600014db..13052ad42 100644 --- a/src/app/pages/events/events.page.html +++ b/src/app/pages/events/events.page.html @@ -11,8 +11,8 @@

    {{totalEvent}} eventos agendados para hoje

    -
    {{currentHoursMinutes | date: 'HH:mm'}}
    -
    "{{currentEvent}}"
    +
    {{currentHoursMinutes | date: 'HH:mm'}}
    +
    "{{currentEvent}}"
    @@ -94,7 +94,7 @@
    -
    @@ -102,8 +102,8 @@
    {{task.taskStartDate | date: 'HH:mm'}}
    -
    {{ task.workflowInstanceDataFields.Subject }}
    -
    {{ task.workflowInstanceDataFields.Sender }}
    +
    {{ task.Subject }}
    +
    {{ task.Senders }}
    diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index da6483b96..4202af52f 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -13,8 +13,9 @@ import { ProcessesService } from '../../services/processes.service'; import { DailyWorkTask } from '../../models/dailyworktask.model'; import { User } from 'src/app/models/user.model'; import { ToDayEventStorage } from 'src/app/store/to-day-event-storage.service'; -import { ExpedienteStorage } from 'src/app/store/expediente-storage-service.service'; import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx'; +import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; +import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; @Component({ selector: 'app-events', @@ -62,15 +63,16 @@ export class EventsPage implements OnInit { // shared data toDayEventStorage = ToDayEventStorage - expedienteStorage = ExpedienteStorage + expedienteGdStore = ExpedienteGdStore + + expedienteTaskPipe = new ExpedienteTaskPipe() @Output() openExpedientListPage:EventEmitter = new EventEmitter(); loggeduser: User; existingScreenOrientation: string; - pdfSrc = "https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf"; - + constructor( private eventService: EventsService, private router: Router, @@ -330,21 +332,13 @@ export class EventsPage implements OnInit { } LoadList() { - switch (this.loggeduser.Profile) { - case 'MDGPR': - this.processes.GetTasksList("Expediente", false).subscribe(result => { - console.log(result); - this.expedienteStorage.reset(result) - }); - break; - case 'PR': - this.processes.GetTasksList("Expediente", false).subscribe(result => { - this.expedienteStorage.reset(result) - }); - break; - default: - break; - } + this.processes.GetTaskListExpediente(false).subscribe(result => { + console.log("Expediente", result); + + const ExpedienteTask = result.map( e=> this.expedienteTaskPipe.transform(e)) + + this.expedienteGdStore.reset(ExpedienteTask) + }); } sortArrayISODate(myArray: any){ diff --git a/src/app/pages/gabinete-digital/despachos/despachos.page.html b/src/app/pages/gabinete-digital/despachos/despachos.page.html index 20c979908..a6f23f08b 100644 --- a/src/app/pages/gabinete-digital/despachos/despachos.page.html +++ b/src/app/pages/gabinete-digital/despachos/despachos.page.html @@ -26,14 +26,14 @@ refreshingText="A actualizar..."> - +
    @@ -68,13 +68,13 @@
    Lista vazia
    -
    +
    diff --git a/src/app/pages/gabinete-digital/despachos/despachos.page.ts b/src/app/pages/gabinete-digital/despachos/despachos.page.ts index 1338a40c5..511b6ca78 100644 --- a/src/app/pages/gabinete-digital/despachos/despachos.page.ts +++ b/src/app/pages/gabinete-digital/despachos/despachos.page.ts @@ -6,7 +6,8 @@ import { ModalController } from '@ionic/angular'; import { AlertService } from 'src/app/services/alert.service'; import { AuthService } from 'src/app/services/auth.service'; import { NavigationStart, Router } from '@angular/router'; -import { DespachoPageStore } from 'src/app/store/despachos-page-store.service'; +import { DespachoService } from 'src/app/Rules/despacho.service'; +import { DespachoStore } from 'src/app/store/despacho-store.service'; @Component({ selector: 'app-despachos', @@ -36,8 +37,7 @@ export class DespachosPage implements OnInit { loadedAttachments:any; dicIndex = 0; inicial = false - skeletonLoader = true - despachospagestore = DespachoPageStore; + despachoStore = DespachoStore; constructor ( private processes:ProcessesService, @@ -45,6 +45,7 @@ export class DespachosPage implements OnInit { private alertService: AlertService, private authService: AuthService, private router: Router, + private despachoRule: DespachoService ) { this.profile = 'mdgpr'; } @@ -80,52 +81,17 @@ export class DespachosPage implements OnInit { this.LoadList(); } - - openExpedientDetailPage(data) { - this.openExpedientDetail.emit(data); - } - async LoadList() { - this.skeletonLoader = true - - let result = await this.processes.GetTasksList("Despacho", false).toPromise(); - //let despachos = result.reverse().filter(data => data.activityInstanceName == "Despacho (Paralelo)"); - this.despachoList = [] - - this.skeletonLoader = false - - await result.filter(data => data.workflowInstanceDataFields.Status == "Active").forEach( (element, index) => { - - let date = new Date(element.taskStartDate); - date.setMonth(date.getMonth() + 1); - let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); - - let task = { - "SerialNumber": element.serialNumber, - "Folio": element.workflowInstanceDataFields.Subject, - "Senders": element.workflowInstanceDataFields.Sender, - "CreateDate": taskDate, - "DocumentURL": element.workflowInstanceDataFields.ViewerRequest, - "Remetente": element.workflowInstanceDataFields.Remetente, - "DocumentsQty": element.totalDocuments, - "DocId": element.workflowInstanceDataFields.DispatchDocId, - "WorkflowName": element.workflowDisplayName, - "activityInstanceName": element.activityInstanceName, - } - this.despachoList.push(task) - }); - this.despachoList = this.sortArrayISODate(this.despachoList).reverse() - this.despachospagestore.reset(this.despachoList); - + this.despachoList = await this.despachoRule.getList({updateStore: true}) } - sortArrayISODate(myArray: any) { - return myArray.sort(function(a, b) { - return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0); - }); + get skeletonLoader(): boolean { + return this.despachoRule.LoaderService.loading } + + doRefresh(event) { this.LoadList(); diff --git a/src/app/pages/gabinete-digital/expediente/expediente.page.html b/src/app/pages/gabinete-digital/expediente/expediente.page.html index b5aab96ce..e76fcb838 100644 --- a/src/app/pages/gabinete-digital/expediente/expediente.page.html +++ b/src/app/pages/gabinete-digital/expediente/expediente.page.html @@ -34,13 +34,13 @@
    - {{ task.Folio }} + {{ task.Subject }}
    @@ -65,13 +65,13 @@
    Lista vazia
    -
    +
    diff --git a/src/app/pages/gabinete-digital/expediente/expediente.page.ts b/src/app/pages/gabinete-digital/expediente/expediente.page.ts index b71cd0abd..385f3b67a 100644 --- a/src/app/pages/gabinete-digital/expediente/expediente.page.ts +++ b/src/app/pages/gabinete-digital/expediente/expediente.page.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { NavigationStart, Router } from '@angular/router'; -import { DailyWorkTask } from '../../../models/dailyworktask.model'; import { ProcessesService } from 'src/app/services/processes.service'; import { ToastService } from 'src/app/services/toast.service'; -import { ExpedienteStorage } from 'src/app/store/expediente-storage-service.service'; +import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; +import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; @Component({ selector: 'app-expediente', @@ -17,17 +17,17 @@ export class ExpedientePage implements OnInit { //profile:string; showLoader:boolean; - taskslist:DailyWorkTask[] = []; + taskslist = []; serialNumber:string; - expedienteStorage = ExpedienteStorage + expedienteGdStore = ExpedienteGdStore + expedienteTaskPipe = new ExpedienteTaskPipe() constructor( private processes:ProcessesService, private router: Router, private toastService: ToastService - ) { - } + ) {} ngOnInit() { @@ -52,39 +52,25 @@ export class ExpedientePage implements OnInit { this.skeletonLoader = true try { - const expediente: object[] = await this.processes.GetTasksList("Expediente", false).toPromise() - + const expediente: object[] = await this.processes.GetTaskListExpediente(false).toPromise() const result = expediente this.taskslist = new Array(); let res = result.reverse().filter((data: any) => data.workflowInstanceDataFields.Status == "Active"); res.forEach((element: any) => { - let date = new Date(element.taskStartDate); - date.setMonth(date.getMonth() + 1); - let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); - let task: DailyWorkTask = { - "SerialNumber": element.serialNumber, - "Folio": element.workflowInstanceDataFields.Subject, - "Senders": element.workflowInstanceDataFields.Sender, - "CreateDate": taskDate, - "DocumentURL": element.workflowInstanceDataFields.ViewerRequest, - "Remetente": element.workflowInstanceDataFields.Remetente, - "DocumentsQty": element.totalDocuments, - "WorkflowName": element.workflowDisplayName, - "activityInstanceName": element.activityInstanceName, - "Status": element.workflowInstanceDataFields.Status, - } + + let task = this.expedienteTaskPipe.transform(element) this.taskslist.push(task); }); - console.log(this.taskslist); - this.expedienteStorage.reset(this.taskslist); - this.skeletonLoader = false; + this.expedienteGdStore.reset(this.taskslist); } catch (error) { this.toastService.badRequest('Processo não encontrado') this.goBack() + } finally { + this.skeletonLoader = false; } } diff --git a/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.html b/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.html index 6102721bf..7140133fe 100644 --- a/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.html +++ b/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.html @@ -30,7 +30,7 @@
    @@ -62,14 +62,14 @@
    Lista vazia
    -
    +
    diff --git a/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.ts b/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.ts index 05792807c..f2aa80b6d 100644 --- a/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.ts +++ b/src/app/pages/gabinete-digital/expedientes-pr/expedientes-pr.page.ts @@ -8,8 +8,9 @@ import { ExpedienteDetailPage } from 'src/app/pages/gabinete-digital/expediente/ import { AlertService } from 'src/app/services/alert.service'; import { User } from 'src/app/models/user.model'; import { AuthService } from 'src/app/services/auth.service'; -import { ExpedienteprStore } from 'src/app/store/expedientepr-store.service'; import { Location } from '@angular/common' +import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; +import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; @Component({ selector: 'app-expedientes-pr', @@ -20,7 +21,7 @@ export class ExpedientesPrPage implements OnInit { @ViewChild(CalendarComponent) myCal: CalendarComponent; - taskslist:DailyWorkTask[] = []; + taskslist= []; serialNumber:string; showLoader:boolean; @@ -28,7 +29,8 @@ export class ExpedientesPrPage implements OnInit { @Output() openExpedientDetail:EventEmitter = new EventEmitter(); skeletonLoader = true - expedienteprstore = ExpedienteprStore; + expedienteGdStore = ExpedienteGdStore; + expedienteTaskPipe = new ExpedienteTaskPipe() constructor( private processes:ProcessesService, @@ -64,32 +66,18 @@ export class ExpedientesPrPage implements OnInit { LoadList() { this.skeletonLoader = true - this.processes.GetTasksList("Expediente", false).subscribe(result => { + this.processes.GetTaskListExpediente(false).subscribe(result => { console.log(result); this.skeletonLoader = false this.showLoader =false this.taskslist = new Array(); let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); res.forEach(element => { - let date = new Date(element.taskStartDate); - date.setMonth(date.getMonth() + 1); - let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); - let task: DailyWorkTask = { - "SerialNumber": element.serialNumber, - "Folio": element.workflowInstanceDataFields.Subject, - "Senders": element.workflowInstanceDataFields.Sender, - "CreateDate": taskDate, - "DocumentURL": element.workflowInstanceDataFields.ViewerRequest, - "Remetente": element.workflowInstanceDataFields.Remetente, - "DocumentsQty": element.totalDocuments, - "WorkflowName": element.workflowDisplayName, - "activityInstanceName": element.activityInstanceName, - "Status": element.workflowInstanceDataFields.Status, - } - this.taskslist.push(task); - }); + let task = this.expedienteTaskPipe.transform(element) + this.taskslist.push(task); + }); console.log(this.taskslist); - this.expedienteprstore.reset(this.taskslist); + this.expedienteGdStore.reset(this.taskslist); this.skeletonLoader = false }) } diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index 34acf1aaa..cf1efbc1b 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -1,6 +1,5 @@ import { Component, DoCheck, OnInit, ViewChild } from '@angular/core'; import { ProcessesService } from 'src/app/services/processes.service'; -import { AlertService } from 'src/app/services/alert.service'; import { ModalController } from '@ionic/angular'; import { ActivatedRoute, NavigationEnd, NavigationExtras, Router } from '@angular/router'; import { AuthService } from 'src/app/services/auth.service'; @@ -13,7 +12,6 @@ import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.servic import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { PendentesStore } from 'src/app/store/pendestes-store.service'; import { PedidosStore } from 'src/app/store/pedidos-store.service'; -import { ExpedienteprStore } from 'src/app/store/expedientepr-store.service'; import { DespachosprStore } from 'src/app/store/despachospr-store.service'; import { PermissionService } from 'src/app/OtherService/permission.service'; import { removeDuplicate } from 'src/plugin/removeDuplicate.js' @@ -21,6 +19,8 @@ import { WaitForDomService } from 'src/app/services/dom/wait-for-dom.service'; import { TotalDocumentStore } from 'src/app/store/total-document.service'; import { DeplomasStore } from 'src/app/store/deplomas.service'; import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; +import { NotificationsService } from 'src/app/services/notifications.service'; +import { DespachoService } from 'src/app/Rules/despacho.service'; @Component({ selector: 'app-gabinete-digital', @@ -116,7 +116,9 @@ export class GabineteDigitalPage implements OnInit, DoCheck { private router: Router, authService: AuthService, public p: PermissionService, - public waitForDomService: WaitForDomService + public waitForDomService: WaitForDomService, + private notificationsService: NotificationsService, + private despachoRule: DespachoService ) { this.loggeduser = authService.ValidatedUser; @@ -450,19 +452,15 @@ export class GabineteDigitalPage implements OnInit, DoCheck { this.showLoader = true; let allPreocesses_ = await this.processesbackend.GetTasksList("", false).toPromise(); - this.count_all_processes = Object.keys(allPreocesses_).length; + let count_all_processes = Object.keys(allPreocesses_).length; + this.totalDocumentStore.resetCount(count_all_processes) - let expedientes = await this.processesbackend.GetTasksList("Expediente", false).toPromise(); + let expedientes = await this.processesbackend.GetTaskListExpediente(false).toPromise(); expedientes = expedientes.filter(data => data.workflowInstanceDataFields.Status == "Active") - this.count_exp_dailywork = Object.keys(expedientes).length; - this.expedientegbstore.count = this.count_exp_dailywork; this.expedientegbstore.reset(expedientes) - let despachos = await this.processesbackend.GetTasksList("Despacho", false).toPromise(); - despachos = despachos.filter(data => data.workflowInstanceDataFields.Status == "Active") - this.count_desp_dailywork = Object.keys(despachos).length; - this.despachoStore.count = this.count_desp_dailywork + let despachos = await this.despachoRule.getList({updateStore: true}) this.despachoStore.reset(despachos) let pareceres = await this.processesbackend.GetTasksList("Pedido de Parecer", false).toPromise(); diff --git a/src/app/pipes/expediente-task.pipe.spec.ts b/src/app/pipes/expediente-task.pipe.spec.ts new file mode 100644 index 000000000..adb70f694 --- /dev/null +++ b/src/app/pipes/expediente-task.pipe.spec.ts @@ -0,0 +1,8 @@ +import { ExpedienteTaskPipe } from './expediente-task.pipe'; + +describe('ExpedienteTaskPipe', () => { + it('create an instance', () => { + const pipe = new ExpedienteTaskPipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/pipes/expediente-task.pipe.ts b/src/app/pipes/expediente-task.pipe.ts new file mode 100644 index 000000000..13cad0df5 --- /dev/null +++ b/src/app/pipes/expediente-task.pipe.ts @@ -0,0 +1,28 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { ExpedienteTask } from '../models/dailyworktask.model'; +import { ExpedienteFullTask } from '../models/Expediente'; + +@Pipe({ + name: 'expedienteTask' +}) +export class ExpedienteTaskPipe implements PipeTransform { + + transform(fullTask: ExpedienteFullTask): ExpedienteTask { + let date = new Date(fullTask.taskStartDate); + date.setMonth(date.getMonth() + 1); + let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); + + return { + "SerialNumber": fullTask.serialNumber, + "taskStartDate": fullTask.taskStartDate, + "Subject": fullTask.workflowInstanceDataFields.Subject, + "Senders": fullTask.workflowInstanceDataFields.Sender, + "CreateDate": taskDate, + "DocumentsQty": fullTask.totalDocuments, + "WorkflowName": fullTask.workflowDisplayName, + "activityInstanceName": fullTask.activityInstanceName, + "Status": fullTask.workflowInstanceDataFields.Status, + } + } + +} diff --git a/src/app/pipes/pipes.module.ts b/src/app/pipes/pipes.module.ts index 6d5416e45..3e5ccac18 100644 --- a/src/app/pipes/pipes.module.ts +++ b/src/app/pipes/pipes.module.ts @@ -4,10 +4,11 @@ import { SearchDocumentPipe } from './search-document.pipe'; import { CustomTaskPipe } from './custom-task.pipe'; import { EventPipe } from './event.pipe'; import { PublicationPipe } from './publication.pipe'; +import { ExpedienteTaskPipe } from './expediente-task.pipe'; @NgModule({ - declarations: [FilterPipe, SearchDocumentPipe, CustomTaskPipe, EventPipe, PublicationPipe], + declarations: [FilterPipe, SearchDocumentPipe, CustomTaskPipe, EventPipe, PublicationPipe, ExpedienteTaskPipe], exports: [FilterPipe], imports: [] }) diff --git a/src/app/services/events.service.ts b/src/app/services/events.service.ts index 5ab493039..ae4fa4f18 100644 --- a/src/app/services/events.service.ts +++ b/src/app/services/events.service.ts @@ -150,7 +150,6 @@ export class EventsService { getAllMdOficialEvents(startdate:string, enddate:string): any{ let geturl = environment.apiURL + 'calendar/md'; - geturl = geturl.replace('/V4/','/V5/') let params = new HttpParams(); @@ -166,7 +165,6 @@ export class EventsService { getAllMdPessoalEvents(startdate:string, enddate:string): any{ let geturl = environment.apiURL + 'calendar/md'; - geturl = geturl.replace('/V4/','/V5/') let params = new HttpParams(); diff --git a/src/app/services/notifications.service.ts b/src/app/services/notifications.service.ts index 79e19a185..924242563 100644 --- a/src/app/services/notifications.service.ts +++ b/src/app/services/notifications.service.ts @@ -41,12 +41,6 @@ export class NotificationsService { private activeroute: ActivatedRoute, private jsonstore: JsonStore) { - this.callbacks.forEach(e=> { - if(e.type = 'Create Depacho') { - e.funx() - } - }) - } @@ -222,9 +216,9 @@ export class NotificationsService { console.log(message); var data = JSON.parse(message.payload); - console.log(data.Service); - console.log(data.IdObject); - console.log(data.Object); + console.log('data.Service', data.Service); // module + console.log('data.IdObject', data.IdObject); // Object id + console.log('data.Object', data.Object); // details if(message.actionName){ this.notificatinsRoutes(data); @@ -233,7 +227,13 @@ export class NotificationsService { //this.notificatinsRoutes(data); console.log(data) } - + + this.callbacks.forEach( e=> { + if(e.type == data.Object) { + e.funx() + } + }) + } }, (error) => { console.log('Push notification recived: failure ' + error.responseText); diff --git a/src/app/services/processes.service.ts b/src/app/services/processes.service.ts index 410f9be0f..d5fe643a9 100644 --- a/src/app/services/processes.service.ts +++ b/src/app/services/processes.service.ts @@ -6,6 +6,7 @@ import { environment } from 'src/environments/environment'; import { Observable } from 'rxjs'; import { DocumentSetUpMeeting } from '../models/CallMeeting'; import { Excludetask } from '../models/Excludetask'; +import { ExpedienteFullTask } from '../models/Expediente'; @Injectable({ providedIn: 'root' @@ -38,6 +39,24 @@ export class ProcessesService { return this.http.get(`${geturl}`, options); } + GetTaskListExpediente(onlycount1): Observable { + const processname = "Expediente" + const onlycount = false + + const geturl = environment.apiURL + 'tasks/List'; + let params = new HttpParams(); + + params = params.set("ProcessName", processname); + params = params.set("OnlyCount", onlycount.toString()); + + let options = { + headers: this.headers, + params: params + }; + + return this.http.get(`${geturl}`, options); + } + GetTask(serialnumber:string): Observable{ const geturl = environment.apiURL + 'Tasks/FindTask'; let params = new HttpParams(); diff --git a/src/app/shared/gabinete-digital/despachos/despachos.page.ts b/src/app/shared/gabinete-digital/despachos/despachos.page.ts index e06a2fe8c..6e1c32ba0 100644 --- a/src/app/shared/gabinete-digital/despachos/despachos.page.ts +++ b/src/app/shared/gabinete-digital/despachos/despachos.page.ts @@ -1,10 +1,11 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { customTask, DailyWorkTask, fullTask } from '../../../models/dailyworktask.model'; +import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { customTask } from '../../../models/dailyworktask.model'; import { ProcessesService } from 'src/app/services/processes.service'; import { NavigationStart, Router } from '@angular/router'; import { DespachoStore } from 'src/app/store/despacho-store.service'; import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; - +import { NotificationsService } from 'src/app/services/notifications.service'; +import { DespachoService } from 'src/app/Rules/despacho.service' @Component({ selector: 'app-despachos', templateUrl: './despachos.page.html', @@ -15,13 +16,14 @@ export class DespachosPage implements OnInit { segment:string; @Output() openExpedientDetail:EventEmitter = new EventEmitter(); - skeletonLoader = true despachoStore = DespachoStore; customTaskPipe = new CustomTaskPipe() constructor ( private processes:ProcessesService, private router: Router, + private notificationsService: NotificationsService, + private despachoRule: DespachoService ) {} ngOnInit() { @@ -45,32 +47,16 @@ export class DespachosPage implements OnInit { async LoadList() { - this.skeletonLoader = true - - let result: fullTask[] = await this.processes.GetTasksList("Despacho", false).toPromise(); - result = result.filter(data => data.workflowInstanceDataFields.Status == "Active") - - let despachoList = new Array(); - - result.forEach((element, index) => { - - let task = this.customTaskPipe.transform(element); - despachoList.push(task); - - }); - - despachoList = this.sortArrayISODate(despachoList).reverse(); - this.despachoStore.reset(despachoList); - this.skeletonLoader = false - + await this.despachoRule.getList({updateStore: true}) + } - sortArrayISODate(myArray: any) { - return myArray.sort(function(a, b) { - return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0); - }); + + get skeletonLoader(): boolean { + return this.despachoRule.LoaderService.loading } + doRefresh() { setTimeout(() => { this.LoadList(); diff --git a/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.html b/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.html index 48113c09a..b85b72640 100644 --- a/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.html +++ b/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.html @@ -13,10 +13,10 @@
    - +
    @@ -48,13 +48,13 @@
    Lista vazia
    -
    +
    diff --git a/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.ts b/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.ts index 04425d050..d25fd250e 100644 --- a/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.ts +++ b/src/app/shared/gabinete-digital/expedientes-pr/expedientes-pr.page.ts @@ -6,8 +6,9 @@ import { ModalController } from '@ionic/angular'; import { AlertService } from 'src/app/services/alert.service'; import { User } from 'src/app/models/user.model'; import { AuthService } from 'src/app/services/auth.service'; -import { ExpedienteprStore } from 'src/app/store/expedientepr-store.service'; import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; +import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; +import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; @Component({ selector: 'app-expedientes-pr', @@ -16,11 +17,12 @@ import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; }) export class ExpedientesPrPage implements OnInit { - taskslist:DailyWorkTask[] = []; + taskslist = []; serialNumber:string; skeletonLoader = true; - expedienteprstore = ExpedienteprStore; + expedienteGdStore = ExpedienteGdStore; customTaskPipe = new CustomTaskPipe() + expedienteTaskPipe = new ExpedienteTaskPipe() loggeduser: User; @Output() openExpedientDetail:EventEmitter = new EventEmitter(); @@ -62,15 +64,15 @@ export class ExpedientesPrPage implements OnInit { LoadList() { this.skeletonLoader = true; - this.processes.GetTasksList("Expediente", false).subscribe(result => { + this.processes.GetTaskListExpediente(false).subscribe(result => { this.taskslist = []; let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); res.forEach(element => { - let task: customTask = this.customTaskPipe.transform(element); + let task = this.expedienteTaskPipe.transform(element); this.taskslist.push(task); }); - this.expedienteprstore.reset(this.taskslist); + this.expedienteGdStore.reset(this.taskslist); this.skeletonLoader = false; }); diff --git a/src/app/shared/gabinete-digital/expedients/expedients.page.html b/src/app/shared/gabinete-digital/expedients/expedients.page.html index 43232ec41..621163895 100644 --- a/src/app/shared/gabinete-digital/expedients/expedients.page.html +++ b/src/app/shared/gabinete-digital/expedients/expedients.page.html @@ -30,7 +30,7 @@
    - {{ task.Folio }} + {{ task.Subject }}
    diff --git a/src/app/shared/gabinete-digital/expedients/expedients.page.ts b/src/app/shared/gabinete-digital/expedients/expedients.page.ts index 821991bc2..348545c09 100644 --- a/src/app/shared/gabinete-digital/expedients/expedients.page.ts +++ b/src/app/shared/gabinete-digital/expedients/expedients.page.ts @@ -1,15 +1,9 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; -import { ActivatedRoute, NavigationEnd, NavigationExtras, NavigationStart, Router } from '@angular/router'; -import { CalendarComponent } from 'ionic2-calendar'; - -import { DailyWorkTask } from '../../../models/dailyworktask.model'; +import { Component, Input, OnInit } from '@angular/core'; +import { NavigationStart, Router } from '@angular/router'; import { ProcessesService } from 'src/app/services/processes.service'; -import { formatDate } from '@angular/common'; -import { LoadingService } from 'src/app/services/loading.service'; -import { ModalController, NavParams } 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 { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; +import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; @Component({ selector: 'app-expedients', @@ -18,23 +12,20 @@ import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; }) export class ExpedientsPage implements OnInit { segment:string; - //profile:string; - @ViewChild(CalendarComponent) myCal: CalendarComponent; - - taskslist:DailyWorkTask[] = []; + taskslist = []; serialNumber:string; @Input() profile:string; skeletonLoader = true expedientegbstore = ExpedienteGdStore + expedienteTaskPipe = new ExpedienteTaskPipe() + constructor( private processes:ProcessesService, - private modalController: ModalController, private alertService: AlertService, private router: Router, - private activatedRoute: ActivatedRoute, ) { this.profile = 'mdgpr'; @@ -58,11 +49,11 @@ export class ExpedientsPage implements OnInit { } - segmentChanged(){ + segmentChanged() { this.LoadList(); } - notImplemented(){ + notImplemented() { this.alertService.presentAlert('Funcionalidade em desenvolvimento'); } @@ -70,31 +61,17 @@ export class ExpedientsPage implements OnInit { this.skeletonLoader = true - this.processes.GetTasksList("Expediente", false).subscribe(result => { + this.processes.GetTaskListExpediente(false).subscribe(result => { this.taskslist = []; this.skeletonLoader = false let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); res.forEach(element => { - let date = new Date(element.taskStartDate); - date.setMonth(date.getMonth() + 1); - let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); - let task: DailyWorkTask = { - "SerialNumber": element.serialNumber, - "Folio": element.workflowInstanceDataFields.Subject, - "Senders": element.workflowInstanceDataFields.Sender, - "CreateDate": taskDate, - "DocumentURL": element.workflowInstanceDataFields.ViewerRequest, - "Remetente": element.workflowInstanceDataFields.Remetente, - "DocumentsQty": element.totalDocuments, - "WorkflowName": element.workflowDisplayName, - "activityInstanceName": element.activityInstanceName, - "Status": element.workflowInstanceDataFields.Status, - } + let task = this.expedienteTaskPipe.transform(element) this.taskslist.push(task); }); - console.log("Buffer store", this.taskslist) + this.expedientegbstore.reset(this.taskslist); }); } diff --git a/src/app/shared/gabinete-digital/pedidos/pedidos.page.ts b/src/app/shared/gabinete-digital/pedidos/pedidos.page.ts index 876ae8963..00e26ec55 100644 --- a/src/app/shared/gabinete-digital/pedidos/pedidos.page.ts +++ b/src/app/shared/gabinete-digital/pedidos/pedidos.page.ts @@ -20,7 +20,6 @@ export class PedidosPage implements OnInit { @ViewChild(CalendarComponent) myCal: CalendarComponent; - taskslist:DailyWorkTask[] = []; parecerList:any[] = []; fulltask:any; @@ -100,7 +99,6 @@ export class PedidosPage implements OnInit { this.taskType = "Pedido de Deferimento"; this.processes.GetTasksList("Pedido de Deferimento", false).subscribe(result => { - this.taskslist = result.filter(data => data.workflowInstanceDataFields.Status == "Active") this.skeletonLoader = false this.deferimentoList = new Array(); diff --git a/src/app/store/despachos-page-store.service.spec.ts b/src/app/store/despachos-page-store.service.spec.ts deleted file mode 100644 index 23e7ad08c..000000000 --- a/src/app/store/despachos-page-store.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { DespachosPageStoreService } from './despachos-page-store.service'; - -describe('DespachosPageStoreService', () => { - let service: DespachosPageStoreService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(DespachosPageStoreService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/store/despachos-page-store.service.ts b/src/app/store/despachos-page-store.service.ts deleted file mode 100644 index 0133e247a..000000000 --- a/src/app/store/despachos-page-store.service.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Injectable } from '@angular/core'; -import { localstoreService } from './localstore.service' -import { AES, enc, SHA1 } from 'crypto-js' -import { customTask } from '../models/dailyworktask.model'; - -@Injectable({ - providedIn: 'root' -}) -export class DespachosPageStoreService { - - // main data - private _list: [] = [] - // local storage keyName - private keyName: string; - private _count = 0 - - constructor() { - - this.keyName = (SHA1(this.constructor.name)).toString() - - - setTimeout(()=>{ - let restore = localstoreService.get(this.keyName, {}) - this._list = restore.list || [] - this._count = parseInt(restore.count) || 0 - }, 10) - - } - - get list(): customTask[] { - return this._list || [] - } - - get count() { - return this._count - } - set count(value) { - this._count = value - this.save() - } - - reset(eventsList: any) { - this._list = eventsList - - this.count = this._list.length - this.save() - } - - private save() { - setTimeout(()=> { - localstoreService.set(this.keyName,{ - list: this._list, - count: this._count - }) - }, 10) - } - -} - -export const DespachoPageStore = new DespachosPageStoreService() diff --git a/src/app/store/expediente-storage-service.service.spec.ts b/src/app/store/expediente-storage-service.service.spec.ts deleted file mode 100644 index 274cd90d2..000000000 --- a/src/app/store/expediente-storage-service.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { ExpedienteStorageServiceService } from './expediente-storage-service.service'; - -describe('ExpedienteStorageServiceService', () => { - let service: ExpedienteStorageServiceService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ExpedienteStorageServiceService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/store/expediente-storage-service.service.ts b/src/app/store/expediente-storage-service.service.ts deleted file mode 100644 index 1fa536bce..000000000 --- a/src/app/store/expediente-storage-service.service.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Event } from '../models/event.model'; -import { localstoreService } from './localstore.service' -import { AES, enc, SHA1 } from 'crypto-js' - -@Injectable({ - providedIn: 'root' -}) - -// shared data used in home and gabinete -class ExpedienteStorageServiceService { - - // main data - private _list: Event[] = [] - private _count = 0 - // local storage keyName - private keyName: string; - - constructor() { - - this.keyName = (SHA1(this.constructor.name+ 'ExpedienteStorage/forAll')).toString() - - setTimeout(()=>{ - let restore = localstoreService.get(this.keyName, []) - this._list = restore.list || [] - this._count = restore.count || 0 - }, 10) - - } - - get list() { - return this._list - } - - get count() { - return this._count - } - set count(value: number) { - this._count = value - this.save() - } - - reset(list: any) { - this._list = list - - this.count = this._list.length - this.save() - } - - private save() { - setTimeout(()=>{ - localstoreService.set(this.keyName, { - list: this._list, - count: this._count - }) - }, 10) - } - -} - - -export const ExpedienteStorage = new ExpedienteStorageServiceService() \ No newline at end of file diff --git a/src/app/store/expedientegd-store.service.ts b/src/app/store/expedientegd-store.service.ts index c4f03fd18..678d2df80 100644 --- a/src/app/store/expedientegd-store.service.ts +++ b/src/app/store/expedientegd-store.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { localstoreService } from './localstore.service' import { AES, enc, SHA1 } from 'crypto-js' +import { ExpedienteTask } from '../models/dailyworktask.model'; @Injectable({ providedIn: 'root' @@ -8,7 +9,7 @@ import { AES, enc, SHA1 } from 'crypto-js' export class ExpedientegdStoreService { // main data - private _list = [] + private _list: ExpedienteTask[] = [] // local storage keyName private keyName: string; private _count = 0 diff --git a/src/app/store/expedientepr-store.service.spec.ts b/src/app/store/expedientepr-store.service.spec.ts deleted file mode 100644 index 5e43599b2..000000000 --- a/src/app/store/expedientepr-store.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { ExpedienteprStoreService } from './expedientepr-store.service'; - -describe('ExpedienteprStoreService', () => { - let service: ExpedienteprStoreService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ExpedienteprStoreService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/store/expedientepr-store.service.ts b/src/app/store/expedientepr-store.service.ts deleted file mode 100644 index 5fd2c0fb2..000000000 --- a/src/app/store/expedientepr-store.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Injectable } from '@angular/core'; -import { localstoreService } from './localstore.service' -import { AES, enc, SHA1 } from 'crypto-js' - -@Injectable({ - providedIn: 'root' -}) -export class ExpedienteprStoreService { - // main data - private _list: [] = [] - // local storage keyName - private keyName: string; - private _count = 0 - - constructor() { - - this.keyName = (SHA1(this.constructor.name)).toString() - - setTimeout(()=>{ - let restore = localstoreService.get(this.keyName, {}) - this._list = restore.list || [] - this._count = parseInt(restore.count) || 0 - }, 10) - - } - - get list() { return this._list || [] } - - get count() { return this._count || 0 } - set count(value: number) { - this._count = value - this.save() - } - - reset(eventsList: any) { - this._list = eventsList - - this.count = this._list.length - this.save() - } - - private save() { - setTimeout(()=>{ - localstoreService.set(this.keyName,{ - list: this._list, - count: this._count - }) - }, 10) - - } - -} - -export const ExpedienteprStore = new ExpedienteprStoreService() diff --git a/src/app/store/loader.service.spec.ts b/src/app/store/loader.service.spec.ts new file mode 100644 index 000000000..aef696199 --- /dev/null +++ b/src/app/store/loader.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { LoaderService } from './loader.service'; + +describe('LoaderService', () => { + let service: LoaderService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LoaderService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/store/loader.service.ts b/src/app/store/loader.service.ts new file mode 100644 index 000000000..53a3784a7 --- /dev/null +++ b/src/app/store/loader.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class LoaderService { + + private loadingList: { + name: string + }[] = [] + + constructor() { } + + get loading(){ + return this.loadingList.length != 0 + } + + push({name = ''}) { + this.loadingList.push({ + name: name + }) + } + + pop({}) { + this.loadingList.pop() + } + +} diff --git a/src/assets/images/icons-nav-home.svg b/src/assets/images/icons-nav-home.svg index 829cf9cea..ad505de12 100644 --- a/src/assets/images/icons-nav-home.svg +++ b/src/assets/images/icons-nav-home.svg @@ -3,11 +3,7 @@ - - - - - + From bf890011773db7cdae9514a6f28c6b9ff30424ab Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Thu, 26 Aug 2021 13:56:51 +0100 Subject: [PATCH 18/28] Remove code --- .../despachos/despachos.page.ts | 45 ++----------------- .../despachos/despachos.page.ts | 17 ++----- 2 files changed, 7 insertions(+), 55 deletions(-) diff --git a/src/app/pages/gabinete-digital/despachos/despachos.page.ts b/src/app/pages/gabinete-digital/despachos/despachos.page.ts index 511b6ca78..a2996b91e 100644 --- a/src/app/pages/gabinete-digital/despachos/despachos.page.ts +++ b/src/app/pages/gabinete-digital/despachos/despachos.page.ts @@ -1,10 +1,4 @@ -import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; -import { CalendarComponent } from 'ionic2-calendar'; -import { customTask, DailyWorkTask } from '../../../models/dailyworktask.model'; -import { ProcessesService } from 'src/app/services/processes.service'; -import { ModalController } from '@ionic/angular'; -import { AlertService } from 'src/app/services/alert.service'; -import { AuthService } from 'src/app/services/auth.service'; +import { Component, OnInit } from '@angular/core'; import { NavigationStart, Router } from '@angular/router'; import { DespachoService } from 'src/app/Rules/despacho.service'; import { DespachoStore } from 'src/app/store/despacho-store.service'; @@ -16,43 +10,17 @@ import { DespachoStore } from 'src/app/store/despacho-store.service'; }) export class DespachosPage implements OnInit { - //profile:string; - @ViewChild(CalendarComponent) myCal: CalendarComponent; - - taskslist:DailyWorkTask[] = []; - despachoList:any[] = []; - deferimentoList:DailyWorkTask[] = []; - - taskList:customTask[] = []; - - taskType: string; - serialNumber:string; - totalDocs:any; - - @Input() profile:string; - segment:string; - @Output() openExpedientDetail:EventEmitter = new EventEmitter(); - - loadedAttachments:any; - dicIndex = 0; - inicial = false despachoStore = DespachoStore; constructor ( - private processes:ProcessesService, - private modalController: ModalController, - private alertService: AlertService, - private authService: AuthService, private router: Router, private despachoRule: DespachoService - ) { - this.profile = 'mdgpr'; + ) { + } ngOnInit() { - //Inicializar segment - this.segment = "despachos"; const location = window.location const pathname = location.pathname + location.search @@ -83,15 +51,13 @@ export class DespachosPage implements OnInit { async LoadList() { - this.despachoList = await this.despachoRule.getList({updateStore: true}) + await this.despachoRule.getList({updateStore: true}) } get skeletonLoader(): boolean { return this.despachoRule.LoaderService.loading } - - doRefresh(event) { this.LoadList(); @@ -105,9 +71,6 @@ export class DespachosPage implements OnInit { this.router.navigate(['/home/gabinete-digital/despachos',serialNumber,'gabinete-digital']); } - docIndex(index: number) { - this.dicIndex = index; - } goBack() { this.router.navigate(['/home/gabinete-digital']); diff --git a/src/app/shared/gabinete-digital/despachos/despachos.page.ts b/src/app/shared/gabinete-digital/despachos/despachos.page.ts index 6e1c32ba0..2e3c2892f 100644 --- a/src/app/shared/gabinete-digital/despachos/despachos.page.ts +++ b/src/app/shared/gabinete-digital/despachos/despachos.page.ts @@ -1,11 +1,9 @@ -import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { customTask } from '../../../models/dailyworktask.model'; -import { ProcessesService } from 'src/app/services/processes.service'; import { NavigationStart, Router } from '@angular/router'; import { DespachoStore } from 'src/app/store/despacho-store.service'; -import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; -import { NotificationsService } from 'src/app/services/notifications.service'; -import { DespachoService } from 'src/app/Rules/despacho.service' +import { DespachoService } from 'src/app/Rules/despacho.service'; + @Component({ selector: 'app-despachos', templateUrl: './despachos.page.html', @@ -13,16 +11,10 @@ import { DespachoService } from 'src/app/Rules/despacho.service' }) export class DespachosPage implements OnInit { - segment:string; - @Output() openExpedientDetail:EventEmitter = new EventEmitter(); - despachoStore = DespachoStore; - customTaskPipe = new CustomTaskPipe() constructor ( - private processes:ProcessesService, private router: Router, - private notificationsService: NotificationsService, private despachoRule: DespachoService ) {} @@ -48,15 +40,12 @@ export class DespachosPage implements OnInit { async LoadList() { await this.despachoRule.getList({updateStore: true}) - } - get skeletonLoader(): boolean { return this.despachoRule.LoaderService.loading } - doRefresh() { setTimeout(() => { this.LoadList(); From c80d8fb5884b478969572d68bd29a4218d5000a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eudes=20In=C3=A1cio?= Date: Thu, 26 Aug 2021 16:32:59 +0100 Subject: [PATCH 19/28] User password encrypted --- src/app/services/aesencrypt.service.spec.ts | 16 ++++++ src/app/services/aesencrypt.service.ts | 56 +++++++++++++++++++++ src/app/services/auth.service.ts | 4 +- 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/app/services/aesencrypt.service.spec.ts create mode 100644 src/app/services/aesencrypt.service.ts diff --git a/src/app/services/aesencrypt.service.spec.ts b/src/app/services/aesencrypt.service.spec.ts new file mode 100644 index 000000000..081c16cb1 --- /dev/null +++ b/src/app/services/aesencrypt.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AESEncrypt } from './aesencrypt.service'; + +describe('AuthService', () => { + let service: AESEncrypt; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(AESEncrypt); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/aesencrypt.service.ts b/src/app/services/aesencrypt.service.ts new file mode 100644 index 000000000..551281a03 --- /dev/null +++ b/src/app/services/aesencrypt.service.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import CryptoJS from 'crypto-js'; + +@Injectable({ + providedIn: 'root' +}) +export class AESEncrypt { + + ivArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + constructor() { } + + encrypt(encryptData, pass) { + var text = "Pro-it te espera!!!!"; + //Creating the Vector Key + var iv = CryptoJS.enc.Hex.parse(this.toHexString(this.ivArray)); + //Encoding the Password in from UTF8 to byte array + var Pass = CryptoJS.enc.Utf8.parse(pass); + //Encoding the Salt in from UTF8 to byte array + var Salt = CryptoJS.enc.Utf8.parse("gabinetedigital"); + //Creating the key in PBKDF2 format to be used during the decryption + var key128Bits1000Iterations = CryptoJS.PBKDF2(Pass.toString(CryptoJS.enc.Utf8), Salt, { keySize: 128 / 32, iterations: 1000 }); + + //Decrypting the string contained in cipherParams using the PBKDF2 key + var decrypted = CryptoJS.AES.encrypt(encryptData, key128Bits1000Iterations, { mode: CryptoJS.mode.CBC, iv: iv, padding: CryptoJS.pad.Pkcs7 }); + console.log('AES encrypt',decrypted.toString()); + } + + decrypt(deceyptData,pass) { + + //Creating the Vector Key + var iv = CryptoJS.enc.Hex.parse(this.toHexString(this.ivArray)); + //Encoding the Password in from UTF8 to byte array + var Pass = CryptoJS.enc.Utf8.parse(pass); + //Encoding the Salt in from UTF8 to byte array + var Salt = CryptoJS.enc.Utf8.parse("gabinetedigital"); + //Creating the key in PBKDF2 format to be used during the decryption + var key128Bits1000Iterations = CryptoJS.PBKDF2(Pass.toString(CryptoJS.enc.Utf8), Salt, { keySize: 128 / 32, iterations: 1000 }); + //Enclosing the test to be decrypted in a CipherParams object as supported by the CryptoJS libarary + var cipherParams = CryptoJS.lib.CipherParams.create({ + ciphertext: CryptoJS.enc.Base64.parse(deceyptData) + }) + + //Decrypting the string contained in cipherParams using the PBKDF2 key + var decrypted = CryptoJS.AES.decrypt(cipherParams, key128Bits1000Iterations, { mode: CryptoJS.mode.CBC, iv: iv, padding: CryptoJS.pad.Pkcs7 }); + console.log('AES decrypt',decrypted.toString(CryptoJS.enc.Utf8)); + } + + toHexString(byteArray) { + return Array.from(byteArray, (value: any) => { + return ('0' + (value & 0xFF).toString(16)).slice(-2); + }).join('') + } + +} + + diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 711943234..c2689d9e5 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -12,6 +12,7 @@ import { LocalstoreService } from '../store/localstore.service'; import { ToastService } from './toast.service'; import { UserStore } from 'src/app/store/user.service' import { SHA1, SHA256, AES, enc } from 'crypto-js' +import { AESEncrypt } from '../services/aesencrypt.service'; @Injectable({ providedIn: 'root' @@ -33,6 +34,7 @@ export class AuthService { public alertController: AlertController, private localstoreService: LocalstoreService, private toastService: ToastService, + private aesencrypt: AESEncrypt, ) { this.headers = new HttpHeaders(); @@ -51,7 +53,7 @@ export class AuthService { async login(user: UserForm): Promise { // user.BasicAuthKey = 'Basic ' + btoa(user.username + '@' + user.domainName + ':' + user.password); user.BasicAuthKey = 'Basic ' + btoa(user.username + ':' + user.password); //conversão em base64 das credenciais inseridas - console.log('Basic ' + btoa(user.username + ':' + SHA1(user.password).toString())); //conversão em base64 das credenciais inseridas + console.log('Basic ' + btoa(user.username + ':' + this.aesencrypt.encrypt(user.password,user.username ))); //conversão em base64 das credenciais inseridas this.headers = this.headers.set('Authorization',user.BasicAuthKey); From 6aec4a1d5f1a6f5731419a8d644ed35702f036f1 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 09:48:51 +0100 Subject: [PATCH 20/28] add inativity page --- src/app/Rules/despacho.service.ts | 4 + src/app/home/home-routing.module.ts | 21 +++-- src/app/models/GetTasksListType.ts | 12 +++ .../gabinete-digital/gabinete-digital.page.ts | 2 +- src/app/pages/inactivity/inactivity.page.html | 81 ++++++------------ src/app/pages/inactivity/inactivity.page.scss | 41 ++++++--- src/app/pages/inactivity/inactivity.page.ts | 61 ------------- src/app/services/processes.service.ts | 3 +- src/app/store/despacho-store.service.ts | 3 +- .../images/logo-bg-removebg-preview.png | Bin 0 -> 25424 bytes 10 files changed, 89 insertions(+), 139 deletions(-) create mode 100644 src/app/models/GetTasksListType.ts create mode 100644 src/assets/images/logo-bg-removebg-preview.png diff --git a/src/app/Rules/despacho.service.ts b/src/app/Rules/despacho.service.ts index d270feb1d..f1387ac95 100644 --- a/src/app/Rules/despacho.service.ts +++ b/src/app/Rules/despacho.service.ts @@ -191,6 +191,10 @@ export class DespachoService { async getList({updateStore = false}): Promise { + if (this.LoaderService.loading) { + return this.despachoStore.list + } + this.LoaderService.push({}) let result: fullTask[] = [] diff --git a/src/app/home/home-routing.module.ts b/src/app/home/home-routing.module.ts index 913654e9f..b7d8f0457 100644 --- a/src/app/home/home-routing.module.ts +++ b/src/app/home/home-routing.module.ts @@ -368,20 +368,19 @@ const routes: Routes = [ ], }, - { - path: 'inactivity', - children: [ - { - path:'', - loadChildren: ()=> import('../pages/inactivity/inactivity.module').then(m => m.InactivityPageModule) - }, - ], - - }, ], canActivate: [AuthGuard] + }, + { + path: 'inactivity', + children: [ + { + path:'', + loadChildren: ()=> import('../pages/inactivity/inactivity.module').then(m => m.InactivityPageModule) + }, + ], - } + }, ]; @NgModule({ diff --git a/src/app/models/GetTasksListType.ts b/src/app/models/GetTasksListType.ts new file mode 100644 index 000000000..816beebd0 --- /dev/null +++ b/src/app/models/GetTasksListType.ts @@ -0,0 +1,12 @@ +export let GetTasksListType: +"" | +"Pedido de Parecer" | +"Pedido de Parecer do Presidente" | +"Pedido de Deferimento" | +"Despacho do Presidente da República" | +"Agenda Oficial MDGPR" | +"Agenda Pessoal MDGPR" | +"Agenda Pessoal PR" | +"Agenda Oficial PR" | +"image/x-icon" | +"Despacho" \ No newline at end of file diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index cf1efbc1b..651c0a7a4 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -457,7 +457,7 @@ export class GabineteDigitalPage implements OnInit, DoCheck { let expedientes = await this.processesbackend.GetTaskListExpediente(false).toPromise(); expedientes = expedientes.filter(data => data.workflowInstanceDataFields.Status == "Active") - this.expedientegbstore.reset(expedientes) + this.expedientegbstore.count = expedientes.length let despachos = await this.despachoRule.getList({updateStore: true}) diff --git a/src/app/pages/inactivity/inactivity.page.html b/src/app/pages/inactivity/inactivity.page.html index ba6b71c1c..0c6dab43a 100644 --- a/src/app/pages/inactivity/inactivity.page.html +++ b/src/app/pages/inactivity/inactivity.page.html @@ -1,67 +1,40 @@
    -
    -
    -
    -
    -
    - -
    -
    +
    + +
    + + +
    -

    Inicie a sessão

    -
    -

    Email

    - - - -

    Palavra-passe

    - - - -
    - -
    -
    -
    -

    Uma iniciativa do Gabinete do Presidente da República

    -
    -
    -
    -
    -
    +
    +
    Digite o PIN
    +
    Digite o novo PIN
    - -
    - Digite o PIN - Digite o novo PIN - -
    -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    +
    -
    + +
    1
    2
    3
    -
    +
    4
    5
    6
    -
    +
    7
    8
    9
    @@ -69,17 +42,19 @@
    0
    -
    -
    - Entrar com senha -
    +
    + Entrar com senha +
    + +
    + Limpar +
    -
    - Limpar
    +
    diff --git a/src/app/pages/inactivity/inactivity.page.scss b/src/app/pages/inactivity/inactivity.page.scss index 88f9eae74..b19df02df 100644 --- a/src/app/pages/inactivity/inactivity.page.scss +++ b/src/app/pages/inactivity/inactivity.page.scss @@ -14,6 +14,7 @@ ion-content{ width: 100vw; height: 100vh; overflow: auto; + background: white !important; } .wrapper{ @@ -26,10 +27,11 @@ ion-content{ .logo{ width: 400px; height: 400px; - background-image: url("/assets/background/auth.svg"); background-position: center; background-repeat: no-repeat; } + + .bg-1{ width: 250px; height: 250px; @@ -106,14 +108,11 @@ ion-item{ } - - - - .div-top-header{ margin: 0 em(20px); padding-top: em(15px); border: 0!important; + z-index: 1000; } .div-logo { @@ -138,28 +137,42 @@ ion-item{ justify-content: center; font-size: 19pt; background: #44b5ea; - border-radius: 56px; - margin-left: 30px; + border-radius: 56px; margin-bottom: 15px; user-select: none; + margin-right: 15px; + margin-left: 15px; } + .title{ padding-top: 32px; + z-index: 1000; + height: unset !important; + position: relative; + top: -30px; } .terminal { - padding-top: 112px; - margin-left: -30px; + padding-top: 49px; justify-content: center; display: flex; flex-direction: column; align-items: center; + background-image: url(/assets/background/auth.svg); + background-position: center; + background-repeat: no-repeat; + width: 100%; + padding-bottom: 48px; + margin-bottom: -58px; + z-index: 100; + margin-top: -80px; } .clear{ color: #44b5ea; font-size: 12pt; + z-index: 1000; } .dot-active{ background: #44b5ea; @@ -185,12 +198,12 @@ ion-item{ text-align: center; align-items: center; justify-content: center; - background-image: url("/assets/background/auth.svg"); background-size: 686px 674px; background-position: center; background-position-y: 110px; background-repeat: no-repeat; margin: auto; + justify-content: space-around; } .voltar{ @@ -216,4 +229,10 @@ ion-item{ padding-top: 20px; position: unset !important; } -} \ No newline at end of file +} + + +.pin-4 { + z-index: 1000; + margin-bottom: 36px; +} diff --git a/src/app/pages/inactivity/inactivity.page.ts b/src/app/pages/inactivity/inactivity.page.ts index 77700a497..ccafd3efd 100644 --- a/src/app/pages/inactivity/inactivity.page.ts +++ b/src/app/pages/inactivity/inactivity.page.ts @@ -38,8 +38,6 @@ export class InactivityPage implements OnInit { } ngOnInit() { - // clear local storage - window.localStorage.clear(); let userData = this.localstoreService.get('UserData', {}) @@ -48,19 +46,6 @@ export class InactivityPage implements OnInit { } - //Function to validade the login inputs - validateUsername() { - return ( - this.username.trim().length > 0 - ); - } - - validatePassword() { - return ( - this.password.trim().length > 0 - ); - } - async presentAlert(message: string) { const alert = await this.alertController.create({ cssClass: 'my-custom-class', @@ -72,22 +57,6 @@ export class InactivityPage implements OnInit { await alert.present(); } - /* loginRocketChat() { - - let postData = { - "user": this.username, - "password": this.password, - } - - this.authService.loginChat(postData).subscribe((res: any) => { - console.log(res.data); - this.storageService.store(AuthConnstants.AUTH, res.data); - console.log('Login to Rocket chat OK'); - }, (error: any) => { - console.log('Network error'); - this.presentAlert('Network error ' + error); - }); - } */ getToken() { this.notificatinsservice.getAndpostToken(this.username); @@ -95,37 +64,7 @@ export class InactivityPage implements OnInit { async Login() { - if (this.validateUsername()) { - if(this.validatePassword()){ - this.userattempt = { - username: this.username, - password: this.password, - domainName: environment.domain, - BasicAuthKey: "" - } - let attempt = await this.authService.login(this.userattempt) - - if (attempt) { - this.authService.loginChat(this.userattempt); - this.getToken(); - this.hasSession = true - this.hasPin = false - this.setPin = true - - if(!this.hasPin || this.hasPin) { - } else { - this.router.navigate(['/home/events']); - } - } - } - else { - this.toastService.badRequest('Por favor, insira a sua palavra-passe'); - } - } - else { - this.toastService.badRequest('Por favor, insira o seu nome de utilizador'); - } } setCode(code: string) { diff --git a/src/app/services/processes.service.ts b/src/app/services/processes.service.ts index d5fe643a9..71c7bc74b 100644 --- a/src/app/services/processes.service.ts +++ b/src/app/services/processes.service.ts @@ -7,6 +7,7 @@ import { Observable } from 'rxjs'; import { DocumentSetUpMeeting } from '../models/CallMeeting'; import { Excludetask } from '../models/Excludetask'; import { ExpedienteFullTask } from '../models/Expediente'; +import { GetTasksListType } from '../models/GetTasksListType'; @Injectable({ providedIn: 'root' @@ -23,7 +24,7 @@ export class ProcessesService { this.headers = this.headers.set('Authorization', this.loggeduser.BasicAuthKey); } - GetTasksList(processname:string, onlycount:boolean): Observable + GetTasksList(processname: typeof GetTasksListType, onlycount:boolean): Observable { const geturl = environment.apiURL + 'tasks/List'; let params = new HttpParams(); diff --git a/src/app/store/despacho-store.service.ts b/src/app/store/despacho-store.service.ts index 8633dfe9f..9d3c9bb17 100644 --- a/src/app/store/despacho-store.service.ts +++ b/src/app/store/despacho-store.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { localstoreService } from './localstore.service' import { AES, enc, SHA1 } from 'crypto-js' +import { customTask } from '../models/dailyworktask.model'; @Injectable({ providedIn: 'root' @@ -8,7 +9,7 @@ import { AES, enc, SHA1 } from 'crypto-js' export class DespachoStoreService { // main data - private _list: [] = [] + private _list: customTask[] = [] // local storage keyName private keyName: string; private _count = 0 diff --git a/src/assets/images/logo-bg-removebg-preview.png b/src/assets/images/logo-bg-removebg-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..95de59923ccba1bcebda27b0a59ee0975569fe19 GIT binary patch literal 25424 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 Date: Fri, 27 Aug 2021 10:13:35 +0100 Subject: [PATCH 21/28] Bug fixed encrypting the password --- src/app/services/aesencrypt.service.ts | 4 ++++ src/app/services/auth.service.ts | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/services/aesencrypt.service.ts b/src/app/services/aesencrypt.service.ts index 551281a03..2a9f33289 100644 --- a/src/app/services/aesencrypt.service.ts +++ b/src/app/services/aesencrypt.service.ts @@ -23,6 +23,8 @@ export class AESEncrypt { //Decrypting the string contained in cipherParams using the PBKDF2 key var decrypted = CryptoJS.AES.encrypt(encryptData, key128Bits1000Iterations, { mode: CryptoJS.mode.CBC, iv: iv, padding: CryptoJS.pad.Pkcs7 }); console.log('AES encrypt',decrypted.toString()); + + return decrypted.toString(); } decrypt(deceyptData,pass) { @@ -43,6 +45,8 @@ export class AESEncrypt { //Decrypting the string contained in cipherParams using the PBKDF2 key var decrypted = CryptoJS.AES.decrypt(cipherParams, key128Bits1000Iterations, { mode: CryptoJS.mode.CBC, iv: iv, padding: CryptoJS.pad.Pkcs7 }); console.log('AES decrypt',decrypted.toString(CryptoJS.enc.Utf8)); + + return decrypted.toString(CryptoJS.enc.Utf8); } toHexString(byteArray) { diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index c2689d9e5..ca8a8c86e 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -52,8 +52,10 @@ export class AuthService { async login(user: UserForm): Promise { // user.BasicAuthKey = 'Basic ' + btoa(user.username + '@' + user.domainName + ':' + user.password); - user.BasicAuthKey = 'Basic ' + btoa(user.username + ':' + user.password); //conversão em base64 das credenciais inseridas + user.BasicAuthKey = 'Basic ' + btoa(user.username + ':' + this.aesencrypt.encrypt(user.password,user.username )); + //conversão em base64 das credenciais inseridas console.log('Basic ' + btoa(user.username + ':' + this.aesencrypt.encrypt(user.password,user.username ))); //conversão em base64 das credenciais inseridas + console.log("Encript ",this.aesencrypt.encrypt(user.password,user.username )) this.headers = this.headers.set('Authorization',user.BasicAuthKey); From 230ea003414427d969a05f18ccbbe52313eb95e0 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 13:39:52 +0100 Subject: [PATCH 22/28] add inactivity page --- src/app/guards/auth.guard.ts | 3 +- src/app/guards/inactivity.guard.spec.ts | 16 ++++ src/app/guards/inactivity.guard.ts | 35 +++++++ src/app/guards/login.guard.ts | 3 +- src/app/home/home-routing.module.ts | 12 +++ src/app/home/home.page.ts | 13 ++- src/app/models/user.model.ts | 30 ++++++ .../gabinete-digital/gabinete-digital.page.ts | 2 +- src/app/pages/inactivity/inactivity.page.html | 43 ++++++++- src/app/pages/inactivity/inactivity.page.ts | 54 ++--------- src/app/pages/login/login.page.html | 52 +--------- src/app/pages/login/login.page.ts | 94 ++----------------- src/app/services/auth.service.ts | 27 +++--- src/app/services/inativity.service.spec.ts | 16 ++++ src/app/services/inativity.service.ts | 35 +++++++ .../header-no-search/profile/profile.page.ts | 1 - src/app/store/expedientegd-store.service.ts | 2 +- src/app/store/localstore.service.ts | 6 ++ src/app/store/session.service.spec.ts | 16 ++++ src/app/store/session.service.ts | 94 +++++++++++++++++++ 20 files changed, 344 insertions(+), 210 deletions(-) create mode 100644 src/app/guards/inactivity.guard.spec.ts create mode 100644 src/app/guards/inactivity.guard.ts create mode 100644 src/app/services/inativity.service.spec.ts create mode 100644 src/app/services/inativity.service.ts create mode 100644 src/app/store/session.service.spec.ts create mode 100644 src/app/store/session.service.ts diff --git a/src/app/guards/auth.guard.ts b/src/app/guards/auth.guard.ts index d8b99e5bd..1a39ff1f9 100644 --- a/src/app/guards/auth.guard.ts +++ b/src/app/guards/auth.guard.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { LocalstoreService } from '../store/localstore.service'; +import { SessionStore } from '../store/session.service'; @Injectable({ providedIn: 'root' @@ -16,7 +17,7 @@ export class AuthGuard implements CanActivate { route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { - if(window.location.pathname != '' && !this.localstoreService.get('UserData', false)) { + if(window.location.pathname != '' && !SessionStore.exist) { this.router.navigate(['/']); return false } else { diff --git a/src/app/guards/inactivity.guard.spec.ts b/src/app/guards/inactivity.guard.spec.ts new file mode 100644 index 000000000..5c99bfeef --- /dev/null +++ b/src/app/guards/inactivity.guard.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { InactivityGuard } from './inactivity.guard'; + +describe('InactivityGuard', () => { + let guard: InactivityGuard; + + beforeEach(() => { + TestBed.configureTestingModule({}); + guard = TestBed.inject(InactivityGuard); + }); + + it('should be created', () => { + expect(guard).toBeTruthy(); + }); +}); diff --git a/src/app/guards/inactivity.guard.ts b/src/app/guards/inactivity.guard.ts new file mode 100644 index 000000000..cca15d62a --- /dev/null +++ b/src/app/guards/inactivity.guard.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; +import { SessionStore } from '../store/session.service'; + +@Injectable({ + providedIn: 'root' +}) +export class InactivityGuard implements CanActivate { + + constructor( + private router:Router + ){} + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { + + alert(SessionStore.exist+ ' '+SessionStore.user.Inativity+ ' '+ SessionStore.hasPin) + if(SessionStore.exist && SessionStore.user.Inativity && !SessionStore.hasPin) { + alert('stay set pin') + return true + + } else if(SessionStore.exist && SessionStore.user.Inativity) { + alert('stay cofirm') + return true + } else { + alert('goint') + this.router.navigate(['/home/events']); + return false + } + + } + +} diff --git a/src/app/guards/login.guard.ts b/src/app/guards/login.guard.ts index 38a3d3a1c..848df6137 100644 --- a/src/app/guards/login.guard.ts +++ b/src/app/guards/login.guard.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { LocalstoreService } from '../store/localstore.service'; +import { SessionStore } from '../store/session.service'; @Injectable({ providedIn: 'root' @@ -15,7 +16,7 @@ export class LoginGuard implements CanActivate { route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { - if(window.location.pathname == '/' && this.localstoreService.get('UserData', null) != null ) { + if(window.location.pathname == '/' && SessionStore.exist ) { this.router.navigate(['/home/events']); return false } else { diff --git a/src/app/home/home-routing.module.ts b/src/app/home/home-routing.module.ts index b7d8f0457..014635651 100644 --- a/src/app/home/home-routing.module.ts +++ b/src/app/home/home-routing.module.ts @@ -1,6 +1,7 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { AuthGuard } from '../guards/auth.guard'; +import { InactivityGuard } from '../guards/inactivity.guard'; import { UserDataResolver } from '../resolvers/userData.resolver'; import { HomePage } from './home.page'; @@ -379,6 +380,17 @@ const routes: Routes = [ loadChildren: ()=> import('../pages/inactivity/inactivity.module').then(m => m.InactivityPageModule) }, ], + canActivate: [InactivityGuard] + }, + { + path: 'pin', + children: [ + { + path:'', + loadChildren: ()=> import('../pages/inactivity/inactivity.module').then(m => m.InactivityPageModule) + }, + ], + canActivate: [InactivityGuard] }, ]; diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index f8485409d..05d0709f0 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -14,6 +14,7 @@ import { TotalDocumentStore } from '../store/total-document.service'; import { connection } from '../services/socket/synchro.service'; import { DespachoService } from '../Rules/despacho.service'; import { ExpedienteGdStore } from '../store/expedientegd-store.service'; +import { InativityService } from '../services/inativity.service'; // import { NetworkService } from '../services/network.service'; @@ -81,7 +82,8 @@ export class HomePage implements OnInit { // private network: NetworkService, public p: PermissionService, public documentCounterService: DocumentCounterService, - private despachoRule: DespachoService) { + private despachoRule: DespachoService, + private inativityService: InativityService) { this.router.events.subscribe((val) => { document.querySelectorAll('ion-modal').forEach((e: any) => e.remove()) @@ -89,6 +91,10 @@ export class HomePage implements OnInit { this.updateList() + window['inactivity/function'] = () => { + this.router.navigate(['/inactivity']); + } + // if (typeof Worker !== 'undefined') { // // Create a new @@ -102,11 +108,8 @@ export class HomePage implements OnInit { // // You should add a fallback so that your program still executes correctly. // } - { - //this.folderId = this.navParams.get('folderId'); - } - } + refreshing() { diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts index e24bf1e2e..4f97c400b 100644 --- a/src/app/models/user.model.ts +++ b/src/app/models/user.model.ts @@ -30,4 +30,34 @@ export class User { }[] UserName: string Profile: any; +} + + +export class UserSession { + BasicAuthKey: string; + UserId: number; + Authorization: string; + Email: string + FullName: string + OwnerCalendars: { + CalendarId: string + CalendarName: "Oficial" | "Pessoal"; + CalendarRoleId: string; + Id: number; + }[] + RoleDescription: string + RoleID: number + SharedCalendars: { + CalendarId: string + CalendarName: "Oficial" | "Pessoal"; + CalendarRoleId: string; + Id: number; + OwnerUserId: string; + TypeShare: number; + }[] + UserName: string + Profile: any; + LoginPreference: 'None' | 'Password' | 'Pin' | null; + PIN: string + Inativity: boolean } \ No newline at end of file diff --git a/src/app/pages/gabinete-digital/gabinete-digital.page.ts b/src/app/pages/gabinete-digital/gabinete-digital.page.ts index 651c0a7a4..c1c40bd29 100644 --- a/src/app/pages/gabinete-digital/gabinete-digital.page.ts +++ b/src/app/pages/gabinete-digital/gabinete-digital.page.ts @@ -145,7 +145,7 @@ export class GabineteDigitalPage implements OnInit, DoCheck { } */ } - closeAllDesktopComponent(){ + closeAllDesktopComponent() { this.desktopComponent = { showEventList: false, showExpediente: false diff --git a/src/app/pages/inactivity/inactivity.page.html b/src/app/pages/inactivity/inactivity.page.html index 0c6dab43a..16f8fb80a 100644 --- a/src/app/pages/inactivity/inactivity.page.html +++ b/src/app/pages/inactivity/inactivity.page.html @@ -2,7 +2,40 @@
    -
    + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Inicie a sessão

    +
    +

    Email

    + + + +

    Palavra-passe

    + + + +
    + +
    +
    +
    +

    Uma iniciativa do Gabinete do Presidente da República

    +
    +
    + +
    @@ -13,8 +46,8 @@
    -
    Digite o PIN
    -
    Digite o novo PIN
    +
    Digite o PIN
    +
    Digite o novo PIN
    @@ -43,7 +76,7 @@
    -
    +
    Entrar com senha
    @@ -57,7 +90,7 @@
    -
    +
    diff --git a/src/app/pages/inactivity/inactivity.page.ts b/src/app/pages/inactivity/inactivity.page.ts index ccafd3efd..28c522474 100644 --- a/src/app/pages/inactivity/inactivity.page.ts +++ b/src/app/pages/inactivity/inactivity.page.ts @@ -6,8 +6,8 @@ import { ToastService } from 'src/app/services/toast.service'; import { environment } from 'src/environments/environment'; import { AlertController } from '@ionic/angular'; import { NotificationsService } from 'src/app/services/notifications.service'; -import crypto from 'crypto-js' -import { LocalstoreService } from 'src/app/store/localstore.service'; +import { SessionStore } from 'src/app/store/session.service'; + @Component({ selector: 'app-inactivity', @@ -16,35 +16,22 @@ import { LocalstoreService } from 'src/app/store/localstore.service'; }) export class InactivityPage implements OnInit { - logstatus: boolean; username: string = environment.defaultuser; password: string = environment.defaultuserpwd; userattempt: UserForm; code = [] - - hasPin: boolean - loginPreference: string - hasSession = false setPin = false + SessionStore = SessionStore constructor( private notificatinsservice: NotificationsService, private router: Router, private authService: AuthService, private toastService: ToastService, - public alertController: AlertController, - private localstoreService: LocalstoreService - ) { - } + public alertController: AlertController + ) {} - ngOnInit() { - - let userData = this.localstoreService.get('UserData', {}) - - const loginPreference = userData?.loginPreference - const pin = userData?.PIN - - } + ngOnInit() {} async presentAlert(message: string) { const alert = await this.alertController.create({ @@ -62,11 +49,6 @@ export class InactivityPage implements OnInit { this.notificatinsservice.getAndpostToken(this.username); } - async Login() { - - - } - setCode(code: string) { if(this.code.length < 4) { @@ -75,10 +57,7 @@ export class InactivityPage implements OnInit { if(this.code.length == 4) { - const code = this.code.join('') - const encrypted = crypto.SHA1(code) - - if(!this.hasPin) { + if(!SessionStore.hasPin) { // console.log('storePin') this.storePin() } else { @@ -95,17 +74,11 @@ export class InactivityPage implements OnInit { pinLogin() { const code = this.code.join('') - const encrypted = crypto.SHA1(code) - let userData = this.localstoreService.get('UserData', {}) - const pin = userData?.PIN + if( SessionStore.validatePin(code)) { - //if( encrypted == pin) { - - if( encrypted == this.localstoreService.get('UserData', false)) { - - //this.toastService.successMessage() this.router.navigate(['/home/events']); + this.clearCode() } else { this.toastService.badRequest('Pin incorreto') this.code = [] @@ -116,15 +89,8 @@ export class InactivityPage implements OnInit { storePin() { const code = this.code.join('') - const encrypted = crypto.SHA1(code).toString() - let userData: Object = this.localstoreService.get('UserData', {}) - userData['PIN'] = encrypted - userData['loginPreference'] = 'none' - - this.localstoreService.set('UserData', userData) - - this.localstoreService.set('PIN', encrypted) + SessionStore.setPin(code) this.router.navigate(['/home/events']); diff --git a/src/app/pages/login/login.page.html b/src/app/pages/login/login.page.html index 489193583..f802c4aed 100644 --- a/src/app/pages/login/login.page.html +++ b/src/app/pages/login/login.page.html @@ -1,7 +1,7 @@
    -
    +
    @@ -33,56 +33,6 @@
    - -
    - diff --git a/src/app/pages/login/login.page.ts b/src/app/pages/login/login.page.ts index 2f376d9ef..d573ebad0 100644 --- a/src/app/pages/login/login.page.ts +++ b/src/app/pages/login/login.page.ts @@ -8,6 +8,7 @@ import { AlertController } from '@ionic/angular'; import { NotificationsService } from 'src/app/services/notifications.service'; import crypto from 'crypto-js' import { LocalstoreService } from 'src/app/store/localstore.service'; +import { SessionStore } from 'src/app/store/session.service'; @Component({ selector: 'app-login', @@ -24,8 +25,8 @@ export class LoginPage implements OnInit { hasPin: boolean loginPreference: string - hasSession = false - setPin = false + + sessionStore = SessionStore constructor( private notificatinsservice: NotificationsService, @@ -38,20 +39,11 @@ export class LoginPage implements OnInit { } ngOnInit() { - // clear local storage - window.localStorage.clear(); - // App has session - if(!this.localstoreService.get('UserData', false)) { - this.hasSession = false - } else { - this.hasSession = true - // this.router.navigate(['/home/events']); - } - let userData = this.localstoreService.get('UserData', {}) + let userData = this.sessionStore.user - const loginPreference = userData?.loginPreference + const loginPreference = userData?.LoginPreference const pin = userData?.PIN if (pin) { @@ -130,18 +122,9 @@ export class LoginPage implements OnInit { if (attempt) { this.authService.loginChat(this.userattempt); this.getToken(); - this.hasSession = true - this.hasPin = false - this.setPin = true + + this.router.navigate(['/pin']); - // if(!this.hasPin || this.hasPin) { - // } else { - // this.router.navigate(['/home/events']); - // } - - this.code = ['1','1','1','1'] - this.storePin() - this.router.navigate(['/home/events']); } } else { @@ -153,67 +136,4 @@ export class LoginPage implements OnInit { } } - setCode(code: string) { - - if(this.code.length < 4) { - this.code.push(code) - } - - if(this.code.length == 4) { - - const code = this.code.join('') - const encrypted = crypto.SHA1(code) - - if(!this.hasPin) { - // console.log('storePin') - this.storePin() - } else { - // console.log('pinLogin') - this.pinLogin() - } - } - } - - clearCode() { - this.code =[] - } - - pinLogin() { - - const code = this.code.join('') - const encrypted = crypto.SHA1(code) - - let userData = this.localstoreService.get('UserData', {}) - const pin = userData?.PIN - - //if( encrypted == pin) { - - if( encrypted == this.localstoreService.get('UserData', false)) { - - //this.toastService.successMessage() - this.router.navigate(['/home/events']); - } else { - this.toastService.badRequest('Pin incorreto') - this.code = [] - } - - } - - storePin() { - - const code = this.code.join('') - const encrypted = crypto.SHA1(code) - let userData: Object = this.localstoreService.get('UserData', {}) - - userData['PIN'] = encrypted - userData['loginPreference'] = 'none' - - - this.localstoreService.set('UserData', userData) - this.localstoreService.set('PIN', encrypted) - - this.router.navigate(['/home/events']); - - } - } diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 711943234..3a2268f50 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { StorageService } from './storage.service'; import { Router } from '@angular/router'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; -import { User, UserForm } from '../models/user.model'; +import { User, UserForm, UserSession } from '../models/user.model'; import { environment } from 'src/environments/environment'; import { HttpService } from './http.service'; import { BehaviorSubject, Observable } from 'rxjs'; @@ -12,6 +12,7 @@ import { LocalstoreService } from '../store/localstore.service'; import { ToastService } from './toast.service'; import { UserStore } from 'src/app/store/user.service' import { SHA1, SHA256, AES, enc } from 'crypto-js' +import { SessionStore } from '../store/session.service'; @Injectable({ providedIn: 'root' @@ -37,8 +38,8 @@ export class AuthService { this.headers = new HttpHeaders(); - if (this.localstoreService.get('user', null) != null) { - this.ValidatedUser = this.localstoreService.get('user',{}); + if (SessionStore.exist) { + this.ValidatedUser = SessionStore.user } if (localStorage.getItem("userChat") != null) { @@ -63,22 +64,22 @@ export class AuthService { try { response = await this.http.post(environment.apiURL + "UserAuthentication/Login", '', this.opts).toPromise(); + const session: UserSession = Object.assign(new UserSession(), response) - console.log(response); if (response) { - if( response.RoleID == 100000014) { - response.Profile = 'PR' - } else if(response.RoleID == 100000011) { - response.Profile = 'MDGPR' + if( session.RoleID == 100000014) { + session.Profile = 'PR' + } else if(session.RoleID == 100000011) { + session.Profile = 'MDGPR' } - response.BasicAuthKey = user.BasicAuthKey + session.BasicAuthKey = user.BasicAuthKey this.ValidatedUser = response; - // console.log('response', response) - - this.localstoreService.set('user', response) - this.userStore.reset(response) + console.log('session', session) + + this.userStore.reset(session) + SessionStore.reset(session) this.storageService.store(AuthConnstants.USER, response); diff --git a/src/app/services/inativity.service.spec.ts b/src/app/services/inativity.service.spec.ts new file mode 100644 index 000000000..a6d04afed --- /dev/null +++ b/src/app/services/inativity.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { InativityService } from './inativity.service'; + +describe('InativityService', () => { + let service: InativityService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(InativityService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/inativity.service.ts b/src/app/services/inativity.service.ts new file mode 100644 index 000000000..e34c7be82 --- /dev/null +++ b/src/app/services/inativity.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { SessionStore } from '../store/session.service'; + +@Injectable({ + providedIn: 'root' +}) +export class InativityService { + + constructor( + private router: Router, + ) { + + var t; + window.onload = resetTimer; + window.onmousemove = resetTimer; + window.onmousedown = resetTimer; // catches touchscreen presses as well + window.ontouchstart = resetTimer; // catches touchscreen swipes as well + window.onclick = resetTimer; // catches touchpad clicks as well + window.onkeydown = resetTimer; + window.addEventListener('scroll', resetTimer, true); // improved; see comments + + function userIsNotActive() { + // your function for too long inactivity goes here + SessionStore.setInativity(false) + // alert('go out') + window['inactivity/function']() + } + + function resetTimer() { + clearTimeout(t); + t = setTimeout(userIsNotActive, 60000); // time is in milliseconds + } + } +} diff --git a/src/app/shared/headers/header-no-search/profile/profile.page.ts b/src/app/shared/headers/header-no-search/profile/profile.page.ts index 4ac9bb5ed..32b0e9ba9 100644 --- a/src/app/shared/headers/header-no-search/profile/profile.page.ts +++ b/src/app/shared/headers/header-no-search/profile/profile.page.ts @@ -120,7 +120,6 @@ export class ProfileComponent implements OnInit { this.router.navigateByUrl('/', { replaceUrl: true }); },100) - } LoginPreferenceMethod(type: string) { diff --git a/src/app/store/expedientegd-store.service.ts b/src/app/store/expedientegd-store.service.ts index 678d2df80..7b1161bfb 100644 --- a/src/app/store/expedientegd-store.service.ts +++ b/src/app/store/expedientegd-store.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { localstoreService } from './localstore.service' -import { AES, enc, SHA1 } from 'crypto-js' +import { SHA1 } from 'crypto-js' import { ExpedienteTask } from '../models/dailyworktask.model'; @Injectable({ diff --git a/src/app/store/localstore.service.ts b/src/app/store/localstore.service.ts index 921c7a385..0b37af954 100644 --- a/src/app/store/localstore.service.ts +++ b/src/app/store/localstore.service.ts @@ -55,6 +55,12 @@ export class LocalstoreService { localStorage.setItem(keyName, encoded) } + delete(keyName) { + + keyName = this.getKey(keyName) + localStorage.removeItem(keyName) + } + } export const localstoreService = new LocalstoreService() diff --git a/src/app/store/session.service.spec.ts b/src/app/store/session.service.spec.ts new file mode 100644 index 000000000..4238e142b --- /dev/null +++ b/src/app/store/session.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SessionService } from './session.service'; + +describe('SessionService', () => { + let service: SessionService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SessionService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/store/session.service.ts b/src/app/store/session.service.ts new file mode 100644 index 000000000..ca62aec5f --- /dev/null +++ b/src/app/store/session.service.ts @@ -0,0 +1,94 @@ +import { Injectable } from '@angular/core'; +import { localstoreService } from './localstore.service' +import { SHA1 } from 'crypto-js' +import { UserSession } from '../models/user.model'; + + +@Injectable({ + providedIn: 'root' +}) +export class SessionService { + + // main data + private _user = new UserSession() + // local storage keyName + private keyName: string; + private _needTovalidateUser = false + + constructor() { + + this.keyName = (SHA1(this.constructor.name)).toString() + let restore = localstoreService.get(this.keyName, {}) + this._user = restore.user || new UserSession() + + } + + get user(): UserSession { + return this._user || new UserSession() + } + + get exist() { + let restore = localstoreService.get(this.keyName, {}) + let user: UserSession = restore.user + if(user) { + if(user.Profile) { + return true + } + } + + return false + } + + setLoginPreference(loginPreference: 'None' | 'Password' | 'Pin' | null) { + this._user.LoginPreference = loginPreference + this.save() + } + + setPin(pin: string) { + this._user.PIN = SHA1(pin).toString() + this.save() + } + + validatePin(pin: string) { + return this._user.PIN == SHA1(pin).toString() + } + + needTovalidateUser() { + return this._user.Inativity + } + + setInativity(value: boolean) { + this._user.Inativity = value + this.save() + } + + get hasPin() { + + if(!this._user.PIN) { + return false + } + return this._user.PIN.length >= 2 + } + + reset(user) { + this._user = user + + this.setInativity(true) + this.save() + } + + delete() { + localstoreService.delete(this.keyName) + } + + private save() { + + localstoreService.set(this.keyName, { + user: this._user + }) + + } +} + + +export const SessionStore = new SessionService() \ No newline at end of file From d1f00d28407c932bb6036580db228e919e92caf7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 15:22:07 +0100 Subject: [PATCH 23/28] Update local storage version --- src/app/store/localstore.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/store/localstore.service.ts b/src/app/store/localstore.service.ts index 0b37af954..7626ff8e7 100644 --- a/src/app/store/localstore.service.ts +++ b/src/app/store/localstore.service.ts @@ -6,7 +6,7 @@ import { AES, enc, SHA1 } from 'crypto-js' }) export class LocalstoreService { - private prefix = 'v15-' + private prefix = 'v16-' constructor() { From 3367d8cef0086aa8c6294e8240685649190ec747 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 15:30:02 +0100 Subject: [PATCH 24/28] Improve service --- ...ice.spec.ts => background.service.spec.ts} | 8 +++---- ...ender.service.ts => background.service.ts} | 2 +- src/app/services/socket/synchro.service.ts | 21 +++++++------------ .../header-no-search/header-no-search.page.ts | 6 +----- 4 files changed, 14 insertions(+), 23 deletions(-) rename src/app/services/{sender.service.spec.ts => background.service.spec.ts} (52%) rename src/app/services/{sender.service.ts => background.service.ts} (76%) diff --git a/src/app/services/sender.service.spec.ts b/src/app/services/background.service.spec.ts similarity index 52% rename from src/app/services/sender.service.spec.ts rename to src/app/services/background.service.spec.ts index 383816b4c..0b1891cee 100644 --- a/src/app/services/sender.service.spec.ts +++ b/src/app/services/background.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { SenderService } from './sender.service'; +import { BackgroundService } from './background.service'; -describe('SenderService', () => { - let service: SenderService; +describe('BackgroundService', () => { + let service: BackgroundService; beforeEach(() => { TestBed.configureTestingModule({}); - service = TestBed.inject(SenderService); + service = TestBed.inject(BackgroundService); }); it('should be created', () => { diff --git a/src/app/services/sender.service.ts b/src/app/services/background.service.ts similarity index 76% rename from src/app/services/sender.service.ts rename to src/app/services/background.service.ts index cf50b23db..5eda005a7 100644 --- a/src/app/services/sender.service.ts +++ b/src/app/services/background.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) -export class SenderService { +export class BackgroundService { constructor() { } } diff --git a/src/app/services/socket/synchro.service.ts b/src/app/services/socket/synchro.service.ts index 537ee72ff..d8b0c060e 100644 --- a/src/app/services/socket/synchro.service.ts +++ b/src/app/services/socket/synchro.service.ts @@ -1,14 +1,15 @@ import { Injectable } from '@angular/core'; import { v4 as uuidv4 } from 'uuid' +import { BackgroundService } from '../background.service'; export interface wss{ url: string, type: 'reflect' | 'emit' header: { - id: string - bluePrint: string, - jwt: string + id: string + bluePrint: string, + jwt: string } } @@ -25,6 +26,7 @@ export class SynchroService { private url: string = '' callback = function(){} private _connected = false; + private BackgroundService = new BackgroundService() constructor(){} @@ -60,11 +62,8 @@ export class SynchroService { } private onopen = () =>{ - document.body.style.setProperty(`--color`, "#0782C9"); - document.body.style.setProperty(`--color2`, "#45BAFF"); - document.body.style.setProperty(`--color3`, "#0782C9"); - document.body.style.setProperty(`--color4`, "#0782c9f0"); - document.body.style.setProperty(`--color5`, "#45BAFF"); + + this.BackgroundService.online() console.log('open ======================= welcome to socket server') this._connected = true @@ -96,11 +95,7 @@ export class SynchroService { // event.code is usually 1006 in this case console.log('[close] Connection died'); console.log('Reconnect') - document.body.style.setProperty(`--color`, "#ffb703"); - document.body.style.setProperty(`--color2`, "#ffb703"); - document.body.style.setProperty(`--color3`, "#ffb703"); - document.body.style.setProperty(`--color4`, "#ffb703"); - document.body.style.setProperty(`--color5`, "#ffb703"); + this.BackgroundService.offline(); this._connected = false this.connect() diff --git a/src/app/shared/headers/header-no-search/header-no-search.page.ts b/src/app/shared/headers/header-no-search/header-no-search.page.ts index 01ca5a5e1..21a69fac9 100644 --- a/src/app/shared/headers/header-no-search/header-no-search.page.ts +++ b/src/app/shared/headers/header-no-search/header-no-search.page.ts @@ -1,8 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { AnimationController, ModalController } from '@ionic/angular'; -import { MenuController } from '@ionic/angular'; import { Router } from '@angular/router'; -import { AuthService } from 'src/app/services/auth.service'; import { LoginUserRespose } from 'src/app/models/user.model'; import { ProfilePage } from 'src/app/modals/profile/profile.page'; import { SessionStore } from 'src/app/store/session.service'; @@ -19,10 +17,8 @@ export class HeaderNoSearchPage implements OnInit { SessionStore = SessionStore constructor(private modalController: ModalController, - private menu: MenuController, private animationController: AnimationController, - private router: Router, - authService: AuthService) { + private router: Router) { this.loggeduser = SessionStore.user; } From 4f8c5476725399c10fb310c6cc81c4ff24566f97 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 15:35:29 +0100 Subject: [PATCH 25/28] Improve service --- src/app/services/background.service.ts | 16 +++++++++++++ src/app/services/socket/synchro.service.ts | 28 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/app/services/background.service.ts b/src/app/services/background.service.ts index 5eda005a7..441a0b76e 100644 --- a/src/app/services/background.service.ts +++ b/src/app/services/background.service.ts @@ -6,4 +6,20 @@ import { Injectable } from '@angular/core'; export class BackgroundService { constructor() { } + + online() { + document.body.style.setProperty(`--color`, "#0782C9"); + document.body.style.setProperty(`--color2`, "#45BAFF"); + document.body.style.setProperty(`--color3`, "#0782C9"); + document.body.style.setProperty(`--color4`, "#0782c9f0"); + document.body.style.setProperty(`--color5`, "#45BAFF"); + } + + offline() { + document.body.style.setProperty(`--color`, "#ffb703"); + document.body.style.setProperty(`--color2`, "#ffb703"); + document.body.style.setProperty(`--color3`, "#ffb703"); + document.body.style.setProperty(`--color4`, "#ffb703"); + document.body.style.setProperty(`--color5`, "#ffb703"); + } } diff --git a/src/app/services/socket/synchro.service.ts b/src/app/services/socket/synchro.service.ts index d8b0c060e..70383bdb7 100644 --- a/src/app/services/socket/synchro.service.ts +++ b/src/app/services/socket/synchro.service.ts @@ -27,6 +27,10 @@ export class SynchroService { callback = function(){} private _connected = false; private BackgroundService = new BackgroundService() + private callBacks: { + type: 'Offline' | 'Online' + funx: Function + }[] = [] constructor(){} @@ -51,6 +55,13 @@ export class SynchroService { this.url = `${wss.url}${wss.header.id}/${wss.header.jwt}/${wss.header.bluePrint}/${this.id}/` } + registerCallback(type: 'Offline' | 'Online', funx: Function) { + this.callBacks.push({ + type, + funx + }) + } + connect() { this.connection = new WebSocket(this.url); @@ -64,6 +75,13 @@ export class SynchroService { private onopen = () =>{ this.BackgroundService.online() + + this.callBacks.forEach((e)=>{ + if(e.type == 'Online') { + e.funx() + } + }) + console.log('open ======================= welcome to socket server') this._connected = true @@ -95,8 +113,18 @@ export class SynchroService { // event.code is usually 1006 in this case console.log('[close] Connection died'); console.log('Reconnect') + this.BackgroundService.offline(); + + this.callBacks.forEach((e)=>{ + if(e.type == 'Offline') { + e.funx() + } + }) + + // status this._connected = false + // reconnect this.connect() } From 2e4458283a9d92192a67676d7dc17370aff6ba6b Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 16:10:25 +0100 Subject: [PATCH 26/28] Improve expediente descart --- src/app/Rules/expediente.service.ts | 35 +++++++++++++++++-- src/app/Rules/expedientes.service.spec.ts | 16 --------- src/app/Rules/expedientes.service.ts | 30 ---------------- .../task.service.spec.ts} | 8 ++--- src/app/Rules/task.service.ts | 15 ++++++++ .../expediente-detail.page.ts | 24 +++++-------- src/app/services/database.service.ts | 9 ----- .../opts-expediente/opts-expediente.page.ts | 24 ++++++------- 8 files changed, 72 insertions(+), 89 deletions(-) delete mode 100644 src/app/Rules/expedientes.service.spec.ts delete mode 100644 src/app/Rules/expedientes.service.ts rename src/app/{services/database.service.spec.ts => Rules/task.service.spec.ts} (53%) create mode 100644 src/app/Rules/task.service.ts delete mode 100644 src/app/services/database.service.ts diff --git a/src/app/Rules/expediente.service.ts b/src/app/Rules/expediente.service.ts index 931180c15..f88c14f86 100644 --- a/src/app/Rules/expediente.service.ts +++ b/src/app/Rules/expediente.service.ts @@ -1,9 +1,40 @@ import { Injectable } from '@angular/core'; - +import { ProcessesService } from '../services/processes.service'; +import { ProcessDocumentService } from './process-document.service'; @Injectable({ providedIn: 'root' }) export class ExpedienteService { - constructor() { } + constructor( + private processes: ProcessesService, + private processDocumentService: ProcessDocumentService, + ) { } + + + discard({SerialNumber, Note =''}) { + let otherbody = { + "serialNumber": SerialNumber, + "action": "Passivo", + "ActionTypeId": 99999877, + "dataFields": { + "Note": Note, + } + } + + return this.processes.CompleteTask(otherbody) + } + + viewDocument({DocId, ApplicationId}) { + this.processDocumentService.viewDocument({DocId, ApplicationId}) + } + + CompleteTask({body}) { + return this.processes.CompleteTask(body) + } + + + UpdateTaskStatus({FolderId}){ + return this.processes.UpdateTaskStatus(FolderId) + } } diff --git a/src/app/Rules/expedientes.service.spec.ts b/src/app/Rules/expedientes.service.spec.ts deleted file mode 100644 index f01d1e890..000000000 --- a/src/app/Rules/expedientes.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { ExpedientesService } from './expedientes.service'; - -describe('ExpedientesService', () => { - let service: ExpedientesService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ExpedientesService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/Rules/expedientes.service.ts b/src/app/Rules/expedientes.service.ts deleted file mode 100644 index 16af6d7e5..000000000 --- a/src/app/Rules/expedientes.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable } from '@angular/core'; -import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; -import { ProcessesService } from '../services/processes.service'; -import { ProcessDocumentService } from './process-document.service'; - -@Injectable({ - providedIn: 'root' -}) -export class ExpedientesService { - - constructor( - private iab: InAppBrowser, - private processDocumentService: ProcessDocumentService, - private processes: ProcessesService, - ) { } - - viewDocument({DocId, ApplicationId}) { - this.processDocumentService.viewDocument({DocId, ApplicationId}) - } - - CompleteTask({body}) { - return this.processes.CompleteTask(body) - } - - - UpdateTaskStatus({FolderId}){ - return this.processes.UpdateTaskStatus(FolderId) - } - -} diff --git a/src/app/services/database.service.spec.ts b/src/app/Rules/task.service.spec.ts similarity index 53% rename from src/app/services/database.service.spec.ts rename to src/app/Rules/task.service.spec.ts index 1b3f513b1..0bbd21466 100644 --- a/src/app/services/database.service.spec.ts +++ b/src/app/Rules/task.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { DatabaseService } from './database.service'; +import { TaskService } from './task.service'; -describe('DatabaseService', () => { - let service: DatabaseService; +describe('TaskService', () => { + let service: TaskService; beforeEach(() => { TestBed.configureTestingModule({}); - service = TestBed.inject(DatabaseService); + service = TestBed.inject(TaskService); }); it('should be created', () => { diff --git a/src/app/Rules/task.service.ts b/src/app/Rules/task.service.ts new file mode 100644 index 000000000..37574780c --- /dev/null +++ b/src/app/Rules/task.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core'; +import { ProcessesService } from '../services/processes.service'; + +@Injectable({ + providedIn: 'root' +}) +export class TaskService { + + constructor( + private processes: ProcessesService, + ) { } + + + +} diff --git a/src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page.ts b/src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page.ts index 16c1e4a9d..35dc124fa 100644 --- a/src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page.ts +++ b/src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page.ts @@ -19,8 +19,9 @@ import { SearchList } from 'src/app/models/search-document'; import { AddNotePage } from 'src/app/modals/add-note/add-note.page'; import { PermissionService } from 'src/app/OtherService/permission.service'; import { SearchDocumentPipe } from 'src/app/pipes/search-document.pipe'; -import { ExpedientesService } from 'src/app/Rules/expedientes.service'; +import { ExpedienteService } from 'src/app/Rules/expediente.service'; import { expedienteTask } from 'src/app/models/dailyworktask.model'; +import { TaskService } from 'src/app/Rules/task.service'; @Component({ selector: 'app-expediente-detail', @@ -61,7 +62,8 @@ export class ExpedienteDetailPage implements OnInit { private location: Location, private attachmentsService: AttachmentsService, public p: PermissionService, - private expedientesService: ExpedientesService + private taskService: TaskService, + private expedienteService: ExpedienteService ) { this.activatedRoute.paramMap.subscribe(params => { if(params["params"].SerialNumber) { @@ -301,7 +303,7 @@ export class ExpedienteDetailPage implements OnInit { viewDocument(DocId:string) { - this.expedientesService.viewDocument({ApplicationId:'361', DocId}) + this.expedienteService.viewDocument({ApplicationId:'361', DocId}) } getAttachments(serialNumber) { @@ -414,21 +416,13 @@ export class ExpedienteDetailPage implements OnInit { modal.onDidDismiss().then( async (res)=>{ console.log(res['data']); - if(body == 'descartar'){ - if(res['data']== 'Yes'){ - let otherbody = { - "serialNumber": this.task.SerialNumber, - "action": "Passivo", - "ActionTypeId": 99999877, - "dataFields": { - "Note": "", - } - } + if(body == 'descartar') { + if(res['data']== 'Yes') { const loader = this.toastService.loading() try { - await this.processes.CompleteTask(otherbody) + await this.expedienteService.discard({SerialNumber: this.task.SerialNumber}).toPromise() this.toastService.successMessage('Processo descartado'); this.goBack(); } catch (error) { @@ -447,7 +441,7 @@ export class ExpedienteDetailPage implements OnInit { const loader = this.toastService.loading() try { - await this.expedientesService.CompleteTask(body).toPromise(); + await this.expedienteService.CompleteTask(body).toPromise(); //this.toastService.successMessage('Processo descartado'); this.goBack(); } catch (error) { diff --git a/src/app/services/database.service.ts b/src/app/services/database.service.ts deleted file mode 100644 index 6b7d033f7..000000000 --- a/src/app/services/database.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class DatabaseService { - - constructor() { } -} diff --git a/src/app/shared/popover/opts-expediente/opts-expediente.page.ts b/src/app/shared/popover/opts-expediente/opts-expediente.page.ts index 969c9d134..aefca0253 100644 --- a/src/app/shared/popover/opts-expediente/opts-expediente.page.ts +++ b/src/app/shared/popover/opts-expediente/opts-expediente.page.ts @@ -13,7 +13,9 @@ import { SearchDocumentPipe } from 'src/app/pipes/search-document.pipe'; import { AttachmentsService } from 'src/app/services/attachments.service'; import { ProcessesService } from 'src/app/services/processes.service'; import { ToastService } from 'src/app/services/toast.service'; - +import { Location } from '@angular/common'; +import { TaskService } from 'src/app/Rules/task.service' +import { ExpedienteService } from 'src/app/Rules/expediente.service'; @Component({ selector: 'app-opts-expediente', templateUrl: './opts-expediente.page.html', @@ -40,6 +42,9 @@ export class OptsExpedientePage implements OnInit { private activatedRoute: ActivatedRoute, public p: PermissionService, private attachmentsService: AttachmentsService, + private location: Location, + private TaskService: TaskService, + private expedienteService: ExpedienteService ) { this.task = this.navParams.get('task'); this.fulltask = this.navParams.get('fulltask'); @@ -81,7 +86,8 @@ export class OptsExpedientePage implements OnInit { } } else { - window.history.back(); + this.location.back() + /* this.activatedRoute.paramMap.subscribe(params => { console.log('YES'); @@ -354,24 +360,16 @@ export class OptsExpedientePage implements OnInit { if(body == 'descartar') { if(res['data']== 'Yes') { - let otherbody = { - "serialNumber": this.task.SerialNumber, - "action": "Passivo", - "ActionTypeId": 99999877, - "dataFields": { - "Note": "", - } - } const loader = this.toastService.loading() try { - await this.processes.CompleteTask(otherbody).toPromise() + await this.expedienteService.discard({SerialNumber: this.task.SerialNumber}).toPromise() this.toastService.successMessage('Processo descartado'); this.goBack(); } catch (error) { this.toastService.badRequest('Processo não descartado') - } finally { + } finally { loader.remove() } @@ -382,7 +380,7 @@ export class OptsExpedientePage implements OnInit { } } else{ - if(res['data']== 'Yes'){ + if(res['data']== 'Yes') { const loader = this.toastService.loading() try { From 81b7f4820b10ad65f83a8546acbc738dfbd1e4c7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 27 Aug 2021 17:11:05 +0100 Subject: [PATCH 27/28] add inactivity --- src/app/guards/inactivity.guard.ts | 4 +- src/app/home/home.page.ts | 11 +++- .../edit-profile/edit-profile.page.html | 12 ++-- .../profile/edit-profile/edit-profile.page.ts | 66 +++---------------- src/app/models/user.model.ts | 3 +- .../pendentes/pendentes.page.ts | 5 +- src/app/pages/inactivity/inactivity.page.html | 9 +-- src/app/pages/inactivity/inactivity.page.ts | 18 +++-- src/app/store/session.service.ts | 11 +++- 9 files changed, 55 insertions(+), 84 deletions(-) diff --git a/src/app/guards/inactivity.guard.ts b/src/app/guards/inactivity.guard.ts index 99f6d080b..8d7c71dae 100644 --- a/src/app/guards/inactivity.guard.ts +++ b/src/app/guards/inactivity.guard.ts @@ -16,11 +16,11 @@ export class InactivityGuard implements CanActivate { route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { - if(SessionStore.exist && SessionStore.user.Inativity && !SessionStore.hasPin) { + if(SessionStore.exist && SessionStore.user.Inactivity && !SessionStore.hasPin) { // alert('stay set pin') return true - } else if(SessionStore.exist && !SessionStore.user.Inativity) { + } else if(SessionStore.exist && !SessionStore.user.Inactivity) { // alert('stay conform') return true } else { diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 923910dc0..2d33cb4e3 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -16,7 +16,8 @@ import { connection } from '../services/socket/synchro.service'; import { DespachoService } from '../Rules/despacho.service'; import { ExpedienteGdStore } from '../store/expedientegd-store.service'; import { InativityService } from '../services/inativity.service'; -// import { NetworkService } from '../services/network.service'; +import { SessionStore } from '../store/session.service'; + // import * as Sentry from "@sentry/browser"; @@ -92,8 +93,14 @@ export class HomePage implements OnInit { this.updateList() + window['inactivity/function'] = () => { - this.router.navigate(['/inactivity']); + if(window.location.pathname != '/inactivity') { + + const pathname = window.location.pathname + SessionStore.setUrlBeforeInactivity(pathname) + this.router.navigate(['/inactivity']); + } } diff --git a/src/app/modals/profile/edit-profile/edit-profile.page.html b/src/app/modals/profile/edit-profile/edit-profile.page.html index 9f59f72d0..d1ed6cfd8 100644 --- a/src/app/modals/profile/edit-profile/edit-profile.page.html +++ b/src/app/modals/profile/edit-profile/edit-profile.page.html @@ -28,7 +28,7 @@
    -
    {{loggeduser.RoleDescription}}
    +
    {{SessionStore.user.RoleDescription}}
    @@ -36,7 +36,7 @@
    - +
    @@ -47,19 +47,19 @@
    - +
    -