mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
Last git pull made
This commit is contained in:
+1
-7
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
+1
-13
@@ -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)=> {
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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" />
|
||||||
|
|||||||
Reference in New Issue
Block a user