2023-04-12 09:01:03 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
|
import { momentG } from 'src/plugin/momentG';
|
2023-04-17 16:00:30 +01:00
|
|
|
import { ProcessesService } from 'src/app/services/processes.service';
|
2023-04-17 14:11:30 +01:00
|
|
|
import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
|
|
|
|
|
import { DeplomasStore } from 'src/app/store/deplomas.service';
|
|
|
|
|
import { PendentesStore } from 'src/app/store/pendestes-store.service';
|
|
|
|
|
import { DespachoStore } from 'src/app/store/despacho-store.service';
|
|
|
|
|
import { TotalDocumentStore } from 'src/app/store/total-document.service';
|
|
|
|
|
import { DespachosprStore } from 'src/app/store/despachospr-store.service';
|
|
|
|
|
import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.service';
|
|
|
|
|
import { PedidosStore } from 'src/app/store/pedidos-store.service';
|
2023-04-17 16:00:30 +01:00
|
|
|
import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe';
|
|
|
|
|
import { DespachoService } from 'src/app/Rules/despacho.service';
|
|
|
|
|
import { CustomTaskPipe } from '../pipes/custom-task.pipe';
|
|
|
|
|
import { SessionStore } from 'src/app/store/session.service';
|
|
|
|
|
import { EventsService } from './events.service';
|
|
|
|
|
import { SortService } from './functions/sort.service';
|
2023-04-20 13:36:59 +01:00
|
|
|
import { customTask } from '../models/dailyworktask.model';
|
2023-04-12 09:01:03 +01:00
|
|
|
|
|
|
|
|
@Injectable({
|
|
|
|
|
providedIn: 'root'
|
|
|
|
|
})
|
|
|
|
|
export class TaskService {
|
|
|
|
|
|
2023-04-17 14:11:30 +01:00
|
|
|
|
|
|
|
|
read = 0
|
|
|
|
|
unread = 0
|
|
|
|
|
deadline = 0
|
|
|
|
|
new = 0
|
|
|
|
|
overdueTasks = 0
|
|
|
|
|
|
|
|
|
|
expedientegbstore = ExpedienteGdStore;
|
|
|
|
|
pendentesstore = PendentesStore;
|
|
|
|
|
despachoStore = DespachoStore;
|
|
|
|
|
eventoaprovacaostore = EventoAprovacaoStore;
|
|
|
|
|
pedidosstore = PedidosStore;
|
|
|
|
|
despachoprstore = DespachosprStore;
|
|
|
|
|
totalDocumentStore = TotalDocumentStore
|
|
|
|
|
deplomasStore = DeplomasStore
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
SessionStore = SessionStore
|
2023-04-17 14:11:30 +01:00
|
|
|
|
|
|
|
|
AllProcess = []
|
2023-04-17 16:00:30 +01:00
|
|
|
showLoader: boolean = false
|
|
|
|
|
loadCount = false
|
|
|
|
|
loadNum = 0
|
2023-04-17 14:11:30 +01:00
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
expedienteTaskPipe = new ExpedienteTaskPipe();
|
|
|
|
|
customTaskPipe = new CustomTaskPipe()
|
|
|
|
|
|
2023-04-20 11:45:46 +01:00
|
|
|
callbacks: {
|
|
|
|
|
[key: string]: {
|
|
|
|
|
funx: Function
|
|
|
|
|
id: string
|
|
|
|
|
}
|
|
|
|
|
} = {}
|
|
|
|
|
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
constructor(
|
|
|
|
|
private processesbackend: ProcessesService,
|
|
|
|
|
private despachoRule: DespachoService,
|
|
|
|
|
public eventService: EventsService,
|
|
|
|
|
private sortService: SortService,
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
window['all-process-gabinete'] = () => {
|
|
|
|
|
this.updateCount()
|
|
|
|
|
this.updateAllProcess()
|
|
|
|
|
}
|
2023-04-20 13:36:59 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
this.updateAllProcess()
|
|
|
|
|
this.updateCount()
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
}
|
2023-04-12 09:01:03 +01:00
|
|
|
|
2023-04-20 11:45:46 +01:00
|
|
|
registerCallback({funx, id}) {
|
|
|
|
|
this.callbacks[id] = { funx, id}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
runCallback() {
|
|
|
|
|
for (const [key, value] of Object.entries(this.callbacks)) {
|
|
|
|
|
value.funx()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-04-12 09:01:03 +01:00
|
|
|
deadlineIsToday(isoDateString:string) {
|
2023-04-13 12:51:38 +01:00
|
|
|
|
|
|
|
|
if(!isoDateString) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
2023-04-12 09:01:03 +01:00
|
|
|
return momentG(new Date(), 'dd MMMM yyyy') == momentG(new Date(isoDateString), 'dd MMMM yyyy')
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-17 14:11:30 +01:00
|
|
|
overdueTask(isoDateString:string) {
|
2023-04-17 17:23:26 +01:00
|
|
|
return (new Date()).getTime() > (new Date(isoDateString)).getTime()
|
2023-04-17 14:11:30 +01:00
|
|
|
}
|
|
|
|
|
|
2023-04-12 09:01:03 +01:00
|
|
|
lessThen24Hours(isoDateString:string) {
|
2023-04-13 12:51:38 +01:00
|
|
|
|
|
|
|
|
if(!isoDateString) {
|
2023-04-19 09:18:25 +01:00
|
|
|
return false
|
2023-04-13 12:51:38 +01:00
|
|
|
}
|
|
|
|
|
|
2023-04-12 09:01:03 +01:00
|
|
|
const creationDate = new Date(isoDateString)
|
2023-04-21 16:26:13 +01:00
|
|
|
return momentG(new Date(), 'dd MMMM yyyy') == momentG(new Date(creationDate), 'dd MMMM yyyy')
|
2023-04-12 09:01:03 +01:00
|
|
|
}
|
2023-04-12 14:39:26 +01:00
|
|
|
|
|
|
|
|
filter(item, attribute) {
|
|
|
|
|
if(attribute == 'Para hoje') {
|
2023-04-18 16:50:25 +01:00
|
|
|
return this.deadlineIsToday(item.Deadline || item.deadline)
|
2023-04-12 14:39:26 +01:00
|
|
|
} else if (attribute == 'Novos') {
|
2023-04-18 09:37:41 +01:00
|
|
|
return this.lessThen24Hours(item.TaskReceiveDate || item.taskReceiveDate)
|
2023-04-12 14:39:26 +01:00
|
|
|
} else if (attribute == 'Lidos') {
|
2023-04-13 16:15:46 +01:00
|
|
|
return item.TaskStatus == 'Open' || item.taskStatus == 'Open'
|
2023-04-12 14:39:26 +01:00
|
|
|
} else if (attribute == 'Não lidos') {
|
2023-04-14 22:53:29 +01:00
|
|
|
return !(item.TaskStatus == 'Open' || item.taskStatus == 'Open')
|
2023-04-17 14:11:30 +01:00
|
|
|
} else if (attribute == 'OverdueTasks') {
|
|
|
|
|
return this.overdueTask(item.Deadline || item.deadline)
|
2023-04-12 14:39:26 +01:00
|
|
|
}
|
|
|
|
|
return true
|
|
|
|
|
}
|
2023-04-13 16:15:46 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
seen(item) {
|
|
|
|
|
return item.TaskStatus == 'Open' || item.taskStatus == 'Open'
|
|
|
|
|
}
|
2023-04-17 14:11:30 +01:00
|
|
|
|
|
|
|
|
updateAllProcess = () => {
|
2023-04-28 12:56:45 +01:00
|
|
|
this.AllProcess = this.sortArrayISODate(this.despachoprstore.list.concat(this.deplomasStore.diplomasAssinadoList as any).concat(this.deplomasStore.diplomasParaAssinarList as any).concat(this.deplomasStore.DiplomaGerarList as any).concat(this.deplomasStore.diplomasReviewList)
|
2023-04-17 14:11:30 +01:00
|
|
|
.concat(this.eventoaprovacaostore.contactList as any).concat(this.expedientegbstore.list as any).concat(this.despachoStore.list as any).concat(this.pedidosstore.listparecer as any).concat(this.pedidosstore.listdeferimento as any)
|
|
|
|
|
.concat(this.pendentesstore.list as any)).reverse()
|
2023-04-20 11:45:46 +01:00
|
|
|
|
|
|
|
|
this.runCallback();
|
2023-04-17 14:11:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sortArrayISODate(myArray: any): any[] {
|
|
|
|
|
|
|
|
|
|
return myArray.sort((a,b) => Date.parse(b.CreateDate || b.taskStartDate || b.TaskStartDate) - Date.parse(a.CreateDate || a.taskStartDate || a.TaskStartDate))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
updateCount = () => {
|
2023-04-17 14:11:30 +01:00
|
|
|
this.read = this.AllProcess.filter((item) => this.filter(item,'Lidos')).length
|
|
|
|
|
this.unread = this.AllProcess.filter((item) => this.filter(item,'Não lidos')).length
|
|
|
|
|
this.deadline = this.AllProcess.filter((task) => this.deadlineIsToday(task.Deadline || task.deadline)).length
|
2023-04-18 16:50:25 +01:00
|
|
|
this.new = this.AllProcess.filter((task) => this.lessThen24Hours(task.TaskReceiveDate || task.taskReceiveDate)).length
|
2023-04-17 14:11:30 +01:00
|
|
|
this.overdueTasks = this.AllProcess.filter((task) => this.overdueTask(task.Deadline || task.deadline)).length
|
|
|
|
|
}
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async LoadTask() {
|
|
|
|
|
|
|
|
|
|
this.showLoader = true
|
|
|
|
|
|
|
|
|
|
try {
|
2023-04-20 13:36:59 +01:00
|
|
|
await this.loadExpedientes()
|
2023-04-17 16:00:30 +01:00
|
|
|
this.loadCount = true;
|
|
|
|
|
this.showLoader = false;
|
|
|
|
|
} catch(error) {
|
|
|
|
|
this.showLoader = false
|
|
|
|
|
this.loadCount = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.loadNum++;
|
2023-04-20 13:36:59 +01:00
|
|
|
await this.loadDespachos();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await this.loadPedidos()
|
|
|
|
|
await this.loadPendestes()
|
|
|
|
|
|
|
|
|
|
await this.loadDiplomas()
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
|
|
|
|
|
await this.loadEventosParaAprovacao()
|
|
|
|
|
this.loadCount = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async loadDespachos() {
|
|
|
|
|
let despachos = await this.despachoRule.getList({ updateStore: true })
|
|
|
|
|
if (despachos) {
|
|
|
|
|
this.despachoStore.reset(despachos)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async loadExpedientes() {
|
|
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
try {
|
|
|
|
|
let expedientes;
|
|
|
|
|
expedientes = await this.processesbackend.GetTaskListExpediente(false).toPromise()
|
|
|
|
|
|
|
|
|
|
expedientes = (expedientes || [] ).filter(data => data.workflowInstanceDataFields.Status == "" || data.workflowInstanceDataFields.Status == "Active")
|
|
|
|
|
|
|
|
|
|
expedientes = expedientes.filter((item) => {
|
|
|
|
|
return item.activityInstanceName != 'Retificar Expediente'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expedientes = expedientes.map((element) => this.expedienteTaskPipe.transform(element));
|
|
|
|
|
|
|
|
|
|
this.expedientegbstore.reset(expedientes);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
|
|
}
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
async loadPedidos() {
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
try {
|
|
|
|
|
let pareceres = await this.processesbackend.GetTasksList("Pedido de Parecer", false).toPromise();
|
|
|
|
|
let pareceresPr = await this.processesbackend.GetTasksList("Pedido de Parecer do Presidente", false).toPromise();
|
|
|
|
|
|
|
|
|
|
let allParecer = pareceres.concat(pareceresPr);
|
|
|
|
|
|
|
|
|
|
this.pedidosstore.countparecer = Object.keys(allParecer.filter(data => data.workflowInstanceDataFields.Status == "Active")).length;
|
|
|
|
|
|
|
|
|
|
this.pedidosstore.resetparecer(allParecer.filter(data => data.workflowInstanceDataFields.Status == "Active").map((element) => {
|
|
|
|
|
return this.customTaskPipe.transform(element)
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
let deferimentos = await this.processesbackend.GetTasksList("Pedido de Deferimento", false).toPromise();
|
|
|
|
|
this.pedidosstore.countdeferimento = Object.keys(deferimentos.filter(data => data.workflowInstanceDataFields.Status == "Active")).length
|
|
|
|
|
this.pedidosstore.resetdeferimento(deferimentos.filter(data => data.workflowInstanceDataFields.Status == "Active").map((element) => {
|
|
|
|
|
return this.customTaskPipe.transform(element)
|
|
|
|
|
}));
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
|
|
}
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
async loadPendestes() {
|
2023-04-25 10:04:32 +01:00
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
let pendentes = await this.processesbackend.GetPendingTasks(false).toPromise();
|
|
|
|
|
this.pendentesstore.count = Object.keys(pendentes).length;
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
pendentes = pendentes.map((element)=> this.customTaskPipe.transform(element))
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
this.pendentesstore.reset(pendentes);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async loadEventosParaAprovacao() {
|
2023-04-25 10:04:32 +01:00
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
for(let calendar of this.eventService.calendarNamesAry) {
|
|
|
|
|
if(calendar == 'Meu calendario') {
|
|
|
|
|
// color
|
|
|
|
|
let genericEvents = await this.processesbackend.GetTasksList('Agendar Evento', false).toPromise();
|
|
|
|
|
let eventsList
|
|
|
|
|
try {
|
|
|
|
|
eventsList = this.sortService.sortArrayByDate(genericEvents).reverse();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
eventsList = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.eventoaprovacaostore.save(calendar, eventsList)
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
let allEvents = await this.processesbackend.eventsToApprove(calendar.OwnerUserId, 'againete page').toPromise()
|
|
|
|
|
let eventsList
|
|
|
|
|
try {
|
|
|
|
|
eventsList = this.sortService.sortArrayByDate(allEvents).reverse();
|
|
|
|
|
} catch(error) {
|
|
|
|
|
eventsList = []
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.eventoaprovacaostore.save(calendar.OwnerUserId, eventsList)
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
|
|
|
|
}
|
2023-04-25 10:04:32 +01:00
|
|
|
} catch (error) {
|
|
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
2023-04-25 10:04:32 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
async loadDiplomas() {
|
|
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
let depachoAPI = await this.processesbackend.GetTasksList("Despacho do Presidente da República", false).toPromise();
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
if(SessionStore.user.Profile != 'PR') {
|
|
|
|
|
|
|
|
|
|
let depacho: any = depachoAPI.reverse().filter(data => data.activityInstanceName == "Tarefa de Despacho");
|
|
|
|
|
depacho = depacho.filter(data => data.workflowInstanceDataFields.Status == "Active");
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
depacho = depacho.map((e)=> this.customTaskPipe.transform(e))
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
this.despachoprstore.reset(depacho)
|
|
|
|
|
|
|
|
|
|
} else if(SessionStore.user.Profile == 'PR') {
|
|
|
|
|
|
|
|
|
|
let depacho: any = depachoAPI.filter(data => data.activityInstanceName == "Concluir Despacho").filter(data => data.workflowInstanceDataFields.Status == "Active")
|
|
|
|
|
depacho = depacho.map((e)=> this.customTaskPipe.transform(e))
|
|
|
|
|
this.despachoprstore.reset(depacho)
|
|
|
|
|
|
|
|
|
|
}
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-20 13:36:59 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
let gerarDiploma = depachoAPI.reverse().filter(data => data.activityInstanceName == "Gerar Diploma" || data.activityInstanceName == "Retificar Diploma");
|
|
|
|
|
let diplomasList = []
|
2023-04-20 13:36:59 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
gerarDiploma.forEach(element => {
|
|
|
|
|
let task: customTask = this.customTaskPipe.transform(element);
|
|
|
|
|
diplomasList.push(task);
|
|
|
|
|
});
|
2023-04-20 13:36:59 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
diplomasList = this.sortService.sortDate(diplomasList, 'CreateDate')
|
|
|
|
|
this.deplomasStore.resetDiplomaGerar(diplomasList);
|
|
|
|
|
|
2023-04-20 11:45:46 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
let diplomasValidar = depachoAPI.filter(data => data.activityInstanceName == "Revisar Diploma");
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
diplomasValidar = diplomasValidar.filter(data => data.activityInstanceName != "Tarefa de Despacho");
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
this.deplomasStore.resetDiplomasReview(diplomasValidar.map((element)=> {
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
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();
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
return this.customTaskPipe.transform(element)
|
|
|
|
|
}))
|
2023-04-17 16:00:30 +01:00
|
|
|
|
|
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
let diplomasAssinar: any = depachoAPI.filter(data => data.activityInstanceName == "Assinar Diploma");
|
|
|
|
|
diplomasAssinar = diplomasAssinar.map((element) => this.expedienteTaskPipe.transform(element))
|
|
|
|
|
this.sortService.sortDate(diplomasAssinar, 'CreateDate')
|
|
|
|
|
this.deplomasStore.resetDiplomasParaAssinar(diplomasAssinar)
|
2023-04-17 16:00:30 +01:00
|
|
|
|
2023-04-25 10:04:32 +01:00
|
|
|
let diplomasAssinados: any = depachoAPI.filter(data => data.activityInstanceName == "Diploma Assinado");
|
|
|
|
|
diplomasAssinados = diplomasAssinados.map((element) => this.expedienteTaskPipe.transform(element))
|
|
|
|
|
this.deplomasStore.resetDiplomasAssinadoList(diplomasAssinados)
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-17 16:00:30 +01:00
|
|
|
}
|
2023-04-12 09:01:03 +01:00
|
|
|
}
|