From 2d78a2e7f461c002632a27f17d82fce2323e163c Mon Sep 17 00:00:00 2001 From: Cyril Joseph Date: Tue, 5 Aug 2025 18:40:12 -0300 Subject: [PATCH] carnet updates --- src/app/app.routes.ts | 9 +++-- .../core/services/carnet/carnet.service.ts | 2 +- src/app/core/services/common/user.service.ts | 6 ++- src/app/core/services/home.service.ts | 4 +- src/app/guards/carnet-cleanup.guard.ts | 38 +++++++++++++++++++ src/app/home/home.component.ts | 10 +++++ 6 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/app/guards/carnet-cleanup.guard.ts diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 42b4a27..31ccbb0 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,6 +1,7 @@ import { Routes } from '@angular/router'; import { AuthGuard } from './guards/auth.guard'; import { AppIdGuard } from './guards/appid.guard'; +import { CarnetCleanupGuard } from './guards/carnet-cleanup.guard'; export const routes: Routes = [ { path: 'login', loadComponent: () => import('./login/login.component').then(m => m.LoginComponent) }, @@ -20,10 +21,10 @@ export const routes: Routes = [ { path: 'table-record', loadComponent: () => import('./param/manage-table-record/manage-table-record.component').then(m => m.ManageTableRecordComponent) }, { path: 'param-record/:id', loadComponent: () => import('./param/manage-param-record/manage-param-record.component').then(m => m.ManageParamRecordComponent) }, { path: 'country-messages', loadComponent: () => import('./param/manage-country/manage-country.component').then(m => m.ManageCountryComponent) }, - { path: 'edit-carnet/:headerid', loadComponent: () => import('./carnet/edit/edit-carnet.component').then(m => m.EditCarnetComponent) }, - { path: 'view-carnet/:headerid', loadComponent: () => import('./carnet/view/view-carnet.component').then(m => m.ViewCarnetComponent) }, - { path: 'add-holder', loadComponent: () => import('./holder/add/add-holder.component').then(m => m.AddHolderComponent) }, - { path: 'edit-holder/:holderid', loadComponent: () => import('./holder/edit/edit-holder.component').then(m => m.EditHolderComponent) }, + { path: 'edit-carnet/:headerid', loadComponent: () => import('./carnet/edit/edit-carnet.component').then(m => m.EditCarnetComponent), canDeactivate: [CarnetCleanupGuard] }, + { path: 'view-carnet/:headerid', loadComponent: () => import('./carnet/view/view-carnet.component').then(m => m.ViewCarnetComponent), canDeactivate: [CarnetCleanupGuard] }, + { path: 'add-holder', loadComponent: () => import('./holder/add/add-holder.component').then(m => m.AddHolderComponent), canDeactivate: [CarnetCleanupGuard] }, + { path: 'edit-holder/:holderid', loadComponent: () => import('./holder/edit/edit-holder.component').then(m => m.EditHolderComponent), canDeactivate: [CarnetCleanupGuard] }, { path: '', redirectTo: 'home', pathMatch: 'full' } ], canActivate: [AuthGuard, AppIdGuard] diff --git a/src/app/core/services/carnet/carnet.service.ts b/src/app/core/services/carnet/carnet.service.ts index 339e2b9..ab57530 100644 --- a/src/app/core/services/carnet/carnet.service.ts +++ b/src/app/core/services/carnet/carnet.service.ts @@ -54,6 +54,6 @@ export class CarnetService { P_HEADERID: headerid } - return this.http.post(`${this.apiUrl}/${this.apiDb}//ProcessCarnet`, appData); + return this.http.patch(`${this.apiUrl}/${this.apiDb}//ProcessCarnet`, appData); } } diff --git a/src/app/core/services/common/user.service.ts b/src/app/core/services/common/user.service.ts index 45d2b3e..92ba400 100644 --- a/src/app/core/services/common/user.service.ts +++ b/src/app/core/services/common/user.service.ts @@ -16,6 +16,8 @@ export class UserService { private readonly USER_EMAIL_KEY = 'CurrentUserEmail'; private readonly USER_DETAILS_KEY = 'CurrentUserData'; + private readonly CARNET_CLIENTID = 'carnet-clientid'; + private readonly CARNET_LOCATIONID = 'carnet-locationid'; private userLoggedInSubject = new BehaviorSubject(false); @@ -101,12 +103,12 @@ export class UserService { getUserClientid(): number { const userDetails = this.getUserDetails(); - return userDetails?.userDetails?.clientid ?? 0; + return userDetails?.userDetails?.clientid ?? this.storageService.get(this.CARNET_CLIENTID) ?? 0; } getUserLocationid(): number { const userDetails = this.getUserDetails(); - return userDetails?.userDetails?.locationid ?? 0; + return userDetails?.userDetails?.locationid ?? this.storageService.get(this.CARNET_LOCATIONID) ?? 0; } private mapToUser(data: any): User { diff --git a/src/app/core/services/home.service.ts b/src/app/core/services/home.service.ts index 76a8eb8..a178c3d 100644 --- a/src/app/core/services/home.service.ts +++ b/src/app/core/services/home.service.ts @@ -38,7 +38,9 @@ export class HomeService { expiryDate: item.EXPDATE || null, orderType: item.ORDERTYPE, carnetStatus: item.CARNETSTATUS, - headerid: item.HEADERID + headerid: item.HEADERID, + clientid: item.CLIENTID, + locationid: item.LOCATIONID, })); } diff --git a/src/app/guards/carnet-cleanup.guard.ts b/src/app/guards/carnet-cleanup.guard.ts new file mode 100644 index 0000000..e104494 --- /dev/null +++ b/src/app/guards/carnet-cleanup.guard.ts @@ -0,0 +1,38 @@ +import { CanDeactivateFn } from '@angular/router'; +import { Observable } from 'rxjs'; +import { StorageService } from '../core/services/common/storage.service'; +import { inject } from '@angular/core'; + +export const CarnetCleanupGuard: CanDeactivateFn = (component, currentRoute, currentState, nextState) => { + + // If the component has a canDeactivate method, call it + if (component.canDeactivate) { + return component.canDeactivate(); + } + + const storageService = inject(StorageService); + const nextUrl = nextState.url; + + // console.log(`Navigating away. Destination: ${nextUrl}`); + + // If the destination URL includes 'holder/carnet', skip the cleanup and allow navigation. + if (nextUrl.includes('edit-carnet') || nextUrl.includes('view-carnet') + || nextUrl.includes('add-holder') || nextUrl.includes('edit-holder')) { + return true; + } + + // Otherwise, perform the cleanup action. + storageService.removeItem('carnet-clientid'); + storageService.removeItem('carnet-locationid'); + + // Return true to allow the navigation to complete. + return true; +}; + +export interface CanComponentDeactivate { + /** + * An optional method that returns true to allow deactivation, + * or false (or a Promise/Observable resolving to false) to prevent it. + */ + canDeactivate: () => Observable | Promise | boolean; +} \ No newline at end of file diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index f0b730e..462e906 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -17,6 +17,7 @@ import * as XLSX from 'xlsx'; import { NavigationService } from '../core/services/common/navigation.service'; import { ConfirmDialogComponent } from '../shared/components/confirm-dialog/confirm-dialog.component'; import { MatDialog } from '@angular/material/dialog'; +import { StorageService } from '../core/services/common/storage.service'; @Component({ selector: 'app-home', @@ -51,6 +52,7 @@ export class HomeComponent { private notificationService = inject(NotificationService); private commonService = inject(CommonService); private navigationService = inject(NavigationService); + private storageService = inject(StorageService); private dialog = inject(MatDialog); constructor(userPrefenceService: UserPreferencesService) { @@ -166,6 +168,10 @@ export class HomeComponent { processCarnet(item: any): void { if (item && item.headerid) { + // set the client and location id to storage for later use in carnet processing + this.storageService.set("carnet-clientid", item.clientid); + this.storageService.set("carnet-locationid", item.locationid); + this.navigateTo(['edit-carnet', item.headerid], { queryParams: { applicationname: item.applicationName } }); @@ -176,6 +182,10 @@ export class HomeComponent { viewCarnet(item: any): void { if (item && item.headerid) { + // set the client and location id to storage for later use in carnet viewing + this.storageService.set("carnet-clientid", item.clientid); + this.storageService.set("carnet-locationid", item.locationid); + this.navigateTo(['view-carnet', item.headerid], { queryParams: { applicationname: item.applicationName } });