Stylish approve-event-modal

Change colors at PR list of events to approve
This commit is contained in:
Tiago Kayaya
2020-11-16 00:41:11 +01:00
parent 2738f8be67
commit e8642224ee
19 changed files with 400 additions and 85 deletions
@@ -1,24 +1,34 @@
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-back-button defaultHref="" (click)="close()"></ion-back-button>
</ion-buttons>
<ion-title>{{loadedEvent.workflowInstanceDataFields.Subject}}</ion-title>
</ion-toolbar>
<ion-header class="ion-no-border">
<div class="header-content">
<div class="header-icon-left">
<ion-icon (click)="close()" src="assets/images/icons-arrow-arrow-left.svg"></ion-icon>
</div>
<div class="header-title">
<label>{{loadedEvent.workflowInstanceDataFields.Subject}}</label>
</div>
<div class="header-icon-right">
<ion-icon src="assets/images/icons-edit.svg"></ion-icon>
</div>
</div>
</ion-header>
<ion-content>
<ion-item lines="none">
<p class="location-detail">{{loadedEvent.workflowInstanceDataFields.Location}}</p>
<ion-button class="button-calendar-type" class="button-calendar-type" slot="end">{{loadedEvent.workflowInstanceDataFields.Agenda}}</ion-button>
</ion-item>
<ion-item>
<ion-label>
<p>{{loadedEvent.workflowInstanceDataFields.StartDate | date: 'fullDate'}}</p>
<p>das {{loadedEvent.workflowInstanceDataFields.StartDate | date: 'hh:mm'}} às {{loadedEvent.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p>
<p>(Não se repete)</p>
</ion-label>
</ion-item>
<div class="main-content">
<div class="content-location">
<div class="location-detail">
<ion-label >{{loadedEvent.workflowInstanceDataFields.Location}}</ion-label>
</div>
<div class="button-calendar-type">
<ion-button class="button-calendar-type" slot="end">{{loadedEvent.workflowInstanceDataFields.Agenda}}</ion-button>
</div>
</div>
<ion-label>
<p>{{customDate}}</p>
<p>das {{loadedEvent.workflowInstanceDataFields.StartDate | date: 'hh:mm'}} às {{loadedEvent.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p>
<p>(Não se repete)</p>
</ion-label>
</div>
<ion-item>
<ion-label>
<h3>Intervenientes</h3>
@@ -31,17 +41,20 @@
<p>{{loadedEvent.workflowInstanceDataFields.Body}}</p>
</ion-label>
</ion-item>
<ion-item lines="none">
<ion-label>
<h3>Documentos</h3>
<div>
<ion-item>
<ion-label>Documentos Anexados</ion-label>
</ion-item>
<ion-list>
<ion-item>
<ion-label>
<h4>Lei do Orçamento Geral do Estado</h4>
<p><span>MINEC, MINFIN</span><span>13/04/2020</span></p>
</ion-label>
</ion-item>
</ion-label>
</ion-item>
<ion-label>
<p class="attach-title-item">Receita por Natureza</p>
<p><span class="span-left">OAPR - GTI</span><span class="span-right">13/04/2020<!-- {{ task.CreateDate | date: 'dd-MM-yy' }} --></span></p>
</ion-label>
</ion-item>
</ion-list>
</div>
</ion-content>
<ion-footer>
<ion-toolbar>
@@ -56,7 +69,7 @@
<ion-button class="button-approve" shape="round" (click)="approveTask(loadedEvent.serialNumber)">Aprovar</ion-button>
</p>
</ion-item>
<ion-item>
<ion-item hidden>
<p>
<ion-button class="button-reject" shape="round" (click)="rejectTask(loadedEvent.serialNumber)">Rejeitar</ion-button>
</p>
@@ -1,26 +1,101 @@
ion-toolbar{
padding: 10px;
ion-content{
--padding-top:0px;
--padding-start: 20px;
--padding-end: 20px;
font-size: 18px;
}
.header-content{
width: 360px;
overflow: auto;
margin: 25px auto;
}
.header-icon-left{
width: 36px;
font-size: 33px;
color: #42b9fe;
float: left;
}
.header-title{
width: 264px;
font-family: Roboto;
font-size: 25px;
margin: 0 5px 0 5px;
padding: 0;
color:#000;
float: left;
}
.header-icon-right{
width: 45px;
font-size: 45px;
float: left;
overflow: auto;
}
.main-content{
margin-left: 50px;
overflow: auto;
}
.content-location{
width: 360px;
margin: 0 auto;
padding: 0;
overflow: auto;
}
.location-detail{
font-size: 18px;
width: 210px;
font-weight: 700;
float: left;
margin: 5px 5px 5px 0px;
}
.button-calendar-type{
width: 91px;
height: 25px;
--border-radius: 12.5px;
--background: #ffb703;
margin-left: 5px;
float: left;
}
.button-edit-event {
.button-calendar-type ion-button{
height: 25px;
}
.button-edit-event {
width: 140px;
height: 44px;
border-radius: 22.5px;
--background: #e0e9ee;
--color:#061b52;
}
.attach-document{
font-size: 15px;
color: #0d89d1;
margin: 5px 5px 5px 10px;
padding: 5px;
float: left;
}
.attach-icon{
width: 37px;
font-size: 35px;
float: left;
}
.attach-title-item{
width: 100%;
font-size: 15px;
color:#0d89d1;
}
/* SPAN */
.span-left{
float: left;
font-size: 15x;
}
.span-right{
text-align: right;
float: right;
font-size: 13px;
}
.button-options {
height: 44px;
--color: #42b9fe;
opacity: 0;
/* opacity: 0; */
}
.button-approve {
width: 140px;
@@ -34,4 +109,4 @@ ion-toolbar{
--color: #d30a0a;
border-radius: 22.5px;
--background: #ffe0e0;
}
}
@@ -14,6 +14,17 @@ export class ApproveEventModalPage implements OnInit {
event: Event;
loadedEvent:any;
serialNumber:string;
customDate:any;
today:any;
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"];
constructor(
private router:Router,
@@ -24,10 +35,16 @@ export class ApproveEventModalPage implements OnInit {
)
{
this.serialNumber = this.navParams.get('serialNumber');
}
ngOnInit() {
this.getTask();
console.log(this.today);
}
close(){
@@ -39,6 +56,10 @@ export class ApproveEventModalPage implements OnInit {
this.processes.GetTask(this.serialNumber).subscribe(res => {
console.log(res);
this.loadedEvent = res;
this.today = new Date(res.workflowInstanceDataFields.StartDate);
console.log(new Date(this.today));
this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]);
})
}
approveTask(serialNumber:string){
@@ -30,7 +30,7 @@
<ion-item-sliding>
<ion-item class="Rectangle" lines="none"
*ngFor="let event of eventsMDGPRList" (click)="openApproveModal(event.serialNumber)">
<div class="content-{{event.workflowInstanceDataFields.Agenda}}">
<div class="content-mdgpr-{{event.workflowInstanceDataFields.Agenda}}">
<div class="approve-event-time">
<p>{{event.workflowInstanceDataFields.StartDate | date: 'hh:mm'}}</p>
<p>{{event.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p>
@@ -50,7 +50,7 @@
<ion-item-sliding>
<ion-item class="Rectangle" lines="none"
*ngFor="let event of eventsPRList" (click)="openApproveModal(event.serialNumber)">
<div class="content-{{event.workflowInstanceDataFields.Agenda}}">
<div class="content-pr-{{event.workflowInstanceDataFields.Agenda}}">
<div class="approve-event-time">
<p>{{event.workflowInstanceDataFields.StartDate | date: 'hh:mm'}}</p>
<p>{{event.workflowInstanceDataFields.EndDate | date: 'hh:mm'}}</p>
@@ -12,18 +12,30 @@ ion-item-sliding{
margin-bottom: 10px;
overflow: auto;
}
.content-Oficial{
.content-mdgpr-Oficial{
width: 340px;
border-radius: 5px;
border-right: 5px solid #99e47b;
overflow: auto;
}
.content-Pessoal{
.content-mdgpr-Pessoal{
width: 340px;
border-radius: 5px;
border-right: 5px solid #958bfc;
overflow: auto;
}
.content-pr-Oficial{
width: 340px;
border-radius: 5px;
border-right: 5px solid #ffb703;
overflow: auto;
}
.content-pr-Pessoal{
width: 340px;
border-radius: 5px;
border-right: 5px solid #f05d5e;
overflow: auto;
}
.approve-event-time{
float: left;
@@ -40,7 +40,6 @@ export class EventListPage implements OnInit {
LoadToApproveEvents(){
this.showLoader = true;
console.log(this.showLoader);
this.processes.GetToApprovedEvents('PR','false').subscribe(res=>{
this.showLoader = false;
@@ -0,0 +1,29 @@
ion-header{
padding: 20px 20px 0px 20px;
}
ion-content{
--padding-top: 20px;
--padding-start: 15px;
--padding-end: 20px;
}
.container-footer{
margin:0 auto;
overflow: auto;
}
.button-cancel {
width: 170px;
height: 44px;
border-radius: 22.5px;
--background: #e0e9ee;
--color: #061b52;
margin:10px;
}
.button-save {
width: 170px;
height: 44px;
border-radius: 22.5px;
--background: #42b9fe;
--color:#ffffff;
margin:10px;
}
@@ -2,8 +2,9 @@
<ion-item lines="none">
<ion-label class="title">Convocar Reunião</ion-label>
</ion-item>
<div class="ion-item-container">
<ion-input placeholder="Assunto"></ion-input>
<ion-input placeholder="Assunto" value="{{task.Folio}}"></ion-input>
</div>
<div class="container-div">
@@ -60,8 +61,18 @@
<div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-person.svg"></ion-icon>
</div>
<div class="ion-input-class">
<ion-input placeholder="Intervenientes"></ion-input>
<div class="ion-input-class-no-height">
<div class="list-people">
<ion-item lines="none">
<ion-list>
<ion-label *ngIf="!taskParticipants" class="list-people-title">Adicionar intervenientes</ion-label>
<ion-label *ngFor="let participant of taskParticipants">{{participant.Name}}</ion-label>
</ion-list>
</ion-item>
</div>
<div class="add-people">
<ion-icon (click)="addParticipants()" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
</div>
</div>
</div>
</div>
@@ -71,8 +82,18 @@
<div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-people-cc.svg"></ion-icon>
</div>
<div class="ion-input-class">
<ion-input placeholder="Com Conhecimento"></ion-input>
<div class="ion-input-class-no-height">
<div class="list-people">
<ion-item lines="none">
<ion-list>
<ion-label *ngIf="!taskParticipantsCc" class="list-people-title">Com conhecimento</ion-label>
<ion-label *ngFor="let participant of taskParticipantsCc">{{participant.Name}}</ion-label>
</ion-list>
</ion-item>
</div>
<div class="add-people">
<ion-icon (click)="addParticipantsCc()" slot="start" src="assets/images/icons-arrow-forward.svg"></ion-icon>
</div>
</div>
</div>
</div>
@@ -60,14 +60,21 @@ ion-select{
border-radius: 5px;
overflow: auto;
}
.container-footer{
margin:0 auto;
overflow: auto;
}
.attach-icon{
width: 37px;
font-size: 35px;
.list-people{
width: 256px;
float: left;
}
.add-people{
width: 45px;
float: right;
overflow: auto;
font-size: 25px;
padding: 10px;
}
.list-people-title{
/* font-size: 13px; */
color: #797979;
}
.attach-document{
font-size: 15px;
@@ -76,6 +83,16 @@ ion-select{
padding: 5px;
float: left;
}
.attach-icon{
width: 37px;
font-size: 35px;
float: left;
}
.attach-title-item{
width: 100%;
font-size: 15px;
color:#0d89d1;
}
/* SPAN */
.span-left{
float: left;
@@ -86,11 +103,6 @@ text-align: right;
float: right;
font-size: 13px;
}
.attach-title-item{
width: 100%;
font-size: 15px;
color:#0d89d1;
}
.container-footer{
margin:0 auto;
overflow: auto;
@@ -1,6 +1,8 @@
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ModalController } from '@ionic/angular';
import { ModalController, NavParams } from '@ionic/angular';
import { AddParticipantsCcModalPage } from '../add-participants-cc-modal/add-participants-cc-modal.page';
import { AddParticipantsModalPage } from '../add-participants-modal/add-participants-modal.page';
@Component({
selector: 'app-book-meeting-modal',
@@ -8,11 +10,17 @@ import { ModalController } from '@ionic/angular';
styleUrls: ['./book-meeting-modal.page.scss'],
})
export class BookMeetingModalPage implements OnInit {
task: any;
taskParticipants: any;
taskParticipantsCc: any;
constructor(private modalController: ModalController,
private router:Router,) { }
private router:Router,
private navParams: NavParams,
) { }
ngOnInit() {
this.task = this.navParams.get('task');
}
close(){
@@ -26,4 +34,37 @@ export class BookMeetingModalPage implements OnInit {
}
async addParticipants(){
const modal = await this.modalController.create({
component: AddParticipantsModalPage,
componentProps: {
},
cssClass: 'add-participants-modal',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then((res) => {
this.taskParticipants = res.data;
/* console.log(this.taskParticipants.data); */
});
}
async addParticipantsCc(){
const modal = await this.modalController.create({
component: AddParticipantsCcModalPage,
componentProps: {
},
cssClass: 'add-participants-cc-modal',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then((res) => {
this.taskParticipantsCc = res.data;
/* console.log(this.taskParticipants.data); */
});
}
}
@@ -3,7 +3,7 @@
<ion-label class="title">{{modalTitle[taskType]}}</ion-label>
</ion-item>
<div class="ion-item-container">
<ion-input placeholder="Assunto"></ion-input>
<ion-input placeholder="Assunto" [(ngModel)]="taskSubject"></ion-input>
</div>
<div class="container-div">
@@ -12,7 +12,7 @@
<ion-icon slot="start" src="assets/images/icons-description.svg"></ion-icon>
</div>
<div class="ion-input-class">
<ion-input class="add-border" placeholder="Descrição"></ion-input>
<ion-input class="add-border" placeholder="Descrição" [(ngModel)]="taskDescription"></ion-input>
</div>
</div>
</div>
@@ -78,6 +78,12 @@ ion-select{
font-size: 15px;
color: #0d89d1;
}
.attach-title-item{
width: 100%;
font-size: 15px;
color:#0d89d1;
}
/* SPAN */
.span-left{
float: left;
@@ -88,11 +94,6 @@ text-align: right;
float: right;
font-size: 13px;
}
.attach-title-item{
width: 100%;
font-size: 15px;
color:#0d89d1;
}
.container-footer{
margin:0 auto;
overflow: auto;
@@ -2,6 +2,10 @@ import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ModalController, NavParams } from '@ionic/angular';
import { EventPerson } from 'src/app/models/eventperson.model';
import { AuthService } from 'src/app/services/auth.service';
import { ProcessesService } from 'src/app/services/processes.service';
import { StorageService } from 'src/app/services/storage.service';
import { AddParticipantsCcModalPage } from '../add-participants-cc-modal/add-participants-cc-modal.page';
import { AddParticipantsModalPage } from '../add-participants-modal/add-participants-modal.page';
@Component({
@@ -17,28 +21,71 @@ export class ExpedientTaskModalPage implements OnInit {
'Solicitar Deferimento'
];
taskType:number;
task: any;
taskParticipants: any;
taskParticipantsCc: any;
taskSubject: string;
taskDescription: string;
constructor(
private modalController: ModalController,
private router:Router,
private processes:ProcessesService,
private navParams: NavParams,
private authService: AuthService,
) { }
ngOnInit() {
this.taskType = this.navParams.get('taskType');
this.taskType = this.navParams.get('taskAction');
this.task = this.navParams.get('task');
console.log(this.task);
this.taskSubject = this.task.workflowInstanceFolio;
this.authService.userData$.subscribe((res:any)=>{
console.log(res);
});
}
close(){
this.router.navigate(['/home/gabinete-digital/expediente']);
this.modalController.dismiss(null);
}
/* if(this.modalTitle[this.taskType]){
} */
cancelTask(){
this.modalController.dismiss(null);
}
saveTask(){
let body = {
"distributionType": "Paralelo",
"deadline": "2020-11-13T12:55:39.5281471+01:00",
"userEmail": "gilson.manuel@gabinetedigital.local",
"dispatchFolder": {
"Nad": 30,
"Subject": this.taskSubject,
"Message": this.taskDescription,
"SourceSecFsId": this.task.workflowInstanceDataFields.FsId,
"SourceType": "DOC",
"SourceId": this.task.workflowInstanceDataFields.DocId,
},
"usersSelected": [
{
"UserId": "GABINETEDIGITAL\\gilson.manuel",
"UserType": "CC",
"DeadLine": "2020-11-13T12:55:39.5381237+01:00"
},
{
"UserId": "GABINETEDIGITAL\\tiago.kayaya",
"UserType": "I",
"DeadLine": "2020-11-13T12:55:39.5381237+01:00"
}
]
}
this.processes.DispatchTask(body);
this.router.navigate(['/home/gabinete-digital/expediente']);
this.modalController.dismiss(null);
}
async addParticipants(){
@@ -59,10 +106,10 @@ export class ExpedientTaskModalPage implements OnInit {
}
async addParticipantsCc(){
const modal = await this.modalController.create({
component: AddParticipantsModalPage,
component: AddParticipantsCcModalPage,
componentProps: {
},
cssClass: 'add-participants-modal',
cssClass: 'add-participants-cc-modal',
backdropDismiss: false
});
@@ -70,6 +117,7 @@ export class ExpedientTaskModalPage implements OnInit {
modal.onDidDismiss().then((res) => {
this.taskParticipantsCc = res.data;
/* console.log(this.taskParticipants.data); */
});
}
@@ -20,19 +20,19 @@
</ion-header>
<ion-content>
<ion-list>
<ion-item (click)="openExpedientActionsModal('0')">
<ion-item (click)="openExpedientActionsModal('0',fulltask)">
<ion-icon name="documents" slot="start"></ion-icon>
<ion-label>Efectuar Despacho</ion-label>
</ion-item>
<ion-item (click)="openExpedientActionsModal('1')">
<ion-item (click)="openExpedientActionsModal('1',fulltask)">
<ion-icon name="arrow-undo" slot="start"></ion-icon>
<ion-label>Pedido de Parecer</ion-label>
</ion-item>
<ion-item (click)="openExpedientActionsModal('2')">
<ion-item (click)="openExpedientActionsModal('2',fulltask)">
<ion-icon name="arrow-redo" slot="start"></ion-icon>
<ion-label>Pedido de Deferimento</ion-label>
</ion-item>
<ion-item (click)="openBookMeetingModal()">
<ion-item (click)="openBookMeetingModal(task)">
<ion-icon name="calendar" slot="start"></ion-icon>
<ion-label>Marcar reunião</ion-label>
</ion-item>
@@ -30,6 +30,7 @@ export class ExpedienteDetailPage implements OnInit {
private alertService: AlertService) { }
task: DailyWorkTask;
fulltask:any;
eventsList: Event[];
serialnumber:string;
@@ -57,6 +58,9 @@ export class ExpedienteDetailPage implements OnInit {
"CreateDate": formatDate(new Date(result.taskStartDate), 'yyyy-MM-dd HH:mm', 'pt'),
"DocumentURL": result.formURL
}
this.fulltask = result;
console.log(result);
});
}
@@ -93,11 +97,12 @@ export class ExpedienteDetailPage implements OnInit {
this.menu.open();
}
async openExpedientActionsModal(taskType:any){
async openExpedientActionsModal(taskAction:any, task:any){
const modal = await this.modalController.create({
component: ExpedientTaskModalPage,
componentProps:{
taskType: taskType,
taskAction: taskAction,
task: task,
},
cssClass: 'expedient-task-modal',
backdropDismiss: false
@@ -113,11 +118,11 @@ export class ExpedienteDetailPage implements OnInit {
this.router.navigate(['/home/gabinete-digital/expediente']);
}
async openBookMeetingModal(eventSerialNumber){
async openBookMeetingModal(task:any){
const modal = await this.modalController.create({
component: BookMeetingModalPage,
componentProps:{
serialNumber: eventSerialNumber,
task: task,
},
cssClass: 'book-meeting-modal',
backdropDismiss: false