import { Component, OnInit } from '@angular/core'; import { ProcessesService } from 'src/app/services/processes.service'; import { AttachmentsService } from 'src/app/services/attachments.service'; import { EventsService } from 'src/app/services/events.service'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; import { fullTask } from '../../../../models/dailyworktask.model'; import { ActivatedRoute, Router } from '@angular/router'; import { Event } from '../../../../models/event.model'; import { MenuController, ModalController, PopoverController } from '@ionic/angular'; import { momentG } from 'src/plugin/momentG' import { DiscartExpedientModalPage } from '../../discart-expedient-modal/discart-expedient-modal.page'; import { BookMeetingModalPage } from '../../expediente/book-meeting-modal/book-meeting-modal.page'; import { CreateProcessPage } from 'src/app/modals/create-process/create-process.page'; import { DelegarPage } from 'src/app/modals/delegar/delegar.page'; import { AddNotePage } from 'src/app/modals/add-note/add-note.page'; import { DespachosPrOptionsPage } from 'src/app/shared/popover/despachos-pr-options/despachos-pr-options.page'; import { ToastService } from 'src/app/services/toast.service'; import { Location } from '@angular/common' import { DespachoService } from 'src/app/Rules/despacho.service'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; import { Platform } from '@ionic/angular'; import { SqliteService } from 'src/app/services/sqlite.service'; import { BackgroundService } from 'src/app/services/background.service'; import { ThemeService } from 'src/app/services/theme.service' import { RouteService } from 'src/app/services/route.service'; import { PermissionService } from 'src/app/services/permission.service'; @Component({ selector: 'app-despacho-pr', templateUrl: './despacho-pr.page.html', styleUrls: ['./despacho-pr.page.scss'], }) export class DespachoPrPage implements OnInit { months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; days = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"]; customDate: any; task: any; fulltask: any; eventsList: Event[]; serialNumber: string; caller: string; profile: string; intervenientes: any =[] cc: any = []; constructor( private activateRoute: ActivatedRoute, private processes: ProcessesService, private iab: InAppBrowser, private attachmentsService: AttachmentsService, private events: EventsService, private menu: MenuController, private router: Router, private modalController: ModalController, public popoverController: PopoverController, private activatedRoute: ActivatedRoute, private toastService: ToastService, private location: Location, private despachoService: DespachoService, private sqliteservice: SqliteService, private backgroundservice: BackgroundService, private platform: Platform, public ThemeService: ThemeService, private RouteService: RouteService, public p: PermissionService, ) { this.activatedRoute.paramMap.subscribe(params => { if (params["params"].SerialNumber) { this.serialNumber = params["params"].SerialNumber; } if (params["params"].caller) { this.caller = params["params"].caller; } }); } ngOnInit() { this.profile = "mdgpr"; this.activateRoute.paramMap.subscribe(paramMap => { if (!paramMap.has('SerialNumber')) { return; } /* this.serialNumber = paramMap.get('SerialNumber'); */ this.LoadTaskDetail(this.serialNumber); // this.LoadRelatedEvents(this.serialNumber); }); this.LoadTaskDetail(this.serialNumber); // this.LoadRelatedEvents(this.serialNumber); this.backgroundservice.registerBackService('Online', () => { this.LoadTaskDetail(this.serialNumber); }); } close() { this.goBack() } goBack() { this.RouteService.goBack(); } async LoadTaskDetail(serial: string) { this.processes.GetTask(serial).subscribe((res: fullTask) => { this.task = { "SerialNumber": res.serialNumber, "Folio": res.workflowInstanceDataFields.Subject, "Senders": res.originator.email, "CreateDate": momentG(new Date(res.taskStartDate), 'yyyy-MM-dd HH:mm:ss'), "DocumentURL": res.workflowInstanceDataFields.ViewerRequest, "Remetente": res.workflowInstanceDataFields.Sender, "Note": res.workflowInstanceDataFields.TaskMessage || res.workflowInstanceDataFields.Note, "FolderId": res.workflowInstanceDataFields.FolderID, "FsId": '361', "DocId": res.workflowInstanceDataFields.DispatchDocId, "WorkflowName": res.workflowDisplayName, "DeadlineType": res.workflowInstanceDataFields.DeadlineType, "activityInstanceName": res.activityInstanceName, } this.fulltask = res; this.updateProcessOnDB(res); let thedate = new Date(this.task.CreateDate); this.customDate = this.days[thedate.getDay()] + ", " + thedate.getDate() + " de " + (this.months[thedate.getMonth()]); this.processes.GetTaskParticipants(this.task.FolderId).subscribe(users => { this.updateProcessInterveners(users) this.intervenientes = users.filter(user => { return user.Type == 'I'; }); this.cc = users.filter(user => { return user.Type == 'CC'; }) || [] if (!this.cc) { this.cc = [] } }); }, (error) => { if (error.status == 0) { this.getFromDB() } else { try { this.goBack() } catch (e) { window.history.back(); } this.toastService._badRequest('Processo não encontrado') } }); } updateProcessOnDB(res) { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { } else { this.sqliteservice.updateProcess(res); } } updateProcessInterveners(users) { if (this.platform.is('desktop') || this.platform.is('mobileweb')) { } else { this.sqliteservice.updateProcessInterveners(JSON.stringify(this.serialNumber), JSON.stringify(users)) } } getFromDB() { this.sqliteservice.getProcessById(this.serialNumber).then((process: any[]) => { this.task = { "SerialNumber": process[0].serialNumber, "Folio": JSON.parse(process[0].workflowInstanceDataFields).Subject, "Senders": JSON.parse(process[0].originator).email, "CreateDate": momentG(new Date(process[0].taskStartDate), 'yyyy-MM-dd HH:mm:ss'), "DocumentURL": JSON.parse(process[0].workflowInstanceDataFields).ViewerRequest, "Remetente": JSON.parse(process[0].workflowInstanceDataFields).Sender, "Note": JSON.parse(process[0].workflowInstanceDataFields).TaskMessage || JSON.parse(process[0].workflowInstanceDataFields).Note, "FolderId": JSON.parse(process[0].workflowInstanceDataFields).FolderID, "FsId": '361', "DocId": JSON.parse(process[0].workflowInstanceDataFields).DispatchDocId, "WorkflowName": process[0].workflowDisplayName, "DeadlineType": JSON.parse(process[0].workflowInstanceDataFields).DeadlineType, "activityInstanceName": process[0].activityInstanceName, } let fulltak = { Documents: JSON.parse(process[0].Documents), actions: JSON.parse(process[0].actions), activityInstanceName: process[0].activityInstanceName, formURL: process[0].formURL, originator: JSON.parse(process[0].originator), serialNumber: process[0].serialNumber, taskStartDate: process[0].taskStartDate, totalDocuments: process[0].totalDocuments, workflowDisplayName: process[0].workflowDisplayName, workflowID: process[0].workflowID, workflowInstanceDataFields: JSON.parse(process[0].workflowInstanceDataFields), workflowInstanceFolio: process[0].workflowInstanceFolio, workflowInstanceID: process[0].workflowInstanceID, workflowName: process[0].workflowName } this.fulltask = fulltak; let thedate = new Date(this.task.CreateDate); this.customDate = this.days[thedate.getDay()] + ", " + thedate.getDate() + " de " + (this.months[thedate.getMonth()]); this.intervenientes = JSON.parse(process[0].interveners).filter(user => { return user.Type == 'I'; }); this.cc = JSON.parse(process[0].interveners).filter(user => { return user.Type == 'CC'; }); }) } async viewDocument(DocId: string, Document) { const modal = await this.modalController.create({ component: ViewDocumentPage, componentProps: { trustedUrl: '', file: { title: Document.Assunto, url: '', title_link: '', }, Document, applicationId: Document.ApplicationId, docId: Document.DocId || Document.SourceId, folderId: this.task.FolderId, task: this.fulltask }, cssClass: 'modal modal-desktop' }); await modal.present(); } openMenu() { this.menu.open(); this.modalController.dismiss(); } async executado(note: string, documents: any) { let body = { "serialNumber": this.serialNumber, "action": "Conhecimento", "ActionTypeId": 104, "dataFields": { "ReviewUserComment": note, }, "AttachmentList": documents, } const loader = this.toastService.loading() try { await this.processes.CompleteTask(body).toPromise() this.toastService._successMessage() } catch (error) { this.toastService._badRequest() } finally { loader.remove() } } async arquivar(note: string, documents: any) { let body = { "serialNumber": this.serialNumber, "action": "Arquivo", "ActionTypeId": 95, "dataFields": { "ReviewUserComment": note, }, "AttachmentList": documents, } const loader = this.toastService.loading() try { await this.processes.CompleteTask(body).toPromise() this.toastService._successMessage('Processo arquivado') } catch (error) { this.toastService._badRequest('Processo não arquivado') } finally { loader.remove() } } async generateDiploma(note: string, documents: any) { const loader = this.toastService.loading() try { await this.despachoService.generateDiploma({ serialnumber: this.serialNumber, note, documents }).toPromise() this.toastService._successMessage('Processo criado') } catch (error) { this.toastService._badRequest('Processo não criado') } finally { loader.remove() } } async concluir(note: string, documents: any) { let body = { "serialNumber": this.serialNumber, "action": "Executado", "ActionTypeId": 104, "dataFields": { "ReviewUserComment": note, }, "AttachmentList": documents, } const loader = this.toastService.loading() try { await this.processes.CompleteTask(body).toPromise() this.toastService._successMessage('') } catch (error) { this.toastService._badRequest() } finally { loader.remove() } } async reexecutar(note: string, documents: any) { let body = { "serialNumber": this.serialNumber, "action": "Reexecução", "ActionTypeId": 100000010, "dataFields": { "ReviewUserComment": note, }, "AttachmentList": documents, } const loader = this.toastService.loading() try { await this.processes.CompleteTask(body).toPromise() this.toastService._successMessage() } catch (error) { this.toastService._badRequest() } finally { loader.remove() } } toDateString(e) { return new Date(e).toDateString() } sendExpedienteToPending() { const loader = this.toastService.loading() this.processes.SetTaskToPending(this.serialNumber).subscribe(res => { this.popoverController.dismiss('close') this.toastService._successMessage('Processo enviado para pendentes') this.goBack() loader.remove() }, () => { loader.remove() this.toastService._badRequest('Processo não encontrado') }); } async openAddNoteModal(actionName: string) { let classs; if (window.innerWidth <= 800) { classs = 'modal modal-desktop' } else { classs = 'add-note-modal-no-height' } const modal = await this.modalController.create({ component: AddNotePage, componentProps: { showAttachmentBtn: true, }, cssClass: classs, backdropDismiss: true }); await modal.present(); modal.onDidDismiss().then(async (res) => { if (res.data) { const DocumentToSave = res.data.documents.map((e) => { return { ApplicationId: e.ApplicationType, SourceId: e.Id, } }); let docs = { ProcessInstanceID: "", Attachments: DocumentToSave, } if (actionName == 'Executado') { await this.executado(res.data.note, docs); } else if (actionName == 'Arquivar') { await this.arquivar(res.data.note, docs); } else if (actionName == 'Gerar Diploma') { await this.generateDiploma(res.data.note, docs); } else if (actionName == 'Concluido') { await this.concluir(res.data.note, docs); } else if (actionName == 'Reexecução') { await this.reexecutar(res.data.note, docs); } this.goBack(); } }); } async openExpedientActionsModal(taskAction: any, task: any) { //this.modalController.dismiss(); let classs; if (window.innerWidth <= 700) { classs = 'modal modal-desktop' } else { classs = 'modal modal-desktop showAsideOptions' } const modal = await this.modalController.create({ component: CreateProcessPage, componentProps: { taskAction: taskAction, task: task, profile: this.profile, fulltak: this.fulltask }, cssClass: classs, }); await modal.present(); modal.onDidDismiss().then(res => { if (res['data'] == 'openDiscart') { this.distartExpedientModal(); } this.goBack(); }); } async distartExpedientModal2(task: any) { const modal = await this.modalController.create({ component: DiscartExpedientModalPage, componentProps: { serialNumber: task.serialNumber, folderId: task.workflowInstanceDataFields.FolderID, action: 'discart', }, cssClass: 'discart-expedient-modal', backdropDismiss: false }); await modal.present(); modal.onDidDismiss(); } async openBookMeetingModal(task: any) { let classs; if (window.innerWidth <= 800) { classs = 'book-meeting-modal modal modal-desktop' } else { classs = 'modal modal-desktop showAsideOptions' } const modal = await this.modalController.create({ component: BookMeetingModalPage, componentProps: { task: this.task, }, cssClass: classs, backdropDismiss: false }); await modal.present(); modal.onDidDismiss(); } async openDelegarModal(task: any) { let classs; if (window.innerWidth <= 800) { classs = 'book-meeting-modal modal modal-desktop' } else { classs = 'modal modal-desktop showAsideOptions' } const modal = await this.modalController.create({ component: DelegarPage, componentProps: { task: this.task, }, cssClass: classs, backdropDismiss: false }); await modal.present(); modal.onDidDismiss().then(res => { if(res){ const data = res.data; if(data == 'close') { this.goBack(); } } }); } async distartExpedientModal() { const modal = await this.modalController.create({ component: DiscartExpedientModalPage, componentProps: { serialNumber: this.fulltask.serialNumber, folderId: this.fulltask.workflowInstanceDataFields.FolderID, action: 'complete', }, cssClass: 'discart-expedient-modal', backdropDismiss: false }); await modal.present(); modal.onDidDismiss().then(res => { if (res['data'] == 'close') { this.close(); } }); } async openOptions(taskAction?: any) { const popover = await this.popoverController.create({ component: DespachosPrOptionsPage, cssClass: 'exp-options', componentProps: { task: this.task, fulltask: this.fulltask, taskAction: taskAction, showEnviarPendentes: false }, translucent: true }); await popover.present(); popover.onDidDismiss().then((res => { if (res['data'] == 'close') { this.goBack() } })) } }