diff --git a/src/app/guards/auth.guard.ts b/src/app/guards/auth.guard.ts index f8c5cbbda..f1b5506ee 100644 --- a/src/app/guards/auth.guard.ts +++ b/src/app/guards/auth.guard.ts @@ -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 + } + } } diff --git a/src/app/guards/inactivity.guard.ts b/src/app/guards/inactivity.guard.ts index f3a06be73..31daa8ec9 100644 --- a/src/app/guards/inactivity.guard.ts +++ b/src/app/guards/inactivity.guard.ts @@ -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', diff --git a/src/app/guards/login.guard.ts b/src/app/guards/login.guard.ts index 8b7a734d3..d086c6180 100644 --- a/src/app/guards/login.guard.ts +++ b/src/app/guards/login.guard.ts @@ -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 } diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 6a1a14f6e..098f0498c 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -1,6 +1,7 @@ - + + @@ -39,5 +40,7 @@ + + diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index cdf65323c..14c1367ac 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -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, diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 699ed9fa2..9e6a51349 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -111,7 +111,7 @@ - +
@@ -150,7 +150,7 @@
- +
diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index b17cbd288..c2588adb2 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -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, }] diff --git a/src/app/pages/gabinete-digital/diplomas/diplomas.page.html b/src/app/pages/gabinete-digital/diplomas/diplomas.page.html index 2fb25a676..39f4f7fd9 100644 --- a/src/app/pages/gabinete-digital/diplomas/diplomas.page.html +++ b/src/app/pages/gabinete-digital/diplomas/diplomas.page.html @@ -15,7 +15,7 @@
- + Por validar ... @@ -30,14 +30,14 @@ - +
-
+
- - +
-
-
Lista vazia
- + diff --git a/src/app/pages/inactivity/inactivity.page.ts b/src/app/pages/inactivity/inactivity.page.ts index 9d3c2387d..a6d0d98ef 100644 --- a/src/app/pages/inactivity/inactivity.page.ts +++ b/src/app/pages/inactivity/inactivity.page.ts @@ -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)){ diff --git a/src/app/pages/login/login.page.ts b/src/app/pages/login/login.page.ts index 655e60d2b..751c3cb26 100644 --- a/src/app/pages/login/login.page.ts +++ b/src/app/pages/login/login.page.ts @@ -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)){ diff --git a/src/app/services/chat/ws-chat-methods.service.ts b/src/app/services/chat/ws-chat-methods.service.ts index 8780bb626..6d8ae3d30 100644 --- a/src/app/services/chat/ws-chat-methods.service.ts +++ b/src/app/services/chat/ws-chat-methods.service.ts @@ -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 } diff --git a/src/app/services/route.service.ts b/src/app/services/route.service.ts index 2f0c59440..ac5b250b4 100644 --- a/src/app/services/route.service.ts +++ b/src/app/services/route.service.ts @@ -88,4 +88,13 @@ export class RouteService { } + + getLastRoute() { + return this.history[this.history.length - 1] + } + + getLastRouteA() { + return this.history[this.history.length - 2] + } + } diff --git a/src/app/services/worker/document-counter.service.spec.ts b/src/app/services/worker/document-counter.service.spec.ts deleted file mode 100644 index bc3c0f89e..000000000 --- a/src/app/services/worker/document-counter.service.spec.ts +++ /dev/null @@ -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(); - }); -}); diff --git a/src/app/services/worker/document-counter.service.ts b/src/app/services/worker/document-counter.service.ts deleted file mode 100644 index eafc6e6db..000000000 --- a/src/app/services/worker/document-counter.service.ts +++ /dev/null @@ -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 - } -} diff --git a/src/app/shared/gabinete-digital/diplomas/diplomas.page.html b/src/app/shared/gabinete-digital/diplomas/diplomas.page.html index 7b85534a7..c9702e023 100644 --- a/src/app/shared/gabinete-digital/diplomas/diplomas.page.html +++ b/src/app/shared/gabinete-digital/diplomas/diplomas.page.html @@ -10,7 +10,7 @@
- + Diplomas por validar @@ -23,7 +23,7 @@
-
+
-
+
@@ -169,6 +169,7 @@
+
diff --git a/src/app/shared/header/header.page.ts b/src/app/shared/header/header.page.ts index b91aa2d7a..e61de5c6c 100644 --- a/src/app/shared/header/header.page.ts +++ b/src/app/shared/header/header.page.ts @@ -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,