Last git pull made

This commit is contained in:
Eudes Inácio
2021-10-07 17:05:14 +01:00
41 changed files with 695 additions and 351 deletions
+1 -7
View File
@@ -186,13 +186,7 @@
"cordova-plugin-ionic-webview": {}, "cordova-plugin-ionic-webview": {},
"cordova-plugin-screen-orientation": {}, "cordova-plugin-screen-orientation": {},
"cordova-plugin-network-information": {}, "cordova-plugin-network-information": {},
"cordova-plugin-camera": { "cordova-plugin-camera": {}
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-media": {
"KEEP_AVAUDIOSESSION_ALWAYS_ACTIVE": "NO"
},
"uk.co.workingedge.cordova.plugin.sqliteporter": {}
}, },
"platforms": [ "platforms": [
"browser", "browser",
+4
View File
@@ -195,6 +195,10 @@ const routes = [
{ {
path: 'document-viewer', path: 'document-viewer',
loadChildren: () => import('./modals/document-viewer/document-viewer.module').then( m => m.DocumentViewerPageModule) loadChildren: () => import('./modals/document-viewer/document-viewer.module').then( m => m.DocumentViewerPageModule)
},
{
path: 'view-document',
loadChildren: () => import('./modals/view-document/view-document.module').then( m => m.ViewDocumentPageModule)
}, },
+3 -3
View File
@@ -193,8 +193,8 @@ export class HomePage implements OnInit {
}) })
synchro.registerCallback('Offline', () => { synchro.registerCallback('Offline',()=>{
console.log('Offlineee')
}) })
synchro.conected synchro.conected
@@ -203,7 +203,7 @@ export class HomePage implements OnInit {
this.webNotificationPopupService.sendNotification(DataArray) this.webNotificationPopupService.sendNotification(DataArray)
this.storageService.get('Notifications').then((data: any) => { this.storageService.get('Notifications').then((data:any)=>{
data.push(DataArray) data.push(DataArray)
this.storageService.store("Notifications", data) this.storageService.store("Notifications", data)
}).catch(() => { }).catch(() => {
@@ -7,7 +7,7 @@
<div class="buttons"> <div class="buttons">
<button (click)="takePicture()" full class="btn-cancel hide-desktop" shape="round" >Tirar Fotografia</button> <button (click)="takePicture()" full class="btn-cancel hide-desktop" shape="round" >Tirar Fotografia</button>
<button (click)="addPicture()" full class="btn-cancel" shape="round" >Anexar Fotografia</button> <button (click)="addPicture()" full class="btn-cancel" shape="round" >Anexar Fotografia</button>
<button hidden (click)="addDocument()" class="btn-cancel" shape="round" >Documento</button> <button (click)="addDocument()" class="btn-cancel" shape="round" >Documento</button>
<button (click)="addDocGestaoDocumental()" class="btn-cancel" shape="round" >Anexar Documento (G.D.)</button> <button (click)="addDocGestaoDocumental()" class="btn-cancel" shape="round" >Anexar Documento (G.D.)</button>
<div class="solid"></div> <div class="solid"></div>
<button (click)="bookMeeting()" class="btn-cancel" shape="round" >Novo Evento</button> <button (click)="bookMeeting()" class="btn-cancel" shape="round" >Novo Evento</button>
@@ -16,7 +16,6 @@
<ion-content class="pt-10 height-100"> <ion-content class="pt-10 height-100">
<div *ngIf="pdfSrc" class="height-100"> <div *ngIf="pdfSrc" class="height-100">
<iframe id="iframe" src="https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=https://equilibrium.dyndns.info/FileShare/merged_fastview.pdf" height="100%" width="100%" title="Iframe Example"></iframe> <iframe id="iframe" src="https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=https://equilibrium.dyndns.info/FileShare/merged_fastview.pdf&caches=12321231231f23123" height="100%" width="100%" title="Iframe Example"></iframe>
</div> </div>
</ion-content> </ion-content>
@@ -1,14 +1,3 @@
ion-content { ion-content {
background-color: #ececec; background-color: #ececec;
} }
.ng2-pdf-viewer-container {
padding-top: 10px;
}
#pdf-container {
canvas {
width: 100%;
height: 100%;
}
}
@@ -10,7 +10,7 @@ import { ProcessesService } from 'src/app/services/processes.service';
}) })
export class DocumentViewerPage implements OnInit { export class DocumentViewerPage implements OnInit {
pdfSrc = 'http://laptop-46/FileShare/Test_25MB.pdf'; pdfSrc = null;
task = null task = null
DocId = null DocId = null
fileName = '' fileName = ''
@@ -24,10 +24,7 @@ export class DocumentViewerPage implements OnInit {
this.task = this.navParams.get('task') || null; this.task = this.navParams.get('task') || null;
this.DocId = this.navParams.get('DocId'); this.DocId = this.navParams.get('DocId');
if(this.navParams.get('pdfSrc')) { this.pdfSrc = 'https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file='
this.pdfSrc = this.navParams.get('pdfSrc') || null;
}
} }
@@ -41,169 +38,6 @@ export class DocumentViewerPage implements OnInit {
}) })
// this.setPdfViewer()
// setTimeout(() => {
// document.getElementById('iframe')['contentWindow'].postMessage(
// {
// sender: "get_page_button1",
// message: 'url'
// }, "*")
// }, 3000)
}
setPdfViewer() {
setTimeout( async () => {
// If absolute URL from the remote server is provided, configure the CORS
// header on that server.
var url = 'http://192.168.0.87:3000/000634977.pdf';
const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry');
// Loaded via <script> tag, create shortcut to access PDF.js exports.
var pdfjsLib = await import('pdfjs-dist/build/pdf');
// The workerSrc property shall be specified.
// pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;
var pdfDoc = null,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 0.8,
canvas: any = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport({scale: scale});
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
// document.getElementById('page_num').textContent = num;
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum <= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
var currPage = 1; //Pages are 1-based not 0-based
var numPages = 0;
var thePDF = null;
function handlePages(page)
{
//This gives us the page's dimensions at full scale
var viewport = page.getViewport( 1 );
//We'll create a canvas for each page to draw it on
var canvas = document.createElement( "canvas" );
canvas.style.display = "block";
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//Draw it on the canvas
page.render({canvasContext: context, viewport: viewport});
//Add it to the web page
document.querySelector('#pdf-container').appendChild( canvas );
//Move to next page
currPage++;
if ( thePDF !== null && currPage <= numPages )
{
thePDF.getPage( currPage ).then( handlePages );
}
}
/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
thePDF = pdfDoc_
pdfDoc.getPage(1).then(function(page) {
// you can now use *page* here
// alert('first page')
});
// Initial/first page rendering
renderPage(pageNum);
numPages = pdfDoc.numPages;
pdfDoc.getPage( 1 ).then( handlePages );
});
}, 100)
} }
close() { close() {
@@ -64,7 +64,7 @@
</div> </div>
</ion-col> </ion-col>
<ion-col class="align-center d-flex"> <ion-col hidden class="align-center d-flex">
<div (click)="addFingerprint()" class="d-flex align-center"> <div (click)="addFingerprint()" class="d-flex align-center">
<ion-checkbox class="checkBox" [checked]="false"></ion-checkbox> <ion-checkbox class="checkBox" [checked]="false"></ion-checkbox>
Impressão Digital Impressão Digital
@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ViewDocumentPage } from './view-document.page';
const routes: Routes = [
{
path: '',
component: ViewDocumentPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class ViewDocumentPageRoutingModule {}
@@ -0,0 +1,22 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { ViewDocumentPageRoutingModule } from './view-document-routing.module';
import { ViewDocumentPage } from './view-document.page';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
FontAwesomeModule,
ViewDocumentPageRoutingModule
],
declarations: [ViewDocumentPage]
})
export class ViewDocumentPageModule {}
@@ -0,0 +1,25 @@
<ion-header class="ion-no-border">
<ion-toolbar class="d-flex">
<div class="d-flex align-items-center px-20 pt-20 font-25">
<div class="left cursor-pointer" (click)="close()">
<!-- <ion-icon class="font-35" src="assets/images/icons-arrow-arrow-left.svg"></ion-icon> -->
<fa-icon icon="chevron-left" class="menu-icon"></fa-icon>
</div>
<div class="middle">
{{file.title}}
</div>
<div class="right cursor-pointer">
<fa-icon icon="ellipsis-v" class="menu-icon"></fa-icon>
</div>
</div>
</ion-toolbar>
</ion-header>
<ion-content class="pt-10 height-100">
<div class="height-100">
<iframe id="iframe" [src]="trustedUrl" height="100%" width="100%" title="Iframe Example"></iframe>
</div>
</ion-content>
@@ -0,0 +1,11 @@
.left{
float: left;
}
.middle{
float: left;
padding-left: 5px !important;
}
.right{
float: right;
margin-left: auto;
}
@@ -0,0 +1,24 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { ViewDocumentPage } from './view-document.page';
describe('ViewDocumentPage', () => {
let component: ViewDocumentPage;
let fixture: ComponentFixture<ViewDocumentPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ ViewDocumentPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(ViewDocumentPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,40 @@
import { Component, OnInit } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ModalController, NavParams } from '@ionic/angular';
@Component({
selector: 'app-view-document',
templateUrl: './view-document.page.html',
styleUrls: ['./view-document.page.scss'],
})
export class ViewDocumentPage implements OnInit {
url: string;
a:string = "https://equilibrium.dyndns.info/FileShare/pdfjs/web/viewer.html?file=";
viewerUrl: string;
trustedUrl: any;
file:any;
constructor(
private modalController: ModalController,
private navParams: NavParams,
private sanitazer: DomSanitizer,
) {
this.file = this.navParams.get('file');
this.url = this.file.title_link;
console.log(this.url);
}
ngOnInit() {
this.viewerUrl = this.url.replace("webTRIX.Viewer.Branch1/pdfjs/web/viewpdf.aspx?file=/webTRIX.Viewer.Branch1/arq/637690403731947760.pdf&i", "FileShare/pdfjs/web/viewer.html?file");
this.trustedUrl = this.sanitazer.bypassSecurityTrustResourceUrl(this.viewerUrl);
console.log(this.trustedUrl);
}
close() {
this.modalController.dismiss();
}
}
+55 -6
View File
@@ -8,7 +8,7 @@ import { AlertService } from 'src/app/services/alert.service';
import { momentG } from 'src/plugin/momentG'; import { momentG } from 'src/plugin/momentG';
import { DomSanitizer } from "@angular/platform-browser"; import { DomSanitizer } from "@angular/platform-browser";
import { EventPerson } from 'src/app/models/eventperson.model'; import { EventPerson } from 'src/app/models/eventperson.model';
import { removeDuplicate } from 'src/plugin/removeDuplicate.js' import { removeDuplicate } from 'src/plugin/removeDuplicate.js';
// showTimeline // showTimeline
import { setHours, setMinutes } from 'date-fns'; import { setHours, setMinutes } from 'date-fns';
@@ -547,9 +547,6 @@ export class AgendaPage implements OnInit {
this.eventService.getAllPrEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then( this.eventService.getAllPrEvents(momentG(new Date(startTime),'yyyy-MM-dd HH:mm:ss'), momentG(new Date(endTime),'yyyy-MM-dd 23:59:59')).then(
(response:any) => { (response:any) => {
// calendar
// this.eventSource=[];
// clear the current month only // clear the current month only
this.CalendarStore.removeRange(startTime, endTime, 'pr') this.CalendarStore.removeRange(startTime, endTime, 'pr')
@@ -605,6 +602,8 @@ export class AgendaPage implements OnInit {
this.CalendarStore.pushEvent(eventsList, 'pr'); this.CalendarStore.pushEvent(eventsList, 'pr');
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate}) this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.myCal.update(); this.myCal.update();
this.myCal.loadEvents(); this.myCal.loadEvents();
@@ -656,6 +655,8 @@ export class AgendaPage implements OnInit {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate}) this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.myCal.update(); this.myCal.update();
this.myCal.loadEvents(); this.myCal.loadEvents();
@@ -780,8 +781,56 @@ export class AgendaPage implements OnInit {
updateEventListBox() { updateEventListBox() {
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate}) if(window.innerWidth < 800){
switch (this.segment) {
case "Combinado":
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR' ) {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
else if(this.profile == "pr" && this.loggeduser.Profile == 'MDGPR') {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
else if(this.loggeduser.Profile == 'PR') {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
break;
case "Pessoal":
//Inicializa o array eventSource
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR') {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
else{
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
break;
case "Oficial":
if(this.profile == "mdgpr" && this.loggeduser.Profile == 'MDGPR') {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {})
} else {
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
break;
}
} else {
this.TimelinePRList = this.listBoxService.list(this.CalendarStore.eventSource, 'pr', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
this.TimelineMDList = this.listBoxService.list(this.CalendarStore.eventSource, 'md', this.rangeStartDate, this.rangeEndDate, {segment:this.segment, selectedDate: this.eventSelectedDate})
}
} }
@@ -172,6 +172,9 @@ export class ViewEventPage implements OnInit {
} }
deleteEvent(){ deleteEvent(){
const loader = this.toastService.loading()
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () =>
{ {
const alert = await this.alertController.create({ const alert = await this.alertController.create({
@@ -185,6 +188,9 @@ export class ViewEventPage implements OnInit {
}, 1500); }, 1500);
this.goBack(); this.goBack();
this.toastService.successMessage('Evento apagado'); this.toastService.successMessage('Evento apagado');
}, ()=>{},
()=>{
loader.remove();
}); });
} }
+2
View File
@@ -45,6 +45,7 @@ ion-content{
.aside-wrapper{ .aside-wrapper{
margin: 0 !important; margin: 0 !important;
overflow: auto;
.title-content{ .title-content{
padding: 30px 20px 0 20px !important; padding: 30px 20px 0 20px !important;
@@ -52,6 +53,7 @@ ion-content{
.aside{ .aside{
padding: 0 !important; padding: 0 !important;
overflow: auto;
} }
} }
@@ -66,10 +66,11 @@
<div> <div>
<div class="file"> <div class="file">
<!-- <canvas id="pdf_canvas"></canvas> --> <!-- <canvas id="pdf_canvas"></canvas> -->
<div class="file-details add-ellipsis" *ngIf="msg.file"> <div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span (click)="viewDocument(file.title_link)" class="cursor-pointer"> <span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon> <ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span> </span>
<ion-label class="file-title">{{file.title}}</ion-label> <ion-label class="file-title">{{file.title}}</ion-label>
@@ -118,29 +119,6 @@
</ion-fab> </ion-fab>
</ion-content> </ion-content>
<!--
<ion-footer>
<ion-toolbar>
<ion-row align-items-center class="row">
<ion-col size="1">
<ion-label class="ion-no-padding" lines="none">
<ion-icon (click)="openChatOptions()" class="chat-icon-options" src="assets/icon/icons-chat-options.svg"></ion-icon>
</ion-label>
</ion-col>
<ion-col size="9">
<ion-item class="ion-no-padding type-message" lines="none">
<ion-textarea placeholder="Escrever uma mensagem" auto-grow class="message-input" rows="1" [(ngModel)]="message"></ion-textarea>
<ion-icon slot="end" src="assets/icon/icons-chat-mic.svg"></ion-icon>
</ion-item>
</ion-col>
<ion-col size="2">
<ion-label>
<ion-icon (click)="sendMessage()" class="chat-icon-send" src="assets/icon/icons-chat-send.svg"></ion-icon>
</ion-label>
</ion-col>
</ion-row>
</ion-toolbar>
</ion-footer> -->
<ion-footer> <ion-footer>
<div class="container width-100 d-flex"> <div class="container width-100 d-flex">
@@ -18,6 +18,7 @@ import { ToastService } from 'src/app/services/toast.service';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment';
import { NewEventPage } from '../../agenda/new-event/new-event.page'; import { NewEventPage } from '../../agenda/new-event/new-event.page';
import { EventPerson } from 'src/app/models/eventperson.model'; import { EventPerson } from 'src/app/models/eventperson.model';
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
@Component({ @Component({
selector: 'app-group-messages', selector: 'app-group-messages',
@@ -364,8 +365,28 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
}; };
} }
viewDocument(url:string){ viewDocument(file:any){
this.fileService.viewDocumentByUrl(url); if(file.type == "file"){
let fullUrl = "https://www.tabularium.pt" + file.title_link;
this.fileService.viewDocumentByUrl(fullUrl);
}
else{
this.fileService.viewDocumentByUrl(file.title_link);
//this.openViewDocumentModal(file);
}
}
async openViewDocumentModal(file:any){
const modal = await this.modalController.create({
component: ViewDocumentPage,
componentProps: {
file: file,
},
cssClass: 'modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
} }
async bookMeeting() { async bookMeeting() {
@@ -64,10 +64,11 @@
<div> <div>
<div class="file"> <div class="file">
<!-- <canvas id="pdf_canvas"></canvas> --> <!-- <canvas id="pdf_canvas"></canvas> -->
<div class="file-details add-ellipsis" *ngIf="msg.file"> <div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span (click)="viewDocument(file.title_link)" class="cursor-pointer"> <span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon> <ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span> </span>
<ion-label class="file-title">{{file.title}}</ion-label> <ion-label class="file-title">{{file.title}}</ion-label>
+23 -2
View File
@@ -2,6 +2,7 @@ import { AfterViewChecked, AfterViewInit, Component, ElementRef, OnDestroy, OnIn
import {ActivatedRoute, Router} from '@angular/router' import {ActivatedRoute, Router} from '@angular/router'
import { GestureController, Gesture, ModalController, NavParams, PopoverController } from '@ionic/angular'; import { GestureController, Gesture, ModalController, NavParams, PopoverController } from '@ionic/angular';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
import { EventPerson } from 'src/app/models/eventperson.model'; import { EventPerson } from 'src/app/models/eventperson.model';
import { ContactsPage } from 'src/app/pages/chat/messages/contacts/contacts.page'; import { ContactsPage } from 'src/app/pages/chat/messages/contacts/contacts.page';
import { AlertService } from 'src/app/services/alert.service'; import { AlertService } from 'src/app/services/alert.service';
@@ -273,8 +274,28 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
}) })
} }
viewDocument(url:string){ viewDocument(file:any){
this.fileService.viewDocumentByUrl(url); if(file.type == "file"){
let fullUrl = "https://www.tabularium.pt" + file.title_link;
this.fileService.viewDocumentByUrl(fullUrl);
}
else{
this.fileService.viewDocumentByUrl(file.title_link);
//this.openViewDocumentModal(file);
}
}
async openViewDocumentModal(file:any){
const modal = await this.modalController.create({
component: ViewDocumentPage,
componentProps: {
file: file,
},
cssClass: 'modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
} }
getChatMembers() { getChatMembers() {
@@ -359,19 +359,7 @@ export class ExpedienteDetailPage implements OnInit {
async viewDocument(DocId:string) { async viewDocument(DocId:string) {
const modal = await this.modalController.create({ this.expedienteService.viewDocument({ApplicationId:'361', DocId})
component: DocumentViewerPage,
cssClass: 'modal-desktop modal',
componentProps: {
DocId: DocId
}
});
await modal.present();
modal.onDidDismiss().then( async (res)=> {
});
} }
+2
View File
@@ -102,6 +102,8 @@ export class AuthService {
console.log('Login to Rocket chat OK'); console.log('Login to Rocket chat OK');
this.ValidatedUserChat = responseChat; this.ValidatedUserChat = responseChat;
localStorage.setItem('userChat', JSON.stringify(responseChat)); localStorage.setItem('userChat', JSON.stringify(responseChat));
localStorage.setItem('Meteor.loginToken', JSON.stringify(responseChat['data'].userId));
localStorage.setItem('Meteor.userId', JSON.stringify(responseChat['data'].authToken));
this.storageService.store(AuthConnstants.AUTH, responseChat); this.storageService.store(AuthConnstants.AUTH, responseChat);
return true; return true;
} }
+24
View File
@@ -49,6 +49,22 @@ export class ChatService {
}); */ }); */
} }
getDocumentDetails(url:string){
let headersc = new HttpHeaders();
headersc = headersc.set('X-User-Id', this.loggedUserChat['data'].userId);
headersc = headersc.set('X-Auth-Token', this.loggedUserChat['data'].authToken);
// headersc = headersc.set("Host", "www.tabularium.pt");
// headersc = headersc.set("Origin", "http://localhost:8100");
// headersc = headersc.set("Referer", "http://localhost:8100/");
let optionsc = {
headers: headersc,
};
let fullUrl = "https://www.tabularium.pt/" + url;
return this.http.get(fullUrl, optionsc).subscribe(()=>{
//this.fileService.viewDocumentByUrl(url)
});
}
getAllChannels(){ getAllChannels(){
return this.http.get(environment.apiChatUrl+'channels.list', this.options); return this.http.get(environment.apiChatUrl+'channels.list', this.options);
} }
@@ -113,6 +129,14 @@ export class ChatService {
return this.http.post(environment.apiChatUrl+'chat.sendMessage', body, opts); return this.http.post(environment.apiChatUrl+'chat.sendMessage', body, opts);
} }
uploadFile(formData:any, rid:string){
let url = environment.apiChatUrl+'rooms.upload/'+rid;
let opts = {
headers: this.headers,
}
return this.http.post(url, formData, opts);
}
deleteMessage(body:any){ deleteMessage(body:any){
let opts = { let opts = {
headers: this.headers, headers: this.headers,
+7 -25
View File
@@ -21,6 +21,8 @@ export class FileService {
documents:SearchList[] = []; documents:SearchList[] = [];
showLoader: boolean; showLoader: boolean;
files: Set<File>;
constructor( constructor(
private camera: Camera, private camera: Camera,
private fileLoaderService: FileLoaderService, private fileLoaderService: FileLoaderService,
@@ -160,33 +162,12 @@ export class FileService {
console.log(file); console.log(file);
const imageData = await this.fileToBase64Service.convert(file) const formData = new FormData();
this.capturedImage = imageData; formData.append('file', file, file.name);
this.capturedImageTitle = file.name;
let body = { this.chatService.uploadFile(formData, roomId).subscribe(res=> {
"message": console.log(res);
{
"rid": roomId,
"msg": "",
"attachments": [{
"title": this.capturedImageTitle,
"text": "",
"title_link": this.capturedImage,
"title_link_download": true,
"thumb_url": "https://static.ichimura.ed.jp/uploads/2017/10/pdf-icon.png",
"message_link": this.capturedImage,
}],
"file":{
"name": this.capturedImageTitle,
"type": "application/pdf",
}
}
}
this.chatService.sendMessage(body).subscribe(res=> {
loader.remove(); loader.remove();
//console.log(res);
},(error) => { },(error) => {
loader.remove(); loader.remove();
}); });
@@ -233,6 +214,7 @@ export class FileService {
"title_link_download": true, "title_link_download": true,
//"thumb_url": "assets/images/webtrix-logo.png", //"thumb_url": "assets/images/webtrix-logo.png",
"message_link": url_no_options, "message_link": url_no_options,
"type": "webtrix"
}], }],
"file":{ "file":{
"name": res.data.selected.Assunto, "name": res.data.selected.Assunto,
+1 -2
View File
@@ -3,7 +3,7 @@
///<reference path="../../../plugins/cordova-plugin-mfp-push/typings/mfppush.d.ts" /> ///<reference path="../../../plugins/cordova-plugin-mfp-push/typings/mfppush.d.ts" />
import { Injectable, NgZone } from '@angular/core'; import { Injectable, NgZone } from '@angular/core';
import { ActivatedRoute } from '@angular/router' import { ActivatedRoute } from '@angular/router'
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment';
import { StorageService } from 'src/app/services/storage.service'; import { StorageService } from 'src/app/services/storage.service';
import { AuthConnstants } from 'src/app/config/auth-constants'; import { AuthConnstants } from 'src/app/config/auth-constants';
@@ -11,7 +11,6 @@ import { Token } from '../models/token.model';
import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular'; import { ModalController, AlertController, AnimationController, Platform } from '@ionic/angular';
import { NavigationExtras,Router } from '@angular/router'; import { NavigationExtras,Router } from '@angular/router';
import { ToastService } from '../services/toast.service'; import { ToastService } from '../services/toast.service';
import { Optional } from '@angular/core';
import { JsonStore } from './jsonStore.service'; import { JsonStore } from './jsonStore.service';
import { synchro } from './socket/synchro.service'; import { synchro } from './socket/synchro.service';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
+4 -3
View File
@@ -50,7 +50,8 @@ export class SqliteService {
Category varchar(255), Category varchar(255),
EventRecurrence Text, EventRecurrence Text,
Attachments Text, Attachments Text,
Body Text Body Text,
Profile varchar(255)
)`, []) )`, [])
.then((res) => { .then((res) => {
console.log("Sucess Events Table created: ", res) console.log("Sucess Events Table created: ", res)
@@ -109,9 +110,9 @@ export class SqliteService {
//addEvent //addEvent
public addEvent(data) { public addEvent(data) {
this.dbInstance.executeSql(` this.dbInstance.executeSql(`
INSERT OR REPLACE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body ) INSERT OR IGNORE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body,Profile )
VALUES ('${data.EventId}','${data.Subject}', '${data.HasAttachments}','${data.Location}','${data.CalendarId}','${data.CalendarName}','${data.StartDate}','${data.EndDate}','${data.EventType}','${data.Attendees}','${data.IsMeeting}','${data.IsRecurring}', VALUES ('${data.EventId}','${data.Subject}', '${data.HasAttachments}','${data.Location}','${data.CalendarId}','${data.CalendarName}','${data.StartDate}','${data.EndDate}','${data.EventType}','${data.Attendees}','${data.IsMeeting}','${data.IsRecurring}',
'${data.IsAllDayEvent}','${data.AppointmentState}','${data.TimeZone}','${data.Organizer}','${data.Category}','${data.EventRecurrence}','${data.Attachments}','${data.Body}')`, []) '${data.IsAllDayEvent}','${data.AppointmentState}','${data.TimeZone}','${data.Organizer}','${data.Category}','${data.EventRecurrence}','${data.Attachments}','${data.Body}','${data.Profile}')`, [])
.then(() => { .then(() => {
console.log("event add with Success"); console.log("event add with Success");
@@ -3,7 +3,7 @@
<div class="main-header"> <div class="main-header">
<div class="title-content"> <div class="title-content">
<div class="middle"> <div class="middle">
<ion-label class="title">Editar Evento</ion-label> <ion-label class="title">Editar Evento aganda</ion-label>
</div> </div>
</div> </div>
<ion-progress-bar class="calendar-progress-bar" type="indeterminate" *ngIf="showLoader"></ion-progress-bar> <ion-progress-bar class="calendar-progress-bar" type="indeterminate" *ngIf="showLoader"></ion-progress-bar>
@@ -13,8 +13,6 @@
<ion-content> <ion-content>
<div class="main-content"> <div class="main-content">
<div class="ion-item-container" [class.input-error]="Form?.get('Subject')?.invalid && validateFrom "> <div class="ion-item-container" [class.input-error]="Form?.get('Subject')?.invalid && validateFrom ">
<ion-input placeholder="Assunto*" [(ngModel)]="postEvent.Subject"></ion-input> <ion-input placeholder="Assunto*" [(ngModel)]="postEvent.Subject"></ion-input>
</div> </div>
@@ -284,7 +282,7 @@
</ion-label> </ion-label>
</div> </div>
<div class="d-flex container-div width-100" *ngFor="let document of postEvent.Attachments; let i = index" > <div class="d-flex container-div width-100" *ngFor="let document of loadedEventAttachments; let i = index" >
<ion-list class="width-100 list" *ngIf="!document.remove"> <ion-list class="width-100 list" *ngIf="!document.remove">
<ion-item class="width-100"> <ion-item class="width-100">
<ion-label class="width-100"> <ion-label class="width-100">
@@ -296,7 +294,6 @@
<span class="close-button text-black cursor-pointer" (click)="deleteAttachment(document.Id, i)" > <span class="close-button text-black cursor-pointer" (click)="deleteAttachment(document.Id, i)" >
<ion-icon class="font-20" src="assets/images/icons-delete-25.svg"></ion-icon> <ion-icon class="font-20" src="assets/images/icons-delete-25.svg"></ion-icon>
</span> </span>
</p> </p>
<p><span class="span-left">{{document.Stakeholders}}</span><span class="span-right"> {{document.CreateDate | date: 'dd-MM-yyyy HH:mm'}} </span></p> <p><span class="span-left">{{document.Stakeholders}}</span><span class="span-right"> {{document.CreateDate | date: 'dd-MM-yyyy HH:mm'}} </span></p>
</ion-label> </ion-label>
@@ -125,6 +125,8 @@ export class EditEventPage implements OnInit {
} }
this.loadedEventAttachments = this.loadedEventAttachments.concat(this.postEvent.Attachments)
this.getRecurrenceTypes(); this.getRecurrenceTypes();
this.postEvent.EventRecurrence.Type = this.postEvent.EventRecurrence.Type.toString(); this.postEvent.EventRecurrence.Type = this.postEvent.EventRecurrence.Type.toString();
@@ -268,15 +270,18 @@ export class EditEventPage implements OnInit {
this.clearPostEvent.emit(); this.clearPostEvent.emit();
this.deleteTemporaryData(); this.deleteTemporaryData();
this.close();
this.saveDocument() await this.saveDocument()
this.close();
} }
saveDocument() { async saveDocument() {
this.loadedEventAttachments.forEach((e)=>{ console.log(this.loadedEventAttachments)
await this.loadedEventAttachments.forEach( async (e)=>{
const id: any = e.Id const id: any = e.Id
const remove = e['remove'] const remove = e['remove']
@@ -329,8 +334,6 @@ export class EditEventPage implements OnInit {
} }
saveTemporaryData() { saveTemporaryData() {
window['temp.path:/home/agenda/edit-event.component.ts'] = { window['temp.path:/home/agenda/edit-event.component.ts'] = {
@@ -413,7 +416,6 @@ export class EditEventPage implements OnInit {
console.log( this.loadedEventAttachments) console.log( this.loadedEventAttachments)
this.loadedEventAttachments.push(ApplicationIdDocumentToSave) this.loadedEventAttachments.push(ApplicationIdDocumentToSave)
} }
}); });
} }
@@ -92,7 +92,7 @@
<span class="span-right">{{ attach.CreateDate | date: 'dd-MM-yyyy HH:mm' }}</span> <span class="span-right">{{ attach.CreateDate | date: 'dd-MM-yyyy HH:mm' }}</span>
</div> </div>
<div (click)="docIndex(i);openTaskOptions()" class="doc-options"> <div (click)="docIndex(i);LoadDocumentDetails()" class="doc-options">
<ion-icon src="assets/images/icons-menu.svg" ></ion-icon> <ion-icon src="assets/images/icons-menu.svg" ></ion-icon>
</div> </div>
@@ -100,8 +100,7 @@
</li> </li>
</ion-list> </ion-list>
</div> </div>
<!-- <div class="line"></div> -->
</div> </div>
</ion-content> </ion-content>
@@ -6,9 +6,13 @@ import { EventsService } from 'src/app/services/events.service';
import { Event } from 'src/app/models/event.model'; import { Event } from 'src/app/models/event.model';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx'; import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { OptsExpedientePage } from '../../popover/opts-expediente/opts-expediente.page';
import { ToastService } from 'src/app/services/toast.service'; import { ToastService } from 'src/app/services/toast.service';
import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-event.page'; import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-event.page';
import { SearchDocumentDetails, SearchFolderDetails } from 'src/app/models/search-document';
import { ExpedientTaskModalPageNavParamsTask } from 'src/app/models/ExpedientTaskModalPage';
import { DocumentSetUpMeetingPage } from 'src/app/modals/document-set-up-meeting/document-set-up-meeting.page';
import { ExpedientTaskModalPage } from 'src/app/pages/gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page';
import { SearchedDocumentOptionsPage } from '../../popover/searched-document-options/searched-document-options.page';
@Component({ @Component({
selector: 'app-view-event', selector: 'app-view-event',
@@ -17,14 +21,15 @@ import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-eve
}) })
export class ViewEventPage implements OnInit { export class ViewEventPage implements OnInit {
loadedEvent: Event; loadedEvent: any;
isEventEdited: boolean; isEventEdited: boolean;
eventBody: EventBody; eventBody: EventBody;
loadedAttachments:any; loadedAttachments:any;
pageId: string; pageId: string;
showLoader: boolean; showLoader: boolean;
task: ExpedientTaskModalPageNavParamsTask;
minDate: Date; minDate: Date;
LoadedDocument:any = null;
customDate:any; customDate:any;
today:any; today:any;
@@ -47,9 +52,8 @@ export class ViewEventPage implements OnInit {
private processes: ProcessesService, private processes: ProcessesService,
private modalController: ModalController, private modalController: ModalController,
public popoverController: PopoverController, public popoverController: PopoverController,
private toastService: ToastService, private toastService: ToastService
) ) {
{
this.isEventEdited = false; this.isEventEdited = false;
this.loadedEvent = new Event(); this.loadedEvent = new Event();
this.eventBody = { BodyType : "1", Text : ""}; this.eventBody = { BodyType : "1", Text : ""};
@@ -57,19 +61,16 @@ export class ViewEventPage implements OnInit {
} }
ngOnInit() { ngOnInit() {
/* console.log(this.eventId); */
this.loadEvent(); this.loadEvent();
//this.getAttachments();
} }
doRefresh(ev){ doRefresh(ev) {
this.loadEvent(); this.loadEvent();
ev.target.complete(); ev.target.complete();
} }
ngOnChanges(changes: any): void { ngOnChanges(changes: any): void {
this.loadedAttachments = null; this.loadedEvent.Attachments = null;
this.loadEvent(); this.loadEvent();
} }
@@ -100,7 +101,7 @@ export class ViewEventPage implements OnInit {
this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]); this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]);
}, (error)=> { }, (error)=> {
console.log('errer', ) // console.log('errer', )
this.viewEventDetailDismiss.emit({ this.viewEventDetailDismiss.emit({
type: 'close' type: 'close'
@@ -118,12 +119,27 @@ export class ViewEventPage implements OnInit {
async deleteEvent() { async deleteEvent() {
if (this.loadedEvent.IsRecurring) { if (this.loadedEvent.IsRecurring) {
const loader = this.toastService.loading()
} else {
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => { this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => {
this.toastService.successMessage('Evento apagado'); this.toastService.successMessage('Evento apagado');
this.close(); this.close();
},()=>{},
()=>{
loader.remove();
}); });
} else {
const loader = this.toastService.loading()
this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => {
this.toastService.successMessage('Evento apagado');
this.close();
},()=>{},
()=>{
loader.remove();
});
} }
} }
@@ -143,7 +159,6 @@ export class ViewEventPage implements OnInit {
} }
async editEvent() { async editEvent() {
this.viewEventDetailDismiss.emit({ this.viewEventDetailDismiss.emit({
type: 'edit', type: 'edit',
@@ -161,51 +176,195 @@ export class ViewEventPage implements OnInit {
}); });
} }
async LoadDocumentDetails() {
const docId = this.loadedEvent.Attachments[ this.dicIndex].SourceId
const applicationId = this.loadedEvent.Attachments[ this.dicIndex].ApplicationId
console.log(this.loadedEvent.Attachments[ this.dicIndex])
this.processes.GetDocumentDetails(docId, applicationId).subscribe( async(res)=> {
this.LoadedDocument = res;
this.LoadedDocument.Subject = this.LoadedDocument.Assunto
let thedate = new Date(this.LoadedDocument.DateDispatch || this.LoadedDocument.DocDate);
this.customDate = this.days[thedate.getDay()]+ ", " + thedate.getDate() +" de " + ( this.months[thedate.getMonth()]);
let task: ExpedientTaskModalPageNavParamsTask
let document: SearchDocumentDetails = this.LoadedDocument
let folder: SearchFolderDetails = this.LoadedDocument
if(this.LoadedDocument.ApplicationID == 361 || this.LoadedDocument.ApplicationId == 361) {
task = {
serialNumber: folder.DispatchNumber,
taskStartDate: folder.DateDispatch,
isEvent: true,
workflowInstanceDataFields: {
FolderID: folder['FolderId'] || folder['FolderID'] || folder.folderId,
Subject: folder.Assunto,
SourceSecFsID: folder.ApplicationID || folder['ApplicationId'],
SourceType: 'FOLDER',
SourceID: folder.folderId,
DispatchNumber: folder.DispatchNumber
},
}
} else if (document.ApplicationID == 8 || document.ApplicationId == 8) {
task = {
serialNumber: document.DocId,
taskStartDate: document.DocDate,
isEvent: true,
workflowInstanceDataFields: {
FolderID: null,
Subject: document.Assunto,
DispatchNumber: null,
SourceSecFsID: document.ApplicationID || document.ApplicationId,
SourceType: 'DOC',
SourceID: document.DocId,
}
}
} else {
console.log('unexpected ApplicationID')
}
this.task = task
console.log('this.task = task', this.task)
this.task = task
const popover = await this.popoverController.create({
component: SearchedDocumentOptionsPage,
cssClass: 'exp-options',
componentProps: {
task: this.task,
LoadedDocument: this.LoadedDocument
},
translucent: true
});
await popover.present()
popover.onDidDismiss().then((res:any) => {
if(res.data.component == 'openBookMeetingModal') {
this.openBookMeetingModal()
} else if(res.data.component == 'openExpedientActionsModal') {
this.openExpedientActionsModal(res.data.taskAction)
} else {
console.log(res.data)
}
});
});
}
async openTaskOptions() { async openTaskOptions() {
const doc = this.loadedAttachments[ this.dicIndex]; let task: ExpedientTaskModalPageNavParamsTask
let document: SearchDocumentDetails = this.loadedEvent.Attachments[ this.dicIndex];
let folder: SearchFolderDetails = this.loadedEvent.Attachments[ this.dicIndex];
let customTask; if(this.loadedEvent.Attachments[this.dicIndex].ApplicationID == 361 || this.loadedEvent.Attachments[this.dicIndex].ApplicationId == 361) {
task = {
if(doc.ApplicationID == 361 || doc.ApplicationId == 361) { serialNumber: folder.DispatchNumber,
customTask = { taskStartDate: folder.DateDispatch,
serialNumber: doc.DispatchNumber,
taskStartDate: doc.DateDispatch,
isEvent: true, isEvent: true,
workflowInstanceDataFields: { workflowInstanceDataFields: {
FsId: doc.ApplicationID, FolderID: folder['FolderId'] || folder['FolderID'] || folder.folderId,
FolderID: null, Subject: folder.Assunto,
DocId: doc.DispatchNumber, SourceSecFsID: folder.ApplicationID || folder['ApplicationId'],
Subject: doc.Assunto SourceType: 'FOLDER',
SourceID: folder.folderId,
DispatchNumber: folder.DispatchNumber
}, },
} }
} else if (doc.ApplicationID == 8 || doc.ApplicationId == 8) { } else if (document.ApplicationID == 8 || document.ApplicationId == 8) {
customTask = { task = {
serialNumber: doc.DocId, serialNumber: document.DocId,
taskStartDate: doc.DocDate, taskStartDate: document.DocDate,
isEvent: true, isEvent: true,
workflowInstanceDataFields: { workflowInstanceDataFields: {
FsId: doc.ApplicationID || doc.ApplicationId,
FolderID: null, FolderID: null,
DocId: doc.DocId, Subject: document.Assunto,
Subject: doc.Assunto DispatchNumber: null,
SourceSecFsID: document.ApplicationID || document.ApplicationId,
SourceType: 'DOC',
SourceID: document.DocId,
} }
} }
} }
console.log(doc) this.task = task
customTask.Status = ''
const popover = await this.modalController.create({ const popover = await this.popoverController.create({
component: OptsExpedientePage, component: SearchedDocumentOptionsPage,
cssClass: 'model aside-modal search-submodal', cssClass: 'exp-options',
componentProps: { componentProps: {
fulltask: customTask, task: this.task,
task: customTask LoadedDocument: this.LoadedDocument
}, },
//translucent: true translucent: true
}); });
return await popover.present(); await popover.present()
popover.onDidDismiss().then((res:any) => {
if(res.data.component == 'openBookMeetingModal') {
this.openBookMeetingModal()
} else if(res.data.component == 'openExpedientActionsModal') {
this.openExpedientActionsModal(res.data.taskAction)
} else {
console.log(res.data)
console.log('component not found')
}
});
}
async openBookMeetingModal() {
let classs;
if( window.innerWidth < 701) {
classs = 'book-meeting-modal modal modal-desktop'
} else {
classs = 'modal modal-desktop showAsideOptions'
}
const modal = await this.modalController.create({
component: DocumentSetUpMeetingPage,
componentProps: {
subject: this.task.workflowInstanceDataFields.Subject,
document: this.loadedEvent,
},
cssClass: classs,
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss().then(res=>{
//this.location.back();
});
}
// efetuar despacho
async openExpedientActionsModal( taskAction: any) {
let classs;
if( window.innerWidth < 701) {
classs = 'modal modal-desktop'
} else {
classs = 'modal modal-desktop showAsideOptions'
}
const modal = await this.modalController.create({
component: ExpedientTaskModalPage,
componentProps: {
taskAction: taskAction,
task: this.task,
seachDocuments: this.loadedEvent,
aplicationId: this.loadedEvent.ApplicationId || this.loadedEvent.ApplicationID
},
cssClass: classs,
});
await modal.present();
modal.onDidDismiss().then( async(res)=>{});
} }
} }
@@ -59,10 +59,11 @@
<div> <div>
<div class="file"> <div class="file">
<!-- <canvas id="pdf_canvas"></canvas> --> <!-- <canvas id="pdf_canvas"></canvas> -->
<div class="file-details add-ellipsis" *ngIf="msg.file"> <div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span (click)="viewDocument(file.title_link)" class="cursor-pointer"> <span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon> <ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
</span> </span>
<ion-label class="file-title">{{file.title}}</ion-label> <ion-label class="file-title">{{file.title}}</ion-label>
@@ -126,9 +127,31 @@
<ion-footer> <ion-footer>
<div class="container width-100 d-flex"> <div class="container width-100 d-flex">
<div> <div>
<button class="btn-no-color" (click)="openSendGroupMessageOptions()"> <!-- <button class="btn-no-color" (click)="openSendGroupMessageOptions()">
<ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon> <ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon>
</button> </button> -->
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
<ion-fab-button color="light" size="small">
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button (click)="bookMeeting()" color="light">
<ion-icon name="calendar"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addFileWebtrix()" color="light">
<ion-icon src="assets/icon/webtrix.svg"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addFile()" color="light">
<ion-icon name="document"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addImage()" color="light">
<ion-icon name="image"></ion-icon>
</ion-fab-button>
<ion-fab-button class="hide-desktop" (click)="takePicture()" color="light">
<ion-icon name="camera"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
</div> </div>
<div class="width-80"> <div class="width-80">
<ion-item class="ion-no-padding type-message" lines="none"> <ion-item class="ion-no-padding type-message" lines="none">
@@ -17,6 +17,7 @@ import { SearchPage } from 'src/app/pages/search/search.page';
import { SearchList } from 'src/app/models/search-document'; import { SearchList } from 'src/app/models/search-document';
import { ProcessesService } from 'src/app/services/processes.service'; import { ProcessesService } from 'src/app/services/processes.service';
import { FileService } from 'src/app/services/functions/file.service'; import { FileService } from 'src/app/services/functions/file.service';
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
/* /*
@@ -89,7 +90,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
} }
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: SimpleChanges): void {
//this.getRoomInfo(); this.getRoomInfo();
//this.scrollToBottom(); //this.scrollToBottom();
} }
@@ -607,8 +608,48 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe
}); });
} }
viewDocument(url:string){ viewDocument(file:any){
this.fileService.viewDocumentByUrl(url); if(file.type == "file"){
let fullUrl = "https://www.tabularium.pt" + file.title_link;
this.fileService.viewDocumentByUrl(fullUrl);
}
else{
this.fileService.viewDocumentByUrl(file.title_link);
//this.openViewDocumentModal(file);
}
}
async openViewDocumentModal(file:any){
const modal = await this.modalController.create({
component: ViewDocumentPage,
componentProps: {
file: file,
},
cssClass: 'modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
}
takePicture(){
this.fileService.addCameraPictureToChat(this.roomId);
}
addImage(){
this.fileService.addPictureToChat(this.roomId);
}
addFile(){
this.fileService.addDocumentToChat(this.roomId);
}
addFileWebtrix(){
this.fileService.addDocGestaoDocumentalToChat(this.roomId);
}
bookMeeting(){
let data = {
roomId: this.roomId,
members: this.members
}
this.openNewEventPage.emit(data);
} }
async _openChatOptions() { async _openChatOptions() {
@@ -51,8 +51,8 @@
<div> <div>
<div class="file"> <div class="file">
<!-- <canvas id="pdf_canvas"></canvas> --> <!-- <canvas id="pdf_canvas"></canvas> -->
<div class="file-details add-ellipsis" *ngIf="msg.file"> <div (click)="viewDocument(file)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
<span *ngIf="msg.file.type" (click)="viewDocument(file.title_link)" class="cursor-pointer"> <span *ngIf="msg.file.type">
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon> <fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
@@ -99,9 +99,33 @@
<ion-footer> <ion-footer>
<div class="container width-100 d-flex"> <div class="container width-100 d-flex">
<div> <div>
<button class="btn-no-color" (click)="openSendMessageOptions()"> <!-- <button class="btn-no-color" (click)="openSendMessageOptions()">
<ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon> <ion-icon class="chat-icon-options" src="assets/images/icons-add-new-event.svg"></ion-icon>
</button> </button> -->
<ion-fab horizontal="start" vertical="bottom" slot="fixed">
<ion-fab-button color="light" size="small">
<ion-icon name="add"></ion-icon>
</ion-fab-button>
<ion-fab-list side="top">
<ion-fab-button (click)="bookMeeting()" color="light">
<ion-icon name="calendar"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addFileWebtrix()" color="light">
<ion-icon src="assets/icon/webtrix.svg"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addFile()" color="light">
<ion-icon name="document"></ion-icon>
</ion-fab-button>
<ion-fab-button (click)="addImage()" color="light">
<ion-icon name="image"></ion-icon>
</ion-fab-button>
<ion-fab-button class="hide-desktop" (click)="takePicture()" color="light">
<ion-icon name="camera"></ion-icon>
</ion-fab-button>
</ion-fab-list>
</ion-fab>
</div> </div>
<div class="width-80"> <div class="width-80">
<ion-item class="ion-no-padding type-message" lines="none"> <ion-item class="ion-no-padding type-message" lines="none">
+48 -3
View File
@@ -14,6 +14,8 @@ import { ChatMessageStore } from 'src/app/store/chat/chat-message.service';
import { ChatUserStorage } from 'src/app/store/chat/chat-user.service'; import { ChatUserStorage } from 'src/app/store/chat/chat-user.service';
import { TimeService } from 'src/app/services/functions/time.service'; import { TimeService } from 'src/app/services/functions/time.service';
import { FileService } from 'src/app/services/functions/file.service'; import { FileService } from 'src/app/services/functions/file.service';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page';
@Component({ @Component({
selector: 'app-messages', selector: 'app-messages',
@@ -68,13 +70,14 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
private timeService: TimeService, private timeService: TimeService,
private fileService: FileService, private fileService: FileService,
private gestureController: GestureController, private gestureController: GestureController,
private http:HttpClient,
) { ) {
this.loggedUser = authService.ValidatedUserChat['data']; this.loggedUser = authService.ValidatedUserChat['data'];
/* this.dm = this.navParams.get('dm'); */ /* this.dm = this.navParams.get('dm'); */
} }
ngOnChanges(changes: SimpleChanges): void { ngOnChanges(changes: SimpleChanges): void {
this.load(); //this.load();
//throw new Error('Method not implemented.'); //throw new Error('Method not implemented.');
} }
@@ -239,8 +242,28 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
}) })
} }
viewDocument(url:string){ viewDocument(file:any){
this.fileService.viewDocumentByUrl(url); if(file.type == "file"){
let fullUrl = "https://www.tabularium.pt" + file.title_link;
this.fileService.viewDocumentByUrl(fullUrl);
}
else{
this.fileService.viewDocumentByUrl(file.title_link);
//this.openViewDocumentModal(file);
}
}
async openViewDocumentModal(file:any){
const modal = await this.modalController.create({
component: ViewDocumentPage,
componentProps: {
file: file,
},
cssClass: 'modal modal-desktop',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
} }
getChatMembers() { getChatMembers() {
@@ -356,6 +379,28 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
takePicture(){
this.fileService.addCameraPictureToChat(this.roomId);
}
addImage(){
this.fileService.addPictureToChat(this.roomId);
}
addFile(){
this.fileService.addDocumentToChat(this.roomId);
}
addFileWebtrix(){
this.fileService.addDocGestaoDocumentalToChat(this.roomId);
}
bookMeeting(){
let data = {
roomId: this.roomId,
members: this.members
}
this.openNewEventPage.emit(data);
}
async _openChatOptions() { async _openChatOptions() {
const enterAnimation = (baseEl: any) => { const enterAnimation = (baseEl: any) => {
@@ -8,7 +8,7 @@
<ion-header> <ion-header>
<div class="title-content"> <div class="title-content">
<div class="middle"> <div class="middle">
<ion-label class="title">Editar evento por aprovar::.</ion-label> <ion-label class="title">Editar evento por aprovar</ion-label>
</div> </div>
</div> </div>
</ion-header> </ion-header>
+2
View File
@@ -10016,6 +10016,8 @@ function getDocument(src) {
var docId = task.docId; var docId = task.docId;
worker.promise.then(function () { worker.promise.then(function () {
if (task.destroyed) { if (task.destroyed) {
throw new Error('Loading aborted'); throw new Error('Loading aborted');
} }
+17
View File
@@ -1175,6 +1175,23 @@ ngx-mat-datetime-content{
.powerpoint-icon{ .powerpoint-icon{
color: #d24726; color: #d24726;
} }
.menu-icon{
color: #42b9fe;
padding: 0 5px 0 5px;
}
.fab-list{
overflow: auto;
.fab-list-btn{
position: relative;
float: left;
border: 1px solid blue;
}
.fab-list-text{
border-radius: 15px;
}
}
@media only screen and (min-width: 665px) { @media only screen and (min-width: 665px) {
.loading-blocker { .loading-blocker {
+4 -2
View File
@@ -7,6 +7,8 @@
<base href="/" /> <base href="/" />
<!-- <script type="text/javascript" src="node_modules/ibm-mfp-web-sdk/ibmmfpfanalytics.js"></script>
<script type="text/javascript" src="node_modules/ibm-mfp-web-sdk/ibmmfpf.js"></script> -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.9.359/pdf.min.js" integrity="sha512-U5C477Z8VvmbYAoV4HDq17tf4wG6HXPC6/KM9+0/wEXQQ13gmKY2Zb0Z2vu0VNUWch4GlJ+Tl/dfoLOH4i2msw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.9.359/pdf.min.js" integrity="sha512-U5C477Z8VvmbYAoV4HDq17tf4wG6HXPC6/KM9+0/wEXQQ13gmKY2Zb0Z2vu0VNUWch4GlJ+Tl/dfoLOH4i2msw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<!-- <script src="node_modules/ibm-mfp-web-sdk/ibmmfpf.js"></script> <!-- <script src="node_modules/ibm-mfp-web-sdk/ibmmfpf.js"></script>
@@ -15,7 +17,7 @@
<link rel="manifest" href="assets/manifest.json"> <link rel="manifest" href="assets/manifest.json">
<!-- <script src="assets/js/wldirectudpate.js"></script> --> <!-- <script src="assets/js/wldirectudpate.js"></script> -->
<script> <!-- <script>
if (navigator.serviceWorker) { if (navigator.serviceWorker) {
navigator.serviceWorker.register("assets/MFPPushServiceWorker.js").then(function(reg) { navigator.serviceWorker.register("assets/MFPPushServiceWorker.js").then(function(reg) {
window.pushReg = reg; window.pushReg = reg;
@@ -43,7 +45,7 @@
} else { } else {
console.info("Service workers aren't supported in this browser."); console.info("Service workers aren't supported in this browser.");
} }
</script> </script> -->
<meta name="color-scheme" content="light dark" /> <meta name="color-scheme" content="light dark" />
<meta name="viewport" content="viewport-fit=cover, width=device-width, height=device-hight, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="viewport-fit=cover, width=device-width, height=device-hight, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />