Merge branch 'develop_bitOut' into sentry

This commit is contained in:
Eudes Inácio
2022-12-19 12:08:58 +01:00
36 changed files with 306 additions and 133 deletions
+4
View File
@@ -252,6 +252,10 @@ const routes = [
}, },
{ {
path: 'chat-message-debugging', path: 'chat-message-debugging',
loadChildren: () => import('./shared/popover/chat-message-debugging/chat-message-debugging.module').then( m => m.ChatMessageDebuggingPageModule)
},
{
path: 'add-user',
loadChildren: () => import('./shared/chat/add-user/add-user.module').then( m => m.AddUserPageModule) loadChildren: () => import('./shared/chat/add-user/add-user.module').then( m => m.AddUserPageModule)
} }
@@ -220,14 +220,18 @@
</div> </div>
</div> </div>
<div class="container-div width-100"> <!-- <div class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
</div> </div>
<div class="ion-input-class flex-grow-1" [class.input-error]="Form?.get('dateOccurrence')?.invalid && validateFrom "> <div class="ion-input-class flex-grow-1" [class.input-error]="Form?.get('dateOccurrence')?.invalid && validateFrom ">
<!-- (ngModelChange)="onSelectedRecurringChanged($event)" --> <<<<<<< HEAD
=======
>>>>>>> develop_bitOut-fix
<mat-form-field appearance="none" floatLabel="never" class="width-100" value="false" interface="action-sheet" required> <mat-form-field appearance="none" floatLabel="never" class="width-100" value="false" interface="action-sheet" required>
<mat-select placeholder="Selecione repetição*" <mat-select placeholder="Selecione repetição*"
[(ngModel)]="EventRecurrenceType" [(ngModel)]="EventRecurrenceType"
@@ -242,7 +246,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="EventRecurrenceType != '-1'" class="container-div width-100"> <div *ngIf="EventRecurrenceType != '-1'" class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
@@ -163,7 +163,7 @@
<input matInput [ngxMatDatetimePicker]="fim" <input matInput [ngxMatDatetimePicker]="fim"
placeholder="Choose a date" placeholder="Choose a date"
[(ngModel)]="postEvent.EndDate" [(ngModel)]="postEvent.EndDate"
[min]="currentDate" [min]="postEvent.StartDate"
[max]="maxDate" [max]="maxDate"
[disabled]="disabled" [disabled]="disabled"
> >
@@ -180,7 +180,7 @@
</div> </div>
</div> </div>
<div class="container-div d-flex width-100"> <!-- <div class="container-div d-flex width-100">
<div class="ion-item-class-2 width-100 d-flex"> <div class="ion-item-class-2 width-100 d-flex">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
@@ -201,7 +201,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="selectedRecurringType != '-1'" class="container-div width-100"> <div *ngIf="selectedRecurringType != '-1'" class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
@@ -66,9 +66,9 @@ export class EditEventPage implements OnInit {
public endMinDate = new Date(new Date().getTime() + 15 * 60000).toISOString().slice(0,10) public endMinDate = new Date(new Date().getTime() + 15 * 60000).toISOString().slice(0,10)
public maxDate: any; public maxDate: any;
public stepHour = 1; public stepHour = 1;
public stepMinute = 5; public stepMinute = 15;
public stepSecond = 5; public stepSecond = 15;
currentDate = new Date(); currentDate = this.roundTimeQuarterHour();
loadedEventAttachments: Attachment[] = []; loadedEventAttachments: Attachment[] = [];
taskParticipants: any = []; taskParticipants: any = [];
@@ -171,6 +171,39 @@ export class EditEventPage implements OnInit {
}); });
} }
roundTimeQuarterHour() {
var timeToReturn = new Date();
// var minutes = timeToReturn.getMinutes();
var minutes = timeToReturn.getMinutes();
var hours = timeToReturn.getHours();
// console.log("MINUTOS: " +minutes);
// console.log("BEFORE MINUTES: " +(Math.round(minutes/15) * 15));
var m = (Math.round(minutes/15) * 15) % 60;
// console.log("AFTER MINUTES: " +m);
var h = minutes > 52 ? (hours === 23 ? 0 : ++hours) : hours;
if (m == 0) {
if(minutes > m){
m = m + 15;
}
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}else{
if(minutes > m){
m = m + 15;
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}else {
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}
}
}
onSelectedRecurringChanged(ev?:any) { onSelectedRecurringChanged(ev?:any) {
this.calculetedLastOccurrence(ev); this.calculetedLastOccurrence(ev);
@@ -310,6 +310,24 @@
</ion-item> </ion-item>
</ion-list> </ion-list>
</div> </div>
<!--
<div >
<ion-list class="list">
<ion-item>
<ion-label>
<p class="d-flex ion-justify-content-between">
<span class="attach-title-item">Assunto</span>
<span class="app-name">appName</span>
<span class="close-button text-black cursor-pointer" (click)="removeAttachment(i)" >
<ion-icon class="font-20" src="assets/images/icons-delete-25.svg"></ion-icon>
</span>
</p>
<p><span class="span-left">EntidadeOrganicaNome</span><span class="span-right"> document </span></p>
</ion-label>
</ion-item>
</ion-list>
</div> -->
</div> </div>
</ion-content> </ion-content>
<ion-footer class="ion-no-border d-flex justify-center px-20"> <ion-footer class="ion-no-border d-flex justify-center px-20">
+11
View File
@@ -218,6 +218,17 @@
class=" height-100 flex-column"> class=" height-100 flex-column">
</app-contacts> </app-contacts>
<!-- <app-contacts
(openMessage)="openMessagesPage($event)"
(backToChat)="backToChat($event)"
(emptyTextDescriptionOpen)="emptyTextDescriptionOpen()"
(closeAllDesktopComponents)="closeAllDesktopComponents()"
*ngIf="showContacts"
[roomId]="roomId"
[style.display]="showContacts ? 'flex' : 'none'"
class=" height-100 flex-column">
</app-contacts> -->
<app-new-group <app-new-group
(addGroupMessage)="openGroupContactsPage($event)" (addGroupMessage)="openGroupContactsPage($event)"
[roomId]="roomId" [roomId]="roomId"
+1 -1
View File
@@ -62,7 +62,7 @@
<ion-list> <ion-list>
<ion-item class="item-hover cursor-pointer" lines="none" *ngFor="let event of listToPresent" <ion-item class="item-hover cursor-pointer" lines="none" *ngFor="let event of listToPresent"
(click)="goToEvent(event.EventId)" (click)="goToEvent(event)"
> >
<div class="d-flex content-{{loggeduser.Profile}}-{{event.CalendarName}}"> <div class="d-flex content-{{loggeduser.Profile}}-{{event.CalendarName}}">
+5 -8
View File
@@ -460,18 +460,15 @@ export class EventsPage implements OnInit {
}); });
} }
goToEvent(eventId: any) { goToEvent(event: any) {
this.router.navigate(['/home/events', eventId, 'events']); let navigationExtras: NavigationExtras = { queryParams: { CalendarId: event.CalendarId } }
this.router.navigate(['/home/events', event.EventId, 'agenda'], navigationExtras);
} }
goToExpediente(SerialNumber: any) { goToExpediente(SerialNumber: any) {
this.router.navigate(['/home/events/expediente', SerialNumber, 'events']); this.router.navigate(['/home/events/expediente', SerialNumber, 'events']);
/* if (this.loggeduser.Profile == 'MDGPR') {
this.router.navigate(['/home/events/expediente', SerialNumber, 'events']);
}
else if (this.loggeduser.Profile == 'PR') {
this.router.navigate(['/home/events/expedientes-pr', SerialNumber, 'events']);
} */
} }
viewExpedientListPage() { viewExpedientListPage() {
@@ -199,7 +199,7 @@
</div> </div>
</div> </div>
<div class="container-div width-100"> <!-- <div class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
@@ -220,7 +220,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="EventRecurrenceType != '-1'" class="container-div width-100"> <div *ngIf="EventRecurrenceType != '-1'" class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
@@ -12,7 +12,6 @@
</div> </div>
</div> </div>
<div class=" align-center justify-center d-flex flex-column width-100"> <div class=" align-center justify-center d-flex flex-column width-100">
<div *ngIf="SessionStore.hasPin" class="title">Digite o PIN</div> <div *ngIf="SessionStore.hasPin" class="title">Digite o PIN</div>
<div *ngIf="!SessionStore.hasPin" class="title">Digite o novo PIN</div> <div *ngIf="!SessionStore.hasPin" class="title">Digite o novo PIN</div>
@@ -26,7 +25,7 @@
</div> </div>
<div class="d-flex align-center justify-center"> <div class="d-flex align-center justify-center">
<div class="circle" (click)="setCode('1')">1</div> <div class="circle" (click)="setCode('2')">2</div> <div class="circle" (click)="setCode('3')">3</div> <div class="circle" (click)="setCode('1')">1</div> <div class="circle" (click)="setCode('2')">2</div> <div class="circle" (click)="setCode('3')">3</div>
</div> </div>
+5 -57
View File
@@ -39,41 +39,9 @@ export class InactivityPage implements OnInit {
ngOnInit() { ngOnInit() {
// window.addEventListener('resize', (event) => {
// if(this.router.url != '/login') return false
// if(this.loop == false) {
// this.loop = true
// this.runloop()
// }
// }, true);
} }
runloop() { runloop() {
// const containerHeight = 651
// let circleHeight = document.querySelector('.circle')['offsetHeight']
// let circleWidth = document.querySelector('.circle')['offsetWidth']
//
//
// document.querySelectorAll('.circle').forEach(e=>{
// e['style']['height'] = (circleHeight -1 )+'px'
// e['style']['width'] = (circleWidth -1 )+'px'
// })
// if( window.innerHeight< containerHeight) {
// setTimeout(()=>{
// this.runloop()
// }, 100)
// } else {
// this.loop = false
// }
} }
@@ -165,8 +133,8 @@ export class InactivityPage implements OnInit {
if(!SessionStore.hasPin) { if(!SessionStore.hasPin) {
// //
this.storePin() this.storePin()
this.pinLogin()
} else { } else {
//
this.pinLogin() this.pinLogin()
} }
} }
@@ -187,7 +155,7 @@ export class InactivityPage implements OnInit {
setTimeout(() => { setTimeout(() => {
this.clearCode() this.clearCode()
}, 1000) }, 5000)
} else { } else {
this.toastService._badRequest('Pin incorreto') this.toastService._badRequest('Pin incorreto')
@@ -222,7 +190,7 @@ export class InactivityPage implements OnInit {
} }
}, 5000) }, 100)
} }
@@ -230,28 +198,8 @@ export class InactivityPage implements OnInit {
storePin() { storePin() {
setTimeout(() => { const code = this.code.join('');
const code = this.code.join(''); SessionStore.setPin(code);
SessionStore.setPin(code);
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
//When user has got access to Agenda but does not have their own calendar, goes to Agenda
if(this.p.userPermission(this.p.permissionList.Agenda.access) && SessionStore.user.OwnerCalendars.length == 0){
this.router.navigate(['/home/agenda']);
}
else{
this.router.navigate(['/home/events']);
}
}
//If user has access permission to both Chat and Action, goes to Chat by default.
else if((this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)) || this.p.userPermission(this.p.permissionList.Chat.access)){
this.router.navigate(['/home/chat']);
}
else if(this.p.userPermission(this.p.permissionList.Actions.access)){
this.router.navigate(['/home/publications']);
}
}, 5000)
} }
+1 -2
View File
@@ -11,7 +11,6 @@ import { ClearStoreService } from 'src/app/services/clear-store.service';
import { ChangeProfileService } from 'src/app/services/change-profile.service'; import { ChangeProfileService } from 'src/app/services/change-profile.service';
import { ThemeService } from 'src/app/services/theme.service'; import { ThemeService } from 'src/app/services/theme.service';
import { PermissionService } from 'src/app/services/permission.service'; import { PermissionService } from 'src/app/services/permission.service';
import { PermissionList } from 'src/app/models/permission/permissionList';
import { MessageModel, DeleteMessageModel } from '../../models/beast-orm'; import { MessageModel, DeleteMessageModel } from '../../models/beast-orm';
import { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service'; import { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service';
import { ChatSystemService } from 'src/app/services/chat/chat-system.service'; import { ChatSystemService } from 'src/app/services/chat/chat-system.service';
@@ -159,7 +158,7 @@ export class LoginPage implements OnInit {
this.getToken(); this.getToken();
this.router.navigateByUrl('/pin', { replaceUrl: true }); this.router.navigateByUrl('/home/events', { replaceUrl: true });
} }
} }
else{ else{
@@ -35,7 +35,6 @@
displayFormat="D MMM YYYY H:mm" displayFormat="D MMM YYYY H:mm"
minuteValues="0,5,10,15,20,25,30,35,40,45,50,55" minuteValues="0,5,10,15,20,25,30,35,40,45,50,55"
monthShortNames="Jan, Fev, Mar, Abr, Mai, Jun, Jul, Aug, Sep, Out, Nov, Dez" monthShortNames="Jan, Fev, Mar, Abr, Mai, Jun, Jul, Aug, Sep, Out, Nov, Dez"
min="{{minDate}}"
max="2025"> max="2025">
</ion-datetime> </ion-datetime>
@@ -43,7 +42,6 @@
<input matInput [ngxMatDatetimePicker]="picker1" <input matInput [ngxMatDatetimePicker]="picker1"
placeholder="Data inicio*" placeholder="Data inicio*"
[formControl]="dateControlStart" [formControl]="dateControlStart"
[min]="minDate"
[disabled]="disabled" [disabled]="disabled"
> >
<mat-datepicker-toggle id="new-inicio" matSuffix [for]="picker1"></mat-datepicker-toggle> <mat-datepicker-toggle id="new-inicio" matSuffix [for]="picker1"></mat-datepicker-toggle>
@@ -37,7 +37,7 @@
</div> </div>
</div> </div>
<ion-progress-bar type="indeterminate" *ngIf="showLoader"></ion-progress-bar> <!-- <ion-progress-bar type="indeterminate" *ngIf="showLoader"></ion-progress-bar> -->
</div> </div>
</ion-toolbar> </ion-toolbar>
+8 -3
View File
@@ -258,10 +258,8 @@ export class SearchPage implements OnInit {
if(this.type == "Agenda" ){ if(this.type == "Agenda" ){
this.showLoader = true; this.showLoader = true;
this.search.basicSearch(this.searchSubject, this.searchDocumentDate, this.searchSender this.search.basicSearch(this.searchSubject, this.searchDocumentDate, this.searchSender
,this.searchOrganicEntiry, this.searchDocTypeId, '0').subscribe(res=>{ ,this.searchOrganicEntiry, this.searchDocTypeId, '0').subscribe(res=>{
@@ -287,7 +285,8 @@ export class SearchPage implements OnInit {
this.loadWordCloud(); this.loadWordCloud();
},error => { },error => {
this.searchResult = "Registo não encontrado" this.showLoader = false;
// this.searchResult = "Registo não encontrado"
console.log(error) console.log(error)
}); });
} }
@@ -551,6 +550,11 @@ export class SearchPage implements OnInit {
this.loadWordCloud(); this.loadWordCloud();
},error => { },error => {
counter++;
if(counter ==2){
this.showLoader = false;
}
this.searchResult = "Registo não encontrado" this.searchResult = "Registo não encontrado"
console.log(error) console.log(error)
}); });
@@ -586,6 +590,7 @@ export class SearchPage implements OnInit {
this.showLoader = false; this.showLoader = false;
this.loadWordCloud(); this.loadWordCloud();
},error => { },error => {
this.showLoader = false;
this.searchResult = "Registo não encontrado" this.searchResult = "Registo não encontrado"
console.log(error) console.log(error)
}); });
+15 -7
View File
@@ -18,6 +18,7 @@ import { ChatMethodsService } from './chat-methods.service';
import { AESEncrypt } from '../aesencrypt.service' import { AESEncrypt } from '../aesencrypt.service'
import { AttachmentsService } from 'src/app/services/attachments.service'; import { AttachmentsService } from 'src/app/services/attachments.service';
import { NetworkServiceService} from 'src/app/services/network-service.service'; import { NetworkServiceService} from 'src/app/services/network-service.service';
import { JsonStore } from '../jsonStore.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@@ -95,10 +96,12 @@ export class ChatSystemService {
} }
loadChat() { loadChat() {
this.ReLoadChat() if(SessionStore.user.ChatData) {
this.ReLoadChat()
}
} }
async ReLoadChat() { private async ReLoadChat() {
await this.chatService.refreshtoken(); await this.chatService.refreshtoken();
await this.restoreUsers(); await this.restoreUsers();
@@ -271,6 +274,7 @@ export class ChatSystemService {
} }
} }
this.loadingWholeList = false
await this.storage.set('Rooms', rooms); await this.storage.set('Rooms', rooms);
setTimeout(() => { setTimeout(() => {
@@ -282,7 +286,6 @@ export class ChatSystemService {
this.sortRoomList() this.sortRoomList()
}, 10000) }, 10000)
this.loadingWholeList = false
} }
/** /**
@@ -400,7 +403,7 @@ export class ChatSystemService {
if (setData.name != 'Rocket Cat') { if (setData.name != 'Rocket Cat') {
// create room // create room
if(!this.roomExist(roomId)) { if(!this.roomExist(roomId)) {
let room:RoomService = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this) let room:RoomService = new RoomService(this.RochetChatConnectorService, new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this), this.storage, this.platform, this.sqlservice, this.NativeNotificationService, this.sortService, this.ChatService, this.NfService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this)
room.setData(setData) room.setData(setData)
room.receiveMessage() room.receiveMessage()
room.getAllUsers = this.getUsers room.getAllUsers = this.getUsers
@@ -573,9 +576,14 @@ export class ChatSystemService {
})[0] })[0]
if(roomName) { if(roomName) {
const firstName = capitalizeTxt(roomName.split('.')[0]) try {
const lastName = capitalizeTxt(roomName.split('.')[1]) const firstName = capitalizeTxt(roomName.split('.')[0])
return firstName + ' ' + lastName const lastName = capitalizeTxt(roomName.split('.')[1])
return firstName + ' ' + lastName
} catch(e) {
return roomData['membersExcludeMe'][0].name
}
} else if(roomData.name) { } else if(roomData.name) {
return roomData.name return roomData.name
} else { } else {
+14 -3
View File
@@ -12,7 +12,7 @@ import { AESEncrypt } from '../aesencrypt.service'
import { HttpEventType } from '@angular/common/http'; import { HttpEventType } from '@angular/common/http';
import { AttachmentsService } from 'src/app/services/attachments.service'; import { AttachmentsService } from 'src/app/services/attachments.service';
import { NetworkServiceService , ConnectionStatus} from 'src/app/services/network-service.service'; import { NetworkServiceService , ConnectionStatus} from 'src/app/services/network-service.service';
import { ChatSystemService } from './chat-system.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
@@ -67,7 +67,8 @@ export class MessageService {
private ChatMethodsService: ChatMethodsService, private ChatMethodsService: ChatMethodsService,
private AESEncrypt: AESEncrypt, private AESEncrypt: AESEncrypt,
private AttachmentsService: AttachmentsService, private AttachmentsService: AttachmentsService,
private NetworkServiceService: NetworkServiceService) { private NetworkServiceService: NetworkServiceService,
private ChatSystemService: ChatSystemService) {
} }
setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference , viewed = [], received = [], delate = false, delateRequest =false, from }:Message) { setData({customFields = {}, channels, mentions, msg ,rid ,ts, u, t, _id, id, _updatedAt, file, attachments, temporaryData, localReference , viewed = [], received = [], delate = false, delateRequest =false, from }:Message) {
@@ -119,6 +120,17 @@ export class MessageService {
} }
} }
if(!this.u.name && this.u.username) {
const user = this.ChatSystemService.users.find((u)=> u.username == this.u.username)
if(user) {
this.u.name = user.name
} else if( this.u.username == SessionStore.user.UserName) {
this.u.name = SessionStore.user.FullName
} else {
// console.log(user.username, SessionStore.user.UserName)
}
}
this.calDateDuration() this.calDateDuration()
} }
@@ -203,7 +215,6 @@ export class MessageService {
// console.log('online send') // console.log('online send')
this.RochetChatConnectorService.send(params).then( this.RochetChatConnectorService.send(params).then(
(ChatMessage: any) => { (ChatMessage: any) => {
console.log('response')
ChatMessage = ChatMessage.message.result ChatMessage = ChatMessage.message.result
this.messageSend = true this.messageSend = true
+7 -6
View File
@@ -184,7 +184,7 @@ export class RoomService {
} }
} }
setData({membersExcludeMe, members, u, customFields = {}, id, name, t, lastMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService), _updatedAt }) { setData({membersExcludeMe, members, u, customFields = {}, id, name, t, lastMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this.ChatSystemService), _updatedAt }) {
this.customFields = customFields this.customFields = customFields
this.id = id this.id = id
this.name = name this.name = name
@@ -710,10 +710,11 @@ export class RoomService {
} else { } else {
const offlineMessage = await this.prepareMessageCreateIfNotExist({message:ChatMessage}) const offlineMessage = await this.prepareMessageCreateIfNotExist({message:ChatMessage})
offlineMessage.from = 'Offline'
offlineMessage.loadHistory = this.hasLoadHistory
if(offlineMessage) { if(offlineMessage) {
offlineMessage.from = 'Offline'
offlineMessage.loadHistory = this.hasLoadHistory
this.messagesLocalReference.push(offlineMessage.localReference) this.messagesLocalReference.push(offlineMessage.localReference)
offlineMessage?.decryptMessage() offlineMessage?.decryptMessage()
@@ -827,7 +828,7 @@ export class RoomService {
message = this.fix_updatedAt(message) message = this.fix_updatedAt(message)
const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService) const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this.ChatSystemService)
wewMessage.setData(message) wewMessage.setData(message)
wewMessage.loadHistory = this.hasLoadHistory wewMessage.loadHistory = this.hasLoadHistory
@@ -884,7 +885,7 @@ export class RoomService {
async prepareCreate({message, save = true}): Promise<MessageService> { async prepareCreate({message, save = true}): Promise<MessageService> {
message = this.fix_updatedAt(message) message = this.fix_updatedAt(message)
const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService) const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this.ChatSystemService)
wewMessage.setData(message) wewMessage.setData(message)
wewMessage.loadHistory = this.hasLoadHistory wewMessage.loadHistory = this.hasLoadHistory
@@ -922,7 +923,7 @@ export class RoomService {
simplePrepareMessage(message) { simplePrepareMessage(message) {
message = this.fix_updatedAt(message) message = this.fix_updatedAt(message)
const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService) const wewMessage = new MessageService(this.NfService, this.RochetChatConnectorService, this.ChatMethodsService, this.AESEncrypt, this.AttachmentsService, this.NetworkServiceService, this.ChatSystemService)
wewMessage.setData(message) wewMessage.setData(message)
wewMessage.loadHistory = this.hasLoadHistory wewMessage.loadHistory = this.hasLoadHistory
@@ -210,7 +210,7 @@
</div> </div>
</div> </div>
<div class="container-div width-100"> <!-- <div class="container-div width-100">
<div class="ion-item-class-2"> <div class="ion-item-class-2">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
@@ -239,7 +239,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="eventProcess.workflowInstanceDataFields.OccurrenceType != '-1'" <div *ngIf="eventProcess.workflowInstanceDataFields.OccurrenceType != '-1'"
class="container-div width-100"> class="container-div width-100">
@@ -147,7 +147,7 @@
[(ngModel)]="postEvent.EndDate" [(ngModel)]="postEvent.EndDate"
[max]="maxDate" [max]="maxDate"
[disabled]="disabled" [disabled]="disabled"
[min]="currentDate" [min]="postEvent.StartDate"
> >
<mat-datepicker-toggle id="new-fim" matSuffix [for]="fim"></mat-datepicker-toggle> <mat-datepicker-toggle id="new-fim" matSuffix [for]="fim"></mat-datepicker-toggle>
<ngx-mat-datetime-picker #fim <ngx-mat-datetime-picker #fim
@@ -162,7 +162,7 @@
</div> </div>
</div> </div>
<div class="container-div d-flex"> <!-- <div class="container-div d-flex">
<div class="ion-item-class-2 width-100 d-flex"> <div class="ion-item-class-2 width-100 d-flex">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
@@ -184,7 +184,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="postEvent.EventRecurrence.Type != '-1'" class="container-div width-100"> <div *ngIf="postEvent.EventRecurrence.Type != '-1'" class="container-div width-100">
<div class="ion-item-class-2 d-flex"> <div class="ion-item-class-2 d-flex">
@@ -46,9 +46,9 @@ export class EditEventPage implements OnInit {
public endMinDate = new Date(new Date().getTime() + 15 * 60000).toISOString().slice(0,10) public endMinDate = new Date(new Date().getTime() + 15 * 60000).toISOString().slice(0,10)
public maxDate: any; public maxDate: any;
public stepHour = 1; public stepHour = 1;
public stepMinute = 5; public stepMinute = 15;
public stepSecond = 5; public stepSecond = 15;
currentDate = new Date(); currentDate = this.roundTimeQuarterHour();
Form: FormGroup; Form: FormGroup;
validateFrom = false validateFrom = false
@@ -216,6 +216,39 @@ export class EditEventPage implements OnInit {
} }
} }
roundTimeQuarterHour() {
var timeToReturn = new Date();
// var minutes = timeToReturn.getMinutes();
var minutes = timeToReturn.getMinutes();
var hours = timeToReturn.getHours();
// console.log("MINUTOS: " +minutes);
// console.log("BEFORE MINUTES: " +(Math.round(minutes/15) * 15));
var m = (Math.round(minutes/15) * 15) % 60;
// console.log("AFTER MINUTES: " +m);
var h = minutes > 52 ? (hours === 23 ? 0 : ++hours) : hours;
if (m == 0) {
if(minutes > m){
m = m + 15;
}
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}else{
if(minutes > m){
m = m + 15;
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}else {
timeToReturn.setHours(h);
timeToReturn.setMinutes(m);
}
}
}
onSelectedRecurringChanged(ev:any){ onSelectedRecurringChanged(ev:any){
this.calculetedLastOccurrence(ev); this.calculetedLastOccurrence(ev);
@@ -0,0 +1,17 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AddUserPage } from './add-user.page';
const routes: Routes = [
{
path: '',
component: AddUserPage
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class AddUserPageRoutingModule {}
@@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { AddUserPageRoutingModule } from './add-user-routing.module';
import { AddUserPage } from './add-user.page';
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
AddUserPageRoutingModule
],
declarations: [AddUserPage]
})
export class AddUserPageModule {}
@@ -0,0 +1,9 @@
<ion-header>
<ion-toolbar>
<ion-title>addUser</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
</ion-content>
@@ -0,0 +1,24 @@
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';
import { AddUserPage } from './add-user.page';
describe('AddUserPage', () => {
let component: AddUserPage;
let fixture: ComponentFixture<AddUserPage>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ AddUserPage ],
imports: [IonicModule.forRoot()]
}).compileComponents();
fixture = TestBed.createComponent(AddUserPage);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-add-user',
templateUrl: './add-user.page.html',
styleUrls: ['./add-user.page.scss'],
})
export class AddUserPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
@@ -16,6 +16,7 @@ export class AttendeePage implements OnInit {
contacts: EventPerson[]; contacts: EventPerson[];
showLoader: boolean = false; showLoader: boolean = false;
eventPersons: EventPerson[]; eventPersons: EventPerson[];
inputFilter = ''
@Output() closeComponent = new EventEmitter<any>(); @Output() closeComponent = new EventEmitter<any>();
@@ -40,9 +41,9 @@ export class AttendeePage implements OnInit {
this.LtaskParticipants = removeDuplicate(this.taskParticipants); this.LtaskParticipants = removeDuplicate(this.taskParticipants);
this.LtaskParticipantsCc = removeDuplicate(this.taskParticipantsCc); this.LtaskParticipantsCc = removeDuplicate(this.taskParticipantsCc);
} }
ngOnChanges(){ ngOnChanges() {
this.LtaskParticipants = removeDuplicate(this.taskParticipants); this.LtaskParticipants = removeDuplicate(this.taskParticipants);
this.LtaskParticipantsCc = removeDuplicate(this.taskParticipantsCc); this.LtaskParticipantsCc = removeDuplicate(this.taskParticipantsCc);
} }
@@ -64,7 +65,6 @@ export class AttendeePage implements OnInit {
} }
save() { save() {
this.setIntervenient.emit(removeDuplicate(this.LtaskParticipants)); this.setIntervenient.emit(removeDuplicate(this.LtaskParticipants));
@@ -107,7 +107,7 @@ export class AttendeePage implements OnInit {
this.setContactWithClose(); this.setContactWithClose();
} }
close(){ close() {
this.closeComponent.emit(); this.closeComponent.emit();
} }
@@ -140,7 +140,7 @@ export class AttendeePage implements OnInit {
}); });
// if to show // if to show
if(undefined != result2){ if(undefined != result2) {
return false; return false;
} }
@@ -149,7 +149,7 @@ export class AttendeePage implements OnInit {
} }
remove(itm: EventPerson){ remove(itm: EventPerson) {
if(this.adding == "intervenient"){ if(this.adding == "intervenient"){
@@ -178,7 +178,17 @@ export class AttendeePage implements OnInit {
} }
sort(data: []) {
return data.sort(function (a: any, b: any) {
if (a.Name > b.Name) {
return -1;
}
if (b.Name > a.Name) {
return 1;
}
return 0;
}).reverse()
}
async fetchContacts(filter: string) { async fetchContacts(filter: string) {
this.showLoader = true; this.showLoader = true;
@@ -196,7 +206,7 @@ export class AttendeePage implements OnInit {
}); });
} }
this.contacts = result; this.contacts = this.sort(result as any);
this.showLoader = false; this.showLoader = false;
} }
); );
@@ -155,7 +155,7 @@
</div> </div>
</div> </div>
<div class="container-div width-100"> <!-- <div class="container-div width-100">
<div class="ion-item-class-2"> <div class="ion-item-class-2">
<div class="ion-icon-class"> <div class="ion-icon-class">
<ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon> <ion-icon slot="start" src="assets/images/icons-refresh.svg"></ion-icon>
@@ -183,7 +183,7 @@
</div> </div>
</div> </div>
</div> </div> -->
<div *ngIf="eventProcess.workflowInstanceDataFields.OccurrenceType != '-1'" <div *ngIf="eventProcess.workflowInstanceDataFields.OccurrenceType != '-1'"
class="container-div width-100"> class="container-div width-100">
@@ -6,6 +6,7 @@
</button> </button>
</div> </div>
<div class="buttons"> <div class="buttons">
<button class="btn-cancel" shape="round" >Adicionar</button>
<button (click)="leaveGroup()" class="btn-cancel" shape="round" >Sair do Grupo</button> <button (click)="leaveGroup()" class="btn-cancel" shape="round" >Sair do Grupo</button>
<button *ngIf="isAdmin" (click)="openChangeGroupName()" class="btn-cancel" shape="round" >Alterar nome do grupo</button> <button *ngIf="isAdmin" (click)="openChangeGroupName()" class="btn-cancel" shape="round" >Alterar nome do grupo</button>
<div class="solid"></div> <div class="solid"></div>
@@ -40,7 +40,6 @@
<div class="buttons" *ngIf="task.activityInstanceName == 'Tarefa de Parecer'"> <div class="buttons" *ngIf="task.activityInstanceName == 'Tarefa de Parecer'">
<button (click)="openDarParecer(task)" class="btn-cancel" shape="round" >Dar o meu Parecer</button> <button (click)="openDarParecer(task)" class="btn-cancel" shape="round" >Dar o meu Parecer</button>
<button *ngIf="p.userPermission([p.permissionList.Agenda.access])" (click)="openBookMeetingModal(task)" class="btn-cancel" shape="round" >Marcar Reunião</button> <button *ngIf="p.userPermission([p.permissionList.Agenda.access])" (click)="openBookMeetingModal(task)" class="btn-cancel" shape="round" >Marcar Reunião</button>
<button *ngIf="p.userPermission([p.permissionList.Agenda.access])" (click)="openBookMeetingModal(task)" class="btn-cancel" shape="round" >Marcar Reunião</button>
<button (click)="sendExpedienteToPending()" *ngIf="task.Status != 'Pending'" class="btn-cancel" shape="round" >Enviar para Pendentes</button> <button (click)="sendExpedienteToPending()" *ngIf="task.Status != 'Pending'" class="btn-cancel" shape="round" >Enviar para Pendentes</button>
<button (click)="openNewGroupPage()" class="btn-cancel" shape="round" *ngIf="task.WorkflowName == 'Pedido de Parecer do Presidente'">Iniciar Conversa</button> <button (click)="openNewGroupPage()" class="btn-cancel" shape="round" *ngIf="task.WorkflowName == 'Pedido de Parecer do Presidente'">Iniciar Conversa</button>
<button (click)="cancel()" class="btn-cancel" shape="round" >Cancelar</button> <button (click)="cancel()" class="btn-cancel" shape="round" >Cancelar</button>
@@ -55,8 +54,5 @@
<button (click)="sendExpedienteToPending()" *ngIf="task.Status != 'Pending'" class="btn-cancel" shape="round" >Enviar para Pendentes</button> <button (click)="sendExpedienteToPending()" *ngIf="task.Status != 'Pending'" class="btn-cancel" shape="round" >Enviar para Pendentes</button>
<button (click)="cancel()" class="btn-cancel" shape="round" >Cancelar</button> <button (click)="cancel()" class="btn-cancel" shape="round" >Cancelar</button>
</div> </div>
<!-- <div *ngIf="task.WorkflowName == 'Pedido de Parecer do Presidente'" class="buttons">
<button (click)="openNewGroupPage()" class="btn-cancel" shape="round" >Iniciar Conversa</button>
</div> -->
</div> </div>
</div> </div>
@@ -46,7 +46,6 @@
placeholder="Data inicio*" placeholder="Data inicio*"
[(ngModel)]="folder.DateBegin" [(ngModel)]="folder.DateBegin"
[disabled]="disabled" [disabled]="disabled"
[min]="currentDate"
> >
<mat-datepicker-toggle id="new-inicio" matSuffix [for]="picker1"></mat-datepicker-toggle> <mat-datepicker-toggle id="new-inicio" matSuffix [for]="picker1"></mat-datepicker-toggle>
<ngx-mat-datetime-picker #picker1 <ngx-mat-datetime-picker #picker1
@@ -83,7 +82,6 @@
placeholder="Data de fim*" placeholder="Data de fim*"
[(ngModel)]="folder.DateEnd" [(ngModel)]="folder.DateEnd"
[disabled]="disabled" [disabled]="disabled"
[min]="currentDate"
> >
<mat-datepicker-toggle id="new-fim" matSuffix [for]="picker2"></mat-datepicker-toggle> <mat-datepicker-toggle id="new-fim" matSuffix [for]="picker2"></mat-datepicker-toggle>
<ngx-mat-datetime-picker #picker2 <ngx-mat-datetime-picker #picker2
@@ -63,8 +63,15 @@ export class NewActionPage implements OnInit {
} }
get dateValid() { get dateValid() {
if (window.innerWidth > 700) { var validado: boolean;
return new Date(this.folder.DateBegin).toLocaleString('pt') < new Date(this.folder.DateEnd).toLocaleString("pt")? ['ok'] : []
if (window.innerWidth <= 800) {
if ((this.folder.DateBegin < this.folder.DateEnd) && (new Date(this.folder.DateBegin).getTime() > this.currentDate.getTime())) {
validado = true;
}else{
validado = false;
}
return validado == true ? ['ok']: [];
} else { } else {
return ['ok'] return ['ok']
} }
+5
View File
@@ -56,6 +56,11 @@ class SessionService {
return this._user.Inactivity return this._user.Inactivity
} }
isUserActive() {
return this._user.Inactivity
}
setInativity(value: boolean) { setInativity(value: boolean) {
this._user.Inactivity = value this._user.Inactivity = value
this._user.UrlBeforeInactivity = '' this._user.UrlBeforeInactivity = ''
+2 -1
View File
@@ -1,6 +1,7 @@
export const environment = { export const environment = {
// apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/', // apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
apiURL: 'https://gd-api.oapr.gov.ao/api/', // apiURL: 'https://gd-api.oapr.gov.ao/api/',
apiURL: 'https://gdapi-dev.dyndns.info/GabineteDigital.Services/V5/api/',
// apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/', // apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/',
// apiChatUrl: 'http://192.168.0.29:3000/api/v1/', // apiChatUrl: 'http://192.168.0.29:3000/api/v1/',
// apiWsChatUrl: 'wss://192.168.0.29:3000/websocket', // apiWsChatUrl: 'wss://192.168.0.29:3000/websocket',
+3 -2
View File
@@ -1,11 +1,12 @@
export const environment = { export const environment = {
// apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/', // apiURL: 'https://gabinetedigital.dyndns.info/GabineteDigital.Services/V5/api/',
apiURL: 'https://gd-api.oapr.gov.ao/api/', // apiURL: 'https://gd-api.oapr.gov.ao/api/',
apiURL: 'https://gdapi-dev.dyndns.info/GabineteDigital.Services/V5/api/',
// apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/', // apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V5/api/',
// apiChatUrl: 'http://192.168.0.29:3000/api/v1/', // apiChatUrl: 'http://192.168.0.29:3000/api/v1/',
// apiWsChatUrl: 'wss://192.168.0.29:3000/websocket', // apiWsChatUrl: 'wss://192.168.0.29:3000/websocket',
apiChatUrl: 'https://gd-chat.oapr.gov.ao/api/v1/', apiChatUrl: 'https://gd-chat.oapr.gov.ao/api/v1/',
apiWsChatUrl: 'ws://gd-chat.oapr.gov.ao/websocket', apiWsChatUrl: 'wss://gd-chat.oapr.gov.ao/websocket',
/* apiChatUrl: 'https://www.tabularium.pt/api/v1/', /* apiChatUrl: 'https://www.tabularium.pt/api/v1/',
apiWsChatUrl: 'wss://www.tabularium.pt/websocket', */ apiWsChatUrl: 'wss://www.tabularium.pt/websocket', */
// apiChatUrl: 'https://www.tabularium.pt/api/v1/', // apiChatUrl: 'https://www.tabularium.pt/api/v1/',