This commit is contained in:
Eudes Inácio
2021-08-26 16:33:32 +01:00
41 changed files with 369 additions and 551 deletions
@@ -4,7 +4,6 @@ import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.servic
import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
import { PendentesStore } from 'src/app/store/pendestes-store.service'; import { PendentesStore } from 'src/app/store/pendestes-store.service';
import { PedidosStore } from 'src/app/store/pedidos-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 { DespachosprStore } from 'src/app/store/despachospr-store.service';
import { DeplomasStore } from '../store/deplomas.service'; import { DeplomasStore } from '../store/deplomas.service';
+8
View File
@@ -1,4 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CustomTaskPipe } from '../pipes/custom-task.pipe';
import { ProcessesService } from '../services/processes.service'; import { ProcessesService } from '../services/processes.service';
@Injectable({ @Injectable({
@@ -20,6 +21,8 @@ export class DeplomaService {
] ]
} }
customTaskPipe = new CustomTaskPipe()
constructor( constructor(
private processes: ProcessesService, private processes: ProcessesService,
) { } ) { }
@@ -83,4 +86,9 @@ export class DeplomaService {
return this.processes.CompleteTask(body) return this.processes.CompleteTask(body)
} }
async getList() {
}
} }
+53 -4
View File
@@ -1,8 +1,11 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { customTask, fullTask } from '../models/dailyworktask.model';
import { AttachmentList } from '../models/Excludetask'; import { AttachmentList } from '../models/Excludetask';
import { PermissionService } from '../OtherService/permission.service'; import { PermissionService } from '../OtherService/permission.service';
import { CustomTaskPipe } from '../pipes/custom-task.pipe';
import { ProcessesService } from '../services/processes.service'; import { ProcessesService } from '../services/processes.service';
import { DespachoStore } from '../store/despacho-store.service';
import { LoaderService } from 'src/app/store/loader.service'
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
@@ -20,10 +23,14 @@ export class DespachoService {
'Tarefa do Despacho': 'Tarefa de Despacho' | 'Concluir' | 'rexecucao' 'Tarefa do Despacho': 'Tarefa de Despacho' | 'Concluir' | 'rexecucao'
} }
constructor( customTaskPipe = new CustomTaskPipe()
despachoStore = DespachoStore;
constructor(
private processes: ProcessesService, private processes: ProcessesService,
public p: PermissionService public p: PermissionService,
) { } public LoaderService: LoaderService
) { }
arquivar(note:string, documents:AttachmentList, serialnumber) { arquivar(note:string, documents:AttachmentList, serialnumber) {
@@ -181,4 +188,46 @@ export class DespachoService {
return this.processes.CompleteTask(body) return this.processes.CompleteTask(body)
} }
async getList({updateStore = false}): Promise<customTask[]> {
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);
});
}
} }
+3 -3
View File
@@ -3,14 +3,14 @@
<ion-tab-button tab="events"> <ion-tab-button tab="events">
<!-- <ion-icon name="home"></ion-icon> --> <!-- <ion-icon name="home"></ion-icon> -->
<ion-icon class="nav-icon" src="assets/images/icons-nav-home.svg"></ion-icon> <ion-icon class="nav-icon" src="assets/images/icons-nav-home.svg"></ion-icon>
<ion-badge color="danger">{{toDayEventStorage.eventsList.length}}</ion-badge> <ion-badge color="danger">{{toDayEventStorage.eventsList.length + expedienteGdStore.count}}</ion-badge>
<ion-label>Início</ion-label> <ion-label>Início</ion-label>
</ion-tab-button> </ion-tab-button>
<ion-tab-button tab="agenda"> <ion-tab-button tab="agenda">
<!-- <ion-icon name="calendar"></ion-icon> --> <!-- <ion-icon name="calendar"></ion-icon> -->
<ion-icon class="nav-icon" src="assets/images/icons-nav-calendar.svg"></ion-icon> <ion-icon class="nav-icon" src="assets/images/icons-nav-calendar.svg"></ion-icon>
<ion-label class="overflow-visible">Agenda</ion-label> <ion-label style="margin-bottom: 2px;" class="overflow-visible">Agenda</ion-label>
</ion-tab-button> </ion-tab-button>
<ion-tab-button tab="gabinete-digital"> <ion-tab-button tab="gabinete-digital">
<!-- <ion-icon name="file-tray-stacked"></ion-icon> --> <!-- <ion-icon name="file-tray-stacked"></ion-icon> -->
@@ -21,7 +21,7 @@
</ion-tab-button> </ion-tab-button>
<ion-tab-button tab="publications"> <ion-tab-button tab="publications">
<ion-icon class="nav-icon" src="assets/images/icons-nav-actions.svg"></ion-icon> <ion-icon class="nav-icon" src="assets/images/icons-nav-actions.svg"></ion-icon>
<ion-label class="overflow-visible">Ações</ion-label> <ion-label style="margin-bottom: 2px;" class="overflow-visible">Ações</ion-label>
</ion-tab-button> </ion-tab-button>
<ion-tab-button tab="chat"> <ion-tab-button tab="chat">
<ion-icon class="nav-icon" src="assets/images/icons-nav-chat-inactive.svg"></ion-icon> <ion-icon class="nav-icon" src="assets/images/icons-nav-chat-inactive.svg"></ion-icon>
+17 -10
View File
@@ -13,6 +13,8 @@ import { DocumentCounterService } from 'src/app/OtherService/document-counter.se
import { PermissionService } from '../OtherService/permission.service'; import { PermissionService } from '../OtherService/permission.service';
import { TotalDocumentStore } from '../store/total-document.service'; import { TotalDocumentStore } from '../store/total-document.service';
import { connection } from '../services/socket/synchro.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'; // import { NetworkService } from '../services/network.service';
@@ -45,6 +47,7 @@ export class HomePage implements OnInit {
toDayEventStorage = ToDayEventStorage toDayEventStorage = ToDayEventStorage
totalDocumentStore = TotalDocumentStore totalDocumentStore = TotalDocumentStore
expedienteGdStore = ExpedienteGdStore
adding: "intervenient" | "CC" = "intervenient"; adding: "intervenient" | "CC" = "intervenient";
mobileComponent = { mobileComponent = {
@@ -69,7 +72,8 @@ export class HomePage implements OnInit {
connection = connection connection = connection
constructor(private zone: NgZone, constructor(
private zone: NgZone,
private router: Router, private router: Router,
public modalCtrl: AlertController, public modalCtrl: AlertController,
private notificationsService: NotificationsService, private notificationsService: NotificationsService,
@@ -77,12 +81,15 @@ export class HomePage implements OnInit {
private activeroute: ActivatedRoute, private activeroute: ActivatedRoute,
private webnotification: WebNotificationsService, private webnotification: WebNotificationsService,
public p: PermissionService, public p: PermissionService,
public documentCounterService: DocumentCounterService) { public documentCounterService: DocumentCounterService,
private despachoRule: DespachoService) {
this.router.events.subscribe((val) => { this.router.events.subscribe((val) => {
document.querySelectorAll('ion-modal').forEach((e: any) => e.remove()) document.querySelectorAll('ion-modal').forEach((e: any) => e.remove())
}); });
this.updateList()
// if (typeof Worker !== 'undefined') { // if (typeof Worker !== 'undefined') {
// // Create a new // // Create a new
@@ -100,14 +107,6 @@ export class HomePage implements OnInit {
//this.folderId = this.navParams.get('folderId'); //this.folderId = this.navParams.get('folderId');
} }
this.notificationsService.registerCallback(
'Create Depacho',
() =>{
this.refreshing()
}
)
} }
refreshing() { refreshing() {
@@ -164,8 +163,16 @@ export class HomePage implements OnInit {
}); });
} }
} }
}
updateList() {
this.notificationsService.registerCallback(
'despachos',
() => {
this.despachoRule.getList({updateStore: true})
}
)
} }
@@ -287,6 +287,8 @@ export class CreateProcessPage implements OnInit {
this.modalController.dismiss(); this.modalController.dismiss();
} catch (error) { } catch (error) {
this.toastService.badRequest('Processo não efectuado'); this.toastService.badRequest('Processo não efectuado');
} finally {
loader.remove() loader.remove()
} }
+41 -34
View File
@@ -1,5 +1,4 @@
<ion-content class=" bg-blue"> <ion-header class=" bg-blue ion-no-border">
<div class="profile-header width-100"> <div class="profile-header width-100">
<div class="div-logo d-md-none"> <div class="div-logo d-md-none">
<div class="logo height-fit-content"> <div class="logo height-fit-content">
@@ -10,9 +9,10 @@
<ion-icon class="icon" src="assets/images/icons-search-close.svg"></ion-icon> <ion-icon class="icon" src="assets/images/icons-search-close.svg"></ion-icon>
</div> </div>
</div> </div>
</ion-header>
<ion-header class=" bg-blue ion-no-border">
<div class="profile-content"> <div class="profile-content">
<div class="profile-title d-flex justify-content-center width-100"> <div class="profile-title d-flex justify-content-center width-100">
<ion-label >{{loggeduser.RoleDescription}}</ion-label> <ion-label >{{loggeduser.RoleDescription}}</ion-label>
</div> </div>
@@ -28,39 +28,46 @@
</ion-buttons> </ion-buttons>
</div> </div>
<div class="line"></div> <div class="line"></div>
</div>
<div class="notifications-content">
<ion-label>{{notificationdata.length}} novas notificações</ion-label> <ion-label>{{notificationdata.length}} novas notificações</ion-label>
<ion-list> </div>
<div class="item cursor-pointer ion-no-padding ion-no-margin" lines="none" </ion-header>
*ngFor = "let item of notificationdata; let i = index"
(click)="notificatinsRoutes(item.index,item.Service,item.Object,item.IdObject,item.FolderId)" <ion-content class=" bg-blue">
> <div class="d-flex flex-column height-100 overflow-auto-y">
<div class="item-conten-{{item.Service}}-{{item.TypeAgenda}}-{{item.Role}}">
<div class="notification-item"> <div class="notifications-content">
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'agenda'" src="assets/images/icons-default-agenda.svg" >
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'gabinete-digital'" src="assets/images/icons-correspondencias.svg" > <ion-list>
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'accoes'" src="assets/images/icons-nav-accoes-active.svg" > <div class="item cursor-pointer ion-no-padding ion-no-margin" lines="none"
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'chat'" src="assets/images/icons-nav-agenda-active.svg" > *ngFor = "let item of notificationdata; let i = index"
(click)="notificatinsRoutes(item.index,item.Service,item.Object,item.IdObject,item.FolderId)"
>
<div class="item-conten-{{item.Service}}-{{item.TypeAgenda}}-{{item.Role}}">
<div class="notification-item">
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'agenda'" src="assets/images/icons-default-agenda.svg" >
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'gabinete-digital'" src="assets/images/icons-correspondencias.svg" >
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'accoes'" src="assets/images/icons-nav-accoes-active.svg" >
<img class="notification-icon" slot="end" *ngIf = "item.Service == 'chat'" src="assets/images/icons-nav-agenda-active.svg" >
</div>
<div class="approve-event-time">
<p *ngIf = "item.Service == 'agenda'">{{item.dateInit}}</p>
<p *ngIf = "item.Service == 'agenda'">{{item.dateEnd}}</p>
</div>
<div class="approve-event-detail">
<p *ngIf = "item.Service == 'agenda'">{{item.Location}}</p>
<h3 id="profile-title">{{item.alert}}</h3>
<p *ngIf = "item.Service != 'agenda'">{{item.desc}}</p>
</div>
<!-- <div class="notification-label-MD-official" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'official' && item.Role == '100000011'" ></div>
<div class="notification-label-MD-pessoal" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'pessoal' && item.Role == '100000011'" ></div>
<div class="notification-label-PR-official" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'official' && item.Role == '100000014'" ></div>
<div class="notification-label-PR-pessoal" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'pessoal' && item.Role == '100000014'" ></div> -->
</div> </div>
<div class="approve-event-time">
<p *ngIf = "item.Service == 'agenda'">{{item.dateInit}}</p>
<p *ngIf = "item.Service == 'agenda'">{{item.dateEnd}}</p>
</div>
<div class="approve-event-detail">
<p *ngIf = "item.Service == 'agenda'">{{item.Location}}</p>
<h3 id="profile-title">{{item.alert}}</h3>
<p *ngIf = "item.Service != 'agenda'">{{item.desc}}</p>
</div>
<!-- <div class="notification-label-MD-official" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'official' && item.Role == '100000011'" ></div>
<div class="notification-label-MD-pessoal" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'pessoal' && item.Role == '100000011'" ></div>
<div class="notification-label-PR-official" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'official' && item.Role == '100000014'" ></div>
<div class="notification-label-PR-pessoal" *ngIf = "item.Service == 'agenda' && item.TypeAgenda == 'pessoal' && item.Role == '100000014'" ></div> -->
</div> </div>
</div> </ion-list>
</ion-list> </div>
</div> </div>
</ion-content> </ion-content>
-2
View File
@@ -3,7 +3,6 @@
// background-color: #0782c9; // background-color: #0782c9;
padding: 20px 20px; padding: 20px 20px;
border: 0!important; border: 0!important;
overflow: auto;
.div-logo{ .div-logo{
background: transparent; background: transparent;
@@ -67,7 +66,6 @@ ion-list{
.notifications-content{ .notifications-content{
padding: 0px 20px; padding: 0px 20px;
.item{ .item{
display: flex;
border-radius: 15px; border-radius: 15px;
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.07); box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.07);
border: solid 1px #e9e9e9; border: solid 1px #e9e9e9;
+16
View File
@@ -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;
}
+14
View File
@@ -113,4 +113,18 @@ export interface expedienteTask {
DispatchNumber: any DispatchNumber: any
AttachmentsProcessLastInstanceID: any AttachmentsProcessLastInstanceID: any
InstanceID: any InstanceID: any
}
export interface ExpedienteTask {
SerialNumber: string
Senders : string
CreateDate : string
DocumentsQty : number
WorkflowName : string
activityInstanceName : string
Status : string
taskStartDate: string
Subject: string
} }
+5 -5
View File
@@ -11,8 +11,8 @@
<p *ngIf="totalEvent!=1"class="event-number p-small ion-text-center"> <strong>{{totalEvent}}</strong> eventos agendados para hoje</p> <p *ngIf="totalEvent!=1"class="event-number p-small ion-text-center"> <strong>{{totalEvent}}</strong> eventos agendados para hoje</p>
</ion-label> </ion-label>
<div class="next-meeting"> <div class="next-meeting">
<div class="meeting-time">{{currentHoursMinutes | date: 'HH:mm'}}</div> <div class="meeting-time" *ngIf="currentHoursMinutes">{{currentHoursMinutes | date: 'HH:mm'}}</div>
<div *ngIf="currentEvent" class="meeting-description"> "{{currentEvent}}"</div> <div class="meeting-description" *ngIf="currentEvent"> "{{currentEvent}}"</div>
</div> </div>
</ion-header> </ion-header>
@@ -94,7 +94,7 @@
</div> </div>
<div class="content"> <div class="content">
<ion-list> <ion-list>
<ion-item class="cursor-pointer" lines="none" *ngFor = "let task of expedienteStorage.list" <ion-item class="cursor-pointer" lines="none" *ngFor = "let task of expedienteGdStore.list"
(click)="goToExpediente(task.serialNumber)"> (click)="goToExpediente(task.serialNumber)">
<div class="item-exp d-flex"> <div class="item-exp d-flex">
<div class="schedule-date"> <div class="schedule-date">
@@ -102,8 +102,8 @@
<div class="time-start">{{task.taskStartDate | date: 'HH:mm'}}</div> <div class="time-start">{{task.taskStartDate | date: 'HH:mm'}}</div>
</div> </div>
<div class="schedule-details pointer"> <div class="schedule-details pointer">
<div class="description">{{ task.workflowInstanceDataFields.Subject }}</div> <div class="description">{{ task.Subject }}</div>
<div class="location">{{ task.workflowInstanceDataFields.Sender }}</div> <div class="location">{{ task.Senders }}</div>
</div> </div>
</div> </div>
</ion-item> </ion-item>
+13 -19
View File
@@ -13,8 +13,9 @@ import { ProcessesService } from '../../services/processes.service';
import { DailyWorkTask } from '../../models/dailyworktask.model'; import { DailyWorkTask } from '../../models/dailyworktask.model';
import { User } from 'src/app/models/user.model'; import { User } from 'src/app/models/user.model';
import { ToDayEventStorage } from 'src/app/store/to-day-event-storage.service'; 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 { 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({ @Component({
selector: 'app-events', selector: 'app-events',
@@ -62,15 +63,16 @@ export class EventsPage implements OnInit {
// shared data // shared data
toDayEventStorage = ToDayEventStorage toDayEventStorage = ToDayEventStorage
expedienteStorage = ExpedienteStorage expedienteGdStore = ExpedienteGdStore
expedienteTaskPipe = new ExpedienteTaskPipe()
@Output() openExpedientListPage:EventEmitter<any> = new EventEmitter<any>(); @Output() openExpedientListPage:EventEmitter<any> = new EventEmitter<any>();
loggeduser: User; loggeduser: User;
existingScreenOrientation: string; existingScreenOrientation: string;
pdfSrc = "https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf";
constructor( constructor(
private eventService: EventsService, private eventService: EventsService,
private router: Router, private router: Router,
@@ -330,21 +332,13 @@ export class EventsPage implements OnInit {
} }
LoadList() { LoadList() {
switch (this.loggeduser.Profile) { this.processes.GetTaskListExpediente(false).subscribe(result => {
case 'MDGPR': console.log("Expediente", result);
this.processes.GetTasksList("Expediente", false).subscribe(result => {
console.log(result); const ExpedienteTask = result.map( e=> this.expedienteTaskPipe.transform(e))
this.expedienteStorage.reset(result)
}); this.expedienteGdStore.reset(ExpedienteTask)
break; });
case 'PR':
this.processes.GetTasksList("Expediente", false).subscribe(result => {
this.expedienteStorage.reset(result)
});
break;
default:
break;
}
} }
sortArrayISODate(myArray: any){ sortArrayISODate(myArray: any){
@@ -26,14 +26,14 @@
refreshingText="A actualizar..."> refreshingText="A actualizar...">
</ion-refresher-content> </ion-refresher-content>
</ion-refresher> </ion-refresher>
<div > <div >
<ion-progress-bar type="indeterminate" *ngIf="skeletonLoader"></ion-progress-bar> <ion-progress-bar type="indeterminate" *ngIf="skeletonLoader"></ion-progress-bar>
<div class="height-100"> <div class="height-100">
<ion-list> <ion-list>
<div <div
class="expediente ion-no-padding ion-no-margin cursor-pointer" class="expediente ion-no-padding ion-no-margin cursor-pointer"
*ngFor = "let task of despachospagestore.list; let i = index" *ngFor = "let task of despachoStore.list; let i = index"
(click)="GoToDespacho(task.SerialNumber)" (click)="GoToDespacho(task.SerialNumber)"
> >
<!-- [routerLink]="['/home/gabinete-digital/expediente',task.SerialNumber]" --> <!-- [routerLink]="['/home/gabinete-digital/expediente',task.SerialNumber]" -->
@@ -68,13 +68,13 @@
</div> </div>
<div <div
*ngIf="!skeletonLoader && despachospagestore.list.length == 0 && despachospagestore.list.length == 0" *ngIf="!skeletonLoader && despachoStore.list.length == 0"
class="empty-list d-flex height-100 align-center justify-content-center" class="empty-list d-flex height-100 align-center justify-content-center"
> >
<span>Lista vazia</span> <span>Lista vazia</span>
</div> </div>
<div *ngIf="skeletonLoader && despachospagestore.list.length == 0"> <div *ngIf="skeletonLoader && despachoStore.list.length == 0">
<ion-list> <ion-list>
<ion-item> <ion-item>
@@ -1,12 +1,7 @@
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { Component, OnInit } 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 { NavigationStart, Router } from '@angular/router'; 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({ @Component({
selector: 'app-despachos', selector: 'app-despachos',
@@ -15,43 +10,17 @@ import { DespachoPageStore } from 'src/app/store/despachos-page-store.service';
}) })
export class DespachosPage implements OnInit { export class DespachosPage implements OnInit {
//profile:string;
@ViewChild(CalendarComponent) myCal: CalendarComponent; despachoStore = DespachoStore;
taskslist:DailyWorkTask[] = [];
despachoList:any[] = [];
deferimentoList:DailyWorkTask[] = [];
taskList:customTask[] = [];
taskType: string;
serialNumber:string;
totalDocs:any;
@Input() profile:string;
segment:string;
@Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>();
loadedAttachments:any;
dicIndex = 0;
inicial = false
skeletonLoader = true
despachospagestore = DespachoPageStore;
constructor ( constructor (
private processes:ProcessesService,
private modalController: ModalController,
private alertService: AlertService,
private authService: AuthService,
private router: Router, private router: Router,
) { private despachoRule: DespachoService
this.profile = 'mdgpr'; ) {
} }
ngOnInit() { ngOnInit() {
//Inicializar segment
this.segment = "despachos";
const location = window.location const location = window.location
const pathname = location.pathname + location.search const pathname = location.pathname + location.search
@@ -80,50 +49,13 @@ export class DespachosPage implements OnInit {
this.LoadList(); this.LoadList();
} }
openExpedientDetailPage(data) {
this.openExpedientDetail.emit(data);
}
async LoadList() { async LoadList() {
this.skeletonLoader = true await this.despachoRule.getList({updateStore: 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);
} }
sortArrayISODate(myArray: any) { get skeletonLoader(): boolean {
return myArray.sort(function(a, b) { return this.despachoRule.LoaderService.loading
return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0);
});
} }
doRefresh(event) { doRefresh(event) {
@@ -139,9 +71,6 @@ export class DespachosPage implements OnInit {
this.router.navigate(['/home/gabinete-digital/despachos',serialNumber,'gabinete-digital']); this.router.navigate(['/home/gabinete-digital/despachos',serialNumber,'gabinete-digital']);
} }
docIndex(index: number) {
this.dicIndex = index;
}
goBack() { goBack() {
this.router.navigate(['/home/gabinete-digital']); this.router.navigate(['/home/gabinete-digital']);
@@ -34,13 +34,13 @@
<ion-list> <ion-list>
<div <div
class="expediente ion-no-padding ion-no-margin cursor-pointer" class="expediente ion-no-padding ion-no-margin cursor-pointer"
*ngFor = "let task of expedienteStorage.list" *ngFor = "let task of expedienteGdStore.list"
(click)="goToExpediente(task.SerialNumber)" (click)="goToExpediente(task.SerialNumber)"
> >
<div class="item width-100"> <div class="item width-100">
<div class="exp-top-detail"> <div class="exp-top-detail">
<div class="subject"> <div class="subject">
<ion-label>{{ task.Folio }}</ion-label> <ion-label>{{ task.Subject }}</ion-label>
</div> </div>
<div class="exp-icon"> <div class="exp-icon">
<ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon> <ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon>
@@ -65,13 +65,13 @@
</ion-list> </ion-list>
<div <div
*ngIf="!skeletonLoader && expedienteStorage.list.length == 0 && expedienteStorage.list.length == 0" *ngIf="!skeletonLoader && expedienteGdStore.list.length == 0 && expedienteGdStore.list.length == 0"
class="empty-list d-flex height-100 align-center justify-content-center" class="empty-list d-flex height-100 align-center justify-content-center"
> >
<span>Lista vazia</span> <span>Lista vazia</span>
</div> </div>
<div *ngIf="skeletonLoader && expedienteStorage.list.length == 0"> <div *ngIf="skeletonLoader && expedienteGdStore.list.length == 0">
<ion-list> <ion-list>
<ion-item> <ion-item>
@@ -1,9 +1,9 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { NavigationStart, Router } from '@angular/router'; import { NavigationStart, Router } from '@angular/router';
import { DailyWorkTask } from '../../../models/dailyworktask.model';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { ToastService } from 'src/app/services/toast.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({ @Component({
selector: 'app-expediente', selector: 'app-expediente',
@@ -17,17 +17,17 @@ export class ExpedientePage implements OnInit {
//profile:string; //profile:string;
showLoader:boolean; showLoader:boolean;
taskslist:DailyWorkTask[] = []; taskslist = [];
serialNumber:string; serialNumber:string;
expedienteStorage = ExpedienteStorage expedienteGdStore = ExpedienteGdStore
expedienteTaskPipe = new ExpedienteTaskPipe()
constructor( constructor(
private processes:ProcessesService, private processes:ProcessesService,
private router: Router, private router: Router,
private toastService: ToastService private toastService: ToastService
) { ) {}
}
ngOnInit() { ngOnInit() {
@@ -52,39 +52,25 @@ export class ExpedientePage implements OnInit {
this.skeletonLoader = true this.skeletonLoader = true
try { try {
const expediente: object[] = await this.processes.GetTasksList("Expediente", false).toPromise() const expediente: object[] = await this.processes.GetTaskListExpediente(false).toPromise()
const result = expediente const result = expediente
this.taskslist = new Array(); this.taskslist = new Array();
let res = result.reverse().filter((data: any) => data.workflowInstanceDataFields.Status == "Active"); let res = result.reverse().filter((data: any) => data.workflowInstanceDataFields.Status == "Active");
res.forEach((element: any) => { res.forEach((element: any) => {
let date = new Date(element.taskStartDate);
date.setMonth(date.getMonth() + 1); let task = this.expedienteTaskPipe.transform(element)
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); this.taskslist.push(task);
}); });
console.log(this.taskslist); this.expedienteGdStore.reset(this.taskslist);
this.expedienteStorage.reset(this.taskslist);
this.skeletonLoader = false;
} catch (error) { } catch (error) {
this.toastService.badRequest('Processo não encontrado') this.toastService.badRequest('Processo não encontrado')
this.goBack() this.goBack()
} finally {
this.skeletonLoader = false;
} }
} }
@@ -30,7 +30,7 @@
<ion-list> <ion-list>
<div <div
class="expediente ion-no-padding ion-no-margin cursor-pointer" class="expediente ion-no-padding ion-no-margin cursor-pointer"
*ngFor = "let task of expedienteprstore.list" *ngFor = "let task of expedienteGdStore.list"
(click)="goToExpediente(task.SerialNumber)" (click)="goToExpediente(task.SerialNumber)"
> >
<div class="item width-100"> <div class="item width-100">
@@ -62,14 +62,14 @@
</div> </div>
<div <div
*ngIf="!skeletonLoader && expedienteprstore.list.length == 0 && expedienteprstore.list.length == 0" *ngIf="!skeletonLoader && expedienteGdStore.list.length == 0 && expedienteGdStore.list.length == 0"
class="empty-list d-flex height-100 align-center justify-content-center" class="empty-list d-flex height-100 align-center justify-content-center"
> >
<span>Lista vazia</span> <span>Lista vazia</span>
</div> </div>
<!-- Skeleton loader --> <!-- Skeleton loader -->
<div *ngIf="skeletonLoader && expedienteprstore.list.length == 0"> <div *ngIf="skeletonLoader && expedienteGdStore.list.length == 0">
<ion-list> <ion-list>
<ion-item> <ion-item>
@@ -8,8 +8,9 @@ import { ExpedienteDetailPage } from 'src/app/pages/gabinete-digital/expediente/
import { AlertService } from 'src/app/services/alert.service'; import { AlertService } from 'src/app/services/alert.service';
import { User } from 'src/app/models/user.model'; import { User } from 'src/app/models/user.model';
import { AuthService } from 'src/app/services/auth.service'; import { AuthService } from 'src/app/services/auth.service';
import { ExpedienteprStore } from 'src/app/store/expedientepr-store.service';
import { Location } from '@angular/common' import { Location } from '@angular/common'
import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe';
@Component({ @Component({
selector: 'app-expedientes-pr', selector: 'app-expedientes-pr',
@@ -20,7 +21,7 @@ export class ExpedientesPrPage implements OnInit {
@ViewChild(CalendarComponent) myCal: CalendarComponent; @ViewChild(CalendarComponent) myCal: CalendarComponent;
taskslist:DailyWorkTask[] = []; taskslist= [];
serialNumber:string; serialNumber:string;
showLoader:boolean; showLoader:boolean;
@@ -28,7 +29,8 @@ export class ExpedientesPrPage implements OnInit {
@Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>(); @Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>();
skeletonLoader = true skeletonLoader = true
expedienteprstore = ExpedienteprStore; expedienteGdStore = ExpedienteGdStore;
expedienteTaskPipe = new ExpedienteTaskPipe()
constructor( constructor(
private processes:ProcessesService, private processes:ProcessesService,
@@ -64,32 +66,18 @@ export class ExpedientesPrPage implements OnInit {
LoadList() { LoadList() {
this.skeletonLoader = true this.skeletonLoader = true
this.processes.GetTasksList("Expediente", false).subscribe(result => { this.processes.GetTaskListExpediente(false).subscribe(result => {
console.log(result); console.log(result);
this.skeletonLoader = false this.skeletonLoader = false
this.showLoader =false this.showLoader =false
this.taskslist = new Array(); this.taskslist = new Array();
let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active");
res.forEach(element => { res.forEach(element => {
let date = new Date(element.taskStartDate); let task = this.expedienteTaskPipe.transform(element)
date.setMonth(date.getMonth() + 1); this.taskslist.push(task);
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);
});
console.log(this.taskslist); console.log(this.taskslist);
this.expedienteprstore.reset(this.taskslist); this.expedienteGdStore.reset(this.taskslist);
this.skeletonLoader = false this.skeletonLoader = false
}) })
} }
@@ -1,6 +1,5 @@
import { Component, DoCheck, OnInit, ViewChild } from '@angular/core'; import { Component, DoCheck, OnInit, ViewChild } from '@angular/core';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { AlertService } from 'src/app/services/alert.service';
import { ModalController } from '@ionic/angular'; import { ModalController } from '@ionic/angular';
import { ActivatedRoute, NavigationEnd, NavigationExtras, Router } from '@angular/router'; import { ActivatedRoute, NavigationEnd, NavigationExtras, Router } from '@angular/router';
import { AuthService } from 'src/app/services/auth.service'; 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 { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
import { PendentesStore } from 'src/app/store/pendestes-store.service'; import { PendentesStore } from 'src/app/store/pendestes-store.service';
import { PedidosStore } from 'src/app/store/pedidos-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 { DespachosprStore } from 'src/app/store/despachospr-store.service';
import { PermissionService } from 'src/app/OtherService/permission.service'; import { PermissionService } from 'src/app/OtherService/permission.service';
import { removeDuplicate } from 'src/plugin/removeDuplicate.js' 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 { TotalDocumentStore } from 'src/app/store/total-document.service';
import { DeplomasStore } from 'src/app/store/deplomas.service'; import { DeplomasStore } from 'src/app/store/deplomas.service';
import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; 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({ @Component({
selector: 'app-gabinete-digital', selector: 'app-gabinete-digital',
@@ -116,7 +116,9 @@ export class GabineteDigitalPage implements OnInit, DoCheck {
private router: Router, private router: Router,
authService: AuthService, authService: AuthService,
public p: PermissionService, public p: PermissionService,
public waitForDomService: WaitForDomService public waitForDomService: WaitForDomService,
private notificationsService: NotificationsService,
private despachoRule: DespachoService
) { ) {
this.loggeduser = authService.ValidatedUser; this.loggeduser = authService.ValidatedUser;
@@ -450,19 +452,15 @@ export class GabineteDigitalPage implements OnInit, DoCheck {
this.showLoader = true; this.showLoader = true;
let allPreocesses_ = await this.processesbackend.GetTasksList("", false).toPromise(); 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") 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) this.expedientegbstore.reset(expedientes)
let despachos = await this.processesbackend.GetTasksList("Despacho", false).toPromise(); let despachos = await this.despachoRule.getList({updateStore: true})
despachos = despachos.filter(data => data.workflowInstanceDataFields.Status == "Active")
this.count_desp_dailywork = Object.keys(despachos).length;
this.despachoStore.count = this.count_desp_dailywork
this.despachoStore.reset(despachos) this.despachoStore.reset(despachos)
let pareceres = await this.processesbackend.GetTasksList("Pedido de Parecer", false).toPromise(); let pareceres = await this.processesbackend.GetTasksList("Pedido de Parecer", false).toPromise();
@@ -0,0 +1,8 @@
import { ExpedienteTaskPipe } from './expediente-task.pipe';
describe('ExpedienteTaskPipe', () => {
it('create an instance', () => {
const pipe = new ExpedienteTaskPipe();
expect(pipe).toBeTruthy();
});
});
+28
View File
@@ -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,
}
}
}
+2 -1
View File
@@ -4,10 +4,11 @@ import { SearchDocumentPipe } from './search-document.pipe';
import { CustomTaskPipe } from './custom-task.pipe'; import { CustomTaskPipe } from './custom-task.pipe';
import { EventPipe } from './event.pipe'; import { EventPipe } from './event.pipe';
import { PublicationPipe } from './publication.pipe'; import { PublicationPipe } from './publication.pipe';
import { ExpedienteTaskPipe } from './expediente-task.pipe';
@NgModule({ @NgModule({
declarations: [FilterPipe, SearchDocumentPipe, CustomTaskPipe, EventPipe, PublicationPipe], declarations: [FilterPipe, SearchDocumentPipe, CustomTaskPipe, EventPipe, PublicationPipe, ExpedienteTaskPipe],
exports: [FilterPipe], exports: [FilterPipe],
imports: [] imports: []
}) })
-2
View File
@@ -150,7 +150,6 @@ export class EventsService {
getAllMdOficialEvents(startdate:string, enddate:string): any{ getAllMdOficialEvents(startdate:string, enddate:string): any{
let geturl = environment.apiURL + 'calendar/md'; let geturl = environment.apiURL + 'calendar/md';
geturl = geturl.replace('/V4/','/V5/')
let params = new HttpParams(); let params = new HttpParams();
@@ -166,7 +165,6 @@ export class EventsService {
getAllMdPessoalEvents(startdate:string, enddate:string): any{ getAllMdPessoalEvents(startdate:string, enddate:string): any{
let geturl = environment.apiURL + 'calendar/md'; let geturl = environment.apiURL + 'calendar/md';
geturl = geturl.replace('/V4/','/V5/')
let params = new HttpParams(); let params = new HttpParams();
+10 -10
View File
@@ -41,12 +41,6 @@ export class NotificationsService {
private activeroute: ActivatedRoute, private activeroute: ActivatedRoute,
private jsonstore: JsonStore) { private jsonstore: JsonStore) {
this.callbacks.forEach(e=> {
if(e.type = 'Create Depacho') {
e.funx()
}
})
} }
@@ -222,9 +216,9 @@ export class NotificationsService {
console.log(message); console.log(message);
var data = JSON.parse(message.payload); var data = JSON.parse(message.payload);
console.log(data.Service); console.log('data.Service', data.Service); // module
console.log(data.IdObject); console.log('data.IdObject', data.IdObject); // Object id
console.log(data.Object); console.log('data.Object', data.Object); // details
if(message.actionName){ if(message.actionName){
this.notificatinsRoutes(data); this.notificatinsRoutes(data);
@@ -233,7 +227,13 @@ export class NotificationsService {
//this.notificatinsRoutes(data); //this.notificatinsRoutes(data);
console.log(data) console.log(data)
} }
this.callbacks.forEach( e=> {
if(e.type == data.Object) {
e.funx()
}
})
} }
}, (error) => { }, (error) => {
console.log('Push notification recived: failure ' + error.responseText); console.log('Push notification recived: failure ' + error.responseText);
+19
View File
@@ -6,6 +6,7 @@ import { environment } from 'src/environments/environment';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { DocumentSetUpMeeting } from '../models/CallMeeting'; import { DocumentSetUpMeeting } from '../models/CallMeeting';
import { Excludetask } from '../models/Excludetask'; import { Excludetask } from '../models/Excludetask';
import { ExpedienteFullTask } from '../models/Expediente';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@@ -38,6 +39,24 @@ export class ProcessesService {
return this.http.get<any>(`${geturl}`, options); return this.http.get<any>(`${geturl}`, options);
} }
GetTaskListExpediente(onlycount1): Observable<ExpedienteFullTask[]> {
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<ExpedienteFullTask[]>(`${geturl}`, options);
}
GetTask(serialnumber:string): Observable<any>{ GetTask(serialnumber:string): Observable<any>{
const geturl = environment.apiURL + 'Tasks/FindTask'; const geturl = environment.apiURL + 'Tasks/FindTask';
let params = new HttpParams(); let params = new HttpParams();
@@ -1,9 +1,8 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { customTask, DailyWorkTask, fullTask } from '../../../models/dailyworktask.model'; import { customTask } from '../../../models/dailyworktask.model';
import { ProcessesService } from 'src/app/services/processes.service';
import { NavigationStart, Router } from '@angular/router'; import { NavigationStart, Router } from '@angular/router';
import { DespachoStore } from 'src/app/store/despacho-store.service'; import { DespachoStore } from 'src/app/store/despacho-store.service';
import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe'; import { DespachoService } from 'src/app/Rules/despacho.service';
@Component({ @Component({
selector: 'app-despachos', selector: 'app-despachos',
@@ -12,16 +11,11 @@ import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe';
}) })
export class DespachosPage implements OnInit { export class DespachosPage implements OnInit {
segment:string;
@Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>();
skeletonLoader = true
despachoStore = DespachoStore; despachoStore = DespachoStore;
customTaskPipe = new CustomTaskPipe()
constructor ( constructor (
private processes:ProcessesService,
private router: Router, private router: Router,
private despachoRule: DespachoService
) {} ) {}
ngOnInit() { ngOnInit() {
@@ -45,30 +39,11 @@ export class DespachosPage implements OnInit {
async LoadList() { async LoadList() {
this.skeletonLoader = true await this.despachoRule.getList({updateStore: 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
} }
sortArrayISODate(myArray: any) { get skeletonLoader(): boolean {
return myArray.sort(function(a, b) { return this.despachoRule.LoaderService.loading
return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0);
});
} }
doRefresh() { doRefresh() {
@@ -13,10 +13,10 @@
<div class="width-100 overflow-y-auto height-100" > <div class="width-100 overflow-y-auto height-100" >
<ion-progress-bar type="indeterminate" *ngIf="skeletonLoader"></ion-progress-bar> <ion-progress-bar type="indeterminate" *ngIf="skeletonLoader"></ion-progress-bar>
<ion-list *ngIf="expedienteprstore.list.length >= 1"> <ion-list *ngIf="expedienteGdStore.list.length >= 1">
<div <div
class="expediente ion-no-padding ion-no-margin cursor-pointer" class="expediente ion-no-padding ion-no-margin cursor-pointer"
*ngFor = "let task of expedienteprstore.list" *ngFor = "let task of expedienteGdStore.list"
(click)="goToExpediente(task.SerialNumber)" (click)="goToExpediente(task.SerialNumber)"
> >
<div class="item width-100"> <div class="item width-100">
@@ -48,13 +48,13 @@
<div <div
*ngIf="!skeletonLoader && expedienteprstore.list.length == 0 && expedienteprstore.list.length == 0" *ngIf="!skeletonLoader && expedienteGdStore.list.length == 0 && expedienteGdStore.list.length == 0"
class="empty-list d-flex height-100 align-center justify-content-center" class="empty-list d-flex height-100 align-center justify-content-center"
> >
<span>Lista vazia</span> <span>Lista vazia</span>
</div> </div>
<div *ngIf="skeletonLoader && expedienteprstore.list.length == 0"> <div *ngIf="skeletonLoader && expedienteGdStore.list.length == 0">
<ion-list> <ion-list>
<ion-item> <ion-item>
@@ -6,8 +6,9 @@ import { ModalController } from '@ionic/angular';
import { AlertService } from 'src/app/services/alert.service'; import { AlertService } from 'src/app/services/alert.service';
import { User } from 'src/app/models/user.model'; import { User } from 'src/app/models/user.model';
import { AuthService } from 'src/app/services/auth.service'; 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 { 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({ @Component({
selector: 'app-expedientes-pr', selector: 'app-expedientes-pr',
@@ -16,11 +17,12 @@ import { CustomTaskPipe } from 'src/app/pipes/custom-task.pipe';
}) })
export class ExpedientesPrPage implements OnInit { export class ExpedientesPrPage implements OnInit {
taskslist:DailyWorkTask[] = []; taskslist = [];
serialNumber:string; serialNumber:string;
skeletonLoader = true; skeletonLoader = true;
expedienteprstore = ExpedienteprStore; expedienteGdStore = ExpedienteGdStore;
customTaskPipe = new CustomTaskPipe() customTaskPipe = new CustomTaskPipe()
expedienteTaskPipe = new ExpedienteTaskPipe()
loggeduser: User; loggeduser: User;
@Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>(); @Output() openExpedientDetail:EventEmitter<any> = new EventEmitter<any>();
@@ -62,15 +64,15 @@ export class ExpedientesPrPage implements OnInit {
LoadList() { LoadList() {
this.skeletonLoader = true; this.skeletonLoader = true;
this.processes.GetTasksList("Expediente", false).subscribe(result => { this.processes.GetTaskListExpediente(false).subscribe(result => {
this.taskslist = []; this.taskslist = [];
let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active");
res.forEach(element => { res.forEach(element => {
let task: customTask = this.customTaskPipe.transform(element); let task = this.expedienteTaskPipe.transform(element);
this.taskslist.push(task); this.taskslist.push(task);
}); });
this.expedienteprstore.reset(this.taskslist); this.expedienteGdStore.reset(this.taskslist);
this.skeletonLoader = false; this.skeletonLoader = false;
}); });
@@ -30,7 +30,7 @@
<div class="item width-100"> <div class="item width-100">
<div class="exp-top-detail"> <div class="exp-top-detail">
<div class="subject"> <div class="subject">
<ion-label>{{ task.Folio }}</ion-label> <ion-label>{{ task.Subject }}</ion-label>
</div> </div>
<div class="exp-icon"> <div class="exp-icon">
<ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon> <ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon>
@@ -1,15 +1,9 @@
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { ActivatedRoute, NavigationEnd, NavigationExtras, NavigationStart, Router } from '@angular/router'; import { NavigationStart, Router } from '@angular/router';
import { CalendarComponent } from 'ionic2-calendar';
import { DailyWorkTask } from '../../../models/dailyworktask.model';
import { ProcessesService } from 'src/app/services/processes.service'; 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 { AlertService } from 'src/app/services/alert.service';
import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe';
@Component({ @Component({
selector: 'app-expedients', selector: 'app-expedients',
@@ -18,23 +12,20 @@ import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
}) })
export class ExpedientsPage implements OnInit { export class ExpedientsPage implements OnInit {
segment:string; segment:string;
//profile:string;
@ViewChild(CalendarComponent) myCal: CalendarComponent; taskslist = [];
taskslist:DailyWorkTask[] = [];
serialNumber:string; serialNumber:string;
@Input() profile:string; @Input() profile:string;
skeletonLoader = true skeletonLoader = true
expedientegbstore = ExpedienteGdStore expedientegbstore = ExpedienteGdStore
expedienteTaskPipe = new ExpedienteTaskPipe()
constructor( constructor(
private processes:ProcessesService, private processes:ProcessesService,
private modalController: ModalController,
private alertService: AlertService, private alertService: AlertService,
private router: Router, private router: Router,
private activatedRoute: ActivatedRoute,
) { ) {
this.profile = 'mdgpr'; this.profile = 'mdgpr';
@@ -58,11 +49,11 @@ export class ExpedientsPage implements OnInit {
} }
segmentChanged(){ segmentChanged() {
this.LoadList(); this.LoadList();
} }
notImplemented(){ notImplemented() {
this.alertService.presentAlert('Funcionalidade em desenvolvimento'); this.alertService.presentAlert('Funcionalidade em desenvolvimento');
} }
@@ -70,31 +61,17 @@ export class ExpedientsPage implements OnInit {
this.skeletonLoader = true this.skeletonLoader = true
this.processes.GetTasksList("Expediente", false).subscribe(result => { this.processes.GetTaskListExpediente(false).subscribe(result => {
this.taskslist = []; this.taskslist = [];
this.skeletonLoader = false this.skeletonLoader = false
let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); let res = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active");
res.forEach(element => { res.forEach(element => {
let date = new Date(element.taskStartDate); let task = this.expedienteTaskPipe.transform(element)
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); this.taskslist.push(task);
}); });
console.log("Buffer store", this.taskslist)
this.expedientegbstore.reset(this.taskslist); this.expedientegbstore.reset(this.taskslist);
}); });
} }
@@ -20,7 +20,6 @@ export class PedidosPage implements OnInit {
@ViewChild(CalendarComponent) myCal: CalendarComponent; @ViewChild(CalendarComponent) myCal: CalendarComponent;
taskslist:DailyWorkTask[] = [];
parecerList:any[] = []; parecerList:any[] = [];
fulltask:any; fulltask:any;
@@ -100,7 +99,6 @@ export class PedidosPage implements OnInit {
this.taskType = "Pedido de Deferimento"; this.taskType = "Pedido de Deferimento";
this.processes.GetTasksList("Pedido de Deferimento", false).subscribe(result => { this.processes.GetTasksList("Pedido de Deferimento", false).subscribe(result => {
this.taskslist = result.filter(data => data.workflowInstanceDataFields.Status == "Active")
this.skeletonLoader = false this.skeletonLoader = false
this.deferimentoList = new Array(); this.deferimentoList = new Array();
@@ -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();
});
});
@@ -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()
@@ -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();
});
});
@@ -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()
+2 -1
View File
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { localstoreService } from './localstore.service' import { localstoreService } from './localstore.service'
import { AES, enc, SHA1 } from 'crypto-js' import { AES, enc, SHA1 } from 'crypto-js'
import { ExpedienteTask } from '../models/dailyworktask.model';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@@ -8,7 +9,7 @@ import { AES, enc, SHA1 } from 'crypto-js'
export class ExpedientegdStoreService { export class ExpedientegdStoreService {
// main data // main data
private _list = [] private _list: ExpedienteTask[] = []
// local storage keyName // local storage keyName
private keyName: string; private keyName: string;
private _count = 0 private _count = 0
@@ -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();
});
});
@@ -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()
+16
View File
@@ -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();
});
});
+28
View File
@@ -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()
}
}
+1 -5
View File
@@ -3,11 +3,7 @@
<g stroke="#797979" stroke-width="2"> <g stroke="#797979" stroke-width="2">
<g> <g>
<g> <g>
<g transform="translate(-262 -740) translate(0 740) translate(246) translate(16)"> <path d="M20 8.136l12 6.461V30c0 .552-.224 1.052-.586 1.414-.362.362-.862.586-1.414.586h0-5v-5c0-.788-.304-1.505-.8-2.04-.51-.549-1.222-.906-2.017-.954h0L18 24c-.788 0-1.505.304-2.04.8-.549.51-.906 1.222-.954 2.017h0L15 32H10c-.552 0-1.052-.224-1.414-.586C8.224 31.052 8 30.552 8 30h0V14.597l12-6.461z" transform="translate(-16 -740) translate(0 740) translate(16)"/>
<path d="M20.5 34.5c5.523 0 10.5-.977 10.5-6.5s-4.477-10-10-10-10 4.477-10 10 3.977 6.5 9.5 6.5z"/>
<circle cx="21" cy="12" r="6"/>
<path stroke-linejoin="round" d="M23.423 19.064v16m-4.773 2.561l.354-19" transform="rotate(45 21.125 28.125)"/>
</g>
</g> </g>
</g> </g>
</g> </g>

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 661 B