tiny changes

This commit is contained in:
Eudes Inácio
2023-07-21 09:39:40 +01:00
72 changed files with 1156 additions and 1758 deletions
+1
View File
@@ -94,3 +94,4 @@ src/app/pipes/process.service.ts
/.angular /.angular
./.angular ./.angular
src/app/domain
+8
View File
@@ -276,6 +276,14 @@ const routes = [
}, },
{ {
path: 'tiny-mce', path: 'tiny-mce',
loadChildren: () => import('./tiny-mce/tiny-mce.module').then( m => m.TinyMCEPageModule)
},
{
path: 'task-detail-content',
loadChildren: () => import('./shared/gabinete-digital/generic/task-detail-content/task-detail-content.module').then( m => m.TaskDetailContentPageModule)
},
{
path: 'task-detail-header',
loadChildren: () => import('./shared/gabinete-digital/generic/task-detail-header/task-detail-header.module').then( m => m.TaskDetailHeaderPageModule) loadChildren: () => import('./shared/gabinete-digital/generic/task-detail-header/task-detail-header.module').then( m => m.TaskDetailHeaderPageModule)
} }
View File
-51
View File
@@ -1,51 +0,0 @@
import { ProcessesService } from "src/app/services/processes.service";
import { GenericBehaviorProcess } from "./GenericBehaviorTaskActions";
// check 1
export class DiplomaGenerates {
processes: ProcessesService
/**
* @activityInstanceName 'All'
* @returns
*/
async SendDiploma({note = '', docs = [], serialnumber}) {
let body = {
"serialNumber": serialnumber,
"action": "Enviar diploma",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" : docs,
}
return await this.processes.CompleteTask(body).toPromise();
}
/**
* @activityInstanceName 'All'
* @returns
*/
delegate(task: any, note, EmailAddress) {
return GenericBehaviorProcess.Delegate(task, note, EmailAddress)
}
/**
* @activityInstanceName 'All'
* @returns
*/
async sendExpedienteToPending(serialnumber) {
this.processes.SetTaskToPending(serialnumber).toPromise();
}
/**
* need to work on
* @activityInstanceName 'All'
* @returns
*/
static async setUpMeeting() {}
}
-63
View File
@@ -1,63 +0,0 @@
import { AttachmentList } from "src/app/models/Excludetask";
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service";
// check
export class DiplomasSignPrDomain {
processes: ProcessesService
/**
* @activityInstanceName 'Diploma Assinado'
* @description arquivar
* @param note
* @param documents
* @param serialNumber
* @returns
*/
async archive(note: string, documents: AttachmentList, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body)
}
/**
* @activityInstanceName 'Diploma Assinado',
* @description Concluir
* @param note
* @param documents
* @param serialNumber
* @returns
*/
async conclude(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Concluir",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise();
}
/**
* @activityInstanceName 'Diploma Assinado',
*/
static async PerformeDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)
}
}
-83
View File
@@ -1,83 +0,0 @@
import { AttachmentList } from "src/app/models/Excludetask";
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service";
// check
export class DiplomasSignPrDomain {
static processes: ProcessesService
/**
* @description arquivar
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async archive(note: string, documents: AttachmentList, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body).toPromise();
}
/**
* @description Concluir
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async finish(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Concluir",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise();
}
/**
* @activityInstanceName
*/
static async PerformeDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)}
/**
*
* @param param0
* @returns
*/
static async sign({note, documents, serialNumber, activityInstanceName}) {
let body = {
"serialNumber": serialNumber,
"action": "Assinado",
"ActionTypeId": 99999842,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body).toPromise();
}
}
@@ -1,93 +0,0 @@
import { AttachmentList } from "src/app/models/Excludetask"
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service"
// check
export class DiplomasValidate {
static processes: ProcessesService
static p: any
/**
* @pt solicitar assinatura
* @activityInstanceName 'Revisar Diploma'
* @description Solicitar assinatura do Presidente
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async askSignature(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Aprovar",
"ActionTypeId": 99999840,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @activityInstanceName 'Revisar Diploma',
* @description Solicitar alteração
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async askToChange(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Retificar",
"ActionTypeId": 99999841,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @activityInstanceName 'Revisar Diploma', 'Diploma Assinado',
* @description Arquivar
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async archive(note: string, documents: AttachmentList, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body)
}
/**
* @activityInstanceName 'Revisar Diploma', 'Diploma Assinado',
*/
static async PerformeDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)
}
/**
* need to work on
* @activityInstanceName 'Revisar Diploma'
*/
static async setUpMeeting() {}
}
-128
View File
@@ -1,128 +0,0 @@
import { ProcessesService } from "src/app/services/processes.service";
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { task } from "src/app/models/ExpedientTaskModalPage";
function prohibited (a: any) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("first(): called");
};
}
function permited (a: any) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("first(): called");
};
}
export class DispatchDomain {
static processes: ProcessesService
/**
* @pt arquivar
* @activityInstanceName 'Concluir Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
@prohibited({userRoleId:[], permission:[]})
static async archive(note:string, documents:any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @pt executado
* @activityInstanceName 'Tarefa de Despacho', 'Reexecutar Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
* @emits finish proceses
*/
static async executed(note:string, documents:any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Conhecimento",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @pt reexecutar
* @activityInstanceName 'Concluir Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async rerun(note:string, documents:any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Reexecução",
"ActionTypeId": 100000010,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @activityInstanceName 'Concluir Despacho', 'Reexecutar Despacho', 'Tarefa de Despacho'
* @param SerialNumber
*/
static async sendToPending(SerialNumber) {
this.processes.SetTaskToPending(SerialNumber).toPromise();
}
/**
* @pt pedido de parecer
* @activityInstanceName 'Reexecutar Despacho', 'Tarefa de Despacho'
*/
static async requestAppear() {
return GenericBehaviorProcess.RequestAppear(task, {})
}
/**
* @pt Efetuar Despacho
* @activityInstanceName 'Concluir Despacho', 'Reexecutar Despacho', 'Tarefa de Despacho'
*/
static async PerformeDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)
}
/**
* @pt marcar reunião
* @activityInstanceName 'Concluir Despacho', 'Reexecutar Despacho', 'Tarefa de Despacho'
*/
static async setUpMeeting() {}
/**
* @activityInstanceName 'Reexecutar Despacho' , 'Tarefa de Despacho'
*/
static async Delegar(task, note, taskParticipants) {
return GenericBehaviorProcess.Delegate(task, note, taskParticipants)
}
}
-171
View File
@@ -1,171 +0,0 @@
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service"
export class DispatchPrDomain {
static processes: ProcessesService
/**
* @pt executado
* @activityInstanceName 'Tarefa de Despacho',
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async executed(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Conhecimento",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return serialNumber
}
/**
* @pt gerar diploma
* @activityInstanceName 'Tarefa de Despacho',
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async SendDiploma(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Reencaminhar",
"ActionTypeId": 99999839,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @concluir
* @activityInstanceName 'Tarefa de Despacho',
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Conclude(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Executado",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @pt reexecutar
* @activityInstanceName 'Concluir Despacho',
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Rerun(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Reexecução",
"ActionTypeId": 100000010,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @activityInstanceName 'Tarefa de Despacho',
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async RequestAppear(task, postData) {
return GenericBehaviorProcess.RequestAppear(task, {})
}
/**
* @activityInstanceName 'Tarefa de Despacho', 'Concluir Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async SetUpMeeting() {}
/**
* @activityInstanceName 'Concluir Despacho', 'Tarefa de Despacho',
*/
static async sendToPending(serialNumber) {
return GenericBehaviorProcess.SetTaskToPending(serialNumber)
}
/**
* @pt Marcar como Concluido
* @activityInstanceName 'Concluir Despacho',
*/
static async MarkAsCompleted() {
let body = {
"serialNumber": 'serialNumber',
"action": "Executado",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList": 'documents',
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @pt Delegar
* @activityInstanceName 'Tarefa de Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Delegate(task: any, note, EmailAddress) {
return GenericBehaviorProcess.Delegate(task, note, EmailAddress)
}
/**
* @pt Efetuar Despacho
* @activityInstanceName 'Tarefa de Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
PerformeDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)
}
}
-189
View File
@@ -1,189 +0,0 @@
import { ProcessesService } from "src/app/services/processes.service";
import { GenericBehaviorProcess } from "./GenericBehaviorTaskActions";
export class Expediente {
processes: ProcessesService
/**
* @Pt Solicitar consideração superior, Aprovar
* @description
* @param note
* @param documents
* @param serialnumber
* @returns
* @Profile != PR
*/
async AskForSupeiorValidaiton(note:string, documents:any, serialnumber) {
let body = {
"serialNumber": serialnumber,
"action": "Aprovar",
"ActionTypeId": 100000004 ,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise();
}
/**
* check
* @PT Submeter para revisão
* @activityInstanceName 'Concluir Despacho', 'Tarefa de Despacho',
*/
async SendToReview(note:string, documents:any, serialnumber) {
let body = {
"serialNumber": serialnumber,
"action": "Retificar",
"ActionTypeId": 99999877,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* check
* @pt Arquivar
* @activityInstanceName 'Concluir Despacho', 'Tarefa de Despacho',
*/
async Archive(SerialNumber) {
let otherbody = {
"serialNumber": SerialNumber,
"action": "Passivo",
"ActionTypeId": 99999877,
"dataFields": {
"Note": "",
}
}
return await this.processes.CompleteTask(otherbody).toPromise()
}
/**
* @pt Enviar para pendentes
* @Profile PR
* @activityInstanceName 'Concluir Despacho', 'Tarefa de Despacho',
*/
SendToPending(serialnumber) {
this.processes.SetTaskToPending(serialnumber)
}
/**
* @Profile PR
* @pt Pedido de parecer
*/
async RequestOpinion() {
const postData = {
DistributionType: "Paralelo",
CountryCode: 'AO',
Priority: 'this.postData.Priority',
UserEmail: 'this.loggeduser.Email',
UsersSelected: 'attendees',
DispatchFolder: 'this.dispatchFolder',
AttachmentList: 'docs'
}
let ActionTypeId;
if('this.loggeduser.Profile'.concat('') != 'PR') {
ActionTypeId = 92
} else if ('this.loggeduser.Profile'.concat('') == 'PR' ) {
ActionTypeId = 99999881
}
let action_parecer = {
"serialNumber": 'this.task.serialNumber',
"action": "Tratado",
"ActionTypeId": ActionTypeId,
"dataFields": {
"Note": 'this.postData.DispatchFolder.Message',
}
}
if('this.loggeduser.Profile'.concat('') != 'PR') {
let taskResult = await this.processes.postParecer(postData).toPromise();
} else if ('this.loggeduser.Profile'.concat('') == 'PR' ) {
let taskResult = await this.processes.postParecerPr(postData).toPromise();
}
await this.processes.CompleteTask(action_parecer).toPromise();
}
/**
* @pt pedidod de deferimetno
*/
async defermentrequest() {
const postData = {
DistributionType: "Paralelo",
CountryCode: 'AO',
Priority: 'this.postData.Priority',
UserEmail: 'this.loggeduser.Email',
UsersSelected: 'attendees',
DispatchFolder: 'this.dispatchFolder',
AttachmentList: 'docs'
}
//
let action_deferimento = {
"serialNumber": 'this.task.serialNumber',
"action": "Tratado",
"ActionTypeId": 93,
"dataFields": {
"Note": 'this.postData.DispatchFolder.Message',
}
}
await this.processes.postDeferimento(postData).toPromise();
await this.processes.CompleteTask(action_deferimento).toPromise();
}
/**
* @pt Anexar Documentos
*/
addAttachment() {
let body = {
"InstanceID": 'this.task.InstanceID',
"WorkflowDisplayName": 'this.task.WorkflowName',
"FolderID": 'this.task.FolderId',
"DispatchNumber": 'this.task.DispatchNumber',
"AttachmentsProcessLastInstanceID": 'this.task.AttachmentsProcessLastInstanceID',
"Attachments": []
}
// const Attachments = this.searchDocumentPipe.transformToAttachment(element)
// body.Attachments = Attachments;
// await this.attachmentsService.AddAttachment(body).toPromise()
}
async PerformeDispatch(body) {
return await GenericBehaviorProcess.PerformeDispatch(body)
}
static async requestAppear(task) {
return await GenericBehaviorProcess.RequestAppear(task, {})
}
static async ApplicationForDeferment(task) {
return await GenericBehaviorProcess.ApplicationForDeferment(task, [], [], {}, '', '')
}
static async SetUpMeeting(task) {
return await GenericBehaviorProcess.SetUpMeeting(task, {})
}
}
@@ -1,308 +0,0 @@
import { AttachmentList } from "src/app/models/Excludetask";
import { ProcessesService } from "src/app/services/processes.service";
export class GenericBehaviorProcess {
static processes: ProcessesService
static p: any
static async SetUpMeeting(task, createEventFromData) {
const eventBody = {
BodyType: '1',
Text: 'this.postData.Body.Text',
}
// createEventFromData
const postData = {
EventId: '',
Subject: 'this.postData.Subject',
Body: 'this.eventBody',
Location: 'this.postData.Location',
CalendarId: '',
CalendarName: 'this.postData.CalendarName',
StartDate: 'this.dateStart',
EndDate: 'this.dateEnd',
EventType: 'Reunião',
Attendees: 'Attendees',
IsMeeting: false,
IsRecurring: false,
AppointmentState: 0,
TimeZone: 'UTC',
Organizer: null,
Category: 'Reunião',
HasAttachments: true,
EventRecurrence: {
Type: 'this.EventRecurrenceType',
LastOccurrence: 'this.Occurrence'
},
}
if(task.FsId == '8') {
try {
// const CalendarId = this.selectedCalendarId()
// await this.calendarService.genericPostExpedientEvent(task.DocId, this.postData, "",task.SerialNumber, task.FsId, CalendarId).toPromise();
// this.modalController.dismiss();
//this.httpErroHandle.httpsSucessMessagge('Marcar Reunião')
} catch (error) {
// this.httpErroHandle.httpStatusHandle(error)
}
finally {
// loader.remove()
}
}
else if(task.FsId == '361') {
try {
// const CalendarId = this.selectedCalendarId()
// await this.calendarService.genericCreateTaskEvent(task.FolderID | task.FolderId, this.postData, "",task.SerialNumber, task.FsId, CalendarId).toPromise();
// this.close();
// this.httpErroHandle.httpsSucessMessagge('Marcar Reunião')
} catch (error) {
// this.httpErroHandle.httpStatusHandle(error)
} finally {
// loader.remove()
}
}
}
static async SetTaskToPending(serialNumber) {
return await this.processes.SetTaskToPending(serialNumber).toPromise()
}
/**
* @description arquivar
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Archive(note: string, documents: AttachmentList, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body).toPromise();
}
/**
* @pt executado
* @activityInstanceName 'Tarefa de Despacho', 'Reexecutar Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
* @emits finish proceses
*/
static async Executed(note:string, documents:any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Conhecimento",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @pt reexecutar
* @activityInstanceName 'Concluir Despacho'
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Rerun(note:string, documents:any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Reexecução",
"ActionTypeId": 100000010,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return await this.processes.CompleteTask(body).toPromise()
}
/**
* @activityInstanceName 'Diploma Assinado',
* @description Concluir
* @param note
* @param documents
* @param serialNumber
* @returns
*/
static async Conclude(note: string, documents: any, serialNumber) {
let body = {
"serialNumber": serialNumber,
"action": "Concluir",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise();
}
static async Delegate(task: any, note, EmailAddress) {
let body = {
"SerialNumber": task.SerialNumber,
"DispatchDocId": task.DocId,
"FolderID": task.FolderId || task.FolderID,
"Subject": task.Folio,
"Comment": note,
"DelegatedUserEmail": EmailAddress,
}
return await this.processes.DelegateTask(body).toPromise()
}
/**
* @activityInstanceName 'Revisar Diploma', 'Diploma Assinado',
*/
static async PerformeDispatch(body: any) {
const postData = {
DistributionType: "Paralelo",
CountryCode: 'AO',
Priority: "this.postData.Priority",
UserEmail: "this.loggeduser.Email",
UsersSelected: "attendees",
DispatchFolder: "this.dispatchFolder",
AttachmentList: "docs"
}
if(this.p.userRole(['PR'])) {
return this.processes.postDespatchoPr(postData).toPromise();
} else {
return this.processes.postDespatcho(postData).toPromise();
}
}
static async RequestAppear(task, _postData) {
const postData = {
DistributionType: "Paralelo",
CountryCode: 'AO',
Priority: 'this.postData.Priority',
UserEmail: 'this.loggeduser.Email',
UsersSelected: 'attendees',
DispatchFolder: 'this.dispatchFolder',
AttachmentList: 'docs'
}
if (task.activityInstanceName == 'Tarefa de Despacho' || task.activityInstanceName == 'Reexecutar Despacho') {
if(this.p.userRole(['PR'])) {
await this.processes.postParecerPr(postData).toPromise();
} else {
await this.processes.postParecer(postData).toPromise();
}
let body;
if(task.activityInstanceName == 'Concluir Despacho'
|| task.activityInstanceName == 'Concluir Parecer'
|| task.activityInstanceName == 'Concluir Deferimento'
|| task.activityInstanceName == 'Tarefa de Deferimento'
) {
body = {
"serialNumber": task.serialNumber,
"action": "Parecer",
"ActionTypeId": 92,
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList" :' documents',
}
}
else {
body = {
"serialNumber": task.serialnumber,
"action": "Conhecimento",
"ActionTypeId": 92,
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList" : 'documents',
}
}
return this.processes.CompleteTask(body).toPromise();
} else {
if(this.p.userRole(['PR'])) {
await this.processes.postParecerPr(postData).toPromise();
} else {
await this.processes.postParecer(postData).toPromise();
}
const body = {
"serialNumber": task.serialNumber,
"action": "Parecer",
"ActionTypeId": 92, // Pedido de parece
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList" :null,
}
return this.processes.CompleteTask(body).toPromise();
}
}
static async ApplicationForDeferment(task, attendees, docs, dispatchFolder, Email, Priority) {
const postData = {
DistributionType: "Paralelo",
CountryCode: 'AO',
Priority: Priority,
UserEmail: Email,
UsersSelected: attendees,
DispatchFolder: dispatchFolder,
AttachmentList: docs
}
await this.processes.postDeferimento(postData).toPromise()
const body = {
"serialNumber": task.serialNumber,
"action": "Deferimento",
"ActionTypeId": 93, // Pedido de deferimento
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList" :null,
}
return this.processes.CompleteTask(body).toPromise();
}
}
@@ -1,75 +0,0 @@
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service"
export class RequestForApproval {
static processes: ProcessesService
/**
* @c 'Tarefa de Deferimento', 'Reapreciar Deferimento', 'Concluir Deferimento'
*/
static Archive(serialNumber, note, documents) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" :documents,
}
return this.processes.CompleteTask(body)
}
/**
* @activityInstanceName 'Tarefa de Deferimento', 'Reapreciar Deferimento', 'Concluir Deferimento'
*/
static async Delegate(task, serialNumber, note, EmailAddress) {
return GenericBehaviorProcess.Delegate(task, note, EmailAddress)
}
/**
* @evactivityInstanceNameent 'Tarefa de Deferimento', 'Reapreciar Deferimento', 'Concluir Deferimento'
*/
static PerfomeceDispatch(body) {
return GenericBehaviorProcess.PerformeDispatch(body)
}
/**
* @activityInstanceName 'Tarefa de Deferimento', 'Reapreciar Deferimento', 'Concluir Deferimento'
*/
static SetUpMeeting(task) {
return GenericBehaviorProcess.SetUpMeeting(task, {});
}
/**
* @activityInstanceName 'Tarefa de Deferimento', 'Concluir Deferimento', 'Reapreciar Deferimento'
*/
static SetTaskToPending(serialNumber) {
return GenericBehaviorProcess.SetTaskToPending(serialNumber)
}
/**
* @activityInstanceName 'Concluir Deferimento'
*/
static RequestAppear(task) {
return GenericBehaviorProcess.RequestAppear(task, {})
}
/**
* @pt Solicitar Reapreciação
* @activityInstanceName 'Concluir Deferimento'
*/
static RequestReview() {
let body = {
"serialNumber": 'this.serialnumber',
"action": "Reapreciação",
"ActionTypeId": 100000009,
"dataFields": {
"ReviewUserComment": 'note',
},
"AttachmentList": 'documents',
}
return this.processes.CompleteTask(body).toPromise()
}
}
@@ -1,97 +0,0 @@
import { GenericBehaviorProcess } from "src/app/domain/process/GenericBehaviorTaskActions"
import { ProcessesService } from "src/app/services/processes.service"
export class RequestForOpinion {
static processes: ProcessesService
/**
* @activityInstanceName 'Pedido de Parecer'
*/
static arquivar(serialNumber, note, documents) {
let body = {
"serialNumber": serialNumber,
"action": "Arquivo",
"ActionTypeId": 95,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList" : documents,
}
return this.processes.CompleteTask(body)
}
/**
* @activityInstanceName 'Pedido de Parecer'
*/
static EfetuarDespacho(body) {
return GenericBehaviorProcess.PerformeDispatch(body)}
/**
* @activityInstanceName 'Pedido de Parecer'
*/
static SolicitarParecer(task) {
return GenericBehaviorProcess.RequestAppear(task, {})
}
/**
* @profile != PR
* @activityInstanceName 'Pedido de Parecer'
*/
static RequestsForDeferment(task) {
return GenericBehaviorProcess.RequestAppear(task, {})
}
/**
* @activityInstanceName 'Pedido de Parecer'
*/
static setUpMeeting(){}
/**
* @activityInstanceName 'Pedido de Parecer'
*/
static SendToPeding(serialNumber){
return GenericBehaviorProcess.SetTaskToPending(serialNumber)
}
/**
* @pt Dar O Meu Parecer
* @activityInstanceName 'Pedido de Parecer', 'Pedido de Parecer do Presidente'
*/
static async GiveMyOpinion(serialNumber, note, documents) {
let body = {
"serialNumber": serialNumber,
"action": "Registar",
"ActionTypeId": 104,
"dataFields": {
"ReviewUserComment": note,
},
"AttachmentList": documents,
}
return await this.processes.CompleteTask(body).toPromise();
}
/**
* @activityInstanceName 'Pedido de Parecer', 'Pedido de Parecer do Presidente'
*/
static MarcarReuniao(task) {
return GenericBehaviorProcess.SetUpMeeting(task, {})
}
/**
* @Profile PR
* @pt Reencaminhar
* @activityInstanceName 'Pedido de Parecer do Presidente'
*/
static async Reencaminhar(serialNumber, note, documents, attendees, FolderId) {
let body = {
"usersSelected": attendees,
"serialNumber": serialNumber,
"action": "Reencaminhar",
"actionTypeId": 98,
"dataFields": {
"ReviewUserComment": note,
},
"FolderId": FolderId,
"AttachmentList" : documents,
}
return await this.processes.CompleteParecerPrTask(body).toPromise();
}
}
+3
View File
@@ -4,6 +4,8 @@ export interface ExpedienteFullTaskWorkflowInstanceDataFields {
Sender: string; Sender: string;
Subject: string; Subject: string;
Status: string; Status: string;
TaskMessage: string
InstanceID: string
} }
export interface ExpedienteFullTask { export interface ExpedienteFullTask {
@@ -17,4 +19,5 @@ export interface ExpedienteFullTask {
TaskStatus: string; TaskStatus: string;
taskReceiveDate: string taskReceiveDate: string
workflowInstanceDataFields: ExpedienteFullTaskWorkflowInstanceDataFields; workflowInstanceDataFields: ExpedienteFullTaskWorkflowInstanceDataFields;
} }
+43 -43
View File
@@ -45,59 +45,59 @@ export class DeleteMessageModel extends models.Model {
} }
models.register({ models.register({
databaseName: 'chat-storage'+environment.version.lastCommitNumber + environment.id, databaseName: 'chat-storage'+environment.version.lastCommitNumber + environment.id + Number(environment.storageProduction),
type: 'indexedDB', type: 'indexedDB',
version: 11, version: 11,
models: [MessageModel, DeleteMessageModel, attachments] models: [MessageModel, DeleteMessageModel, attachments]
}) })
// acçoes // // acçoes
export class ActionModel extends models.Model{ // export class ActionModel extends models.Model{
ProcessId = models.IntegerField({unique: true}) // ProcessId = models.IntegerField({unique: true})
Description = models.CharField() // Description = models.CharField()
Detail = models.CharField() // Detail = models.CharField()
DateBegin = models.CharField() // DateBegin = models.CharField()
DateEnd = models.CharField() // DateEnd = models.CharField()
ActionType = models.CharField() // ActionType = models.CharField()
} // }
export class PublicationFolderModel extends models.Model{ // export class PublicationFolderModel extends models.Model{
DateBegin = models.CharField() // DateBegin = models.CharField()
Description = models.CharField() // Description = models.CharField()
Detail = models.CharField() // Detail = models.CharField()
} // }
export class PublicationDetailsModel extends models.Model{ // export class PublicationDetailsModel extends models.Model{
DateIndex = models.CharField() // DateIndex = models.CharField()
DocumentId = models.IntegerField({unique: true}) // DocumentId = models.IntegerField({unique: true})
ProcessId = models.CharField() // ProcessId = models.CharField()
Title = models.CharField() // Title = models.CharField()
Message = models.CharField() // Message = models.CharField()
DatePublication = models.CharField() // DatePublication = models.CharField()
OriginalFileName = models.CharField() // OriginalFileName = models.CharField()
FileBase64 = models.CharField() // FileBase64 = models.CharField()
FileExtension = models.CharField() // FileExtension = models.CharField()
OrganicEntityId = models.IntegerField() // OrganicEntityId = models.IntegerField()
} // }
export class WebtrixUserModel extends models.Model { // export class WebtrixUserModel extends models.Model {
FullName = models.CharField() // FullName = models.CharField()
Role = models.CharField() // Role = models.CharField()
} // }
models.register({ // models.register({
databaseName: 'webtrix'+environment.version.lastCommitNumber + environment.id, // databaseName: 'webtrix'+environment.version.lastCommitNumber + environment.id + Number(environment.storageProduction),
type: 'indexedDB', // type: 'indexedDB',
version: 1, // version: 1,
models: [WebtrixUserModel] // models: [WebtrixUserModel]
}) // })
models.register({ // models.register({
databaseName: 'actions'+environment.version.lastCommitNumber + environment.id, // databaseName: 'actions'+environment.version.lastCommitNumber + environment.id + Number(environment.storageProduction),
type: 'indexedDB', // type: 'indexedDB',
version: 14, // version: 14,
models: [PublicationDetailsModel, ActionModel, PublicationFolderModel] // models: [PublicationDetailsModel, ActionModel, PublicationFolderModel]
}) // })
+5
View File
@@ -149,6 +149,9 @@ export class customTask {
TaskStatus: string TaskStatus: string
TaskReceiveDate: string TaskReceiveDate: string
Subject: string Subject: string
Note: string
InstanceID: string
} }
@@ -186,6 +189,8 @@ export interface ExpedienteTask {
Deadline: string Deadline: string
TaskStatus: string TaskStatus: string
TaskReceiveDate: string TaskReceiveDate: string
Note: string
InstanceID: string
} }
@@ -31,6 +31,19 @@
</div> </div>
</div> </div>
<div class="container-div width-100" >
<div class="ion-item-class-2 d-flex width-100">
<div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-calendar.svg"></ion-icon>
</div>
<div class="ion-input-class flex-grow-1 justify-center align-center material-inputs " [class.input-error]="Form?.get('CalendarName')?.invalid && validateFrom ">
<ion-input [disabled]=true autocomplete="on" autocorrect="on" spellcheck="true" placeholder="CalendarName*" [(ngModel)]="CalendarNameOwnerName"></ion-input>
</div>
</div>
</div>
<div class="container-div width-100"> <div class="container-div width-100">
<div class="ion-item-class-2"> <div class="ion-item-class-2">
<div class="ion-icon-class"> <div class="ion-icon-class">
@@ -58,15 +71,13 @@
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-calendar.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-calendar.svg"></ion-icon>
</div> </div>
<div class="ion-input-class flex-grow-1"> <div class="ion-input-class flex-grow-1 width-100">
<mat-form-field appearance="none" floatLabel="never" class="width-100 " > <mat-form-field appearance="none" floatLabel="never" class="width-100 " >
<mat-select placeholder="Selecione agenda*" [(ngModel)]="postEvent.CalendarName" >
<mat-option value="Oficial"> <mat-select [(value)]="postEvent.CalendarName" class="width-100" [disabled]=true>
Agenda Oficial <mat-option *ngFor="let calendars of CalendarNamesOptions" value="{{calendars}}">
</mat-option> Agenda {{ calendars }}
<mat-option value="Pessoal">
Agenda Pessoal
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
@@ -16,7 +16,7 @@ import { NgxMatDateFormats } from '@angular-material-components/datetime-picker'
import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker'; import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker';
import { SessionStore } from 'src/app/store/session.service'; import { SessionStore } from 'src/app/store/session.service';
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service' import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'
import { environment } from 'src/environments/environment';
const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { const CUSTOM_DATE_FORMATS: NgxMatDateFormats = {
parse: { parse: {
@@ -57,6 +57,9 @@ export class EditEventPage implements OnInit {
recurringTypes: any; recurringTypes: any;
selectedRecurringType: any; selectedRecurringType: any;
CalendarNameOwnerName = ''
CalendarNamesOptions = []
public date: any; public date: any;
public disabled = false; public disabled = false;
public showSpinners = true; public showSpinners = true;
@@ -82,11 +85,12 @@ export class EditEventPage implements OnInit {
public stepSeconds = [1, 5, 10, 15, 20, 25]; public stepSeconds = [1, 5, 10, 15, 20, 25];
sesseionStora = SessionStore sesseionStora = SessionStore
environment = environment
constructor( constructor(
private modalController: ModalController, private modalController: ModalController,
private navParams: NavParams, private navParams: NavParams,
private eventsService: EventsService, public eventsService: EventsService,
public alertController: AlertController, public alertController: AlertController,
private attachmentsService: AttachmentsService, private attachmentsService: AttachmentsService,
private toastService: ToastService, private toastService: ToastService,
@@ -134,6 +138,9 @@ export class EditEventPage implements OnInit {
this.getAttachments(this.postEvent.EventId); this.getAttachments(this.postEvent.EventId);
this.CalendarNameOwnerName = this.eventsService.detectCalendarNameByCalendarId(this.postEvent.CalendarId)
this.changeAgenda()
} }
ngOnInit() { ngOnInit() {
@@ -559,4 +566,27 @@ export class EditEventPage implements OnInit {
await modal.present(); await modal.present();
} }
changeAgenda() {
setTimeout(() => {
if(this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Oficial'] && this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Pessoal']) {
this.CalendarNamesOptions = ['Oficial', 'Pessoal']
} else if (this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Oficial']) {
this.CalendarNamesOptions = ['Oficial']
this.postEvent.CalendarName = 'Oficial'
} else if (this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Pessoal']) {
this.CalendarNamesOptions = ['Pessoal']
this.postEvent.CalendarName = 'Pessoal'
} else {
this.CalendarNamesOptions = ['Oficial', 'Pessoal']
}
}, 50)
}
} }
+10 -6
View File
@@ -630,9 +630,11 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
source: CameraSource.Camera source: CameraSource.Camera
}); });
const base64 = 'data:image/jpeg;base64,' + file.base64String const imageBase64 = 'data:image/jpeg;base64,' + file.base64String
const blob = this.dataURItoBlob(imageBase64)
console.log(imageBase64)
const blob = this.dataURItoBlob(base64)
const formData = new FormData(); const formData = new FormData();
formData.append("blobFile", blob); formData.append("blobFile", blob);
@@ -648,9 +650,8 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}], }],
temporaryData: formData, temporaryData: formData,
attachmentsModelData: { attachmentsModelData: {
fileBase64: await this.fileService.blobToBase64(blob), fileBase64: imageBase64,
} }
}) })
} }
@@ -747,9 +748,12 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
//const imageData = await this.fileToBase64Service.convert(file) //const imageData = await this.fileToBase64Service.convert(file)
// //
const response = await fetch('data:image/jpeg;base64,' + file.base64String!); const imageBase64 = 'data:image/jpeg;base64,' + file.base64String
const response = await fetch(imageBase64);
const blob = await response.blob(); const blob = await response.blob();
console.log(imageBase64)
const formData = new FormData(); const formData = new FormData();
formData.append("blobFile", blob); formData.append("blobFile", blob);
@@ -765,7 +769,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
"title_link_download": false, "title_link_download": false,
}], }],
attachmentsModelData: { attachmentsModelData: {
fileBase64: await this.fileService.blobToBase64(blob), fileBase64: imageBase64,
} }
}) })
@@ -66,12 +66,10 @@
<div class="bottom-content width-100"> <div class="bottom-content width-100">
<ion-list *ngIf="fulltask.Documents"> <ion-list *ngIf="fulltask.Documents">
<h5 class="font-17-rem">Documentos Anexados</h5> <h5 class="font-17-rem">Documentos Anexados</h5>
<ion-item *ngFor="let attachment of mergedArray" <ion-item *ngFor="let attachment of mergedArray" class="ion-no-margin ion-no-padding cursor-pointer">
class="ion-no-margin ion-no-padding cursor-pointer"> <ion-label (click)="viewDocument(attachment.DocId, attachment, attachment.content)">
<ion-label
(click)="viewDocument(attachment.DocId, attachment, attachment.content)">
<p *ngIf="attachment.Assunto" class="attach-title-item">{{ attachment.Assunto }}<span class="document-type" *ngIf="attachment.content != ''">Rascunho</span></p> <p *ngIf="attachment.Assunto" class="attach-title-item">{{ attachment.Assunto }}<span class="document-type" *ngIf="attachment.content != ''">Rascunho</span></p>
<p *ngIf="!attachment.Assunto" class="attach-title-item">{{ attachment.DocNumber }}<span class="span-right color-red btn-size"><ion-icon hidden name="close"></ion-icon></span></p> <p *ngIf="!attachment.Assunto" class="attach-title-item">{{ attachment.DocNumber }}<span class="span-right color-red btn-size"></span></p>
<p><span class="span-left">{{attachment.Sender}}</span><span class="span-right">{{ attachment.DocDate | date: 'dd/MM/yy' }}</span></p> <p><span class="span-left">{{attachment.Sender}}</span><span class="span-right">{{ attachment.DocDate | date: 'dd/MM/yy' }}</span></p>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -76,14 +76,6 @@ export class DespachoPrPage implements OnInit {
this.profile = "mdgpr"; 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.LoadTaskDetail(this.serialNumber);
// this.LoadRelatedEvents(this.serialNumber); // this.LoadRelatedEvents(this.serialNumber);
@@ -610,6 +602,7 @@ export class DespachoPrPage implements OnInit {
} }
getDocumentPdf(Documents: any) { getDocumentPdf(Documents: any) {
this.mergedArray = []
Documents.forEach(element => { Documents.forEach(element => {
let docObject = { let docObject = {
"ApplicationId": element.ApplicationId, "ApplicationId": element.ApplicationId,
@@ -9,6 +9,7 @@ import { DiplomaAssinarPageRoutingModule } from './diploma-assinar-routing.modul
import { DiplomaAssinarPage } from './diploma-assinar.page'; import { DiplomaAssinarPage } from './diploma-assinar.page';
import { SharedModule } from 'src/app/shared/shared.module'; import { SharedModule } from 'src/app/shared/shared.module';
import { BtnModalDismissPageModule } from 'src/app/shared/btn-modal-dismiss/btn-modal-dismiss.module'; import { BtnModalDismissPageModule } from 'src/app/shared/btn-modal-dismiss/btn-modal-dismiss.module';
import { TaskDetailsPageModule } from 'src/app/shared/gabinete-digital/generic/task-details/task-details.module';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -18,6 +19,7 @@ import { BtnModalDismissPageModule } from 'src/app/shared/btn-modal-dismiss/btn-
DiplomaAssinarPageRoutingModule, DiplomaAssinarPageRoutingModule,
BtnModalDismissPageModule, BtnModalDismissPageModule,
TaskDetailsPageModule
], ],
declarations: [DiplomaAssinarPage] declarations: [DiplomaAssinarPage]
}) })
@@ -86,6 +86,10 @@
<button (click)="Assinar()" class="btn-cancel" shape="round" >Assinado</button> <button (click)="Assinar()" class="btn-cancel" shape="round" >Assinado</button>
<div class="solid"></div> <div class="solid"></div>
</div> </div>
<div class="buttons">
<button (click)="AssinarNew()" class="btn-cancel" shape="round" >Assinar</button>
<div class="solid"></div>
</div>
<div class="buttons"> <div class="buttons">
<button (click)="openAddNoteModal('Arquivo')" class="btn-cancel" shape="round" >Arquivar</button> <button (click)="openAddNoteModal('Arquivo')" class="btn-cancel" shape="round" >Arquivar</button>
<div class="solid"></div> <div class="solid"></div>
@@ -203,9 +203,13 @@ export class DiplomaAssinarPage implements OnInit {
"action": "Assinado", "action": "Assinado",
"ActionTypeId": 99999842, "ActionTypeId": 99999842,
"dataFields": { "dataFields": {
"DraftIds": "",
"ReviewUserComment": '', "ReviewUserComment": '',
"InstanceIDNew": this.task.InstanceID,
},
"AttachmentList": {
"ProcessInstanceID": this.task.InstanceID
}, },
"AttachmentList": {},
} }
const loader = this.toastService.loading() const loader = this.toastService.loading()
@@ -225,6 +229,31 @@ export class DiplomaAssinarPage implements OnInit {
} }
async AssinarNew() {
let body = {
"InstanceId": this.task.InstanceID,
"FolderId": this.task.FolderID,
"DraftIds": "163;164;77",
"OriginalFileName": "Doc1;Doc2;Doc3"
}
const loader = this.toastService.loading()
try {
await this.processes.presidentialActionsSignature(body).toPromise()
this.httpErroHandle.httpsSucessMessagge('Assinado')
this.TaskService.loadDiplomas()
this.goBack();
} catch (error) {
this.httpErroHandle.httpStatusHandle(error)
}
finally {
loader.remove()
}
}
async openAddNoteModal(actionName: string) { async openAddNoteModal(actionName: string) {
let classs; let classs;
@@ -9,6 +9,7 @@ import { DiplomaPageRoutingModule } from './diploma-routing.module';
import { DiplomaPage } from './diploma.page'; import { DiplomaPage } from './diploma.page';
import { BtnModalDismissPageModule } from 'src/app/shared/btn-modal-dismiss/btn-modal-dismiss.module'; import { BtnModalDismissPageModule } from 'src/app/shared/btn-modal-dismiss/btn-modal-dismiss.module';
import { DiplomaOptionsPage } from 'src/app/shared/popover/deploma-options/deploma-options.page'; import { DiplomaOptionsPage } from 'src/app/shared/popover/deploma-options/deploma-options.page';
import { TaskDetailsPageModule } from 'src/app/shared/gabinete-digital/generic/task-details/task-details.module';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -17,6 +18,7 @@ import { DiplomaOptionsPage } from 'src/app/shared/popover/deploma-options/deplo
IonicModule, IonicModule,
DiplomaPageRoutingModule, DiplomaPageRoutingModule,
BtnModalDismissPageModule, BtnModalDismissPageModule,
TaskDetailsPageModule
], ],
entryComponents: [ entryComponents: [
DiplomaPage, DiplomaPage,
@@ -1,82 +1,20 @@
<ion-content class="container-wrapper"> <ion-content class="container-wrapper">
<div class="main-content d-flex height-100 overflow-hidden"> <div class="main-content d-flex height-100 overflow-hidden">
<div class="content d-flex flex-column" *ngIf="task">
<div class="main-header"> <app-task-details
<div class="title-content width-100 d-flex align-center justify-space-between"> *ngIf="task"
<div class="font-30-rem cursor-pointer d-flex align-center" (click)="goBack()" defaultHref="#"> [task]=task
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon> [intervenientes]=intervenientes
<ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " src="assets/images/theme/doneIt/icons-calendar-arrow-left.svg"></ion-icon> [cc]=cc
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " slot="end" src='assets/images/theme/gov/icons-calendar-arrow-left.svg'></ion-icon> [customDate]=customDate
</div> [mergedArray]="mergedArray"
<div class=" d-flex align-center flex-grow-1 "> (openOptions)= openOptions()
<ion-label class="title">{{ task.Folio}}</ion-label> (goBack)= goBack()
</div> (viewDocument)=viewDocument($event)
<div class="div-icon" (click)="openOptions()"> class="d-flex height-100 flex-column content"
<!-- <ion-menu-button autoHide="false"> ></app-task-details>
<ion-icon name="ellipsis-vertical-outline"></ion-icon>
</ion-menu-button> -->
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="font-25 cursor-pointer" src="assets/images/icons-menu.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="font-25 cursor-pointer" src="assets/images/theme/gov/icons-menu.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'doneIt' " class="font-25 cursor-pointer" src="assets/images/theme/{{ThemeService.currentTheme}}/icons-menu.svg"></ion-icon>
</div>
</div>
</div>
<div class="upper-content">
<div class="content-details">
<ion-label>
<p><span class="date">{{customDate}}</span></p>
</ion-label>
<ion-label>
<p><span class="color-red">{{ task.DeadlineType }}</span></p>
</ion-label>
<ion-label>
<p class="d-flex mt-10"><span class="label">{{ task.activityInstanceName }}</span></p>
</ion-label>
</div>
</div>
<div class="line"></div>
<div class="middle-content">
<h5 *ngIf="intervenientes">Intervenientes</h5>
<ion-item class="ion-no-margin ion-no-padding">
<ion-label>
<div *ngFor="let interveniente of intervenientes">
<p>{{interveniente.Name}}</p>
</div>
</ion-label>
</ion-item>
<div *ngIf="cc.length > 0">
<h5 class="font-17-rem">Com conhecimento</h5>
<ion-item class="ion-no-margin ion-no-padding">
<ion-label>
<div *ngFor="let c of cc">
<p>{{c.Name}}</p>
</div>
</ion-label>
</ion-item>
</div>
<div *ngIf="fulltask.workflowInstanceDataFields.TaskMessage">
<h5 class="font-17-rem">Detalhes</h5>
<ion-item class="ion-no-margin ion-no-padding">
<pre class="width-100 text">{{ fulltask.workflowInstanceDataFields.TaskMessage }} </pre>
</ion-item>
</div>
</div>
<div class="bottom-content width-100">
<ion-list>
<h5 >Documentos Anexados</h5>
<ion-item *ngFor="let attachment of mergedArray"
class="ion-no-margin ion-no-padding cursor-pointer"
>
<ion-label
(click)="viewDocument(attachment.DocId, attachment, attachment.content)">
<p *ngIf="attachment.Assunto" class="attach-title-item">{{ attachment.Assunto }} <span *ngIf="attachment.content != ''" class="document-type" >Rascunho</span> </p>
<p *ngIf="!attachment.Assunto" class="attach-title-item">{{ attachment.DocNumber }}<span class="span-right color-red btn-size"><ion-icon hidden name="close"></ion-icon></span></p>
<p><span class="span-left">{{attachment.Sender}}</span><span class="span-right">{{ attachment.DocDate | date: 'dd/MM/yy' }}</span></p>
</ion-label>
</ion-item>
</ion-list>
</div>
</div>
<div *ngIf="task" class="aside-right flex-column height-100 overflow-y-auto"> <div *ngIf="task" class="aside-right flex-column height-100 overflow-y-auto">
<div class="buttons" *ngIf="task.activityInstanceName == 'Revisar Diploma'"> <div class="buttons" *ngIf="task.activityInstanceName == 'Revisar Diploma'">
<button (click)="openAddNoteModal('Solicitar assinatura')" class="btn-cancel" shape="round" >Solicitar assinatura do Presidente</button> <button (click)="openAddNoteModal('Solicitar assinatura')" class="btn-cancel" shape="round" >Solicitar assinatura do Presidente</button>
@@ -5,171 +5,17 @@
border-top-right-radius: 25px; border-top-right-radius: 25px;
} }
.content{ .content{
padding: 30px 20px 0 20px !important;
margin: 0; margin: 0;
float: left; float: left;
} }
.color-red{
font-weight: 500;
color:#d30a0a !important;
}
.btn-size{
font-size: rem(18) !important;
}
.document-type{
border-radius: 20px;
background: var(--label-bg-color);
float: right;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
}
.main-header{
overflow: inherit !important;
overflow: inherit;
font-family: Roboto;
border-top-left-radius: 25px;
border-top-right-radius: 25px;
background-color: #fff;
overflow:auto;
color:#000;
transform: translate3d(0, 1px, 0);
.header-top{
margin: 0px auto;
overflow: auto;
padding: 0 !important;
background: #fff;
.middle{
padding: 0!important;
float: left;
width: 280px;
margin: 2.5px 0 0 5px;
display: flex;
align-items: center;
}
.right{
padding: 0!important;
float: right;
font-size: rem(25);
color: #0782c9;
margin: 5px 0 0 0;
}
}
.header-bottom{
width: 310px;
overflow: auto;
margin: 0 auto;
.header-bottom-icon{
width: rem(30);
font-size: rem(25);
float: left;
padding: 2px;
}
.header-bottom-contacts{
width: 275px;
font-size: rem(15);
color: #797979;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
float: left;
padding: 5px;
margin: 1px;
}
}
.title{
font-size: rem(25);
overflow: auto;
float: left;
padding-top: 4px;
padding-left: 5px;
}
.div-icon{
width: rem(40);
float: right;
font-size: rem(35);
overflow: auto;
padding: 1px;
}
}
ion-item-group{
margin: 15px;
}
ion-button{ ion-button{
display: block; display: block;
width: 80%; width: 80%;
margin: 20px auto; margin: 20px auto;
} }
.upper-content{
font-family: Roboto;
margin-left: 36px;
font-size: rem(18);
.label{
border-radius: 20px;
background: var(--label-bg-color);
float: right;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
font-size: rem(14);
}
.button-calendar-type ion-button{
height: rem(25);
}
.content-details{
font-size: rem(17);
.date{
color: #797979;
}
}
}
.middle-conten{
.middle-content p{
font-size: rem(16);
}
}
.bottom-content{
//width: 360px;
margin: 0 auto;
.bottom-content h3{
font-size: rem(16);
margin: 0 0 0 10px;
}
.attach-document{
font-size: rem(15);
color: var(--title-text-color);
margin: 5px 5px 5px 10px;
padding: 5px;
float: left;
}
.attach-icon{
width: 37px;
font-size: rem(35);
float: left;
}
.attach-title-item{
font-size: rem(18);
width: 100%;
color:#0d89d1;
padding-bottom: 5px;
}
/* SPAN */
.span-left{
float: left;
font-size: rem(15);
}
.span-right{
text-align: right;
float: right;
font-size: rem(13);
}
}
.aside-right{ .aside-right{
padding: 30px 20px 0 20px !important; padding: 30px 20px 0 20px !important;
@@ -84,7 +84,8 @@ export class DiplomaPage implements OnInit {
} }
async openOptions(taskAction?: any) { async openOptions() {
const popover = await this.popoverController.create({ const popover = await this.popoverController.create({
component: DiplomaOptionsPage, component: DiplomaOptionsPage,
cssClass: 'exp-options', cssClass: 'exp-options',
@@ -92,7 +93,6 @@ export class DiplomaPage implements OnInit {
serialNumber: this.serialNumber, serialNumber: this.serialNumber,
task: this.task, task: this.task,
fulltask: this.fulltask, fulltask: this.fulltask,
taskAction: taskAction,
showEnviarPendentes: false showEnviarPendentes: false
}, },
translucent: true translucent: true
@@ -190,7 +190,7 @@ export class DiplomaPage implements OnInit {
} }
async viewDocument(DocId: string, Document, content) { async viewDocument({Document, content}) {
if (Document.content == "") { if (Document.content == "") {
const modal = await this.modalController.create({ const modal = await this.modalController.create({
@@ -1,7 +1,4 @@
<ion-header class="ion-no-border header-2"> <ion-header class="ion-no-border header-2">
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</ion-refresher>
<app-task-list-header <app-task-list-header
[goBackButton] = true [goBackButton] = true
@@ -27,6 +24,9 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</ion-refresher>
<div class="main-content width-100 overflow-y-auto height-100"> <div class="main-content width-100 overflow-y-auto height-100">
@@ -79,6 +79,10 @@ export class EventListPage implements OnInit {
if(pr) { if(pr) {
this.segment = pr.OwnerUserId this.segment = pr.OwnerUserId
} }
this.dynamicSearch()
} else {
this.dynamicSearch()
} }
}) })
@@ -100,7 +100,6 @@ export class GabineteDigitalPage implements OnInit {
@ViewChild('scroll') scroll: ElementRef; @ViewChild('scroll') scroll: ElementRef;
constructor( constructor(
private modalController: ModalController,
private router: Router, private router: Router,
public waitForDomService: WaitForDomService, public waitForDomService: WaitForDomService,
public ThemeService: ThemeService, public ThemeService: ThemeService,
@@ -112,7 +111,6 @@ export class GabineteDigitalPage implements OnInit {
window.onresize = (event) => { window.onresize = (event) => {
if (window.innerWidth < 701) { if (window.innerWidth < 701) {
this.modalController.dismiss();
this.hideRefreshBtn = false; this.hideRefreshBtn = false;
this.hideInMobile = false; this.hideInMobile = false;
this.segmentVista = "listview"; this.segmentVista = "listview";
@@ -198,14 +196,8 @@ export class GabineteDigitalPage implements OnInit {
this.hideRefreshButton(); this.hideRefreshButton();
}
ngAfterViewInit(): void {
// We can access the TestComponent now that this portion of the view tree has been initiated.
const element = this.scroll.nativeElement
this.scroll.nativeElement.addEventListener("scroll", (e)=> {
this.changeTab()
});
(async () => { (async () => {
@@ -245,6 +237,21 @@ export class GabineteDigitalPage implements OnInit {
} }
}); });
}
ngAfterViewInit(): void {
try {
// We can access the TestComponent now that this portion of the view tree has been initiated.
const element = this.scroll.nativeElement
this.scroll.nativeElement.addEventListener("scroll", (e)=> {
this.changeTab()
});
} catch(error) {
}
} }
+39 -13
View File
@@ -13,7 +13,8 @@ import { EditActionPage } from './edit-action/edit-action.page';
import { ToastService } from 'src/app/services/toast.service'; import { ToastService } from 'src/app/services/toast.service';
import { ThemeService } from 'src/app/services/theme.service' import { ThemeService } from 'src/app/services/theme.service'
import { PermissionService } from 'src/app/services/permission.service'; import { PermissionService } from 'src/app/services/permission.service';
import { ActionModel } from 'src/app/models/beast-orm'; import { Storage } from '@ionic/storage';
// import { ActionModel } from 'src/app/models/beast-orm';
@Component({ @Component({
@@ -64,6 +65,7 @@ export class PublicationsPage implements OnInit {
private toastService: ToastService, private toastService: ToastService,
public ThemeService: ThemeService, public ThemeService: ThemeService,
public p: PermissionService, public p: PermissionService,
private storage: Storage,
) { ) {
this.months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; this.months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
@@ -142,24 +144,26 @@ export class PublicationsPage implements OnInit {
this.publicationsEventFolderList = folders.filter((e)=>e.ActionType == 'Evento') this.publicationsEventFolderList = folders.filter((e)=>e.ActionType == 'Evento')
await this.storage.set('actionsEvents', this.publicationsEventFolderList);
this.showLoader = false; this.showLoader = false;
(async ()=> { // (async ()=> {
const created = await ActionModel.create(folders) // const created = await ActionModel.create(folders)
const stored = await ActionModel.all() // const stored = await ActionModel.all()
const notPresentOnTheRequest: ActionModel[] = stored.filter(e => { // const notPresentOnTheRequest: ActionModel[] = stored.filter(e => {
return !folders.find(b => e.ProcessId == b.ProcessId) // return !folders.find(b => e.ProcessId == b.ProcessId)
}) // })
for (let ActionModelToDelete of notPresentOnTheRequest) { // for (let ActionModelToDelete of notPresentOnTheRequest) {
ActionModelToDelete.delete() // ActionModelToDelete.delete()
} // }
// console.log({created, stored, folders, toDeletes}) // // console.log({created, stored, folders, toDeletes})
})() // })()
}, (error) => { }, (error) => {
@@ -184,9 +188,31 @@ export class PublicationsPage implements OnInit {
async getFromDB() { async getFromDB() {
const folders: PublicationFolder[] = await ActionModel.all() //const folders: PublicationFolder[] = await ActionModel.all()
//this.showLoader = false;
// this.publicationsEventFolderList = folders
this.storage.get('actionsEvents').then((events = []) => {
if(Array.isArray(events)) {
const folders: PublicationFolder[] = this.getPublicationFolderMap(events)
this.showLoader = false; this.showLoader = false;
this.publicationsEventFolderList = folders this.publicationsEventFolderList = folders
}
});
this.storage.get('actionsViagens').then((viagens = []) => {
if(Array.isArray(viagens)) {
const folders: PublicationFolder[] = this.getPublicationFolderMap(viagens)
this.publicationsTravelFolderList = folders
this.showLoader = false;
}
});
} }
+2 -2
View File
@@ -12,11 +12,11 @@
<div class="top-box d-flex ion-justify-content-between pb-10"> <div class="top-box d-flex ion-justify-content-between pb-10">
<!-- search --> <!-- search -->
<div *ngIf="!showAdvanceSearch" class="icon-z icon-most-searched-word-open cursor-pointer" (click)="showHideAdvanceSearch(true)"> <div *ngIf="!showAdvanceSearch && type!='Agenda'" class="icon-z icon-most-searched-word-open cursor-pointer" (click)="showHideAdvanceSearch(true)">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/images/theme/blue/icons-most-searched-words-open.svg" class="icon" slot="end"></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/images/theme/blue/icons-most-searched-words-open.svg" class="icon" slot="end"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme != 'default' " src="assets/images/icons-most-searched-words-open.svg" class="icon" slot="end"></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme != 'default' " src="assets/images/icons-most-searched-words-open.svg" class="icon" slot="end"></ion-icon>
</div> </div>
<div *ngIf="showAdvanceSearch" class="icon-z icon-most-searched-word-open align-md-baseline pl-10 cursor-pointer" (click)="showHideAdvanceSearch(false)" > <div *ngIf="showAdvanceSearch && type!='Agenda'" class="icon-z icon-most-searched-word-open align-md-baseline pl-10 cursor-pointer" (click)="showHideAdvanceSearch(false)" >
<ion-icon *ngIf="ThemeService.currentTheme == 'default' "src="assets/images/advance-search-show-modal.svg" class="icon" slot="end"></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'default' "src="assets/images/advance-search-show-modal.svg" class="icon" slot="end"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/advance-search-show-modal.svg" class="icon" slot="end"></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/advance-search-show-modal.svg" class="icon" slot="end"></ion-icon>
</div> </div>
+3 -1
View File
@@ -29,7 +29,9 @@ export class CustomTaskPipe implements PipeTransform {
"Status": fullTask.workflowInstanceDataFields.Status, "Status": fullTask.workflowInstanceDataFields.Status,
"Deadline": fullTask.deadline, "Deadline": fullTask.deadline,
"TaskStatus": fullTask.taskStatus, "TaskStatus": fullTask.taskStatus,
"TaskReceiveDate": fullTask.taskReceiveDate "TaskReceiveDate": fullTask.taskReceiveDate,
"Note": fullTask.workflowInstanceDataFields.TaskMessage,
"InstanceID": fullTask.workflowInstanceDataFields.InstanceID
} }
} }
+4 -2
View File
@@ -10,7 +10,6 @@ export class ExpedienteTaskPipe implements PipeTransform {
transform(fullTask: ExpedienteFullTask): ExpedienteTask { transform(fullTask: ExpedienteFullTask): ExpedienteTask {
let date = new Date(fullTask.taskStartDate); let date = new Date(fullTask.taskStartDate);
date.setMonth(date.getMonth()); date.setMonth(date.getMonth());
let taskDate = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds();
return { return {
"SerialNumber": fullTask.serialNumber, "SerialNumber": fullTask.serialNumber,
@@ -25,8 +24,11 @@ export class ExpedienteTaskPipe implements PipeTransform {
"Status": fullTask.workflowInstanceDataFields.Status, "Status": fullTask.workflowInstanceDataFields.Status,
"Deadline": fullTask.deadline, "Deadline": fullTask.deadline,
"TaskStatus": fullTask.taskStatus, "TaskStatus": fullTask.taskStatus,
"TaskReceiveDate": fullTask.taskReceiveDate "TaskReceiveDate": fullTask.taskReceiveDate,
"Note": fullTask.workflowInstanceDataFields.TaskMessage,
"InstanceID": fullTask.workflowInstanceDataFields.InstanceID
} }
} }
} }
+20 -3
View File
@@ -105,6 +105,8 @@ export class EventsService {
this.calendarNamesAry = [] this.calendarNamesAry = []
this.calendarNamesType = {} this.calendarNamesType = {}
this.calendarNamesAryNoPr = []
this.calendarNamesAryPR = []
this.hasSharedCalendar = false this.hasSharedCalendar = false
this.hasSharedOficial = false this.hasSharedOficial = false
@@ -269,8 +271,6 @@ export class EventsService {
this.calendarNamesType['Meu calendario']['RoleId'] = OwnerCalendar.CalendarRoleId this.calendarNamesType['Meu calendario']['RoleId'] = OwnerCalendar.CalendarRoleId
this.calendarNamesType['Meu calendario']['OwnerId'] = OwnerCalendar.OwnerUserId || SessionStore.user.UserId this.calendarNamesType['Meu calendario']['OwnerId'] = OwnerCalendar.OwnerUserId || SessionStore.user.UserId
} }
for (let sharedCalendar of SessionStore.user.SharedCalendars) { for (let sharedCalendar of SessionStore.user.SharedCalendars) {
this.hasAnyCalendar = true this.hasAnyCalendar = true
if(sharedCalendar?.OwnerUserId) { if(sharedCalendar?.OwnerUserId) {
@@ -389,6 +389,24 @@ export class EventsService {
} }
detectCalendarNameByCalendarId(calendarId) {
for ( const property in this.calendarNamesType) {
if(this.calendarNamesType[property]?.['Oficial']) {
if(this.calendarNamesType[property]['OficialId'] == calendarId) {
return property
}
}
if (this.calendarNamesType[property]?.['Pessoal']) {
if(this.calendarNamesType[property]['PessoalId'] == calendarId) {
return property
}
}
}
}
getAllPrOficialEvents(startdate: string, enddate: string): Observable<EventList[]> { getAllPrOficialEvents(startdate: string, enddate: string): Observable<EventList[]> {
let geturl = environment.apiURL + 'calendar/pr'; let geturl = environment.apiURL + 'calendar/pr';
geturl = geturl.replace('/V4/', '/V5/') geturl = geturl.replace('/V4/', '/V5/')
@@ -1155,7 +1173,6 @@ export class EventsService {
return this.http.post<any>(`${geturl}`, body, options) return this.http.post<any>(`${geturl}`, body, options)
} }
genericPostExpedientEvent(docId: any, body: any, sharedagenda: string, serialNumber: any, applicationID: any, CalendarId) { genericPostExpedientEvent(docId: any, body: any, sharedagenda: string, serialNumber: any, applicationID: any, CalendarId) {
const geturl = environment.apiURL + 'calendar/expediente'; const geturl = environment.apiURL + 'calendar/expediente';
let params = new HttpParams(); let params = new HttpParams();
+9
View File
@@ -265,6 +265,15 @@ export class ProcessesService {
return this.http.post<any>(`${geturl}`, body, options) return this.http.post<any>(`${geturl}`, body, options)
} }
presidentialActionsSignature(body) {
const geturl = environment.apiURL + 'presidentialActions/signature';
let options = {
headers: this.headers,
};
return this.http.post<any>(`${geturl}`, body, options)
}
CompleteTask(body:Excludetask) { CompleteTask(body:Excludetask) {
const geturl = environment.apiURL + 'Tasks/CompleteTask'; const geturl = environment.apiURL + 'Tasks/CompleteTask';
+1 -1
View File
@@ -77,7 +77,7 @@ export class TaskService {
this.runCallback(); this.runCallback();
document.addEventListener('resume', function () { document.addEventListener('resume', function () {
this.loadAllTask(); // this.loadAllTask();
}); });
} }
@@ -65,6 +65,7 @@
[(ngModel)]="eventProcess.workflowInstanceDataFields.Agenda" [(ngModel)]="eventProcess.workflowInstanceDataFields.Agenda"
interface="action-sheet" Cancel-text="Cancelar" interface="action-sheet" Cancel-text="Cancelar"
required required
[disabled]=true
> >
<ion-select-option value="Oficial">Calendário Oficial</ion-select-option> <ion-select-option value="Oficial">Calendário Oficial</ion-select-option>
<ion-select-option value="Pessoal">Calendário Pessoal</ion-select-option> <ion-select-option value="Pessoal">Calendário Pessoal</ion-select-option>
@@ -44,6 +44,23 @@
</div> </div>
<div class="container-div">
<div class="ion-item-class-2 width-100 d-flex">
<div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-location.svg"></ion-icon>
</div>
<div class="ion-input-class flex-grow-1" [class.input-error]="Form?.get('Location')?.invalid && validateFrom ">
<ion-input [disabled]=true autocomplete="on" autocorrect="on" spellcheck="true" placeholder="Localização*" [(ngModel)]="CalendarNameOwnerName"></ion-input>
</div>
</div>
<!-- Error messages -->
<!-- <span class="error ion-padding" >
Campo obrigatório
</span> -->
</div>
<div *ngIf="Form && validateFrom" > <div *ngIf="Form && validateFrom" >
<div *ngIf="Form.get('Location').invalid " class="input-errror-message"> <div *ngIf="Form.get('Location').invalid " class="input-errror-message">
<div *ngIf="Form.get('Location').errors?.required"> <div *ngIf="Form.get('Location').errors?.required">
@@ -63,12 +80,9 @@
<div class="ion-input-class flex-grow-1"> <div class="ion-input-class flex-grow-1">
<mat-form-field appearance="none" floatLabel="never" class="width-100 " > <mat-form-field appearance="none" floatLabel="never" class="width-100 " >
<mat-select placeholder="Selecione agenda*" [(ngModel)]="postEvent.CalendarName" > <mat-select placeholder="Selecione agenda*" [(ngModel)]="postEvent.CalendarName" [disabled]=true>
<mat-option value="Oficial"> <mat-option *ngFor="let calendars of CalendarNamesOptions" value="{{calendars}}">
Oficial Agenda {{ calendars }}
</mat-option>
<mat-option value="Pessoal">
Pessoal
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
@@ -86,6 +86,9 @@ export class EditEventPage implements OnInit {
private participantsPipe = new ParticipantsPipe() private participantsPipe = new ParticipantsPipe()
sesseionStora = SessionStore sesseionStora = SessionStore
CalendarNameOwnerName = ''
CalendarNamesOptions = []
constructor( constructor(
private modalController: ModalController, private modalController: ModalController,
private eventsService: EventsService, private eventsService: EventsService,
@@ -131,6 +134,9 @@ export class EditEventPage implements OnInit {
}, 500); }, 500);
this.CalendarNameOwnerName = this.eventsService.detectCalendarNameByCalendarId(this.postEvent.CalendarId)
this.changeAgenda()
} }
ngOnChanges(changes: any): void { ngOnChanges(changes: any): void {
@@ -512,4 +518,27 @@ export class EditEventPage implements OnInit {
} }
changeAgenda() {
setTimeout(() => {
if(this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Oficial'] && this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Pessoal']) {
this.CalendarNamesOptions = ['Oficial', 'Pessoal']
} else if (this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Oficial']) {
this.CalendarNamesOptions = ['Oficial']
this.postEvent.CalendarName = 'Oficial'
} else if (this.eventsService.calendarNamesType[this.CalendarNameOwnerName]?.['Pessoal']) {
this.CalendarNamesOptions = ['Pessoal']
this.postEvent.CalendarName = 'Pessoal'
} else {
this.CalendarNamesOptions = ['Oficial', 'Pessoal']
}
}, 50)
}
} }
@@ -56,7 +56,7 @@
<mat-form-field appearance="none" class="width-100" > <mat-form-field appearance="none" class="width-100" >
<mat-select placeholder="Selecione agenda" [(ngModel)]="eventProcess.workflowInstanceDataFields.Agenda" > <mat-select placeholder="Selecione agenda" [(ngModel)]="eventProcess.workflowInstanceDataFields.Agenda" [disabled]="disabled">
<mat-option value="Oficial"> <mat-option value="Oficial">
Calendário Oficial Calendário Oficial
</mat-option> </mat-option>
@@ -4,39 +4,6 @@
<div class="title-container d-flex justify-space-between"> <div class="title-container d-flex justify-space-between">
<span class="text-center mt-0 aside-title"><label>Eventos para Aprovação</label></span> <span class="text-center mt-0 aside-title"><label>Eventos para Aprovação</label></span>
<div class="d-flex align-center"> <div class="d-flex align-center">
<!-- <div>
<div title="Pesquisa" *ngIf="!hideSearchBtn" class="mr-20 d-flex align-center cursor-pointer">
<div (click)="openSearch();showSearch=true" *ngIf="!showSearch" class="d-flex">
<ion-icon title="Perfil" *ngIf="ThemeService.currentTheme == 'doneIt' " class="font-35-rem" src="assets/images/theme/doneIt/icons-search.svg"></ion-icon>
<ion-icon title="Perfil" *ngIf="ThemeService.currentTheme == 'default' " class="font-35-rem" src='assets/images/icons-search.svg'></ion-icon>
<ion-icon title="Perfil" *ngIf="ThemeService.currentTheme == 'gov' " class="font-35-rem" src='assets/images/theme/gov/icons-search.svg'></ion-icon>
</div>
<button title="Fechar" class="btn-no-color d-flex" (click)="closeSearch();showSearch=false;searchSubject=''" *ngIf="showSearch">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' || ThemeService.currentTheme == 'doneIt' " class="font-35-rem" name="restaurant-outline" src="assets/images/icons-search-close.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="font-35-rem" name="restaurant-outline" src="assets/images/theme/gov/icons-search-close.svg"></ion-icon>
</button>
<div *ngIf="showSearch">
<div class="d-flex search-input-container ml-10 justify-between" *ngIf="showSearch">
<div class="input-text d-flex ion-align-items-center">
<ion-input (keyup.enter)="basicSearch()" [(ngModel)]='searchSubject' (ngModelChange)="dynamicSearch()"
class="search-input text-black" type="search" placeholder="Pesquisar"></ion-input>
</div>
<div (click)="basicSearch()" class="d-flex align-center icon">
<ion-icon class="icon-z" slot="end" src="assets/images/theme/gov/search.svg"></ion-icon>
</div>
</div>
</div>
</div>
</div> -->
<div> <div>
<div class="d-flex" (click)="reorderList('old')" *ngIf="ordinance == 'recent' "> <div class="d-flex" (click)="reorderList('old')" *ngIf="ordinance == 'recent' ">
@@ -21,8 +21,6 @@ import { ThemeService } from 'src/app/services/theme.service'
export class EventsToApprovePage implements OnInit { export class EventsToApprovePage implements OnInit {
showLoader: boolean; showLoader: boolean;
eventsPRList: any = [];
eventsMDGPRList: any = [];
eventPerson: EventPerson; eventPerson: EventPerson;
eventBody: EventBody; eventBody: EventBody;
categories: string[]; categories: string[];
@@ -76,7 +74,12 @@ export class EventsToApprovePage implements OnInit {
if(pr) { if(pr) {
this.segment = pr.OwnerUserId this.segment = pr.OwnerUserId
} }
this.dynamicSearch();
} else {
this.dynamicSearch();
} }
}) })
this.LoadToApproveEvents() this.LoadToApproveEvents()
@@ -210,15 +213,7 @@ export class EventsToApprovePage implements OnInit {
} }
getFromDB() { getFromDB() {}
this.storage.get('event-to-aproveMD').then((events = []) => {
this.eventsMDGPRList = events
})
this.storage.get('event-to-aprovePR').then((events) => {
this.eventsPRList = events
})
}
toDateString(e) { toDateString(e) {
@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { TaskDetailContentPage } from './task-detail-content.page';
const routes: Routes = [
{
path: '',
component: TaskDetailContentPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class TaskDetailContentPageRoutingModule {}
@@ -0,0 +1,21 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { TaskDetailContentPageRoutingModule } from './task-detail-content-routing.module';
import { TaskDetailContentPage } from './task-detail-content.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
TaskDetailContentPageRoutingModule
],
declarations: [TaskDetailContentPage],
exports: [TaskDetailContentPage]
})
export class TaskDetailContentPageModule {}
@@ -0,0 +1,41 @@
<ion-content>
<div *ngIf="task" class="overflow-y-auto height-100">
<div class="middle-content">
<h5 class="font-17-rem" *ngIf="intervenientes">Intervenientes</h5>
<ion-item class="ion-no-margin ion-no-padding">
<ion-label>
<div *ngFor="let interveniente of intervenientes">
<p>{{interveniente.Name}}</p>
</div>
</ion-label>
</ion-item>
<div *ngIf="cc.length > 0">
<h5 class="font-17-rem">Com conhecimento</h5>
<ion-item class="ion-no-margin ion-no-padding">
<ion-label>
<div *ngFor="let c of cc">
<p>{{c.Name}}</p>
</div>
</ion-label>
</ion-item>
</div>
<div *ngIf="task.Note">
<h5 class="font-17-rem">Detalhes</h5>
<ion-item class="ion-no-margin ion-no-padding">
<pre class="width-100 text">{{ task.Note }} </pre>
</ion-item>
</div>
</div>
<div class="bottom-content width-100">
<ion-list>
<h5 class="font-17-rem">Documentos Anexados</h5>
<ion-item class="ion-no-margin ion-no-padding cursor-pointer" *ngFor="let Document of fulltask.Documents">
<ion-label class="d-block" (click)="viewDocument.emit(Document.DocId)">
<p class="attach-title-item">{{ Document.Assunto || "Sem assunto" }}<span class="span-right color-red btn-size"><ion-icon hidden name="close"></ion-icon></span></p>
<p><span class="span-left">{{ Document.Sender}}</span><span class="span-right">{{ Document.DocDate | date: 'dd-MM-yyyy HH:mm' }}</span></p>
</ion-label>
</ion-item>
</ion-list>
</div>
</div>
</ion-content>
@@ -0,0 +1,206 @@
@import '~src/function.scss';
ion-header, ion-content {
background: white;
}
:host {
background-color: white;
}
.main-content{
background-color: #fff !important;
border-top-left-radius: 25px;
border-top-right-radius: 25px;
}
.content{
padding: 30px 20px 0 20px !important;
margin: 0;
float: left;
}
.color-red{
font-weight: 500;
color:#d30a0a !important;
}
.btn-size{
font-size: rem(18) !important;
}
.main-header{
overflow: inherit !important;
display: flex;
font-family: Roboto;
background-color: #fff;
color:#000;
transform: translate3d(0, 1px, 0);
.title-content{
display: flex;
justify-content: start !important;
align-items: flex-start !important;
border-radius: 0 !important;
}
.title{
width: fit-content;
height: auto;
font-size: rem(25);
overflow: auto;
float: left;
padding-left: 5px;
}
.div-icon{
width: 40px !important;
font-size: rem(35) !important;
text-align: start !important;
padding: 1px;
}
}
ion-item-group{
margin: 15px;
}
ion-button{
display: block;
width: 80%;
margin: 20px auto;
}
.upper-content{
font-family: Roboto;
margin-left: 41px;
font-size: rem(18);
.label{
border-radius: 20px;
background: var(--label-bg-color);
float: right;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
font-size: rem(14);
}
.button-calendar-type ion-button{
height: rem(25);
}
.content-details{
font-size: rem(17);
.date{
color: #797979;
}
}
}
.middle-conten{
.middle-content p{
font-size: rem(16);
}
}
.bottom-content{
//width: 360px;
margin: 0 auto;
.bottom-content h3{
font-size: rem(16);
margin: 0 0 0 10px;
}
.attach-document{
font-size: rem(15);
color: var(--title-text-color);
margin: 5px 5px 5px 10px;
padding: 5px;
float: left;
}
.attach-icon{
width: 37px;
font-size: rem(35);
float: left;
}
.attach-title-item{
font-size: rem(18);
width: 100%;
color:#0d89d1;
padding-bottom: 5px;
}
/* SPAN */
.span-left{
float: left;
font-size: rem(15);
}
.span-right{
text-align: right;
float: right;
font-size: rem(13);
}
}
.aside-right{
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: rem(35);
overflow: hidden;
}
}
.buttons{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.btn-ok, .btn-cancel, .btn-delete{
height: auto !important;
font-size: rem(16) !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;
}
}
@media only screen and (max-width: 800px) {
.content{
width: 100% !important;
}
.aside-right{
display: none;
}
}
@media only screen and (min-width: 801px) {
.div-icon{
display: none;
}
.content{
width: 65%;
border-right: 1px solid #d8d8d8;
}
.aside-right{
width: 35%;
}
}
@media only screen and (min-width: 1024px){
.content{
width: 70%;
}
.aside-right{
width: 30%;
}
}
@media only screen and (min-width: 1140px){
.content{
width: 75%;
}
.aside-right{
width: 25%;
}
}
@@ -0,0 +1,24 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { TaskDetailContentPage } from './task-detail-content.page';
describe('TaskDetailContentPage', () => {
let component: TaskDetailContentPage;
let fixture: ComponentFixture<TaskDetailContentPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ TaskDetailContentPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(TaskDetailContentPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,29 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { customTask, fullTask } from 'src/app/models/dailyworktask.model';
import { ThemeService } from 'src/app/services/theme.service'
@Component({
selector: 'app-task-detail-content',
templateUrl: './task-detail-content.page.html',
styleUrls: ['./task-detail-content.page.scss'],
})
export class TaskDetailContentPage implements OnInit {
@Input() task = new customTask();
@Input() intervenientes = []
@Input() cc = []
@Input() customDate = ''
@Input() fulltask = new fullTask()
@Output() openOptions = new EventEmitter<any>();
@Output() goBack = new EventEmitter<any>();
@Output() viewDocument = new EventEmitter<any>();
constructor(
public ThemeService: ThemeService
) { }
ngOnInit() {
}
}
@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { TaskDetailHeaderPage } from './task-detail-header.page';
const routes: Routes = [
{
path: '',
component: TaskDetailHeaderPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class TaskDetailHeaderPageRoutingModule {}
@@ -0,0 +1,21 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { TaskDetailHeaderPageRoutingModule } from './task-detail-header-routing.module';
import { TaskDetailHeaderPage } from './task-detail-header.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
TaskDetailHeaderPageRoutingModule
],
declarations: [TaskDetailHeaderPage],
exports: [TaskDetailHeaderPage]
})
export class TaskDetailHeaderPageModule {}
@@ -0,0 +1,31 @@
<ion-header *ngIf="task" class="ion-no-border">
<div class="main-header">
<div class="title-content width-100 d-flex justify-space-between align-center">
<div class=" btn-dismiss font-30-rem cursor-pointer" (click)="goBack.emit()" defaultHref="#">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " slot="end" src='assets/images/theme/gov/icons-calendar-arrow-left.svg'></ion-icon>
</div>
<div class="middle d-flex align-center flex-grow-1">
<ion-label class="title">{{ task.Folio}}</ion-label>
</div>
<div class="div-icon" (click)="openOptions.emit()">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/images/icons-menu.svg"></ion-icon>
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/icons-menu.svg"></ion-icon>
</div>
</div>
</div>
<div class="upper-content" >
<div class="content-details">
<ion-label>
<p><span class="date">{{customDate}}</span></p>
</ion-label>
<ion-label>
<p><span class="color-red">{{ task.Deadline }}</span></p>
</ion-label>
<ion-label>
<p class="d-flex mt-10"><span class="label">{{ task.activityInstanceName }}</span></p>
</ion-label>
</div>
</div>
<div class="line"></div>
</ion-header>
@@ -0,0 +1,206 @@
@import '~src/function.scss';
ion-header, ion-content {
background: white;
}
:host {
background-color: white;
}
.main-content{
background-color: #fff !important;
border-top-left-radius: 25px;
border-top-right-radius: 25px;
}
.content{
padding: 30px 20px 0 20px !important;
margin: 0;
float: left;
}
.color-red{
font-weight: 500;
color:#d30a0a !important;
}
.btn-size{
font-size: rem(18) !important;
}
.main-header{
overflow: inherit !important;
display: flex;
font-family: Roboto;
background-color: #fff;
color:#000;
transform: translate3d(0, 1px, 0);
.title-content{
display: flex;
justify-content: start !important;
align-items: flex-start !important;
border-radius: 0 !important;
}
.title{
width: fit-content;
height: auto;
font-size: rem(25);
overflow: auto;
float: left;
padding-left: 5px;
}
.div-icon{
width: 40px !important;
font-size: rem(35) !important;
text-align: start !important;
padding: 1px;
}
}
ion-item-group{
margin: 15px;
}
ion-button{
display: block;
width: 80%;
margin: 20px auto;
}
.upper-content{
font-family: Roboto;
margin-left: 41px;
font-size: rem(18);
.label{
border-radius: 20px;
background: var(--label-bg-color);
float: right;
padding: 5px 13.5px 5px 13.5px;
color: #fff;
font-size: rem(14);
}
.button-calendar-type ion-button{
height: rem(25);
}
.content-details{
font-size: rem(17);
.date{
color: #797979;
}
}
}
.middle-conten{
.middle-content p{
font-size: rem(16);
}
}
.bottom-content{
//width: 360px;
margin: 0 auto;
.bottom-content h3{
font-size: rem(16);
margin: 0 0 0 10px;
}
.attach-document{
font-size: rem(15);
color: var(--title-text-color);
margin: 5px 5px 5px 10px;
padding: 5px;
float: left;
}
.attach-icon{
width: 37px;
font-size: rem(35);
float: left;
}
.attach-title-item{
font-size: rem(18);
width: 100%;
color:#0d89d1;
padding-bottom: 5px;
}
/* SPAN */
.span-left{
float: left;
font-size: rem(15);
}
.span-right{
text-align: right;
float: right;
font-size: rem(13);
}
}
.aside-right{
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: rem(35);
overflow: hidden;
}
}
.buttons{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.btn-ok, .btn-cancel, .btn-delete{
height: auto !important;
font-size: rem(16) !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;
}
}
@media only screen and (max-width: 800px) {
.content{
width: 100% !important;
}
.aside-right{
display: none;
}
}
@media only screen and (min-width: 801px) {
.div-icon{
display: none;
}
.content{
width: 65%;
border-right: 1px solid #d8d8d8;
}
.aside-right{
width: 35%;
}
}
@media only screen and (min-width: 1024px){
.content{
width: 70%;
}
.aside-right{
width: 30%;
}
}
@media only screen and (min-width: 1140px){
.content{
width: 75%;
}
.aside-right{
width: 25%;
}
}
@@ -0,0 +1,24 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { TaskDetailHeaderPage } from './task-detail-header.page';
describe('TaskDetailHeaderPage', () => {
let component: TaskDetailHeaderPage;
let fixture: ComponentFixture<TaskDetailHeaderPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ TaskDetailHeaderPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(TaskDetailHeaderPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,27 @@
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { customTask, fullTask } from 'src/app/models/dailyworktask.model';
import { ThemeService } from 'src/app/services/theme.service'
@Component({
selector: 'app-task-detail-header',
templateUrl: './task-detail-header.page.html',
styleUrls: ['./task-detail-header.page.scss'],
})
export class TaskDetailHeaderPage implements OnInit {
@Input() task = new customTask();
@Input() intervenientes = []
@Input() cc = []
@Input() customDate = ''
@Input() fulltask = new fullTask()
@Output() openOptions = new EventEmitter<any>();
@Output() goBack = new EventEmitter<any>();
@Output() viewDocument = new EventEmitter<any>();
constructor(public ThemeService: ThemeService) { }
ngOnInit() {
}
}
@@ -7,13 +7,18 @@ import { IonicModule } from '@ionic/angular';
import { TaskDetailsPageRoutingModule } from './task-details-routing.module'; import { TaskDetailsPageRoutingModule } from './task-details-routing.module';
import { TaskDetailsPage } from './task-details.page'; import { TaskDetailsPage } from './task-details.page';
import { TaskDetailHeaderPageModule } from '../task-detail-header/task-detail-header.module';
import { TaskDetailContentPageModule } from '../task-detail-content/task-detail-content.module';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,
IonicModule, IonicModule,
TaskDetailsPageRoutingModule TaskDetailsPageRoutingModule,
//
TaskDetailHeaderPageModule,
TaskDetailContentPageModule
], ],
declarations: [TaskDetailsPage], declarations: [TaskDetailsPage],
exports: [TaskDetailsPage] exports: [TaskDetailsPage]
@@ -1,5 +1,5 @@
<ion-header *ngIf="task" class="ion-no-border "> <ion-header *ngIf="task" class="ion-no-border ">
<div class="main-header"> <div class="main-header mt-30 px-20">
<div class="title-content width-100 d-flex justify-space-between align-center"> <div class="title-content width-100 d-flex justify-space-between align-center">
<div class=" btn-dismiss font-30-rem cursor-pointer" (click)="goBack.emit()" defaultHref="#"> <div class=" btn-dismiss font-30-rem cursor-pointer" (click)="goBack.emit()" defaultHref="#">
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon> <ion-icon *ngIf="ThemeService.currentTheme == 'default' " slot="end" src='assets/images/icons-arrow-arrow-left.svg'></ion-icon>
@@ -27,11 +27,11 @@
</ion-label> </ion-label>
</div> </div>
</div> </div>
<div class="line"></div> <div class="line mx-20"></div>
</ion-header> </ion-header>
<ion-content> <ion-content>
<div *ngIf="task" class="overflow-y-auto height-100"> <div *ngIf="task" class="overflow-y-auto height-100 px-20">
<div class="middle-content"> <div class="middle-content">
<h5 class="font-17-rem" *ngIf="intervenientes">Intervenientes</h5> <h5 class="font-17-rem" *ngIf="intervenientes">Intervenientes</h5>
<ion-item class="ion-no-margin ion-no-padding"> <ion-item class="ion-no-margin ion-no-padding">
@@ -51,20 +51,21 @@
</ion-label> </ion-label>
</ion-item> </ion-item>
</div> </div>
<div *ngIf="fulltask.workflowInstanceDataFields.TaskMessage"> <div *ngIf="task.Note">
<h5 class="font-17-rem">Detalhes</h5> <h5 class="font-17-rem">Detalhes</h5>
<ion-item class="ion-no-margin ion-no-padding"> <ion-item class="ion-no-margin ion-no-padding">
<pre class="width-100 text">{{ fulltask.workflowInstanceDataFields.TaskMessage }} </pre> <pre class="width-100 text">{{ task.Note }} </pre>
</ion-item> </ion-item>
</div> </div>
</div> </div>
<div class="bottom-content width-100"> <div class="bottom-content width-100">
<ion-list> <ion-list>
<h5 class="font-17-rem">Documentos Anexados</h5> <h5 class="font-17-rem">Documentos Anexados</h5>
<ion-item class="ion-no-margin ion-no-padding cursor-pointer" *ngFor="let Document of fulltask.Documents"> <ion-item class="ion-no-margin ion-no-padding cursor-pointer" *ngFor="let Document of mergedArray">
<ion-label class="d-block" (click)="viewDocument.emit(Document.DocId)"> <ion-label (click)="viewDocument.emit({DocId:Document.DocId, Document:Document, content:Document.content})">
<p class="attach-title-item">{{ Document.Assunto || "Sem assunto" }}<span class="span-right color-red btn-size"><ion-icon hidden name="close"></ion-icon></span></p> <p *ngIf="Document.Assunto" class="attach-title-item">{{ Document.Assunto }} <span class="document-type" *ngIf="Document.content" >Rascunho</span> </p>
<p><span class="span-left">{{ Document.Sender}}</span><span class="span-right">{{ Document.DocDate | date: 'dd-MM-yyyy HH:mm' }}</span></p> <p *ngIf="!Document.Assunto" class="attach-title-item">{{ Document.DocNumber }}<span class="span-right color-red btn-size"><ion-icon hidden name="close"></ion-icon></span></p>
<p><span class="span-left">{{Document.Sender}}</span><span class="span-right">{{ Document.DocDate | date: 'dd/MM/yy' }}</span></p>
</ion-label> </ion-label>
</ion-item> </ion-item>
</ion-list> </ion-list>
@@ -1,9 +1,15 @@
@import '~src/function.scss'; @import '~src/function.scss';
.main-content{
background-color: #fff !important; ion-header {
background: white;
border-top-left-radius: 25px; border-top-left-radius: 25px;
border-top-right-radius: 25px; border-top-right-radius: 25px;
} }
ion-content {
background: white;
}
.content{ .content{
padding: 30px 20px 0 20px !important; padding: 30px 20px 0 20px !important;
margin: 0; margin: 0;
@@ -13,6 +19,12 @@
font-weight: 500; font-weight: 500;
color:#d30a0a !important; color:#d30a0a !important;
} }
.document-type{
color: #d30a0a;
margin-left: 20px;
font-size: medium;
}
.btn-size{ .btn-size{
font-size: rem(18) !important; font-size: rem(18) !important;
} }
@@ -13,6 +13,7 @@ export class TaskDetailsPage implements OnInit {
@Input() intervenientes = [] @Input() intervenientes = []
@Input() cc = [] @Input() cc = []
@Input() customDate = '' @Input() customDate = ''
@Input() mergedArray = []
@Input() fulltask = new fullTask() @Input() fulltask = new fullTask()
@Output() openOptions = new EventEmitter<any>(); @Output() openOptions = new EventEmitter<any>();
@@ -1,7 +1,7 @@
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { customTask } from 'src/app/models/dailyworktask.model'; import { customTask } from 'src/app/models/dailyworktask.model';
import { ThemeService } from 'src/app/services/theme.service' import { ThemeService } from 'src/app/services/theme.service';
import { TaskService } from 'src/app/services/task.service' import { TaskService } from 'src/app/services/task.service';
@Component({ @Component({
selector: 'app-task-list', selector: 'app-task-list',
@@ -24,6 +24,9 @@
<div class="buttons width-100" *ngIf="task.activityInstanceName == 'Assinar Diploma'"> <div class="buttons width-100" *ngIf="task.activityInstanceName == 'Assinar Diploma'">
<button (click)="openAddNoteModal('Assinar Diploma')" class="btn-cancel" shape="round" >Assinado</button> <button (click)="openAddNoteModal('Assinar Diploma')" class="btn-cancel" shape="round" >Assinado</button>
</div> </div>
<div class="buttons width-100" *ngIf="task.activityInstanceName == 'Assinar Diploma'">
<button (click)="openAddNoteModal('AssinarNew')" class="btn-cancel" shape="round" >Assinar</button>
</div>
<div class="buttons width-100"> <div class="buttons width-100">
<button (click)="openAddNoteModal('Arquivo')" class="btn-cancel" shape="round" >Arquivar</button> <button (click)="openAddNoteModal('Arquivo')" class="btn-cancel" shape="round" >Arquivar</button>
</div> </div>
@@ -95,6 +95,8 @@ export class DiplomaOptionsPage implements OnInit {
} else if (actionName == 'Arquivo') { } else if (actionName == 'Arquivo') {
await this.arquivar(res.data.note, docs); await this.arquivar(res.data.note, docs);
this.goBack(); this.goBack();
} else if (actionName =='AssinarNew') {
await this.AssinarNew(res.data.note, docs)
} }
} }
}, (error) => { }, (error) => {
@@ -199,8 +201,11 @@ export class DiplomaOptionsPage implements OnInit {
"ActionTypeId": 99999842, "ActionTypeId": 99999842,
"dataFields": { "dataFields": {
"ReviewUserComment": note, "ReviewUserComment": note,
"InstanceIDNew": this.task.InstanceID,
},
"AttachmentList" : {
"ProcessInstanceID": this.task.InstanceID
}, },
"AttachmentList" :documents,
} }
const loader = this.toastService.loading() const loader = this.toastService.loading()
@@ -220,6 +225,31 @@ export class DiplomaOptionsPage implements OnInit {
} }
} }
async AssinarNew(note:string, documents:any) {
let body = {
"InstanceId": this.task.InstanceID,
"FolderId": this.task.FolderID,
"DraftIds": "163;164;77",
"OriginalFileName": "Doc1;Doc2;Doc3"
}
const loader = this.toastService.loading()
try {
await this.processes.presidentialActionsSignature(body).toPromise()
this.httpErroHandle.httpsSucessMessagge('Assinado')
this.TaskService.loadDiplomas()
this.goBack();
} catch (error) {
this.httpErroHandle.httpStatusHandle(error)
}
finally {
loader.remove()
}
}
async finish(note:string, documents:any){ async finish(note:string, documents:any){
@@ -8,7 +8,7 @@
<button class="btn-cancel" shape="round" (click)="close()">Cancelar</button> <button class="btn-cancel" shape="round" (click)="close()">Cancelar</button>
</div> </div>
<div *ngIf="content != ''" class="buttons"> <div *ngIf="content != ''" class="buttons">
<button (click)="save(Document, content)" class="btn-cancel" shape="round" >Salvar</button> <!-- <button (click)="save(Document, content)" class="btn-cancel" shape="round" >Salvar</button> -->
<button (click)="saveDraft(Document, content)" class="btn-cancel" shape="round" >Salvar Rascunho</button> <button (click)="saveDraft(Document, content)" class="btn-cancel" shape="round" >Salvar Rascunho</button>
<button class="btn-cancel" shape="round" (click)="close()">Cancelar</button> <button class="btn-cancel" shape="round" (click)="close()">Cancelar</button>
</div> </div>
@@ -12,7 +12,7 @@ import { EditActionPage } from 'src/app/pages/publications/edit-action/edit-acti
import { Storage } from '@ionic/storage'; import { Storage } from '@ionic/storage';
import { PermissionService } from 'src/app/services/permission.service'; import { PermissionService } from 'src/app/services/permission.service';
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
import { PublicationDetailsModel } from 'src/app/models/beast-orm'; // import { PublicationDetailsModel } from 'src/app/models/beast-orm';
@Component({ @Component({
selector: 'app-view-publications', selector: 'app-view-publications',
+2
View File
@@ -4,6 +4,8 @@ import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { IonicImageLoaderModule } from 'ionic-image-loader-v5'; import { IonicImageLoaderModule } from 'ionic-image-loader-v5';
import { TaskDetailsPage } from './gabinete-digital/generic/task-details/task-details.page'; import { TaskDetailsPage } from './gabinete-digital/generic/task-details/task-details.page';
// import { TaskDetailHeaderPipe } from './gabinete-digital/generic/task-detail-header.pipe';
// import { TaskDetailContentPipe } from './gabinete-digital/generic/task-detail-content.pipe';
// import { HeaderPage } from './header/header.page'; // import { HeaderPage } from './header/header.page';
// import { HeaderPrPage } from './header-pr/header-pr.page'; // import { HeaderPrPage } from './header-pr/header-pr.page';
// import { BtnSeguintePage } from './btn-seguinte/btn-seguinte.page'; // import { BtnSeguintePage } from './btn-seguinte/btn-seguinte.page';
+1 -1
View File
@@ -7,7 +7,7 @@ import { environment } from 'src/environments/environment';
}) })
export class LocalstoreService { export class LocalstoreService {
private prefix = environment.version.lastCommitNumber + environment.id+"-"; private prefix = environment.version.lastCommitNumber + environment.id+ Number(environment.storageProduction)+"-";
private previewPrefix = 'v17-'; private previewPrefix = 'v17-';
callbacks: {[key: string]: { callbacks: {[key: string]: {
+4 -7
View File
@@ -9,9 +9,9 @@
{{Document.Assunto}} {{Document.Assunto}}
</div> </div>
<!-- <div class="right cursor-pointer" (click)="openOptions()"> <div class="right cursor-pointer" (click)="openOptions()">
<fa-icon icon="ellipsis-v" class="menu-icon font-awesome-1"></fa-icon> <fa-icon icon="ellipsis-v" class="menu-icon font-awesome-1"></fa-icon>
</div> --> </div>
</div> </div>
</ion-toolbar> </ion-toolbar>
@@ -26,16 +26,13 @@ apiKey="wr5dk69kive0qr9ig6y5spqvlj3a0tsiwnzdsexnz241k69p"
plugins: [ plugins: [
'advlist autolink lists link image charmap print preview anchor', 'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen', 'searchreplace visualblocks code fullscreen',
'insertdatetime media table paste code help wordcount print autosave' 'insertdatetime media table paste code help wordcount print'
], ],
autosave_ask_before_unload: false,
autosave_interval: '30s',
toolbar: toolbar:
'undo redo | formatselect | bold italic backcolor | \ 'undo redo | formatselect | bold italic backcolor | \
alignleft aligncenter alignright alignjustify | \ alignleft aligncenter alignright alignjustify | \
bullist numlist outdent indent | removeformat | print | help' }" bullist numlist outdent indent | removeformat | print | help' }"
initialValue='{{content}}' initialValue='{{content}}'
[(ngModel)]="content" [(ngModel)]="content"
(onSaveContent)="saveDraft()" (onSaveContent)="somefunction()"
></editor> ></editor>
+2 -20
View File
@@ -2,8 +2,6 @@ import { Component, OnInit } from '@angular/core';
import { NavParams } from '@ionic/angular'; import { NavParams } from '@ionic/angular';
import { EventDetailsDocumentsOptionsPage } from '../shared/popover/event-details-documents-options/event-details-documents-options.page'; import { EventDetailsDocumentsOptionsPage } from '../shared/popover/event-details-documents-options/event-details-documents-options.page';
import { AlertController, ModalController } from '@ionic/angular'; import { AlertController, ModalController } from '@ionic/angular';
import { ProcessesService } from '../services/processes.service';
import { HttpErrorHandle } from '../services/http-error-handle.service';
@Component({ @Component({
selector: 'app-tiny-mce', selector: 'app-tiny-mce',
templateUrl: './tiny-mce.page.html', templateUrl: './tiny-mce.page.html',
@@ -24,8 +22,6 @@ export class TinyMCEPage implements OnInit {
constructor( constructor(
private navParams: NavParams, private navParams: NavParams,
private modalController: ModalController, private modalController: ModalController,
private processService: ProcessesService,
private erroHandler: HttpErrorHandle
) { ) {
this.Document = this.navParams.get('Document') this.Document = this.navParams.get('Document')
@@ -40,22 +36,8 @@ export class TinyMCEPage implements OnInit {
this.modalController.dismiss() this.modalController.dismiss()
} }
saveDraft() { somefunction() {
console.log(document) console.log(this.content)
let objectDraft = {
"status": false,
"description": this.Document.Assunto,
"content": this.content,
"path": this.Document.path,
"ownerId": this.Document.ownerId
}
this.processService.SaveDraftByID(this.Document.DocId, objectDraft).subscribe((res) => [
this.erroHandler.httpsSucessMessagge('Draft Save'),
this.modalController.dismiss()
],(error) => {
this.erroHandler.httpStatusHandle(error)
})
} }
async openOptions() { async openOptions() {
+14 -2
View File
@@ -88,7 +88,7 @@ export class registerModel {
for (const stores of databaseSchema.stores) { for (const stores of databaseSchema.stores) {
const model = models[stores.name]; const model = models[stores.name];
const DbName = databaseSchema.databaseName; const DbName = databaseSchema.databaseName;
ModelEditor.setTableSchema(model, DbName); ModelEditor.setTableSchema(model, DbName, stores, databaseSchema, entries);
ModelEditor.getDBSchema(model, DbName); ModelEditor.getDBSchema(model, DbName);
// ModelEditor.setModel(model, DbName) // ModelEditor.setModel(model, DbName)
DatabaseManagerSchema.getDb(DbName).getTable(stores.name).setModel(model); DatabaseManagerSchema.getDb(DbName).getTable(stores.name).setModel(model);
@@ -241,7 +241,9 @@ export class ModelEditor {
return DatabaseSchema; return DatabaseSchema;
}; };
} }
static setTableSchema(ModelToEdit, DbName) { static setTableSchema(ModelToEdit, DbName, store, databaseSchema, entries) {
try {
const ModelName = ModelToEdit.getModelName(); const ModelName = ModelToEdit.getModelName();
const DBSchema = DatabaseManagerSchema.getDb(DbName); const DBSchema = DatabaseManagerSchema.getDb(DbName);
const TableSchemaClass = DBSchema.getTable(ModelName); const TableSchemaClass = DBSchema.getTable(ModelName);
@@ -251,6 +253,16 @@ export class ModelEditor {
ModelToEdit.getTableSchema = () => { ModelToEdit.getTableSchema = () => {
return TableSchemaClass.config; return TableSchemaClass.config;
}; };
} catch (error) {
console.log('databaseSchema', databaseSchema)
console.log('error', error)
console.log('ModelToEdit', ModelToEdit)
console.log(DbName, 'DbName')
console.log('store', store)
console.log('models', models)
console.log('entries', entries)
}
} }
static getDBSchema(ModelToEdit, DbName) { static getDBSchema(ModelToEdit, DbName) {
const ModelName = ModelToEdit.getModelName(); const ModelName = ModelToEdit.getModelName();
File diff suppressed because one or more lines are too long