Merge branch 'developer' of bitbucket.org:equilibriumito/gabinete-digital into developer

This commit is contained in:
Peter Maquiran
2021-05-21 11:20:35 +01:00
22 changed files with 515 additions and 368 deletions
@@ -215,7 +215,7 @@ export class CreateProcessPage implements OnInit {
"action": "Conhecimento", "action": "Conhecimento",
"ActionTypeId": 104, "ActionTypeId": 104,
"dataFields": { "dataFields": {
"ReviewUserComent": '', "ReviewUserComment": '',
}, },
"AttachmentList" :null, "AttachmentList" :null,
@@ -53,7 +53,7 @@ export class DarParecerPage implements OnInit {
"action": "Registar", "action": "Registar",
"ActionTypeId": 104, "ActionTypeId": 104,
"dataFields": { "dataFields": {
"ReviewUserComent": this.note, "ReviewUserComment": this.note,
}, },
"AttachmentList": docs, "AttachmentList": docs,
} }
+1 -1
View File
@@ -40,7 +40,7 @@ export class tasksList{
InstanceID: string, InstanceID: string,
InstanceIDNew: string, InstanceIDNew: string,
NewSerialNumber: string, NewSerialNumber: string,
ReviewUserComent: string, ReviewUserComment: string,
ReviewUserEmail: string, ReviewUserEmail: string,
ReviewUserName: string, ReviewUserName: string,
SourceID: number, SourceID: number,
@@ -160,7 +160,7 @@ export class DespachoPrPage implements OnInit {
"action": "Conhecimento", "action": "Conhecimento",
"ActionTypeId": 104, "ActionTypeId": 104,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -173,7 +173,7 @@ export class DespachoPrPage implements OnInit {
"action": "Arquivo", "action": "Arquivo",
"ActionTypeId": 95, "ActionTypeId": 95,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -186,7 +186,7 @@ export class DespachoPrPage implements OnInit {
"action": "Reencaminhar", "action": "Reencaminhar",
"ActionTypeId": 98, "ActionTypeId": 98,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -160,7 +160,7 @@ export class DespachoPage implements OnInit {
"action": "Conhecimento", "action": "Conhecimento",
"ActionTypeId": 104, "ActionTypeId": 104,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -173,7 +173,7 @@ export class DespachoPage implements OnInit {
"action": "Arquivo", "action": "Arquivo",
"ActionTypeId": 95, "ActionTypeId": 95,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -186,7 +186,7 @@ export class DespachoPage implements OnInit {
"action": "Reencaminhar", "action": "Reencaminhar",
"ActionTypeId": 98, "ActionTypeId": 98,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -67,14 +67,9 @@
<div *ngIf="task" class="aside-right flex-column height-100"> <div *ngIf="task" class="aside-right flex-column height-100">
<div class="buttons"> <div class="buttons">
<button (click)="openAddNoteModal('Executado')" class="btn-cancel" shape="round" >Executado</button> <button (click)="openAddNoteModal('Solicitar assinatura')" class="btn-cancel" shape="round" >Solicitar assinatura</button>
<button (click)="openDelegarModal(task)" class="btn-cancel" shape="round" >Delegar</button> <button (click)="openAddNoteModal('Solicitar alteração')" class="btn-cancel" shape="round" >Solicitar alteração</button>
<div class="solid"></div> <div class="solid"></div>
<button (click)="openExpedientActionsModal('0',fulltask)" class="btn-ok" shape="round" >Efectuar Despacho</button>
<button (click)="openExpedientActionsModal('1',fulltask)" class="btn-cancel" shape="round" >Solicitar Parecer</button>
<button (click)="openBookMeetingModal(task)" class="btn-cancel" shape="round" >Marcar Reunião</button>
<div class="solid"></div>
<button (click)="sendExpedienteToPending()" class="btn-cancel" shape="round" >Enviar para Pendentes</button>
</div> </div>
</div> </div>
@@ -1,12 +1,11 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { ModalController, NavParams, PopoverController } from '@ionic/angular'; import { ModalController, NavParams, PopoverController } from '@ionic/angular';
import { AddNotePage } from 'src/app/modals/add-note/add-note.page'; import { AddNotePage } from 'src/app/modals/add-note/add-note.page';
import { CreateProcessPage } from 'src/app/modals/create-process/create-process.page';
import { DelegarPage } from 'src/app/modals/delegar/delegar.page';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { OptsExpedientePage } from 'src/app/shared/popover/opts-expediente/opts-expediente.page'; import { OptsExpedientePage } from 'src/app/shared/popover/opts-expediente/opts-expediente.page';
import { momentG } from 'src/plugin/momentG'; import { momentG } from 'src/plugin/momentG';
import { BookMeetingModalPage } from '../../expediente/book-meeting-modal/book-meeting-modal.page';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
@Component({ @Component({
selector: 'app-diploma', selector: 'app-diploma',
@@ -32,6 +31,7 @@ export class DiplomaPage implements OnInit {
private processes: ProcessesService, private processes: ProcessesService,
public popoverController: PopoverController, public popoverController: PopoverController,
private modalController: ModalController, private modalController: ModalController,
private iab: InAppBrowser,
) { ) {
this.serialnumber = this.navParams.get('serialNumber'); this.serialnumber = this.navParams.get('serialNumber');
this.profile = this.navParams.get('profile'); this.profile = this.navParams.get('profile');
@@ -99,6 +99,15 @@ export class DiplomaPage implements OnInit {
} }
viewDocument(docId:string){
this.processes.GetDocumentUrl(docId, '361').subscribe(res=>{
console.log(res);
const url: string = res.replace("webTRIX.Viewer","webTRIX.Viewer.Branch1");
const browser = this.iab.create(url,"_blank");
browser.show();
});
}
getDocumentDetails(forlderId:string, applicationId:string) { getDocumentDetails(forlderId:string, applicationId:string) {
this.processes.GetDocumentDetails(forlderId,applicationId).subscribe(res=>{ this.processes.GetDocumentDetails(forlderId,applicationId).subscribe(res=>{
this.attachments = res.Documents; this.attachments = res.Documents;
@@ -107,6 +116,33 @@ export class DiplomaPage implements OnInit {
}) })
} }
askSignature(note:string, documents:any){
let body = {
"serialNumber": this.serialnumber,
"action": "Aprovar",
"ActionTypeId": 0,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
this.processes.CompleteTask(body);
this.close();
}
askToChange(note:string, documents:any){
let body = {
"serialNumber": this.serialnumber,
"action": "Rectificar",
"ActionTypeId": 0,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
this.processes.CompleteTask(body);
this.close();
}
async openAddNoteModal(actionName:string) { async openAddNoteModal(actionName:string) {
let classs; let classs;
@@ -127,93 +163,16 @@ export class DiplomaPage implements OnInit {
modal.onDidDismiss().then(res => { modal.onDidDismiss().then(res => {
if(res.data){ if(res.data){
if(actionName == 'Executado'){ if(actionName == 'Solicitar assinatura'){
//this.executado(res.data.note,res.data.documents); this.askSignature(res.data.note,res.data.documents);
} }
else if(actionName == 'Arquivar'){ else if(actionName == 'Solicitar alteração'){
//this.arquivar(res.data.note,res.data.documents); this.askToChange(res.data.note,res.data.documents);
} }
} }
}); });
} }
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();
}
async openExpedientActionsModal(taskAction: any, task: any) {
//this.modalController.dismiss();
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,
},
cssClass: classs,
});
await modal.present();
modal.onDidDismiss().then(res=>{
console.log(res['data']);
if(res['data']=='openDiscart'){
console.log('open discart');
// this.distartExpedientModal();
}
});
}
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();
}
sendExpedienteToPending(){
this.processes.SetTaskToPending(this.serialnumber).subscribe(res=>{
console.log(res);
this.close();
});
}
close(){ close(){
this.modalController.dismiss(); this.modalController.dismiss();
} }
@@ -7,12 +7,14 @@ import { IonicModule } from '@ionic/angular';
import { ApproveEventPageRoutingModule } from './approve-event-routing.module'; import { ApproveEventPageRoutingModule } from './approve-event-routing.module';
import { ApproveEventPage } from './approve-event.page'; import { ApproveEventPage } from './approve-event.page';
import { SharedModule } from 'src/app/shared/shared.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
SharedModule,
ApproveEventPageRoutingModule ApproveEventPageRoutingModule
], ],
declarations: [ApproveEventPage] declarations: [ApproveEventPage]
@@ -1,24 +1,14 @@
<ion-header class="ion-no-border"> <ion-header class="ion-no-border">
<div *ngIf="loadedEvent" class="header-content d-flex justify-between"> <app-header></app-header>
<div class="header-icon-left cursor-pointer">
<ion-icon (click)="close()" src="assets/images/icons-arrow-arrow-left.svg"></ion-icon>
</div>
<div class="header-title flex-grow-1">
<label>{{loadedEvent.workflowInstanceDataFields.Subject}}</label>
</div>
<div class="header-icon-right cursor-pointer">
<ion-icon (click)="notImplemented()" src="assets/images/icons-edit.svg"></ion-icon>
</div>
</div>
</ion-header> </ion-header>
<ion-menu autoHide="false" side="end" content-id="main-content"> <ion-menu autoHide="false" side="end" content-id="main-content">
<ion-header> <ion-header>
<ion-toolbar translucent> <ion-toolbar translucent>
<ion-title>Acções</ion-title> <ion-title>Ações</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-list class="cursor-pointer"> <ion-list>
<ion-item (click)="approveTask(loadedEvent.serialNumber)"> <ion-item (click)="approveTask(loadedEvent.serialNumber)">
<ion-icon name="checkmark-sharp"></ion-icon> <ion-icon name="checkmark-sharp"></ion-icon>
<ion-label>Aprovar</ion-label> <ion-label>Aprovar</ion-label>
@@ -31,21 +21,36 @@
<ion-icon name="close-sharp"></ion-icon> <ion-icon name="close-sharp"></ion-icon>
<ion-label>Rejeitar</ion-label> <ion-label>Rejeitar</ion-label>
</ion-item> </ion-item>
<ion-item (click)="editar(loadedEvent.serialNumber)">
<ion-icon name="close-sharp"></ion-icon>
<ion-label>Editar</ion-label>
</ion-item>
</ion-list> </ion-list>
</ion-content> </ion-content>
</ion-menu> </ion-menu>
<ion-content id="main-content"> <ion-content id="main-content">
<div class="upper-content"> <div class="main-content d-flex height-100">
<div class="content-location" *ngIf="loadedEvent"> <div *ngIf="loadedEvent" class="content d-flex flex-column width-100">
<div class="location-detail"> <div class="header-content width-100 d-flex justify-space-between">
<ion-label >{{loadedEvent.workflowInstanceDataFields.Location}}</ion-label> <div (click)="goBack()" class="header-icon-left cursor-pointer">
<ion-icon src="assets/images/icons-arrow-arrow-left.svg"></ion-icon>
</div> </div>
<div class="button-calendar-type"> <div class="header-title flex-grow-1 cursor-pointer">
<ion-button class="button-calendar-type" slot="end">{{loadedEvent.workflowInstanceDataFields.Agenda}}</ion-button> <label>{{loadedEvent.workflowInstanceDataFields.Subject}}</label>
</div>
<div (click)="editar(loadedEvent.serialNumber)" class="header-icon-right display-none-true">
<ion-icon src="assets/images/icons-edit.svg"></ion-icon>
</div> </div>
</div> </div>
<div class="content-details" *ngIf="loadedEvent"> <div class="upper-content d-flex flex-column">
<div class="content-location">
<p>
<span class="location">{{loadedEvent.workflowInstanceDataFields.Location}}</span>
<span class="event-type-{{loadedEvent.workflowInstanceDataFields.Agenda}}">{{loadedEvent.workflowInstanceDataFields.Agenda}}</span>
</p>
</div>
<div class="content-details">
<ion-label> <ion-label>
<p>{{customDate}}</p> <p>{{customDate}}</p>
<p>das {{loadedEvent.workflowInstanceDataFields.StartDate | date: 'hh:mm'}} às {{loadedEvent.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p> <p>das {{loadedEvent.workflowInstanceDataFields.StartDate | date: 'hh:mm'}} às {{loadedEvent.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p>
@@ -55,52 +60,64 @@
</div> </div>
</div> </div>
<div class="line"></div> <div class="line"></div>
<div class="middle-content overflow-y-auto" *ngIf="loadedEvent">
<div class="overflow-y-auto">
<div class="middle-content">
<div *ngIf="loadedEvent.workflowInstanceDataFields.ParticipantsList">
<h5>Intervenientes</h5> <h5>Intervenientes</h5>
<ion-item> <div *ngFor="let att of loadedEvent.workflowInstanceDataFields.ParticipantsList">
<ion-label> <ion-label>{{att.Name}}</ion-label>
<p>{{loadedEvent.workflowInstanceDataFields.Participants}}</p> </div>
</ion-label> <div class="line"></div>
</ion-item> </div>
<div *ngIf="loadedEvent.workflowInstanceDataFields.Body">
<h5>Detalhes</h5> <h5>Detalhes</h5>
<ion-item> <ion-item lines="none" class="ion-no-margin ion-no-padding">
<p>{{loadedEvent.workflowInstanceDataFields.Body}}</p> <p [innerHTML]="loadedEvent.workflowInstanceDataFields.Body"></p>
</ion-item> </ion-item>
<div class="line"></div>
</div>
</div> </div>
<!-- <div *ngIf="loadedAttachments" class="bottom-content"> <div *ngIf="loadedAttachments" class="bottom-content width-100">
<ion-list> <ion-list>
<h3>Documentos Anexados</h3> <h5>Documentos Anexados</h5>
<ion-item> <ion-item class="ion-no-margin ion-no-padding"
*ngFor="let attach of loadedAttachments"
(click)="viewDocument(attach.SourceId)">
<ion-label> <ion-label>
<p class="attach-title-item">Receita por Natureza</p> <p class="attach-title-item d-block">{{attach.SourceName}}</p>
<p><span class="span-left">{{loadedAttachments.Remetente}}</span><span class="span-right">{{loadedAttachments.CreateDate}}</span></p> <p><span class="span-left">{{attach.Stakeholders}}</span><span class="span-right">{{ attach.CreateDate | date: 'dd-MM-yy' }}</span></p>
</ion-label> </ion-label>
</ion-item> </ion-item>
</ion-list> </ion-list>
</div> -->
</ion-content>
<ion-footer>
<ion-toolbar class="cursor-pointer">
<div class="buttons">
<ion-item lines="none">
<p>
<ion-button class="button-edit-event" shape="round" (click)="emendTask(loadedEvent.serialNumber)">Emendar</ion-button>
</p>
<p>
<ion-menu-button autoHide="false">
<ion-icon (click)="openMenu()" name="ellipsis-vertical-outline"></ion-icon>
</ion-menu-button>
</p>
<p>
<ion-button class="button-approve" shape="round" (click)="approveTask(loadedEvent.serialNumber)">Aprovar1</ion-button>
</p>
</ion-item>
<ion-item hidden>
<p>
<ion-button class="button-reject" shape="round" (click)="rejectTask(loadedEvent.serialNumber)">Rejeitar</ion-button>
</p>
</ion-item>
</div> </div>
</ion-toolbar> </div>
</div>
<div *ngIf="loadedEvent" class="aside-right flex-column height-100">
<div class="aside-buttons">
<button hidden full class="btn-ok" shape="round" >Editar evento</button>
<button (click)="approveTask(loadedEvent.serialNumber)" full class="btn-ok" shape="round" >Aprovar</button>
<button (click)="emendTask(loadedEvent.serialNumber)" class="btn-cancel" shape="round" >Adicionar Nota</button>
<div class="solid"></div>
<button full class="btn-cancel" shape="round" (click)="editar(loadedEvent.serialNumber)" >Editar</button>
<button (click)="rejectTask(loadedEvent.serialNumber)" full class="btn-delete" shape="round" >Rejeitar</button>
</div>
</div>
</div>
</ion-content>
<ion-footer class="display-none-true">
<div class="buttons">
<button class="btn-cancel" shape="round" (click)="emendTask(loadedEvent.serialNumber)">Adicionar Nota</button>
<ion-menu-button (click)="openMenu()" autoHide="false">
<ion-icon name="ellipsis-vertical-outline"></ion-icon>
</ion-menu-button>
<button class="btn-ok" shape="round" (click)="approveTask(loadedEvent.serialNumber)">Aprovar</button>
<button hidden class="btn-delete" shape="round" (click)="rejectTask(loadedEvent.serialNumber)">Rejeitar</button>
</div>
</ion-footer> </ion-footer>
@@ -1,16 +1,18 @@
ion-content{ @import '~src/function.scss';
--padding-top:0px; .main-content{
--padding-start: 20px; background-color: #fff !important;
--padding-end: 20px; border-top-left-radius: 25px;
font-size: 18px; border-top-right-radius: 25px;
} }
ion-menu{ ion-menu{
--height: 225px; --height: 225px;
} }
.display-none-true{
display: none;
border: 1px solid red;
}
.header-content{ .header-content{
width: 360px; //margin: 25px auto;
overflow: auto;
margin: 25px auto;
} }
.header-icon-left{ .header-icon-left{
width: 36px; width: 36px;
@@ -19,7 +21,6 @@ ion-menu{
float: left; float: left;
} }
.header-title{ .header-title{
width: 264px;
font-family: Roboto; font-family: Roboto;
font-size: 25px; font-size: 25px;
margin: 0 5px 0 5px; margin: 0 5px 0 5px;
@@ -32,34 +33,43 @@ ion-menu{
font-size: 45px; font-size: 45px;
float: left; float: left;
} }
.upper-content{
margin-left: 50px; .content{
overflow: auto; padding: 30px 20px 0 20px !important;
margin: 0;
float: left;
/* overflow: auto;
width: 100%; */
border-right: 1px solid #d8d8d8;
.upper-content{
margin-left: 40px;
font-size: 18px; font-size: 18px;
.content-location{ .content-location{
width: 360px; margin-top: 0px !important;
margin: 0 auto; width: 100%;
padding: 0; padding: 0;
overflow: auto;
} }
.location-detail{ .location{
width: 210px;
font-weight: 700;
font-size: 18px;
float: left;
margin: 5px 5px 5px 0px;
}
.button-calendar-type{
width: 91px;
--border-radius: 12.5px;
--background: #ffb703;
margin-left: 5px;
float: left; float: left;
} }
.button-calendar-type ion-button{ .event-type-Oficial{
height: 25px; font-family: Roboto;
border-radius: 20px;
background: #ffb703;
float: right !important;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
}
.event-type-Pessoal{
font-family: Roboto;
border-radius: 20px;
background: #f05d5e;
float: right !important;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
} }
.button-edit-event { .button-edit-event {
width: 140px; width: 140px;
@@ -71,15 +81,14 @@ ion-menu{
.content-details p{ .content-details p{
font-size: 16px; font-size: 16px;
} }
} }
.middle-conten{ .middle-conten{
.middle-content h3, .middle-content p{ .middle-content h3, .middle-content p{
font-size: 16px; font-size: 16px;
} }
} }
.bottom-content{ .bottom-content{
width: 360px;
margin: 0 auto; margin: 0 auto;
.bottom-content h3{ .bottom-content h3{
@@ -113,12 +122,54 @@ ion-menu{
float: right; float: right;
font-size: 13px; font-size: 13px;
} }
}
}
.aside-right{
overflow: auto;
padding: 30px 20px 0 20px !important;
.arrow-right{
display: flex;
justify-content: flex-end;
margin-bottom: 20px;
/* .arrow-right-icon{
width: 37px;
float: right;
font-size: 35px;
overflow: hidden;
} */
}
.aside-buttons{
width: 100% !important;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.btn-ok, .btn-cancel, .btn-delete{
height: auto !important;
font-size: 16px !important;
font-weight: 600 !important;
width: 100% !important;
margin-bottom: 10px !important;
padding: 15px !important;
}
}
.solid {
display: block;
width: 90%;
border-top: 1px solid #ebebeb;
margin: 0 auto !important;
margin-bottom: 10px !important;
}
} }
.buttons{ .buttons{
width: 360px; display: flex;
margin: 0 auto; justify-content: space-between;
} overflow: auto;
.button-options { .button-options {
height: 44px; height: 44px;
@@ -138,3 +189,29 @@ ion-menu{
border-radius: 22.5px; border-radius: 22.5px;
--background: #ffe0e0; --background: #ffe0e0;
} }
}
/* @media only screen and (max-width: 1140px) {
.content{
width: 100%;
}
.aside-right{
display: none;
}
} */
/* @media only screen and (min-width: 1140px) {
.div-icon{
display: none;
}
.content{
//width: 75%;
border-right: 1px solid #d8d8d8;
}
.aside-right{
width: 25%;
}
} */
@@ -1,11 +1,14 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, NavigationExtras, Router } from '@angular/router';
import { MenuController, ModalController, PopoverController } from '@ionic/angular'; import { MenuController, ModalController, NavParams, PopoverController } from '@ionic/angular';
import { EmendMessageModalPage } from 'src/app/pages/agenda/emend-message-modal/emend-message-modal.page'; import { Event } from 'src/app/models/event.model';
import { EventActionsPopoverPage } from 'src/app/pages/agenda/event-actions-popover/event-actions-popover.page';
import { AlertService } from 'src/app/services/alert.service'; import { AlertService } from 'src/app/services/alert.service';
import { AttachmentsService } from 'src/app/services/attachments.service'; import { AttachmentsService } from 'src/app/services/attachments.service';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { EmendMessageModalPage } from 'src/app/pages/agenda/emend-message-modal/emend-message-modal.page';
import { EventActionsPopoverPage } from 'src/app/pages/agenda/event-actions-popover/event-actions-popover.page';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { EditEventToApproveComponent } from 'src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page';
@Component({ @Component({
selector: 'app-approve-event', selector: 'app-approve-event',
@@ -14,95 +17,122 @@ import { ProcessesService } from 'src/app/services/processes.service';
}) })
export class ApproveEventPage implements OnInit { export class ApproveEventPage implements OnInit {
event: Event; event: Event;
loadedEvent: any; loadedEvent:any;
loadedAttachments: any; loadedEvent1:any;
serialNumber: string; loadedAttachments:any;
customDate: any; customDate:any;
today: any; today:any;
show: boolean = false;
months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; 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"]; days = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"];
serialNumber:string;
@Input() InstanceId:string;
@Output() approveEventDismiss = new EventEmitter<any>();
@Output() closeEventToApprove = new EventEmitter<any>();
@Output() AproveEventEditEvent = new EventEmitter<any>();
constructor( constructor(
private router: Router, private router:Router,
private activatedRoute: ActivatedRoute,
private modalController: ModalController, private modalController: ModalController,
private processes: ProcessesService, private processes:ProcessesService,
private attachmentsService: AttachmentsService, private attachmentsService: AttachmentsService,
private popoverController: PopoverController, private popoverController: PopoverController,
private menu: MenuController, private menu: MenuController,
private alertService: AlertService, private alertService: AlertService,
private activatedRoute: ActivatedRoute, private iab: InAppBrowser
) { ) {
this.activatedRoute.paramMap.subscribe(paramMap => this.activatedRoute.queryParams.subscribe(params => {
{ if(params["serialNumber"]) {
if (!paramMap.has("serialNumber")){ this.serialNumber = params["serialNumber"];
return; console.log(params["serialNumber"]);
}
else{
this.serialNumber = paramMap.get('serialNumber');
console.log(this.serialNumber);
} }
}); });
this.loadedEvent = null;
} }
ngOnInit() { ngOnInit() {
console.log(this.serialNumber);
this.getTask(); this.getTask();
this.getAttachments();
} }
notImplemented() { notImplemented(){
this.alertService.presentAlert('Funcionalidade em desenvolvimento'); this.alertService.presentAlert('Funcionalidade em desenvolvimento');
} }
close() { close(){
this.router.navigate(['/home/gabinete-digital/event-list']); /* this.router.navigate(['/home/gabinete-digital/event-list']); */
this.closeEventToApprove.emit();
this.modalController.dismiss();
} }
getTask() { goBack(){
this.processes.GetTask(this.serialNumber).subscribe(res => { let navigationExtras: NavigationExtras = {
console.log(res); queryParams: {
this.loadedEvent = res; "eventos": true,
this.today = new Date(res.workflowInstanceDataFields.StartDate); }
};
this.router.navigate(['/home/gabinete-digital'], navigationExtras);
}
async getTask(){
this.loadedEvent = await this.processes.GetTask(this.serialNumber).toPromise();
console.log(this.loadedEvent);
this.today = new Date(this.loadedEvent.workflowInstanceDataFields.StartDate);
console.log(new Date(this.today)); console.log(new Date(this.today));
this.customDate = this.days[this.today.getDay()] + ", " + this.today.getDate() + " de " + (this.months[this.today.getMonth()]); this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]);
let instanceId = this.loadedEvent.workflowInstanceDataFields.InstanceId;
}) this.getAttachments(instanceId);
} }
approveTask(serialNumber: string) {
approveTask(serialNumber:string){
let body = { "serialNumber": serialNumber, "action": "Aprovar" } let body = { "serialNumber": serialNumber, "action": "Aprovar" }
console.log(body); console.log(body);
this.processes.PostTaskAction(body); this.processes.PostTaskAction(body);
this.router.navigate(['/home/gabinete-digital/event-list']); this.modalController.dismiss(serialNumber);
/* this.approveEventDismiss.emit({
"serialNumber": serialNumber,
"action": "Aprovar",
"saveData": {
loadedEvent: this.loadedEvent,
today: this.today,
customDate: this.customDate
}
}); */
} }
emendTask(serialNumber: string) { emendTask(serialNumber:string){
/* console.log('Emendar'); */ /* console.log('Emendar'); */
this.menu.close(); this.menu.close();
this.openEmendMessageModal(serialNumber); this.openEmendMessageModal(serialNumber);
this.close(); this.modalController.dismiss(null);
} }
rejectTask(serialNumber: string) { rejectTask(serialNumber:string){
let body = { "serialNumber": serialNumber, "action": "Rejeitar" } let body = { "serialNumber": serialNumber, "action": "Rejeitar" }
console.log(body); console.log(body);
this.processes.PostTaskAction(body); this.processes.PostTaskAction(body);
this.router.navigate(['/home/gabinete-digital/event-list']) this.router.navigate(['/home/gabinete-digital/event-list']);
this.close(); this.modalController.dismiss(null);
} }
getAttachments() {
this.attachmentsService.getAttachmentsBySerial(this.serialNumber).subscribe(res => { async getAttachments(instanceId:string){
this.loadedAttachments = res; this.loadedAttachments = await this.attachmentsService.getAttachmentsById(instanceId).toPromise();
console.log(res); }
viewDocument(sourceId){
this.processes.GetDocumentUrl(sourceId, '8').subscribe(res=>{
/* console.log(res); */
const url: string = res.replace("webTRIX.Viewer","webTRIX.Viewer.Branch1");
const browser = this.iab.create(url,"_blank");
browser.show();
}); });
} }
async openOptions(ev: any) { async openOptions(ev:any) {
const popover = await this.popoverController.create({ const popover = await this.popoverController.create({
component: EventActionsPopoverPage, component: EventActionsPopoverPage,
cssClass: 'event-actions-popover', cssClass: 'event-actions-popover',
@@ -111,14 +141,14 @@ export class ApproveEventPage implements OnInit {
}); });
return await popover.present(); return await popover.present();
} }
openMenu() { openMenu() {
this.menu.open(); this.menu.open();
} }
async openEmendMessageModal(serialNumber: string) { async openEmendMessageModal(serialNumber:string) {
const modal = await this.modalController.create({ const modal = await this.modalController.create({
component: EmendMessageModalPage, component: EmendMessageModalPage,
componentProps: { componentProps:{
}, },
cssClass: 'emend-message-modal', cssClass: 'emend-message-modal',
backdropDismiss: false backdropDismiss: false
@@ -127,9 +157,10 @@ export class ApproveEventPage implements OnInit {
await modal.present(); await modal.present();
modal.onDidDismiss().then(res => { modal.onDidDismiss().then(res => {
if (res.data !== '') { console.log(res.data);
let body = {
"serialNumber": serialNumber, if(res.data !== ''){
let body = { "serialNumber": serialNumber,
"action": "Emendar", "action": "Emendar",
"dataFields": { "dataFields": {
"ReviewerUseComment": res.data, "ReviewerUseComment": res.data,
@@ -137,12 +168,44 @@ export class ApproveEventPage implements OnInit {
} }
console.log(body); console.log(body);
this.processes.PostTaskAction(body); this.processes.PostTaskAction(body);
this.router.navigate(['/home/gabinete-digital/event-list']) //this.router.navigate(['/home/gabinete-digital/event-list']);
this.goToEventsToApprove();
} }
else { else{
//this.alertService.presentAlert('Operação cancelada!'); //this.alertService.presentAlert('Operação cancelada!');
} }
}); });
} }
goToEventsToApprove(){
let navigationExtras: NavigationExtras = {
queryParams: {
"events": true,
}
};
this.router.navigate(['/home/gabinete-digital'], navigationExtras);
}
async editar(serialNumber: string) {
const modal = await this.modalController.create({
component: EditEventToApproveComponent,
componentProps: {
serialNumber: serialNumber,
InstanceId:this.InstanceId
},
cssClass: 'modal modal-desktop',
// backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then(res => {
this.getTask();
});
}
} }
@@ -96,7 +96,7 @@ export class GabineteDigitalPage implements OnInit {
case params["expedientes"]: case params["expedientes"]:
this.openExpedientListPage(); this.openExpedientListPage();
this.selectedElement='Correspondence' this.selectedElement='Correspondence';
break; break;
case params["pendentes"]: case params["pendentes"]:
@@ -136,7 +136,6 @@ export class GabineteDigitalPage implements OnInit {
this.selectedElement='approval' this.selectedElement='approval'
} */ } */
} }
closeAllDesktopComponent(){ closeAllDesktopComponent(){
@@ -171,20 +171,21 @@ export class PedidoPage implements OnInit {
"action": "Reapreciação", "action": "Reapreciação",
"ActionTypeId": 100000009, "ActionTypeId": 100000009,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
this.processes.CompleteTask(body); this.processes.CompleteTask(body);
this.close(); this.close();
} }
arquivar(note:string, documents:any){ arquivar(note:string, documents:any){
let body = { let body = {
"serialNumber": this.serialnumber, "serialNumber": this.serialnumber,
"action": "Arquivo", "action": "Arquivo",
"ActionTypeId": 95, "ActionTypeId": 95,
"dataFields": { "dataFields": {
"ReviewUserComent": note, "ReviewUserComment": note,
}, },
"AttachmentList" :documents, "AttachmentList" :documents,
} }
@@ -50,7 +50,7 @@
.event-type-Oficial{ .event-type-Oficial{
font-family: Roboto; font-family: Roboto;
border-radius: 20px; border-radius: 20px;
background: #fec077; background: #ffb703;
float: right !important; float: right !important;
padding: 5px 13.5px 5px 13.5px; padding: 5px 13.5px 5px 13.5px;
color: #fff; color: #fff;
@@ -171,7 +171,7 @@ export class ApproveEventComponent implements OnInit {
goToEventsToApprove(){ goToEventsToApprove(){
let navigationExtras: NavigationExtras = { let navigationExtras: NavigationExtras = {
queryParams: { queryParams: {
"events": true, "eventos": true,
} }
}; };
this.router.navigate(['/home/gabinete-digital'], navigationExtras); this.router.navigate(['/home/gabinete-digital'], navigationExtras);
@@ -36,6 +36,9 @@
<div class="exp-remetente"> <div class="exp-remetente">
<ion-label>{{task.Senders}}</ion-label> <ion-label>{{task.Senders}}</ion-label>
</div> </div>
<div class="exp-workflow">
<span class="label">{{task.activityInstanceName}}</span>
</div>
<div class="exp-icon d-flex align-center"> <div class="exp-icon d-flex align-center">
<ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon> <ion-icon src="assets/images/icons-expediente-attachment.svg"></ion-icon>
<label>{{task.DocumentsQty}}</label> <label>{{task.DocumentsQty}}</label>
@@ -87,9 +87,8 @@ segmentChanged(ev: any) {
this.loading = true; this.loading = true;
let result = await this.processes.GetTasksList("Despacho do Presidente da República", false).toPromise(); let result = await this.processes.GetTasksList("Despacho do Presidente da República", false).toPromise();
console.log('result', result) let despachosPr = result.reverse().filter(data => data.activityInstanceName == "Tarefa de Despacho");
let despachosPr = result.reverse().filter(data => data.workflowInstanceDataFields.Status == "Active"); console.log(despachosPr);
console.log('despachosPr', despachosPr);
despachosPr.forEach( (element, index) => { despachosPr.forEach( (element, index) => {
@@ -7,7 +7,7 @@
</button> </button>
</div> </div>
</div> </div>
<!-- <ion-toolbar> <ion-toolbar>
<ion-segment [(ngModel)]="segment" (ionChange)="segmentChanged($event)"> <ion-segment [(ngModel)]="segment" (ionChange)="segmentChanged($event)">
<ion-segment-button value="validar"> <ion-segment-button value="validar">
Diplomas por validar Diplomas por validar
@@ -16,7 +16,7 @@
Diplomas assinados PR Diplomas assinados PR
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
</ion-toolbar> --> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)"> <ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
@@ -53,7 +53,7 @@ async LoadList(){
console.log(diplomas); console.log(diplomas);
switch (this.segment) { switch (this.segment) {
case 'validar': case 'validar':
let diplomasValidar = diplomas.reverse().filter(data => data.workflowInstanceDataFields.Status == "Revising"); let diplomasValidar = diplomas.reverse().filter(data => data.activityInstanceName == "Revisar Diploma");
console.log(diplomasValidar); console.log(diplomasValidar);
diplomasValidar.forEach(element => { diplomasValidar.forEach(element => {
let DocId = element.workflowInstanceDataFields.FolderID; let DocId = element.workflowInstanceDataFields.FolderID;
@@ -30,7 +30,9 @@
<ion-item <ion-item
class="item ion-no-padding width-100 cursor-pointer" class="item ion-no-padding width-100 cursor-pointer"
*ngFor="let event of eventsMDGPRList" *ngFor="let event of eventsMDGPRList"
(click)="openApproveModal(event)"> (click)="goToEventDetail(event)"
>
<!-- (click)="openApproveModal(event)" -->
<div class="event-mdgpr-{{event.workflowInstanceDataFields.Agenda}} width-100"> <div class="event-mdgpr-{{event.workflowInstanceDataFields.Agenda}} width-100">
<div class="approve-event-time"> <div class="approve-event-time">
<p>{{event.workflowInstanceDataFields.StartDate | date: 'hh:mm'}}</p> <p>{{event.workflowInstanceDataFields.StartDate | date: 'hh:mm'}}</p>
@@ -4,7 +4,7 @@ import { EventPerson } from 'src/app/models/eventperson.model';
import { Event } from 'src/app/models/event.model'; import { Event } from 'src/app/models/event.model';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { ModalController, NavParams } from '@ionic/angular'; import { ModalController, NavParams } from '@ionic/angular';
import { NavigationEnd, Router } from '@angular/router'; import { NavigationEnd, NavigationExtras, Router } from '@angular/router';
import { ApproveEventComponent } from '../../agenda/approve-event/approve-event.component'; import { ApproveEventComponent } from '../../agenda/approve-event/approve-event.component';
@Component({ @Component({
@@ -70,6 +70,23 @@ export class EventsToApprovePage implements OnInit {
}); });
} }
goToEventDetail(eventToAprove){
let InstanceId;
if(!eventToAprove.workflowInstanceDataFields.hasOwnProperty('InstanceId')){
InstanceId = ''
} else {
InstanceId =eventToAprove.workflowInstanceDataFields.InstanceId
}
let navigationExtras: NavigationExtras = {
queryParams: {
"serialNumber": eventToAprove.serialNumber,
}
};
this.router.navigate(['/home/gabinete-digital/event-list/approve-event'], navigationExtras)
}
async openApproveModal(eventToAprove) { async openApproveModal(eventToAprove) {
let classs; let classs;
if( window.innerWidth <= 800){ if( window.innerWidth <= 800){
+13
View File
@@ -464,5 +464,18 @@
color: #ffffff; color: #ffffff;
--color: #ffffff; --color: #ffffff;
} }
.exp-workflow{
float: left;
margin-left: 15px;
.label{
border-radius: 20px;
background: #ffb703;
font-size: 12px;
float: right;
padding: 2.5px 13.5px 2.5px 13.5px;
color: #fff;
}
}