import { Component, OnInit } from '@angular/core'; import { ProcessesService } from 'src/app/services/processes.service'; import { ActivatedRoute } 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 { ToastService } from 'src/app/services/toast.service'; import { DespachoService } from 'src/app/Rules/despacho.service' import { fullTask } from 'src/app/models/dailyworktask.model'; import { AttachmentList } from 'src/app/models/Excludetask'; import { PermissionService } from 'src/app/services/permission.service'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; 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 { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { TaskService } from 'src/app/services/task.service' import { TinyMCEPage } from 'src/app/tiny-mce/tiny-mce.page'; import { DeviceService } from "src/app/services/device.service" import { DocumentViewerOptionService } from "src/app/services/document-viewer-option.service"; import { fromEvent, merge, interval, Subscription } from 'rxjs'; import { takeUntil, filter, switchMap, take } from 'rxjs/operators'; import { DespachosOptionsPage } from 'src/app/shared/popover/despachos-options/despachos-options.page'; @Component({ selector: 'app-despacho', templateUrl: './despacho.page.html', styleUrls: ['./despacho.page.scss'], }) export class DespachoPage 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: customTask; task; attachments: any; fulltask: any; mergedArray: any = []; eventsList: Event[] = []; serialnumber: string; caller: string; profile: string; intervenientes: any = [] cc: any = []; executadoText: string = "Executado"; gerarText: string = "Gerar" draftDocumentIds; selectedIndex = 0 dropButton = true showOptions = false isDelegated = false; constructor(private activateRoute: ActivatedRoute, private processes: ProcessesService, private menu: MenuController, private modalController: ModalController, public popoverController: PopoverController, private activatedRoute: ActivatedRoute, private toastService: ToastService, private despachoService: DespachoService, private RouteService: RouteService, public p: PermissionService, private backgroundservice: BackgroundService, public ThemeService: ThemeService, private httpErrorHandle: HttpErrorHandle, public TaskService: TaskService, public DeviceService: DeviceService, private DocumentViewerOptionService: DocumentViewerOptionService ) { this.activatedRoute.paramMap.subscribe(params => { if (params["params"].SerialNumber) { this.serialnumber = params["params"].SerialNumber; } if (params["params"].caller) { this.caller = params["params"].caller; } }); window['tinyupdate'] = () => { this.LoadTaskDetail(this.serialnumber); } this.modalController.dismiss(); } ngOnInit() { this.profile = "mdgpr"; this.activateRoute.paramMap.subscribe(paramMap => { if (!paramMap.has('SerialNumber')) { return; } }); this.LoadTaskDetail(this.serialnumber) this.backgroundservice.registerBackService('Online', () => { this.LoadTaskDetail(this.serialnumber) }); // this.ThemeService } close() { this.TaskService.loadDespachos(); this.modalController.dismiss(); } goBack() { this.TaskService.loadDespachos(); this.RouteService.goBack(); } async LoadTaskDetail(serial: string) { this.processes.GetTask(serial).subscribe((res: fullTask) => { this.TaskService.loadDiplomas(); let stringDraft = res.workflowInstanceDataFields.DraftIds; // console.log('sring to array', stringDraft) let split_stringDraft = stringDraft?.split(";").filter(Boolean); this.mergedArray = [] try { this.getDraft(split_stringDraft); } catch (error) { console.log(error) } console.log('is Delegated',res.isDelegated) this.isDelegated = res.isDelegated; 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, "DocumentsQty": '', "WorkflowName": res.workflowDisplayName, "DeadlineType": res.workflowInstanceDataFields.DeadlineType, "activityInstanceName": res.activityInstanceName, "Status": res.workflowInstanceDataFields.Status, "Deadline": res.deadline, "DraftIds": res.workflowInstanceDataFields?.DraftIds } // console.log({res}) // this.updateProcessOnDB(res); this.fulltask = res; this.getDocumentPdf(this.fulltask.Documents) console.log('All', this.mergedArray) 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'; }); }); }, (error) => { if (error.status == 0) { // this.getFromDb(); } else { try { this.goBack() } catch (e) { this.RouteService.goBack(); } this.httpErrorHandle.httpStatusHandle(error) } }); } getDocumentPdf(Documents: any) { Documents.forEach(element => { let docObject = { "ApplicationId": element.ApplicationId, "Assunto": element.Assunto, "DocDate": element.DocDate, "DocId": element.DocId, "DocNumber": element.DocNumber, "FolderId": element.FolderId, "Sender": element.Sender, "SourceDocId": element.SourceDocId, "content": "", "path": "", "ownerId": "", "status": "", } this.mergedArray.push(docObject); }); } getDraft(split_stringDraft: string[]) { split_stringDraft.forEach(element => { // console.log('List of ids', element) this.processes.GetDraftByID(element).subscribe((resd) => { let object = { "ApplicationId": "", "Assunto": resd.data.description, "DocDate":resd?.createdAt, "DocId": resd.data.id, "DocNumber": "", "FolderId": "", "Sender": "", "SourceDocId": "", "content": resd.data.content || " ", "path": resd.data.path, "ownerId": resd.data.ownerId, "status": resd.data.status, } this.mergedArray.push(object) // console.log('List of draff', resd) }) }); } // 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() { // } onButtonHold() { // alert("nice!") } clickDocumentUPdateIndex(docId: string, Document, content) { this.DocumentViewerOptionService.setData({ file: { title: Document.Assunto, url: '', title_link: '', }, Document, applicationId: Document.ApplicationId, docId: Document.DocId || Document.SourceId, task: this.fulltask }); this.DocumentViewerOptionService.openOptions(); } async viewDocument({Document, content}) { if (Document.content == "") { 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(); } else { const modal = await this.modalController.create({ component: TinyMCEPage, componentProps: { Document, content }, cssClass: 'modal modal-desktop' }); await modal.present(); } } clickAttachment() { } openMenu() { this.menu.open(); this.modalController.dismiss(); } async executado(note: string, documents: any) { const loader = this.toastService.loading() try { await this.despachoService.executado(note, documents, this.serialnumber).toPromise(); this.httpErrorHandle.httpsSucessMessagge('Executado') this.TaskService.loadDespachos(); // this.close(); } catch (error) { this.httpErrorHandle.httpStatusHandle(error) } finally { loader.remove() } } async arquivar(note: string, documents: AttachmentList) { const loader = this.toastService.loading() try { await this.despachoService.arquivar(note, documents, this.serialnumber).toPromise() this.httpErrorHandle.httpsSucessMessagge('Arquivar') this.TaskService.loadDespachos(); // this.close(); } catch (error) { this.httpErrorHandle.httpStatusHandle(error) } finally { loader.remove() } } async reexecute(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.httpErrorHandle.httpsSucessMessagge('Reexecução') this.TaskService.loadDespachos(); //this.close(); } catch (error) { this.httpErrorHandle.httpStatusHandle(error) } finally { loader.remove() } } async generateDiploma(note: string, documents: any) { let body = { "serialNumber": this.serialnumber, "action": "Reencaminhar", "ActionTypeId": 99999839, "dataFields": { "ReviewUserComment": note, }, "AttachmentList": documents, } const loader = this.toastService.loading() try { await this.processes.CompleteTask(body).toPromise() this.httpErrorHandle.httpsSucessMessagge('Gerar Diploma') this.TaskService.loadDespachos(); // this.close(); } catch (error) { this.httpErrorHandle.httpStatusHandle(error); } finally { loader.remove() } } toDateString(e) { return new Date(e).toDateString() } async sendExpedienteToPending() { const loader = this.toastService.loading() this.despachoService.sendExpedienteToPending(this.serialnumber).subscribe(res => { this.goBack(); loader.remove() this.TaskService.loadDespachos(); this.httpErrorHandle.httpsSucessMessagge('Enviar para Pendentes') }, error => { loader.remove() this.httpErrorHandle.httpStatusHandle(error) }); // loader.remove() } tstemethod(value: string) { } 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, actionName: actionName }, cssClass: classs, backdropDismiss: true }); 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); this.goBack(); } else if (actionName == 'Arquivar') { await this.arquivar(res.data.note, docs); this.goBack(); } else if (actionName == 'Reexecução') { await this.reexecute(res.data.note, docs); this.goBack(); } else if (actionName == 'Gerar Diploma') { await this.generateDiploma(res.data.note, docs); this.goBack(); } } }, (error) => { console.log(error) }); await modal.present(); } async openExpedientActionsModal(taskAction: any, task: any) { let classs; if (window.innerWidth <= 800) { 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, fulltask: this.fulltask }, cssClass: classs, }); modal.onDidDismiss().then(async (res) => { if (res['data'] == 'openDiscart') { await this.distartExpedientModal(); } if(res.data?.action != 'cancel') { this.goBack(); } }, (error) => { // console.log(error) }); await modal.present(); } 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, fulltask: this.fulltask }, cssClass: classs, backdropDismiss: false }); modal.onDidDismiss(); await modal.present(); } 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 }); modal.onDidDismiss().then(res => { if (res) { const data = res.data; if (data == 'close') { this.goBack(); } this.TaskService.loadDespachos(); } }, (error) => { console.log(error) }); await modal.present(); } 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 }); modal.onDidDismiss().then(res => { if (res['data'] == 'close') { this.close(); /* this.close(); this.openMenu(); */ } this.TaskService.loadDespachos(); }, (error) => { console.log(error) }); await modal.present(); } async openOptions(taskAction?: any) { if (window.innerWidth > 500) { this.showOptions = true } else { const popover = await this.popoverController.create({ component: DespachosOptionsPage, cssClass: 'exp-options', componentProps: { task: this.task, fulltask: this.fulltask, taskAction: taskAction, showEnviarPendentes: false }, translucent: true }); popover.onDidDismiss().then((res) => { // console.log('res', res.data) if (res.data == 'back') { this.goBack(); } }, (error) => { console.log(error) }) await popover.present(); } } } function mergeArraysAndTag(array1, array2) { console.log('second', array2) }