This commit is contained in:
Eudes Inácio
2022-04-08 16:49:14 +01:00
17 changed files with 149 additions and 102 deletions
+52 -3
View File
@@ -5,7 +5,7 @@ import { AuthService } from '../services/auth.service';
import { PermissionService } from '../services/permission.service';
import { LocalstoreService } from '../store/localstore.service';
import { SessionStore } from '../store/session.service';
import { RouteService } from 'src/app/services/route.service'
@Injectable({
providedIn: 'root'
})
@@ -15,6 +15,7 @@ export class AuthGuard implements CanActivate {
private localstoreService: LocalstoreService,
private authService: AuthService,
public p: PermissionService,
private RouteService: RouteService
){}
canActivate(
@@ -31,11 +32,59 @@ export class AuthGuard implements CanActivate {
this.router.navigate(['/']);
return false
} else {
if(this.p.userPermission(this.p.permissionList.Chat.access) == true){
if(this.p.userPermission(this.p.permissionList.Chat.access) == true) {
this.authService.loginChat();
}
return true;
const pathname = state.url
if(pathname.startsWith('/home/agenda')) {
if(this.p.userPermission(this.p.permissionList.Agenda.access)) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
} else if ( pathname.startsWith('/home/gabinete-digital')) {
if(this.p.userPermission(this.p.permissionList.Gabinete.access)) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
else if(pathname.startsWith('/home/chat')) {
if(this.p.userPermission(this.p.permissionList.Chat.access)) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
} else if(pathname.startsWith('/home/publications')) {
if(this.p.userPermission(this.p.permissionList.Actions.access)) {
return true
} else {
this.router.navigate(['/login']);
return false
}
} else if (pathname.startsWith('/home/events')) {
if(SessionStore.user.OwnerCalendars.length >= 1 || this.p.userPermission([this.p.permissionList.Gabinete.access])) {
return true
} else {
this.router.navigate(['/login']);
return false
}
} else if (pathname == '/') {
this.router.navigate(['/login']);
return false
} else {
this.router.navigate(['/login']);
return false
}
}
}
+23 -7
View File
@@ -24,14 +24,22 @@ export class InactivityGuard implements CanActivate {
if (this.platform.is('desktop') || this.platform.is('mobileweb')) {
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
this.router.navigate(['/home/events']);
//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']);
}
}
else if(this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)){
//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)){
else if(this.p.userPermission(this.p.permissionList.Actions.access)) {
this.router.navigate(['/home/publications']);
} else {
}
else {
this.alertController.create({
cssClass: 'my-custom-class',
@@ -57,14 +65,22 @@ export class InactivityGuard implements CanActivate {
else {
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
this.router.navigate(['/home/events']);
//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']);
}
}
else if(this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)){
//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']);
} else {
}
else {
this.alertController.create({
cssClass: 'my-custom-class',
header: 'Utilizador sem acesso a aplicação',
+6 -1
View File
@@ -3,12 +3,16 @@ import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Rout
import { Observable } from 'rxjs';
import { SessionStore } from '../store/session.service';
import { Platform } from '@ionic/angular';
import { RouteService } from 'src/app/services/route.service'
@Injectable({
providedIn: 'root'
})
export class LoginGuard implements CanActivate {
constructor( private router:Router, private platform: Platform,) {
constructor(
private router:Router,
private platform: Platform,
private RouteService: RouteService ) {
}
canActivate(
@@ -27,6 +31,7 @@ export class LoginGuard implements CanActivate {
} else if(SessionStore.exist && !SessionStore.user.Inactivity && SessionStore.user.LoginPreference == 'Pin' && !this.platform.is('desktop') && !this.platform.is('mobileweb')) {
this.router.navigate(['/inactivity']);
return false
} else {
return true
}
+4 -1
View File
@@ -1,6 +1,7 @@
<ion-tabs class="tab" >
<ion-tab-bar *ngIf="p.userPermissionCount([permissionList.Agenda.access, permissionList.Gabinete.access, permissionList.Actions.access, permissionList.Chat.access]) >= 2 || p.userPermission([permissionList.Agenda.access]) || p.userPermission([permissionList.Gabinete.access])" class="bottoms" slot="bottom">
<ion-tab-bar *ngIf="p.userPermissionCount([permissionList.Agenda.access, permissionList.Gabinete.access, permissionList.Actions.access, permissionList.Chat.access]) >= 2 || (p.userPermission([permissionList.Agenda.access]) && loggeduser.OwnerCalendars.length != 0) || p.userPermission([permissionList.Gabinete.access])" class="bottoms" slot="bottom">
<ion-tab-button *ngIf="loggeduser.OwnerCalendars.length >= 1 || p.userPermission([permissionList.Gabinete.access])" tab="events" [class.active]="pathname === '/home/events'">
<!-- <ion-icon name="home"></ion-icon> -->
@@ -39,5 +40,7 @@
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
+3 -4
View File
@@ -15,7 +15,6 @@ import { SessionStore } from '../store/session.service';
import { StorageService } from '../services/storage.service';
import { File } from '@ionic-native/file/ngx';
/* import { WebNotificationPopupService } from '../services/notification/web-notification-popup.service'; */
import { DocumentCounterService } from '../services/worker/document-counter.service';
import { PermissionService } from '../services/permission.service';
import { BackgroundService } from 'src/app/services/background.service';
import { OfflineManagerService } from 'src/app/services/offline-manager.service';
@@ -36,6 +35,7 @@ import { LoginUserRespose } from 'src/app/models/user.model';
import { AuthService } from 'src/app/services/auth.service';
@Component({
selector: 'app-home',
templateUrl: './home.page.html',
@@ -87,17 +87,16 @@ export class HomePage implements OnInit {
public user: UserSession;
permissionList = new PermissionList();
loggeduser: LoginUserRespose;
constructor(
private router: Router,
public modalCtrl: AlertController,
private notificationsService: NotificationsService,
private platform: Platform,
public platform: Platform,
private activeroute: ActivatedRoute,
/* private webnotification: WebNotificationsService, */
public p: PermissionService,
public documentCounterService: DocumentCounterService,
private despachoRule: DespachoService,
private inativityService: InativityService,
private storageService: StorageService,
+2 -2
View File
@@ -111,7 +111,7 @@
</ion-item-sliding>
</ion-list>
<ion-list *ngSwitchCase="'Grupos'">
<ion-item-sliding *ngIf="!wsChatMethodsService.loadingWholeList">
<ion-item-sliding >
<div *ngFor="let group of wsChatMethodsService._group"
[class.item-active]="group.id ==idSelected"
class="item item-hover d-flex">
@@ -150,7 +150,7 @@
</div>
</div>
</ion-item-sliding>
<ion-item-sliding *ngIf="wsChatMethodsService.loadingWholeList || wsChatMethodsService.groupCount < 1">
<ion-item-sliding *ngIf="wsChatMethodsService.groupCount < 1">
<div *ngFor="let n of numSequence(8); let i = index;" class="item item-hover width-100 d-flex ion-no-padding ion-no-margin">
<div class="item-icon"><ion-icon class="icon" slot="start" src="assets/icon/icons-group-chat-grey.svg"></ion-icon></div>
<div class="item-content flex-grow-1 cursor-pointer">
@@ -650,7 +650,6 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
temporaryData: formData,
attachments: [{
"title": capturedImageTitle,
//"image_url": capturedImage, // rocketchat
"text": "description",
"title_link_download": false,
}]
@@ -15,7 +15,7 @@
</div>
<ion-toolbar>
<ion-segment [(ngModel)]="segment" (ionChange)="segmentChanged($event)">
<ion-segment-button value="validar">
<ion-segment-button value="validar" *ngIf="p.userPermission([p.permissionList.Gabinete.md_tasks])">
Por validar ...
</ion-segment-button>
<ion-segment-button value="assinados">
@@ -30,14 +30,14 @@
<ion-refresher name="refresher" slot="fixed" (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</ion-refresher>
<div class="width-100" [ngSwitch]="segment">
<ion-progress-bar type="indeterminate" *ngIf="skeletonLoader"></ion-progress-bar>
<div *ngIf="diplomasList">
<div *ngIf="diplomasList && p.userPermission([p.permissionList.Gabinete.md_tasks])">
<ion-list *ngSwitchCase="'validar'">
<ion-item
class="expediente ion-no-padding cursor-pointer"
<ion-item
class="expediente ion-no-padding cursor-pointer"
*ngFor = "let task of diplomasList"
(click)="goToDiploma(task.SerialNumber)"
lines="none"
@@ -69,12 +69,12 @@
</div>
</ion-item>
</ion-list>
</div>
<div *ngIf="diplomasAssinadoList">
<ion-list *ngSwitchCase="'assinados'">
<ion-item
class="expediente ion-no-padding cursor-pointer"
<ion-item
class="expediente ion-no-padding cursor-pointer"
*ngFor = "let task of diplomasAssinadoList"
(click)="goToDiploma(task.SerialNumber)"
lines="none"
@@ -109,15 +109,15 @@
</div>
</div>
<div
*ngIf="!skeletonLoader && diplomasList.length == 0 && diplomasAssinadoList.length == 0"
<div
*ngIf="!skeletonLoader && diplomasList.length == 0 && diplomasAssinadoList.length == 0"
class="empty-list d-flex height-100 align-center justify-content-center"
>
<span>Lista vazia</span>
</div>
<div *ngIf="skeletonLoader && diplomasAssinadoList.length == 0 && skeletonLoader && diplomasList.length == 0">
<ion-list>
<ion-item>
<ion-thumbnail slot="end">
+18 -4
View File
@@ -205,9 +205,16 @@ export class InactivityPage implements OnInit {
setTimeout(()=>{
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
this.router.navigate(['/home/events'], {replaceUrl: true});
//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']);
}
}
else if(this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)){
//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)){
@@ -228,9 +235,16 @@ export class InactivityPage implements OnInit {
SessionStore.setPin(code);
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
this.router.navigate(['/home/events']);
//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']);
}
}
else if(this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)){
//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)){
+9 -2
View File
@@ -163,9 +163,16 @@ export class LoginPage implements OnInit {
this.router.navigate([pathName]);
} else {
if(this.p.userPermission(this.p.permissionList.Agenda.access) || this.p.userPermission(this.p.permissionList.Gabinete.access)){
this.router.navigate(['/home/events']);
//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']);
}
}
else if(this.p.userPermission(this.p.permissionList.Chat.access) && this.p.userPermission(this.p.permissionList.Actions.access)){
//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)){
@@ -33,7 +33,7 @@ export class WsChatMethodsService {
_dm: RoomService[] = []
_group: RoomService[] = []
loadingWholeList = false
loadingWholeList = false;
dmCount = 0;
groupCount = 0;
@@ -121,7 +121,7 @@ export class WsChatMethodsService {
this._dm = []
this._group = []
this.loadingWholeList = false
this.loadingWholeList = false;
this.dmCount = 0;
this.groupCount = 0;
@@ -177,13 +177,13 @@ export class WsChatMethodsService {
const roomId = this.getRoomId(roomData);
if(roomData.t == 'd') {
const res = await this.chatService.getMembers(roomId).toPromise();
const members = res['members'];
const users = members.filter(data => data.username != this.loggedUser.me.username);
rooms.result.update[index]['members'] = users
await this.prepareRoom(roomData);
} else {
if (roomData.t === 'p') {
@@ -209,7 +209,7 @@ export class WsChatMethodsService {
console.log('save rooms', rooms)
await this.storage.set('Rooms', rooms);
setTimeout(()=>{
this.sortRoomList()
}, 1000)
@@ -218,7 +218,7 @@ export class WsChatMethodsService {
setTimeout(()=>{
this.sortRoomList()
}, 10000)
this.loadingWholeList = false
}
+9
View File
@@ -88,4 +88,13 @@ export class RouteService {
}
getLastRoute() {
return this.history[this.history.length - 1]
}
getLastRouteA() {
return this.history[this.history.length - 2]
}
}
@@ -1,16 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { DocumentCounterService } from './document-counter.service';
describe('DocumentCounterService', () => {
let service: DocumentCounterService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(DocumentCounterService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});
@@ -1,39 +0,0 @@
import { Injectable } from '@angular/core';
import { DespachoStore } from 'src/app/store/despacho-store.service';
import { EventoAprovacaoStore } from 'src/app/store/eventoaprovacao-store.service';
import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service';
import { PendentesStore } from 'src/app/store/pendestes-store.service';
import { PedidosStore } from 'src/app/store/pedidos-store.service';
import { DespachosprStore } from 'src/app/store/despachospr-store.service';
import { DeplomasStore } from 'src/app/store/deplomas.service';
@Injectable({
providedIn: 'root'
})
export class DocumentCounterService {
expedienteGbStore = ExpedienteGdStore;
pendentesStore = PendentesStore;
despachoStore = DespachoStore;
eventoAprovacaoStore = EventoAprovacaoStore;
pedidosStore = PedidosStore;
// expedientePrStore = ExpedienteprStore;
despachoPrStore = DespachosprStore;
deplomasStore = DeplomasStore
constructor() { }
// falta a contagem dos deplomas
get mdTotalDocument(): number {
return this.despachoStore.count + /** this.expedientePrStore.count + */ this.pedidosStore.countdeferimento
+ this.pedidosStore.countparecer + this.expedienteGbStore.count + this.despachoPrStore.count + this.pendentesStore.count
+ this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount
}
get prTotalDocument(): number {
return this.despachoStore.count + /** this.expedientePrStore.count + */ this.pedidosStore.countdeferimento
+ this.pedidosStore.countparecer + this.expedienteGbStore.count + this.despachoPrStore.count + this.pendentesStore.count
+ this.eventoAprovacaoStore.count + this.deplomasStore.diplomasListCount + this.deplomasStore.countDiplomasAssinadoListCount + this.deplomasStore.deplomasReviewCount
}
}
@@ -10,7 +10,7 @@
</div>
<ion-toolbar>
<ion-segment [(ngModel)]="segment" (ionChange)="segmentChanged($event)">
<ion-segment-button value="validar">
<ion-segment-button value="validar" *ngIf="p.userPermission([p.permissionList.Gabinete.md_tasks])">
Diplomas por validar
</ion-segment-button>
<ion-segment-button value="assinados">
@@ -23,7 +23,7 @@
<div class="main-container width-100 overflow-y-auto height-100" [ngSwitch]="segment">
<div *ngIf="deplomasStore.diplomasList.length >= 1">
<div *ngIf="deplomasStore.diplomasList.length >= 1 && p.userPermission([p.permissionList.Gabinete.md_tasks])">
<ion-list *ngSwitchCase="'validar'">
<div
class="expediente item-hover ion-no-padding ion-no-margin cursor-pointer"
+2 -1
View File
@@ -64,7 +64,7 @@
</div>
</div>
<div class="d-flex flex-1 pr-20 pl-50" *ngIf="p.userPermissionCount([permissionList.Agenda.access, permissionList.Gabinete.access, permissionList.Actions.access, permissionList.Chat.access]) >= 2">
<div class="d-flex flex-1 pr-20 pl-50" *ngIf="p.userPermissionCount([permissionList.Agenda.access, permissionList.Gabinete.access, permissionList.Actions.access, permissionList.Chat.access]) >= 2 || (p.userPermission([permissionList.Agenda.access]) && loggeduser.OwnerCalendars.length != 0) || p.userPermission([permissionList.Gabinete.access])">
<div *ngIf="p.userPermission([permissionList.Agenda.access]) || p.userPermission([permissionList.Gabinete.access])" class="tab mr-20 d-flex align-center cursor-pointer" (click)="changeRoute('/home/events')"
[class.active]="locationPathname() == '/home/events'">
@@ -169,6 +169,7 @@
</div>
</div>
</div>
<div class="header-bottom-line"></div>
<!-- {{ RouteService.history | json }} -->
+1 -1
View File
@@ -39,7 +39,7 @@ export class HeaderPage implements OnInit {
private modalController: ModalController,
private animationController: AnimationController,
private storageservice: StorageService,
private platform: Platform,
public platform: Platform,
//private notificationsService: NotificationsService,
private eventrigger: EventTrigger,
public ThemeService: ThemeService,