From 8537c653c1732fbc92105aff39e0ff486be9639f Mon Sep 17 00:00:00 2001 From: Narayanan Madaswamy Date: Thu, 21 May 2026 22:23:19 +0530 Subject: [PATCH] Merged --- backend/uploads/Invoice For Jan-Feb-2026.pdf | Bin 0 -> 134025 bytes .../uploads/Invoice For Jan-Feb-2026.pdf.jpg | Bin 0 -> 233710 bytes frontend/proxy.conf.json | 1 + frontend/public/assets/images/logo.png | Bin 0 -> 22345 bytes frontend/src/app/app.routes.ts | 6 +- .../app/fragments/menu/menu.component.html | 21 + .../src/app/fragments/menu/menu.component.ts | 13 +- .../src/app/interceptors/auth.interceptor.ts | 64 +-- .../src/app/interceptors/authorize.guard.ts | 40 ++ frontend/src/app/login/login.component.css | 43 ++ frontend/src/app/login/login.component.html | 50 ++ frontend/src/app/login/login.component.ts | 112 ++-- frontend/src/app/login/login.html | 1 - frontend/src/app/login/login.scss | 0 frontend/src/app/login/login.ts | 11 - frontend/src/app/models/account.model.ts | 22 + frontend/src/app/models/masters/masters.ts | 16 + .../app/models/masters/member/memberlist.ts | 16 + frontend/src/app/models/ola.model.ts | 7 + frontend/src/app/models/request.model.ts | 6 + frontend/src/app/models/response.dto.ts | 6 + frontend/src/app/models/session.model.ts | 35 ++ frontend/src/app/models/tools.model.ts | 52 ++ frontend/src/app/models/user.model.ts | 30 + frontend/src/app/ocr/ocr.component.ts | 196 ++++++- .../department/department.component.css | 1 + .../department/department.component.spec.ts | 21 + .../department/department.component.ts | 46 +- .../desigation/designation.component.css | 1 + .../desigation/designation.component.spec.ts | 21 + .../desigation/designation.component.ts | 47 +- .../company/employee/employee.component.css | 1 + .../employee/employee.component.spec.ts | 21 + .../company/employee/employee.component.ts | 43 +- .../subsidiary/subsidiary.component.css | 5 + .../subsidiary/subsidiary.component.html | 2 +- .../subsidiary/subsidiary.component.spec.ts | 21 + .../subsidiary/subsidiary.component.ts | 53 +- .../company/verifier/verifier.component.css | 1 + .../company/verifier/verifier.component.html | 273 +++++++++ .../company/verifier/verifier.component.ts | 347 +++++++++++ .../app/pages/account/user/user.component.css | 1 + .../pages/account/user/user.component.html | 102 ++-- .../pages/account/user/user.component.spec.ts | 21 + .../app/pages/account/user/user.component.ts | 218 ++++++- .../pages/dashboard/dashboard.component.ts | 10 +- .../session/auth/authorize.component.css | 38 ++ .../session/auth/authorize.component.html | 38 ++ .../pages/session/auth/authorize.component.ts | 54 +- .../session/profile/profile.component.css | 1 + .../session/profile/profile.component.html | 167 ++++++ .../session/profile/profile.component.spec.ts | 21 + .../session/profile/profile.component.ts | 60 ++ .../localities/localities.component.css | 1 + .../localities/localities.component.html | 289 ++++++++++ .../localities/localities.component.ts | 542 ++++++++++++++++++ .../account/company/company.service.ts | 199 +++++++ .../app/services/account/user/user.service.ts | 67 +++ .../app/services/commons/session.service.ts | 51 ++ frontend/src/app/services/http.service.ts | 56 ++ .../app/services/masters/master.service.ts | 24 + frontend/src/app/services/ola/ola.service.ts | 24 + .../tools/allocation/allocation.service.ts | 73 +++ .../services/utilities/encryption.service.ts | 61 ++ .../src/app/services/utilities/rsa.service.ts | 37 ++ .../services/utilities/validation.service.ts | 167 ++++++ frontend/src/environments/environment.ts | 1 + frontend/tsconfig.json | 2 +- 68 files changed, 3644 insertions(+), 333 deletions(-) create mode 100644 backend/uploads/Invoice For Jan-Feb-2026.pdf create mode 100644 backend/uploads/Invoice For Jan-Feb-2026.pdf.jpg create mode 100644 frontend/proxy.conf.json create mode 100644 frontend/public/assets/images/logo.png create mode 100644 frontend/src/app/fragments/menu/menu.component.html create mode 100644 frontend/src/app/interceptors/authorize.guard.ts create mode 100644 frontend/src/app/login/login.component.css create mode 100644 frontend/src/app/login/login.component.html delete mode 100644 frontend/src/app/login/login.html delete mode 100644 frontend/src/app/login/login.scss delete mode 100644 frontend/src/app/login/login.ts create mode 100644 frontend/src/app/models/masters/masters.ts create mode 100644 frontend/src/app/models/masters/member/memberlist.ts create mode 100644 frontend/src/app/models/ola.model.ts create mode 100644 frontend/src/app/models/request.model.ts create mode 100644 frontend/src/app/models/response.dto.ts create mode 100644 frontend/src/app/models/session.model.ts create mode 100644 frontend/src/app/models/tools.model.ts create mode 100644 frontend/src/app/models/user.model.ts create mode 100644 frontend/src/app/pages/account/company/department/department.component.css create mode 100644 frontend/src/app/pages/account/company/department/department.component.spec.ts create mode 100644 frontend/src/app/pages/account/company/desigation/designation.component.css create mode 100644 frontend/src/app/pages/account/company/desigation/designation.component.spec.ts create mode 100644 frontend/src/app/pages/account/company/employee/employee.component.css create mode 100644 frontend/src/app/pages/account/company/employee/employee.component.spec.ts create mode 100644 frontend/src/app/pages/account/company/subsidiary/subsidiary.component.css create mode 100644 frontend/src/app/pages/account/company/subsidiary/subsidiary.component.spec.ts create mode 100644 frontend/src/app/pages/account/company/verifier/verifier.component.css create mode 100644 frontend/src/app/pages/account/company/verifier/verifier.component.html create mode 100644 frontend/src/app/pages/account/company/verifier/verifier.component.ts create mode 100644 frontend/src/app/pages/account/user/user.component.css create mode 100644 frontend/src/app/pages/account/user/user.component.spec.ts create mode 100644 frontend/src/app/pages/session/auth/authorize.component.css create mode 100644 frontend/src/app/pages/session/auth/authorize.component.html create mode 100644 frontend/src/app/pages/session/profile/profile.component.css create mode 100644 frontend/src/app/pages/session/profile/profile.component.html create mode 100644 frontend/src/app/pages/session/profile/profile.component.spec.ts create mode 100644 frontend/src/app/pages/session/profile/profile.component.ts create mode 100644 frontend/src/app/pages/tools/allocation/localities/localities.component.css create mode 100644 frontend/src/app/pages/tools/allocation/localities/localities.component.html create mode 100644 frontend/src/app/pages/tools/allocation/localities/localities.component.ts create mode 100644 frontend/src/app/services/account/company/company.service.ts create mode 100644 frontend/src/app/services/account/user/user.service.ts create mode 100644 frontend/src/app/services/commons/session.service.ts create mode 100644 frontend/src/app/services/http.service.ts create mode 100644 frontend/src/app/services/masters/master.service.ts create mode 100644 frontend/src/app/services/ola/ola.service.ts create mode 100644 frontend/src/app/services/tools/allocation/allocation.service.ts create mode 100644 frontend/src/app/services/utilities/encryption.service.ts create mode 100644 frontend/src/app/services/utilities/rsa.service.ts create mode 100644 frontend/src/app/services/utilities/validation.service.ts diff --git a/backend/uploads/Invoice For Jan-Feb-2026.pdf b/backend/uploads/Invoice For Jan-Feb-2026.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c73b972b202c79d79946603789005479ea05cc3 GIT binary patch literal 134025 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�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

ZQ!F|jP@HekisT8U5@Mj1bg2(?sx1g& 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

iX2NwiY(vjO~sS~~l=Tc=+H`pE22Eegj< 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 YkO7bZkO7bZkO7bZkb!?y2EKp(H@T>82><{9 literal 0 HcmV?d00001 diff --git a/frontend/proxy.conf.json b/frontend/proxy.conf.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/frontend/proxy.conf.json @@ -0,0 +1 @@ +{} diff --git a/frontend/public/assets/images/logo.png b/frontend/public/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..642e23625b003ef28db24722358caa6694272809 GIT binary patch literal 22345 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 + + + + + +

+
+ + {{ companyName }} + + + {{ name }} | {{ branchName }} + +
+ + +
+ + + \ No newline at end of file diff --git a/frontend/src/app/fragments/menu/menu.component.ts b/frontend/src/app/fragments/menu/menu.component.ts index 926a6fa..e315341 100644 --- a/frontend/src/app/fragments/menu/menu.component.ts +++ b/frontend/src/app/fragments/menu/menu.component.ts @@ -1,23 +1,22 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { Router } from '@angular/router'; import { MenuItem } from 'primeng/api'; -import { MenubarModule } from 'primeng/menubar'; +import { Menubar } from 'primeng/menubar'; import { HttpService } from '../../services/http.service'; import { Request } from '../../models/request.model'; import { AvatarModule } from 'primeng/avatar'; -import { MenuModule } from 'primeng/menu'; +import { Menu } from 'primeng/menu'; import { ButtonModule } from 'primeng/button'; import { InputTextModule } from 'primeng/inputtext'; import { SessionService } from '../../services/commons/session.service'; import { EncryptionService } from '../../services/utilities/encryption.service'; import { TooltipModule } from 'primeng/tooltip'; import { environment } from '../../../environments/environment'; -import { CommonModule } from '@angular/common'; @Component({ selector: 'app-menu', standalone: true, - imports: [CommonModule, MenubarModule, AvatarModule, ButtonModule, MenuModule, InputTextModule, TooltipModule], + imports: [Menubar, AvatarModule, ButtonModule, Menu, InputTextModule, TooltipModule], templateUrl: './menu.component.html' }) export class MenuComponent { @@ -106,6 +105,6 @@ export class MenuComponent { } gotToDashboard() { - this.router.navigate(['/user']); + this.router.navigate(['/account']); } -} \ No newline at end of file +} diff --git a/frontend/src/app/interceptors/auth.interceptor.ts b/frontend/src/app/interceptors/auth.interceptor.ts index cd5148d..1f9a086 100644 --- a/frontend/src/app/interceptors/auth.interceptor.ts +++ b/frontend/src/app/interceptors/auth.interceptor.ts @@ -24,15 +24,12 @@ export const AuthInterceptor: HttpInterceptorFn = ( /* ----------------------------------------- * 1️⃣ Always attach Authorization header * ----------------------------------------- */ - // OCR uses sessionStorage for token now (migrated previously) - const token = sessionStorage.getItem('token'); + const token = sessionService.getItem('token'); let reqHeaders = req.headers; - // Only set application/json if it's not FormData - // FormData requests need the browser to set Content-Type with boundary if (!(req.body instanceof FormData)) { - reqHeaders = reqHeaders.set('Content-Type', 'application/json'); + reqHeaders = reqHeaders.set('Content-Type', 'application/json'); } if (token) { @@ -65,9 +62,8 @@ export const AuthInterceptor: HttpInterceptorFn = ( headers: reqHeaders }); - // Use 'any' type for event to avoid strict type mismatch if ResponseDto structure varies return next(modifiedReq).pipe( - tap((event: any) => handleResponse(event, sessionService, encryptionService)), + tap(event => handleResponse(event, sessionService, encryptionService)), catchError((error: HttpErrorResponse) => throwError(() => error) ) @@ -84,7 +80,7 @@ export const AuthInterceptor: HttpInterceptorFn = ( }); return next(modifiedReq).pipe( - tap((event: any) => handleResponse(event, sessionService, encryptionService)), + tap(event => handleResponse(event, sessionService, encryptionService)), catchError((error: HttpErrorResponse) => throwError(() => error) ) @@ -101,45 +97,33 @@ function handleResponse( return; } - // Handle Authenticate Response - if (event.url?.endsWith('/authenticate')) { + if (event.url?.endsWith('/3z4mkell5g5aset/authenticate')) { const response = event.body as ResponseDto; - if (response?.data?.token) { - sessionStorage.setItem('token', response.data.token); - } - if (response?.data?.companies) { - sessionService.setItem('companies', response.data.companies); - } + sessionService.setItem('token', response?.data?.token); + sessionService.setItem('companies', response?.data?.companies); } - // Handle Authorize Response - if (event.url?.endsWith('/authorize')) { + if (event.url?.endsWith('/3z4mkell5g5aset/authorize')) { const response = event.body as ResponseDto; - // Clearing session might be too aggressive if we just logged in, but following source logic - // sessionService.clear(); - - if (response?.data?.token) { - sessionStorage.setItem('token', response.data.token); - } - if (response?.data?.refreshToken) { - sessionService.setItem('refreshToken', response.data.refreshToken); - } + sessionService.clear(); + sessionService.setItem('token', response?.data?. token); + sessionService.setItem('refreshToken', response?.data?.refreshToken); + sessionService.setItem('userDetails', JSON.stringify(response?.data?.userDetails)); + encryptionService.encrypt(response?.data?.data) + .then(encryptedNav => { + sessionService.setItem('nav', encryptedNav); + }); + if (response?.data?.userDetails) { - sessionService.setItem('userDetails', response.data.userDetails); - } - - if (response?.data?.data) { - encryptionService.encrypt(response.data.data) - .then(encryptedNav => { - sessionService.setItem('nav', encryptedNav); - }); - } - - if (response?.data?.companies) { sessionService.setItem( - 'companies', - response.data.companies + 'userDetails', + JSON.stringify(response.data.userDetails) ); } + + sessionService.setItem( + 'companies', + JSON.stringify(response?.data?.companies) + ); } } \ No newline at end of file diff --git a/frontend/src/app/interceptors/authorize.guard.ts b/frontend/src/app/interceptors/authorize.guard.ts new file mode 100644 index 0000000..0789af8 --- /dev/null +++ b/frontend/src/app/interceptors/authorize.guard.ts @@ -0,0 +1,40 @@ +import { Injectable, inject, PLATFORM_ID } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, Router, RouterStateSnapshot } from '@angular/router'; +import { isPlatformBrowser } from '@angular/common'; + +@Injectable({ providedIn: 'root' }) +export class AuthorizeGuard implements CanActivate, CanActivateChild { + + private platformId = inject(PLATFORM_ID); + private router = inject(Router); + + private checkAuth(): boolean { + if (!isPlatformBrowser(this.platformId)) { + return false; + } + + const token = sessionStorage.getItem('token'); + + if (!token) { + sessionStorage.clear(); + this.router.navigate(['/']); + return false; + } + + return true; + } + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): boolean { + return this.checkAuth(); + } + + canActivateChild( + childRoute: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): boolean { + return this.checkAuth(); + } +} diff --git a/frontend/src/app/login/login.component.css b/frontend/src/app/login/login.component.css new file mode 100644 index 0000000..e83b32f --- /dev/null +++ b/frontend/src/app/login/login.component.css @@ -0,0 +1,43 @@ +::ng-deep .p-password-input { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} + +.login-page { + height: 99vh; +} + +::ng-deep .p-card { + position: relative; + border-radius: 24px !important; + background: white; + padding: 1rem; + overflow: hidden; +} + +/* Gradient border */ +::ng-deep .p-card::before { + content: ""; + position: absolute; + inset: 0; + padding: 3px; /* border thickness */ + border-radius: 24px; + filter: drop-shadow(0 0 12px rgba(91, 185, 138, 0.35)); + background: linear-gradient( + 180deg, + #5bb98a 0%, + rgba(91, 185, 138, 0.6) 40%, + rgba(91, 185, 138, 0.15) 70%, + transparent 100% + ); + + /* Mask trick = border only */ + -webkit-mask: + linear-gradient(#fff 0 0) content-box, + linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + + pointer-events: none; +} + diff --git a/frontend/src/app/login/login.component.html b/frontend/src/app/login/login.component.html new file mode 100644 index 0000000..a1abfb7 --- /dev/null +++ b/frontend/src/app/login/login.component.html @@ -0,0 +1,50 @@ + diff --git a/frontend/src/app/login/login.component.ts b/frontend/src/app/login/login.component.ts index 8051b2c..f090337 100644 --- a/frontend/src/app/login/login.component.ts +++ b/frontend/src/app/login/login.component.ts @@ -1,76 +1,58 @@ -import { Component } from '@angular/core'; -import { CommonModule } from '@angular/common'; +import { CommonModule} from '@angular/common'; import { FormsModule } from '@angular/forms'; -import { AuthService } from '../auth.service'; -import { Router } from '@angular/router'; -import { MessageService } from 'primeng/api'; - -// PrimeNG Imports -import { CardModule } from 'primeng/card'; +import { Component } from '@angular/core'; +import { ButtonModule } from 'primeng/button';; import { InputTextModule } from 'primeng/inputtext'; -import { ButtonModule } from 'primeng/button'; -import { ToastModule } from 'primeng/toast'; +import { CardModule } from 'primeng/card'; +import { InputGroupModule } from 'primeng/inputgroup'; +import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; +import { PasswordModule } from 'primeng/password'; +import { FloatLabelModule } from 'primeng/floatlabel'; +import { KeyFilterModule } from 'primeng/keyfilter'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule} from '@angular/forms'; +import { Request } from '../models/request.model'; +import { HttpService } from '../services/http.service'; +import { MessageModule } from 'primeng/message'; +import { StyleClassModule } from 'primeng/styleclass'; +import { Router } from '@angular/router'; +import { ResponseDto } from '../models/response.dto'; +import { BadgeModule } from "primeng/badge"; +import { environment } from '../../environments/environment'; @Component({ selector: 'app-login', - standalone: true, - imports: [ - CommonModule, - FormsModule, - CardModule, - InputTextModule, - ButtonModule, - ToastModule - ], - providers: [MessageService], - template: ` - - `, - styles: [` - .login-container { - display: flex; - justify-content: center; - align-items: center; - height: 100vh; - background: var(--surface-card); - } - .w-full { width: 100%; } - .mt-4 { margin-top: 1.5rem; } - `] + templateUrl: './login.component.html', + styleUrls: ['./login.component.css'], + imports: [CommonModule, FormsModule, CardModule, ButtonModule, InputTextModule, InputGroupModule, InputGroupAddonModule, PasswordModule, + FloatLabelModule, ReactiveFormsModule, KeyFilterModule, MessageModule, StyleClassModule, BadgeModule] }) export class LoginComponent { - username = ''; - password = ''; + loginForm: FormGroup; + message?: string; - constructor(private auth: AuthService, private router: Router, private messageService: MessageService) {} - - onLogin() { - this.auth.login(this.username, this.password).subscribe({ - next: () => { - this.router.navigate(['/']); - }, - error: () => { - this.messageService.add({severity:'error', summary:'Error', detail:'Invalid Credentials'}); - } + constructor(private fb: FormBuilder, private http: HttpService, private router: Router) { + this.loginForm = this.fb.group({ + username: ['', Validators.required], + password: ['', Validators.required] }); } + + onLogin() { + this.message = ''; + if (this.loginForm.valid) { + const requestPayload: Request = { + data: this.loginForm.value, + compressed: true, + target: 'models.auth.Login' + }; + this.http.post(`${environment.authService}/3z4mkell5g5aset/authenticate`, requestPayload).subscribe({ + next: (response) => { + this.router.navigate(['/authorize']); + }, + error: (err) => { + this.message = err.message; + } + }); + } + } } diff --git a/frontend/src/app/login/login.html b/frontend/src/app/login/login.html deleted file mode 100644 index 147cfc4..0000000 --- a/frontend/src/app/login/login.html +++ /dev/null @@ -1 +0,0 @@ -

login works!

diff --git a/frontend/src/app/login/login.scss b/frontend/src/app/login/login.scss deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/app/login/login.ts b/frontend/src/app/login/login.ts deleted file mode 100644 index 7888f76..0000000 --- a/frontend/src/app/login/login.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-login', - imports: [], - templateUrl: './login.html', - styleUrl: './login.scss', -}) -export class Login { - -} diff --git a/frontend/src/app/models/account.model.ts b/frontend/src/app/models/account.model.ts index 5ddd8fd..ac11b8d 100644 --- a/frontend/src/app/models/account.model.ts +++ b/frontend/src/app/models/account.model.ts @@ -43,6 +43,28 @@ export interface DepartmentDTO { active: boolean; } +export interface CompanyVerifierModel { + pkId?: number; + id?: string; + companyId: string; + employeeId?: string; + verifierCode: string; + verifierType: string; + fullName: string; + mobileNo: string; + emailId: string; + allocationDate?: string; + appActive: boolean; + photoMandatory: boolean; + createdAt?: string; + createdBy?: number; + createdUser?: string; + updatedAt?: string; + updatedBy?: number; + updatedUser?: string; + active: boolean; +} + export interface DesignationDTO { id: string; companyId: string; diff --git a/frontend/src/app/models/masters/masters.ts b/frontend/src/app/models/masters/masters.ts new file mode 100644 index 0000000..9d93f0e --- /dev/null +++ b/frontend/src/app/models/masters/masters.ts @@ -0,0 +1,16 @@ +export interface CityDTO { + id?:string, + stateId?:string, + stateName?:string, + cityName?:string, + stateCode?:string, + gstCode?:string +} + +export interface SearchDTO { + module?:string, + searchBy?:string, + searchValue?:string, + offset?:number, + limit?:number +} \ No newline at end of file diff --git a/frontend/src/app/models/masters/member/memberlist.ts b/frontend/src/app/models/masters/member/memberlist.ts new file mode 100644 index 0000000..d823bf6 --- /dev/null +++ b/frontend/src/app/models/masters/member/memberlist.ts @@ -0,0 +1,16 @@ +export interface MemberList { + id:string, + memberno:string, + membername:string, + fathername:string, + mobileno?:string, + membershipdate?:Date, + emailid?:string, + dob?:Date, + age?:number, + gender?:string, + status:string + isactive:boolean, + updatedat:Date, + updatedby:string +} diff --git a/frontend/src/app/models/ola.model.ts b/frontend/src/app/models/ola.model.ts new file mode 100644 index 0000000..a030247 --- /dev/null +++ b/frontend/src/app/models/ola.model.ts @@ -0,0 +1,7 @@ +export interface LocationDTO { + place_id?: string; + name?: string; + formatted_address?: string; + lat?: number; + lng?: number; +} diff --git a/frontend/src/app/models/request.model.ts b/frontend/src/app/models/request.model.ts new file mode 100644 index 0000000..0f44bda --- /dev/null +++ b/frontend/src/app/models/request.model.ts @@ -0,0 +1,6 @@ +export interface Request { + scopes?: string[]; + data: T; + target?: string; + compressed?: boolean; +} diff --git a/frontend/src/app/models/response.dto.ts b/frontend/src/app/models/response.dto.ts new file mode 100644 index 0000000..f3ce991 --- /dev/null +++ b/frontend/src/app/models/response.dto.ts @@ -0,0 +1,6 @@ +export interface ResponseDto { + statuscode : number; + message?: string; + description?: string; + data?: any; +} diff --git a/frontend/src/app/models/session.model.ts b/frontend/src/app/models/session.model.ts new file mode 100644 index 0000000..07687cf --- /dev/null +++ b/frontend/src/app/models/session.model.ts @@ -0,0 +1,35 @@ +export interface Company { + id?: string; + companyName?: string; + companyCode?: string; + branches?: Branch[]; +} + +export interface Branch { + id?: string; + branchName?: string; + branchCode?: string; + roles?: Role[]; +} + +export interface Role { + roleName?: string; + groupName?: string; + defaultRole?: boolean; +} + +export interface UserProfile { + username?: string; + employeeId?: string; + joiningDate?: Date; + displayName?: string; + department?: string; + designation?: string; + name?: string; + fatherName?: string; + gender?: string; + dob?: Date; + contactNo?: string; + alternateContactNo?: string; + emailId?: string; +} diff --git a/frontend/src/app/models/tools.model.ts b/frontend/src/app/models/tools.model.ts new file mode 100644 index 0000000..8a70ee4 --- /dev/null +++ b/frontend/src/app/models/tools.model.ts @@ -0,0 +1,52 @@ +export interface AreaDTO { + id?: string; + companyId?: string; + areaName?: string; + groupAVerifierId?: string; + groupBVerifierId?: string; + groupCVerifierId?: string; + groupAVerifierName?: string; + groupBVerifierName?: string; + groupCVerifierName?: string; + createdAt?: Date; + createdBy?: string; + createdUser?: string; + updatedAt?: Date; + updatedBy?: string; + updatedUser?: string; + active?: boolean; +} + +export interface LocalityDTO { + id?: string; + companyId?: string; + areaId?: string; + stateCityId?: string; + localityTypeId?: string; + olaPlaceId?: string; + olaLocality?: string; + localityName?: string; + adminArea?: string; + latitude?: number; + longitude?: number; + createdAt?: Date; + createdBy?: string; + createdUser?: string; + updatedAt?: Date; + updatedBy?: string; + updatedUser?: string; + active?: boolean; + stateName?: string; + pincode?: string; + areaName?: string; + localityTypeName?: string; + masterCityName?: string; + masterStateName?: string; +} + +export interface LocalityTypeDTO { + id?: string; + type?: string; + riskdetail?: string; + createdAt?: Date; +} diff --git a/frontend/src/app/models/user.model.ts b/frontend/src/app/models/user.model.ts new file mode 100644 index 0000000..4ccacc8 --- /dev/null +++ b/frontend/src/app/models/user.model.ts @@ -0,0 +1,30 @@ +export interface UserDTO { + id?: string; + loginId?: string; + loginPassword?: string; + displayName?: string; + fkEmployeeId?: string; + employeeId?: string; + employeeName?: string; + fatherName?: string; + department?: string; + designation?: string; + status?: string; + updatedAt?: string; + updatedUser?: string; + active?: boolean; + userRoles?: UserRoleDTO[]; +} + +export interface UserRoleDTO { + id?: string; + roleId?: string; + branchId?: string; + roleName?: string; + groupName?: string; + branchName?: string; + defaultRole?: boolean; + updatedAt?: string; + updatedUser?: string; + active?: boolean; +} \ No newline at end of file diff --git a/frontend/src/app/ocr/ocr.component.ts b/frontend/src/app/ocr/ocr.component.ts index a1cbe68..452d4ac 100644 --- a/frontend/src/app/ocr/ocr.component.ts +++ b/frontend/src/app/ocr/ocr.component.ts @@ -9,6 +9,11 @@ import { FileUploadModule } from 'primeng/fileupload'; import { ProgressBarModule } from 'primeng/progressbar'; import { TextareaModule } from 'primeng/textarea'; import { ToastModule } from 'primeng/toast'; +import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { CardModule } from 'primeng/card'; +import { RadioButtonModule } from 'primeng/radiobutton'; +import { InputTextModule } from 'primeng/inputtext'; @Component({ selector: 'app-ocr', @@ -19,16 +24,18 @@ import { ToastModule } from 'primeng/toast'; FileUploadModule, ProgressBarModule, TextareaModule, - ToastModule + ToastModule, + ButtonModule, + TableModule, + CardModule, + RadioButtonModule, + InputTextModule ], providers: [MessageService], template: `

OCR Extraction

- +
-
-

Extracted Text Result:

- +
+
+

Extracted Text Result:

+ + +
+
+ +
+ + +
+
+ + +
+
+ + + +
+
+ +
+
+

AI Analysis Result:

+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + + + Description + Qty + Price + Total + + + + + + + + + + + {{item.description}} + + + + + + + + + + {{item.quantity}} + + + + + + + + + + {{item.unit_price}} + + + + + + + + + + {{item.total}} + + + + + + +
@@ -65,16 +177,27 @@ import { ToastModule } from 'primeng/toast'; export class OcrComponent { extractedText: string | null = null; loading: boolean = false; + + aiLoading: boolean = false; + saveLoading: boolean = false; + aiResult: any = null; + + // Hybrid AI Props + modelType: string = 'text'; + filePath: string | null = null; constructor(private ocrService: OcrService, private messageService: MessageService) {} onUpload(event: any) { this.loading = true; + this.aiResult = null; // Reset AI result on new upload + this.filePath = null; const file = event.files[0]; this.ocrService.extractText(file).subscribe({ next: (res) => { this.extractedText = res.text; + this.filePath = res.file_path; this.loading = false; this.messageService.add({severity:'success', summary:'Success', detail:'Text Extracted Successfully'}); }, @@ -88,5 +211,50 @@ export class OcrComponent { onClear() { this.extractedText = null; + this.aiResult = null; + this.filePath = null; + } + + processWithAI() { + if (!this.extractedText) return; + + this.aiLoading = true; + // Pass text, filePath, and modelType + this.ocrService.extractWithAI(this.extractedText, this.filePath, this.modelType).subscribe({ + next: (res) => { + this.aiResult = res; + this.aiLoading = false; + this.messageService.add({severity:'success', summary:'AI Processing Complete', detail:'Data Extracted'}); + }, + error: (err) => { + console.error(err); + this.aiLoading = false; + this.messageService.add({severity:'error', summary:'AI Error', detail:'Could not process with AI'}); + } + }); + } + + saveDocument() { + if (!this.aiResult || !this.filePath) return; + + this.saveLoading = true; + const payload = { + vendor_name: this.aiResult.vendor_name || 'Unknown Vendor', + file_path: this.filePath, + model_type: this.modelType, + data: this.aiResult + }; + + this.ocrService.saveDocument(payload).subscribe({ + next: (res) => { + this.saveLoading = false; + this.messageService.add({severity:'success', summary:'Saved & Verified', detail:'Document and rules saved'}); + }, + error: (err) => { + console.error(err); + this.saveLoading = false; + this.messageService.add({severity:'error', summary:'Save Error', detail:'Failed to save document'}); + } + }); } } diff --git a/frontend/src/app/pages/account/company/department/department.component.css b/frontend/src/app/pages/account/company/department/department.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/account/company/department/department.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/account/company/department/department.component.spec.ts b/frontend/src/app/pages/account/company/department/department.component.spec.ts new file mode 100644 index 0000000..57045f3 --- /dev/null +++ b/frontend/src/app/pages/account/company/department/department.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { DepartmentComponent } from './department.component'; + +describe('DepartmentComponent', () => { + let component: DepartmentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DepartmentComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(DepartmentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/account/company/department/department.component.ts b/frontend/src/app/pages/account/company/department/department.component.ts index 9842162..814d844 100644 --- a/frontend/src/app/pages/account/company/department/department.component.ts +++ b/frontend/src/app/pages/account/company/department/department.component.ts @@ -1,31 +1,32 @@ import { DepartmentDTO } from './../../../../models/account.model'; import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { TableModule, Table } from 'primeng/table'; -import { DialogModule } from 'primeng/dialog'; -import { RippleModule } from 'primeng/ripple'; -import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Ripple } from 'primeng/ripple'; +import { ButtonModule, Button } from 'primeng/button'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmDialog } from 'primeng/confirmdialog'; import { InputTextModule } from 'primeng/inputtext'; import { TextareaModule } from 'primeng/textarea'; import { CommonModule } from '@angular/common'; -import { FileUploadModule } from 'primeng/fileupload'; +import { FileUpload } from 'primeng/fileupload'; import { SelectModule } from 'primeng/select'; -import { TagModule } from 'primeng/tag'; -import { RadioButtonModule } from 'primeng/radiobutton'; -import { RatingModule } from 'primeng/rating'; -import { SkeletonModule } from 'primeng/skeleton'; +import { Tag } from 'primeng/tag'; +import { RadioButton } from 'primeng/radiobutton'; +import { Rating } from 'primeng/rating'; +import { Skeleton } from 'primeng/skeleton'; import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; -import { InputNumberModule } from 'primeng/inputnumber'; +import { InputNumber } from 'primeng/inputnumber'; import { IconFieldModule } from 'primeng/iconfield'; import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; import { CompanyService } from '../../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; import { ValidationService } from '../../../../services/utilities/validation.service'; import { TooltipModule } from 'primeng/tooltip'; -import { AutoCompleteModule } from 'primeng/autocomplete'; -import { FloatLabelModule } from 'primeng/floatlabel'; interface Column { field: string; @@ -42,13 +43,7 @@ interface ExportColumn { selector: 'app-department', templateUrl: './department.component.html', standalone: true, - imports: [ - CommonModule, FormsModule, ReactiveFormsModule, - TableModule, DialogModule, ButtonModule, ToastModule, ToolbarModule, ConfirmDialogModule, - InputTextModule, TextareaModule, FileUploadModule, SelectModule, TagModule, - RadioButtonModule, RatingModule, SkeletonModule, InputNumberModule, IconFieldModule, - InputIconModule, TooltipModule, AutoCompleteModule, RippleModule, FloatLabelModule - ], + imports: [TableModule, Dialog, Ripple, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, FileUpload, DropdownModule, Tag, RadioButton, Rating, InputTextModule, InputNumber, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton], providers: [MessageService, ConfirmationService], styleUrl: './department.component.css' }) @@ -163,8 +158,15 @@ export class DepartmentComponent implements OnInit{ message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + department.department + '?', header: 'Confirm', icon: 'pi pi-exclamation-triangle', - rejectButtonStyleClass: 'p-button-text p-button-secondary', - acceptButtonStyleClass: isActivating ? 'p-button-success' : 'p-button-danger', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, accept: () => { this.companyService.activateDeactivateDepartment(department.id, isActivating).subscribe({ next: (updatedDepartment) => { diff --git a/frontend/src/app/pages/account/company/desigation/designation.component.css b/frontend/src/app/pages/account/company/desigation/designation.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/account/company/desigation/designation.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/account/company/desigation/designation.component.spec.ts b/frontend/src/app/pages/account/company/desigation/designation.component.spec.ts new file mode 100644 index 0000000..de59e48 --- /dev/null +++ b/frontend/src/app/pages/account/company/desigation/designation.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { DesignationComponent } from './designation.component'; + +describe('DesignationComponent', () => { + let component: DesignationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DesignationComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(DesignationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/account/company/desigation/designation.component.ts b/frontend/src/app/pages/account/company/desigation/designation.component.ts index d445f85..cd8ebf0 100644 --- a/frontend/src/app/pages/account/company/desigation/designation.component.ts +++ b/frontend/src/app/pages/account/company/desigation/designation.component.ts @@ -1,31 +1,33 @@ import { DesignationDTO, DepartmentDTO } from './../../../../models/account.model'; import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { TableModule, Table } from 'primeng/table'; -import { DialogModule } from 'primeng/dialog'; -import { RippleModule } from 'primeng/ripple'; -import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Ripple } from 'primeng/ripple'; +import { ButtonModule, Button } from 'primeng/button'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmDialog } from 'primeng/confirmdialog'; +import { InputTextModule } from 'primeng/inputtext'; import { TextareaModule } from 'primeng/textarea'; import { CommonModule } from '@angular/common'; -import { FileUploadModule } from 'primeng/fileupload'; +import { FileUpload } from 'primeng/fileupload'; import { SelectModule } from 'primeng/select'; -import { TagModule } from 'primeng/tag'; -import { RadioButtonModule } from 'primeng/radiobutton'; -import { RatingModule } from 'primeng/rating'; -import { SkeletonModule } from 'primeng/skeleton'; +import { Tag } from 'primeng/tag'; +import { RadioButton } from 'primeng/radiobutton'; +import { Rating } from 'primeng/rating'; +import { Skeleton } from 'primeng/skeleton'; import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; -import { InputNumberModule } from 'primeng/inputnumber'; +import { InputNumber } from 'primeng/inputnumber'; import { IconFieldModule } from 'primeng/iconfield'; import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; import { CompanyService } from '../../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; import { ValidationService } from '../../../../services/utilities/validation.service'; import { TooltipModule } from 'primeng/tooltip'; import { CheckboxModule } from 'primeng/checkbox'; -import { AutoCompleteModule } from 'primeng/autocomplete'; -import { FloatLabelModule } from 'primeng/floatlabel'; interface Column { field: string; @@ -42,13 +44,7 @@ interface ExportColumn { selector: 'app-designation', templateUrl: './designation.component.html', standalone: true, - imports: [ - CommonModule, FormsModule, ReactiveFormsModule, - TableModule, DialogModule, ButtonModule, ToastModule, ToolbarModule, ConfirmDialogModule, - TextareaModule, FileUploadModule, SelectModule, TagModule, - RadioButtonModule, RatingModule, SkeletonModule, InputNumberModule, IconFieldModule, InputIconModule, - TooltipModule, AutoCompleteModule, RippleModule, CheckboxModule, FloatLabelModule - ], + imports: [TableModule, Dialog, Ripple, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, FileUpload, DropdownModule, Tag, RadioButton, Rating, InputTextModule, InputNumber, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, CheckboxModule], providers: [MessageService, ConfirmationService], styleUrl: './designation.component.css' }) @@ -175,8 +171,15 @@ export class DesignationComponent implements OnInit{ message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + designation.designation + '?', header: 'Confirm', icon: 'pi pi-exclamation-triangle', - rejectButtonStyleClass: 'p-button-text p-button-secondary', - acceptButtonStyleClass: isActivating ? 'p-button-success' : 'p-button-danger', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, accept: () => { this.companyService.activateDeactivateDesignation(designation.id, isActivating).subscribe({ next: (updatedDesignation) => { diff --git a/frontend/src/app/pages/account/company/employee/employee.component.css b/frontend/src/app/pages/account/company/employee/employee.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/account/company/employee/employee.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/account/company/employee/employee.component.spec.ts b/frontend/src/app/pages/account/company/employee/employee.component.spec.ts new file mode 100644 index 0000000..6f30928 --- /dev/null +++ b/frontend/src/app/pages/account/company/employee/employee.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { EmployeeComponent } from './employee.component'; + +describe('EmployeeComponent', () => { + let component: EmployeeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EmployeeComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(EmployeeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/account/company/employee/employee.component.ts b/frontend/src/app/pages/account/company/employee/employee.component.ts index 9e94371..29e2eae 100644 --- a/frontend/src/app/pages/account/company/employee/employee.component.ts +++ b/frontend/src/app/pages/account/company/employee/employee.component.ts @@ -1,25 +1,30 @@ import { EmployeeDTO, SubsidiaryDTO, DepartmentDTO, DesignationDTO } from './../../../../models/account.model'; import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { TableModule, Table } from 'primeng/table'; -import { DialogModule } from 'primeng/dialog'; -import { RippleModule } from 'primeng/ripple'; -import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Ripple } from 'primeng/ripple'; +import { ButtonModule, Button } from 'primeng/button'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmDialog } from 'primeng/confirmdialog'; import { InputTextModule } from 'primeng/inputtext'; import { TextareaModule } from 'primeng/textarea'; import { CommonModule } from '@angular/common'; -import { FileUploadModule } from 'primeng/fileupload'; +import { FileUpload } from 'primeng/fileupload'; import { SelectModule } from 'primeng/select'; -import { TagModule } from 'primeng/tag'; -import { SkeletonModule } from 'primeng/skeleton'; +import { Tag } from 'primeng/tag'; +import { RadioButton } from 'primeng/radiobutton'; +import { Rating } from 'primeng/rating'; +import { Skeleton } from 'primeng/skeleton'; import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; -import { InputNumberModule } from 'primeng/inputnumber'; +import { InputNumber } from 'primeng/inputnumber'; import { IconFieldModule } from 'primeng/iconfield'; import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; import { CompanyService } from '../../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; import { ValidationService } from '../../../../services/utilities/validation.service'; import { TooltipModule } from 'primeng/tooltip'; import { AutoCompleteModule } from 'primeng/autocomplete'; @@ -28,7 +33,6 @@ import { MasterService } from '../../../../services/masters/master.service'; import { CityDTO, SearchDTO } from '../../../../models/masters/masters'; import { debounceTime, Subject } from 'rxjs'; import { Request } from '../../../../models/request.model'; -import { FloatLabelModule } from 'primeng/floatlabel'; interface Column { field: string; @@ -45,13 +49,7 @@ interface ExportColumn { selector: 'app-employee', templateUrl: './employee.component.html', standalone: true, - imports: [ - CommonModule, FormsModule, ReactiveFormsModule, - TableModule, DialogModule, ButtonModule, ToastModule, ToolbarModule, ConfirmDialogModule, - InputTextModule, TextareaModule, FileUploadModule, SelectModule, TagModule, - SkeletonModule, InputNumberModule, IconFieldModule, - InputIconModule, TooltipModule, AutoCompleteModule, RippleModule, CalendarModule, FloatLabelModule - ], + imports: [TableModule, Dialog, Ripple, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, FileUpload, DropdownModule, Tag, RadioButton, Rating, InputTextModule, InputNumber, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, AutoCompleteModule, CalendarModule], providers: [MessageService, ConfirmationService], styleUrl: './employee.component.css' }) @@ -306,8 +304,15 @@ export class EmployeeComponent implements OnInit{ message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + employee.fullName + '?', header: 'Confirm', icon: 'pi pi-exclamation-triangle', - rejectButtonStyleClass: 'p-button-text p-button-secondary', - acceptButtonStyleClass: isActivating ? 'p-button-success' : 'p-button-danger', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, accept: () => { this.companyService.activateDeactivateEmployee(employee.id, isActivating).subscribe({ next: (updatedEmployee) => { diff --git a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.css b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.css new file mode 100644 index 0000000..463526a --- /dev/null +++ b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.css @@ -0,0 +1,5 @@ +:host ::ng-deep .p-dialog .product-image { + width: 150px; + margin: 0 auto 2rem auto; + display: block; +} \ No newline at end of file diff --git a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.html b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.html index f3d8a88..4e3e8de 100644 --- a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.html +++ b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.html @@ -30,7 +30,7 @@

Manage Subsidiaries

- + diff --git a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.spec.ts b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.spec.ts new file mode 100644 index 0000000..ac76031 --- /dev/null +++ b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { SubsidiaryComponent } from './subsidiary.component'; + +describe('SubsidiaryComponent', () => { + let component: SubsidiaryComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SubsidiaryComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(SubsidiaryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.ts b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.ts index 78b4630..7af403d 100644 --- a/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.ts +++ b/frontend/src/app/pages/account/company/subsidiary/subsidiary.component.ts @@ -1,31 +1,38 @@ +import { SearchDTO } from './../../../../models/masters/masters'; import { SubsidiaryDTO } from './../../../../models/account.model'; import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { TableModule, Table } from 'primeng/table'; -import { DialogModule } from 'primeng/dialog'; -import { RippleModule } from 'primeng/ripple'; -import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Ripple } from 'primeng/ripple'; +import { ButtonModule, Button } from 'primeng/button'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmDialog } from 'primeng/confirmdialog'; import { InputTextModule } from 'primeng/inputtext'; import { TextareaModule } from 'primeng/textarea'; import { CommonModule } from '@angular/common'; +import { FileUpload } from 'primeng/fileupload'; import { SelectModule } from 'primeng/select'; -import { TagModule } from 'primeng/tag'; -import { SkeletonModule } from 'primeng/skeleton'; -import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Tag } from 'primeng/tag'; +import { RadioButton } from 'primeng/radiobutton'; +import { Rating } from 'primeng/rating'; +import { Skeleton } from 'primeng/skeleton'; +import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { InputNumber } from 'primeng/inputnumber'; import { IconFieldModule } from 'primeng/iconfield'; import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; import { CompanyService } from '../../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; import { ValidationService } from '../../../../services/utilities/validation.service'; import { TooltipModule } from 'primeng/tooltip'; import { AutoCompleteModule } from 'primeng/autocomplete'; import { MasterService } from '../../../../services/masters/master.service'; -import { CityDTO, SearchDTO } from '../../../../models/masters/masters'; +import { CityDTO } from '../../../../models/masters/masters'; import { debounceTime, Subject } from 'rxjs'; import { Request } from '../../../../models/request.model'; -import { FloatLabelModule } from 'primeng/floatlabel'; interface Column { field: string; @@ -38,19 +45,11 @@ interface ExportColumn { dataKey: string; } -import { FormsModule } from '@angular/forms'; - @Component({ selector: 'app-subsidiary', templateUrl: './subsidiary.component.html', standalone: true, - imports: [ - CommonModule, FormsModule, ReactiveFormsModule, - TableModule, DialogModule, ButtonModule, ToastModule, ToolbarModule, ConfirmDialogModule, - InputTextModule, TextareaModule, SelectModule, TagModule, - SkeletonModule, IconFieldModule, - InputIconModule, TooltipModule, AutoCompleteModule, RippleModule, FloatLabelModule - ], + imports: [TableModule, Dialog, Ripple, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, FileUpload, DropdownModule, Tag, RadioButton, Rating, InputTextModule, InputNumber, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, AutoCompleteModule], providers: [MessageService, ConfirmationService], styleUrl: './subsidiary.component.css' }) @@ -117,11 +116,6 @@ export class SubsidiaryComponent implements OnInit{ this.dt.exportCSV(); } - onSearch(event: Event) { - const input = event.target as HTMLInputElement; - this.dt.filterGlobal(input.value, 'contains'); - } - searchCities(event: any) { const query = event.query; this.searchSubject.next(query); @@ -237,8 +231,15 @@ export class SubsidiaryComponent implements OnInit{ message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + subsidiary.name + '?', header: 'Confirm', icon: 'pi pi-exclamation-triangle', - rejectButtonStyleClass: 'p-button-text p-button-secondary', - acceptButtonStyleClass: isActivating ? 'p-button-success' : 'p-button-danger', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, accept: () => { this.subsidiaryService.activateDeactivateSubsidiary(subsidiary.id?? '', isActivating).subscribe({ next: (updatedSubsidiary) => { diff --git a/frontend/src/app/pages/account/company/verifier/verifier.component.css b/frontend/src/app/pages/account/company/verifier/verifier.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/account/company/verifier/verifier.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/account/company/verifier/verifier.component.html b/frontend/src/app/pages/account/company/verifier/verifier.component.html new file mode 100644 index 0000000..e1e2b04 --- /dev/null +++ b/frontend/src/app/pages/account/company/verifier/verifier.component.html @@ -0,0 +1,273 @@ +
+ + + + + + + + + + + + + + +
+

Manage Verifiers

+ + + + +
+
+ + + # + +
+ Full Name + +
+ + +
+ Verifier Code + +
+ + +
+ Type + +
+ + +
+ Mobile No + +
+ + +
+ Email + +
+ + +
+ Updated At + +
+ + +
+ Updated By + +
+ + +
+ Status + +
+ + + +
+ + + {{ rowIndex + 1 }} + {{ verifier.fullName }} + {{ verifier.verifierCode }} + {{ verifier.verifierType }} + {{ verifier.mobileNo }} + {{ verifier.emailId }} + {{ verifier.updatedAt | date:'dd/MM/yyyy HH:mm:ss' }} + + + {{ verifier.updatedUser }} + + + + Not Available + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + + +
+ + +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ + + + + +
+ + +
diff --git a/frontend/src/app/pages/account/company/verifier/verifier.component.ts b/frontend/src/app/pages/account/company/verifier/verifier.component.ts new file mode 100644 index 0000000..0dcd63f --- /dev/null +++ b/frontend/src/app/pages/account/company/verifier/verifier.component.ts @@ -0,0 +1,347 @@ +import { CompanyVerifierModel, EmployeeDTO } from './../../../../models/account.model'; +import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Button } from 'primeng/button'; +import { ToastModule } from 'primeng/toast'; +import { ToolbarModule } from 'primeng/toolbar'; +import { ConfirmDialog } from 'primeng/confirmdialog'; +import { InputTextModule } from 'primeng/inputtext'; +import { TextareaModule } from 'primeng/textarea'; +import { CommonModule } from '@angular/common'; +import { SelectModule } from 'primeng/select'; +import { Tag } from 'primeng/tag'; +import { Skeleton } from 'primeng/skeleton'; +import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; +import { CompanyService } from '../../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; +import { ValidationService } from '../../../../services/utilities/validation.service'; +import { TooltipModule } from 'primeng/tooltip'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { CalendarModule } from 'primeng/calendar'; +import { CheckboxModule } from 'primeng/checkbox'; +import { Subject, debounceTime } from 'rxjs'; + +interface Column { + field: string; + header: string; + customExportHeader?: string; +} + +interface ExportColumn { + title: string; + dataKey: string; +} + +@Component({ + selector: 'app-verifier', + templateUrl: './verifier.component.html', + standalone: true, + imports: [TableModule, Dialog, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, DropdownModule, Tag, InputTextModule, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, AutoCompleteModule, CalendarModule, CheckboxModule], + providers: [MessageService, ConfirmationService], + styleUrl: './verifier.component.css' +}) +export class VerifierComponent implements OnInit{ + verifierForm: FormGroup; + verifierDialog: boolean = false; + verifiers!: CompanyVerifierModel[]; + + verifier: CompanyVerifierModel | undefined; + + selectedVerifiers!: CompanyVerifierModel[] | null; + + submitted: boolean = false; + + isLoading: boolean = true; + + skeletonData: any[] = Array(10).fill({}); + + suggestions: any[] = []; + + private searchSubject = new Subject(); + + verifierTypes: any[] = [ + { label: 'INTERNAL', value: 'INTERNAL' }, + { label: 'EXTERNAL', value: 'EXTERNAL' } + ]; + + @ViewChild('dt') dt!: Table; + + cols!: Column[]; + + exportColumns!: ExportColumn[]; + + constructor( + private companyService: CompanyService, + private messageService: MessageService, + private confirmationService: ConfirmationService, + private cd: ChangeDetectorRef, + private fb: FormBuilder, + ) { + + this.verifierForm = this.fb.group({ + id: [{ value: '', disabled: true }], + employeeId: [{ value: null, disabled: false }], + verifierCode: [{ value: '', disabled: false }, [Validators.required]], + verifierType: [{ value: 'INTERNAL', disabled: false }, [Validators.required]], + fullName: [{ value: '', disabled: false }, [Validators.required, ValidationService.nameValidator()]], + mobileNo: [{ value: '', disabled: false }, [Validators.required, ValidationService.mobileValidator()]], + emailId: [{ value: '', disabled: false }, [Validators.required, ValidationService.emailValidator()]], + allocationDate: [{ value: '', disabled: false }], + appActive: [{ value: true, disabled: false }], + photoMandatory: [{ value: false, disabled: false }], + active: [{ value: true, disabled: false }] + }); + } + + exportCSV() { + this.dt.exportCSV(); + } + + ngOnInit() { + this.loadAllVerifiers(); + this.searchSubject.pipe(debounceTime(300)).subscribe(query => { + if (query && query.length >= 2) { + const requestPayload = { + data: { + searchBy: 'NAME', + searchValue: query + }, + compressed: true, + target: 'models.commons.Search' + }; + this.companyService.searchEmployees(requestPayload).subscribe({ + next: (employees) => { + this.suggestions = employees.map(emp => ({ + ...emp, + display: `${emp.employeeId} - ${emp.fullName}` + })); + this.cd.markForCheck(); + }, + error: (err) => { + console.error('Error searching employees', err); + this.suggestions = []; + } + }); + } else { + this.suggestions = []; + } + }); + } + + searchEmployees(event: any) { + this.searchSubject.next(event.query); + } + + onSelectEmployee(event: any) { + const emp = event.value; + const patchData: any = { + employeeId: emp.employeeId, + fullName: emp.fullName, + mobileNo: emp.contactNo, + emailId: emp.emailId + }; + + // Auto set allocation date only in add new mode + if (!this.verifier && emp.joiningDate) { + patchData.allocationDate = new Date(emp.joiningDate); + } + + this.verifierForm.patchValue(patchData); + } + + onVerifierTypeChange() { + this.suggestions = []; + this.verifierForm.patchValue({ + employeeId: null, + fullName: '', + mobileNo: '', + emailId: '' + }); + this.cd.markForCheck(); + } + + loadAllVerifiers() { + this.isLoading = true; + this.companyService.getAllVerifiers().subscribe({ + next: (data) => { + this.isLoading = false; + this.verifiers = data; + this.cd.markForCheck(); + }, + error: (err) => { + this.isLoading = false; + console.error(err); + } + }); + + this.cols = [ + { field: 'fullName', header: 'Full Name' }, + { field: 'verifierCode', header: 'Verifier Code' }, + { field: 'verifierType', header: 'Type' }, + { field: 'mobileNo', header: 'Mobile No' }, + { field: 'emailId', header: 'Email' }, + { field: 'updatedAt', header: 'Last Updated At' }, + { field: 'updatedUser', header: 'Last Updated By' } + ]; + + this.exportColumns = this.cols.map((col) => ({ title: col.header, dataKey: col.field })); + } + + openNew() { + this.verifier = undefined; + this.verifierForm.reset(); + this.verifierForm.patchValue({ + verifierType: 'INTERNAL', + appActive: true, + photoMandatory: false, + active: true + }); + this.submitted = false; + this.verifierDialog = true; + } + + editVerifier(verifier: CompanyVerifierModel) { + this.verifierForm.reset(); + this.verifier = { ...verifier }; + + const verifierToPatch = { ...this.verifier }; + if (verifierToPatch.allocationDate) { + (verifierToPatch as any).allocationDate = new Date(verifierToPatch.allocationDate); + } + + this.verifierForm.patchValue(verifierToPatch); + this.verifierDialog = true; + } + + hideDialog() { + this.verifierDialog = false; + this.submitted = false; + } + + toggleActive(verifier: CompanyVerifierModel) { + const isActivating = !verifier.active; + this.confirmationService.confirm({ + message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + verifier.fullName + '?', + header: 'Confirm', + icon: 'pi pi-exclamation-triangle', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, + accept: () => { + if(verifier.id) { + this.companyService.activateDeactivateVerifier(verifier.id, isActivating).subscribe({ + next: (updatedVerifier) => { + verifier.active = updatedVerifier.active; + this.verifiers = [...this.verifiers]; + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: `Verifier ${isActivating ? 'Activated' : 'Deactivated'}`, + life: 3000 + }); + }, + error: (err) => { + console.error('Error toggling verifier active status', err); + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to update verifier status', + life: 3000 + }); + } + }); + } + } + }); + } + + getSeverity(status: boolean) { + return status ? 'success' : 'warn'; + } + + getErrorMessage(fieldName: string): string { + const control = this.verifierForm.get(fieldName); + return control ? ValidationService.getErrorMessage(control, fieldName) : ''; + } + + isFieldInvalid(fieldName: string): boolean { + const control = this.verifierForm.get(fieldName); + return !!(control && control.invalid && (control.dirty || control.touched || this.submitted)); + } + + saveVerifier() { + this.submitted = true; + + if (this.verifierForm.invalid) { + return; + } + + const verifierData = this.verifierForm.getRawValue() as CompanyVerifierModel; + const verifiers = this.verifiers ?? []; + + // Duplicate check + const existing = verifiers.some(v => { + if (v.id === verifierData.id) return false; + return v.verifierCode?.trim().toLowerCase() === verifierData.verifierCode?.trim().toLowerCase(); + }); + + if (existing) { + this.messageService.add({ + severity: 'error', + summary: 'Validation Error', + detail: 'Verifier with same code already exists', + life: 3000 + }); + return; + } + + this.companyService.saveVerifier(verifierData).subscribe({ + next: (savedVerifier) => { + const index = verifierData.id + ? verifiers.findIndex(v => v.id === verifierData.id) + : -1; + + if (index !== -1) { + verifiers[index] = savedVerifier; + } else { + verifiers.push(savedVerifier); + } + + this.verifiers = [...verifiers]; + + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: index !== -1 ? 'Verifier Updated' : 'Verifier Created', + life: 3000 + }); + + this.verifierDialog = false; + this.verifier = undefined; + this.verifierForm.reset(); + this.submitted = false; + }, + error: (err) => { + console.error('Error saving verifier', err); + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to save verifier', + life: 3000 + }); + } + }); + } +} diff --git a/frontend/src/app/pages/account/user/user.component.css b/frontend/src/app/pages/account/user/user.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/account/user/user.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/account/user/user.component.html b/frontend/src/app/pages/account/user/user.component.html index d05f647..a352caf 100644 --- a/frontend/src/app/pages/account/user/user.component.html +++ b/frontend/src/app/pages/account/user/user.component.html @@ -1,11 +1,11 @@
- + - + @@ -25,16 +25,16 @@ currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries" [showCurrentPageReport]="true" > - +

Manage Users

- - + + - +
- + # @@ -82,7 +82,7 @@ - + {{ rowIndex + 1 }} {{ user.loginId }} @@ -130,27 +130,34 @@ - +
- - + + + + + - + +
+ Login ID is already taken. + {{ getErrorMessage('loginId') }} +
- + - + +
+ {{ getErrorMessage('displayName') }} +
- + - +
- + - +
- + - +
- + - +
- + - +
- - + - + +
+ {{ getErrorMessage('status') }} +
- - + + - +
- - + + - +
@@ -279,6 +292,7 @@ {{role.groupName}} {{role.branchName}} + @@ -293,7 +307,7 @@ - + diff --git a/frontend/src/app/pages/account/user/user.component.spec.ts b/frontend/src/app/pages/account/user/user.component.spec.ts new file mode 100644 index 0000000..56317f0 --- /dev/null +++ b/frontend/src/app/pages/account/user/user.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { UserComponent } from './user.component'; + +describe('UserComponent', () => { + let component: UserComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UserComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(UserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/account/user/user.component.ts b/frontend/src/app/pages/account/user/user.component.ts index 283fb40..eca90ed 100644 --- a/frontend/src/app/pages/account/user/user.component.ts +++ b/frontend/src/app/pages/account/user/user.component.ts @@ -1,26 +1,31 @@ import { UserDTO, UserRoleDTO } from '../../../models/user.model'; import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; import { ConfirmationService, MessageService } from 'primeng/api'; -import { TableModule, Table } from 'primeng/table'; -import { DialogModule } from 'primeng/dialog'; -import { RippleModule } from 'primeng/ripple'; -import { ButtonModule } from 'primeng/button'; +import { TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Ripple } from 'primeng/ripple'; +import { ButtonModule, Button } from 'primeng/button'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; -import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { ConfirmDialog } from 'primeng/confirmdialog'; import { InputTextModule } from 'primeng/inputtext'; import { TextareaModule } from 'primeng/textarea'; import { CommonModule } from '@angular/common'; -import { FileUploadModule } from 'primeng/fileupload'; -import { DropdownModule } from 'primeng/dropdown'; -import { TagModule } from 'primeng/tag'; -import { RadioButtonModule } from 'primeng/radiobutton'; -import { RatingModule } from 'primeng/rating'; -import { SkeletonModule } from 'primeng/skeleton'; +import { FileUpload } from 'primeng/fileupload'; +import { SelectModule } from 'primeng/select'; +import { Tag } from 'primeng/tag'; +import { RadioButton } from 'primeng/radiobutton'; +import { Rating } from 'primeng/rating'; +import { Skeleton } from 'primeng/skeleton'; import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; -import { InputNumberModule } from 'primeng/inputnumber'; +import { InputNumber } from 'primeng/inputnumber'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { Table } from 'primeng/table'; +import { DropdownModule } from 'primeng/dropdown'; import { UserService } from '../../../services/account/user/user.service'; import { CompanyService } from '../../../services/account/company/company.service'; +import { FloatLabelModule } from "primeng/floatlabel"; import { ValidationService } from '../../../services/utilities/validation.service'; import { TooltipModule } from 'primeng/tooltip'; import { AutoCompleteModule } from 'primeng/autocomplete'; @@ -42,13 +47,7 @@ interface ExportColumn { selector: 'app-user', templateUrl: './user.component.html', standalone: true, - imports: [ - CommonModule, FormsModule, ReactiveFormsModule, - TableModule, DialogModule, ButtonModule, ToastModule, ToolbarModule, ConfirmDialogModule, - InputTextModule, TextareaModule, FileUploadModule, DropdownModule, TagModule, - RadioButtonModule, RatingModule, SkeletonModule, InputNumberModule, - TooltipModule, AutoCompleteModule, FieldsetModule, RippleModule - ], + imports: [TableModule, Dialog, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, CommonModule, Tag, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, AutoCompleteModule, FieldsetModule], providers: [MessageService, ConfirmationService], styleUrl: './user.component.css' }) @@ -62,6 +61,8 @@ export class UserComponent implements OnInit{ selectedUsers!: UserDTO[] | null; submitted: boolean = false; + checkingLoginId: boolean = false; + loginIdTaken: boolean = false; isLoading: boolean = true; @@ -73,6 +74,9 @@ export class UserComponent implements OnInit{ userRolesOptions: any[] = []; + selectedBranch: string | undefined; + selectedRole: string | undefined; + suggestions: any[] = []; private searchSubject = new Subject(); @@ -121,6 +125,32 @@ export class UserComponent implements OnInit{ ngOnInit() { this.loadAllUsers(); + this.loadBranches(); + this.loadRoles(); + } + + loadRoles() { + this.userService.getAllRoles().subscribe({ + next: (data) => { + this.userRolesOptions = data; + this.cd.markForCheck(); + }, + error: (err) => { + console.error('Failed to load roles', err); + } + }); + } + + loadBranches() { + this.userService.getAllBranches().subscribe({ + next: (data) => { + this.branches = data; + this.cd.markForCheck(); + }, + error: (err) => { + console.error('Failed to load branches', err); + } + }); } loadAllUsers() { @@ -187,6 +217,10 @@ export class UserComponent implements OnInit{ this.userForm.reset(); this.userRoles = []; this.submitted = false; + this.loginIdTaken = false; + this.checkingLoginId = false; + this.selectedBranch = undefined; + this.selectedRole = undefined; this.userDialog = true; } @@ -194,6 +228,8 @@ export class UserComponent implements OnInit{ this.userForm.reset(); this.user = { ...user }; this.userRoles = [...(user.userRoles || [])]; + this.selectedBranch = undefined; + this.selectedRole = undefined; this.userForm.patchValue(user); this.userDialog = true; console.log(this.userForm.getRawValue()); @@ -202,6 +238,8 @@ export class UserComponent implements OnInit{ hideDialog() { this.userDialog = false; this.submitted = false; + this.loginIdTaken = false; + this.checkingLoginId = false; } toggleActive(user: UserDTO) { @@ -210,8 +248,15 @@ export class UserComponent implements OnInit{ message: `Are you sure you want to ${isActivating ? 'activate' : 'deactivate'} ` + user.displayName + '?', header: 'Confirm', icon: 'pi pi-exclamation-triangle', - rejectButtonStyleClass: 'p-button-text p-button-secondary', - acceptButtonStyleClass: isActivating ? 'p-button-success' : 'p-button-danger', + rejectButtonProps: { + label: 'No', + severity: 'secondary', + variant: 'text' + }, + acceptButtonProps: { + severity: isActivating ? 'success' : 'danger', + label: 'Yes' + }, accept: () => { this.userService.activateDeactivateUser(user.id!, isActivating).subscribe({ next: (updatedUser) => { @@ -243,7 +288,7 @@ export class UserComponent implements OnInit{ case 'Active': return 'success'; case 'Inactive': - return 'warning'; + return 'warn'; } return 'info'; } @@ -258,14 +303,134 @@ export class UserComponent implements OnInit{ return !!(control && control.invalid && (control.dirty || control.touched || this.submitted)); } + checkLoginId() { + const loginIdValue = this.userForm.get('loginId')?.value; + + if (!loginIdValue) { + this.clearLoginIdTakenError(); + return; + } + + if (!!this.user) { + return; + } + + this.checkingLoginId = true; + this.loginIdTaken = false; + this.cd.markForCheck(); + + const requestPayload = { + data: { + searchBy: 'loginId', + searchValue: loginIdValue + }, + compressed: true, + target: 'models.commons.Search' + }; + + this.userService.searchUser(requestPayload).subscribe({ + next: (userDTO) => { + this.checkingLoginId = false; + if (userDTO && userDTO.loginId) { + this.loginIdTaken = true; + this.userForm.get('loginId')?.setErrors({ taken: true }); + } else { + this.loginIdTaken = false; + const loginIdControl = this.userForm.get('loginId'); + if (loginIdControl) { + const errors = loginIdControl.errors; + if (errors) { + delete errors['taken']; + loginIdControl.setErrors(Object.keys(errors).length ? errors : null); + } + } + } + this.cd.markForCheck(); + }, + error: (err) => { + this.checkingLoginId = false; + console.error('Error checking loginId', err); + this.cd.markForCheck(); + } + }); + } + + onLoginIdInput() { + if (this.loginIdTaken) { + this.clearLoginIdTakenError(); + } + } + + private clearLoginIdTakenError() { + this.loginIdTaken = false; + const loginIdControl = this.userForm.get('loginId'); + if (loginIdControl) { + const errors = loginIdControl.errors; + if (errors) { + delete errors['taken']; + loginIdControl.setErrors(Object.keys(errors).length ? errors : null); + } + } + } + addRole() { - // for now, do nothing, since selects empty + if (!this.selectedBranch || !this.selectedRole) { + this.messageService.add({ + severity: 'warn', + summary: 'Warning', + detail: 'Please select both Branch and User Role', + life: 3000 + }); + return; + } + + const branch = this.branches.find(b => b.id === this.selectedBranch); + const role = this.userRolesOptions.find(r => r.id === this.selectedRole); + + if (branch && role) { + const exists = this.userRoles.some(ur => ur.branchId === branch.id && ur.roleId === role.id); + if (exists) { + this.messageService.add({ + severity: 'warn', + summary: 'Warning', + detail: 'Role already assigned for this branch', + life: 3000 + }); + return; + } + + const newRole: UserRoleDTO = { + branchId: branch.id, + branchName: branch.branchName, + roleId: role.id, + roleName: role.roleName, + groupName: role.groupName, + active: true, + defaultRole: false + }; + this.userRoles.push(newRole); + + this.selectedBranch = undefined; + this.selectedRole = undefined; + } } toggleRoleActive(role: UserRoleDTO) { role.active = role.active === false ? true : false; } + setDefaultRole(role: UserRoleDTO) { + const isCurrentlyDefault = role.defaultRole; + this.userRoles.forEach(r => { + if (r.branchId === role.branchId) { + r.defaultRole = false; + } + }); + if (!isCurrentlyDefault) { + role.defaultRole = true; + } + } + onSelectEmployee(event: any) { const emp = event.value; const patch: any = { @@ -318,16 +483,21 @@ export class UserComponent implements OnInit{ this.userService.saveUser(userData).subscribe({ next: (savedUser) => { - const index = userData.id ? users.findIndex(u => u.id === userData.id) : -1; if (index !== -1) { // UPDATE + if (!savedUser.userRoles && userData.userRoles) { + savedUser.userRoles = userData.userRoles; + } users[index] = savedUser; } else { // CREATE + if (!savedUser.userRoles && userData.userRoles) { + savedUser.userRoles = userData.userRoles; + } users.push(savedUser); } diff --git a/frontend/src/app/pages/dashboard/dashboard.component.ts b/frontend/src/app/pages/dashboard/dashboard.component.ts index 2a57170..8e6f11d 100644 --- a/frontend/src/app/pages/dashboard/dashboard.component.ts +++ b/frontend/src/app/pages/dashboard/dashboard.component.ts @@ -1,9 +1,15 @@ import { Component } from '@angular/core'; +import { MenuComponent } from "../../fragments/menu/menu.component"; +import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-dashboard', - imports: [], - template: `
+ imports: [MenuComponent, RouterOutlet], + template: `
+ +
+ +
` }) export class DashboardComponent { diff --git a/frontend/src/app/pages/session/auth/authorize.component.css b/frontend/src/app/pages/session/auth/authorize.component.css new file mode 100644 index 0000000..0372f99 --- /dev/null +++ b/frontend/src/app/pages/session/auth/authorize.component.css @@ -0,0 +1,38 @@ +.login-page { + height: 99vh; +} + +::ng-deep .p-card { + position: relative; + border-radius: 24px !important; + background: white; + padding: 1rem; + overflow: hidden; +} + +/* Gradient border */ +::ng-deep .p-card::before { + content: ""; + position: absolute; + inset: 0; + padding: 3px; /* border thickness */ + border-radius: 24px; + filter: drop-shadow(0 0 12px rgba(91, 185, 138, 0.35)); + background: linear-gradient( + 180deg, + #ffb455 0%, + rgba(255, 180, 85, 0.6) 40%, + rgba(255, 180, 85, 0.15) 70%, + transparent 100% + ); + + /* Mask trick = border only */ + -webkit-mask: + linear-gradient(#fff 0 0) content-box, + linear-gradient(#fff 0 0); + -webkit-mask-composite: xor; + mask-composite: exclude; + + pointer-events: none; +} + diff --git a/frontend/src/app/pages/session/auth/authorize.component.html b/frontend/src/app/pages/session/auth/authorize.component.html new file mode 100644 index 0000000..1dfaa5b --- /dev/null +++ b/frontend/src/app/pages/session/auth/authorize.component.html @@ -0,0 +1,38 @@ + diff --git a/frontend/src/app/pages/session/auth/authorize.component.ts b/frontend/src/app/pages/session/auth/authorize.component.ts index 5e49dfe..f76af42 100644 --- a/frontend/src/app/pages/session/auth/authorize.component.ts +++ b/frontend/src/app/pages/session/auth/authorize.component.ts @@ -1,38 +1,30 @@ -import { Component, OnInit } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ButtonModule } from 'primeng/button'; -import { InputTextModule } from 'primeng/inputtext'; -import { CardModule } from 'primeng/card'; -import { InputGroupModule } from 'primeng/inputgroup'; -import { InputGroupAddonModule } from 'primeng/inputgroupaddon'; -import { PasswordModule } from 'primeng/password'; -import { KeyFilterModule } from 'primeng/keyfilter'; -import { DropdownModule } from 'primeng/dropdown'; -import { MessageModule } from 'primeng/message'; -import { Router } from '@angular/router'; import { SessionService } from './../../../services/commons/session.service'; -import { HttpService } from '../../../services/http.service'; -import { environment } from '../../../../environments/environment'; -import { Company, Branch } from '../../../models/session.model'; +import { CommonModule} from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Component, OnInit } from '@angular/core'; +import { ButtonModule } from 'primeng/button';; +import { InputTextModule } from 'primeng/inputtext'; +import { CardModule, Card } from 'primeng/card'; +import { InputGroupModule, InputGroup } from 'primeng/inputgroup'; +import { InputGroupAddonModule, InputGroupAddon } from 'primeng/inputgroupaddon'; +import { PasswordModule, Password } from 'primeng/password'; +import { FloatLabelModule, FloatLabel } from 'primeng/floatlabel'; +import { KeyFilterModule } from 'primeng/keyfilter'; +import { FormBuilder, FormGroup, Validators, ReactiveFormsModule} from '@angular/forms'; import { Request } from '../../../models/request.model'; +import { HttpService } from '../../../services/http.service'; +import { MessageModule } from 'primeng/message'; +import { StyleClassModule } from 'primeng/styleclass'; +import { Router } from '@angular/router'; import { ResponseDto } from '../../../models/response.dto'; +import { Company, Branch } from '../../../models/session.model'; +import { SelectModule } from 'primeng/select'; +import { environment } from '../../../../environments/environment'; @Component({ selector: 'app-authorize', - standalone: true, - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - CardModule, - ButtonModule, - InputTextModule, - PasswordModule, - DropdownModule, - KeyFilterModule, - MessageModule - ], + imports: [CommonModule, FormsModule, CardModule, ButtonModule, InputTextModule, InputGroupModule, InputGroupAddonModule, PasswordModule, + FloatLabelModule, ReactiveFormsModule, KeyFilterModule, MessageModule, StyleClassModule, SelectModule], templateUrl: './authorize.component.html', styleUrl: './authorize.component.css' }) @@ -51,7 +43,7 @@ export class AuthorizeComponent implements OnInit { } ngOnInit(){ - const companyBranchRoles = this.sessionService.getItem('companies'); + const companyBranchRoles = sessionStorage.getItem('companies'); if (!companyBranchRoles) { this.sessionService.logout(); @@ -60,7 +52,7 @@ export class AuthorizeComponent implements OnInit { sessionStorage.removeItem('companies'); try { - this.companies = companyBranchRoles; + this.companies = JSON.parse(companyBranchRoles); } catch (e) { this.sessionService.logout(); } diff --git a/frontend/src/app/pages/session/profile/profile.component.css b/frontend/src/app/pages/session/profile/profile.component.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/frontend/src/app/pages/session/profile/profile.component.css @@ -0,0 +1 @@ + diff --git a/frontend/src/app/pages/session/profile/profile.component.html b/frontend/src/app/pages/session/profile/profile.component.html new file mode 100644 index 0000000..4112a40 --- /dev/null +++ b/frontend/src/app/pages/session/profile/profile.component.html @@ -0,0 +1,167 @@ +
+
+ +
+ + User Details +
+ +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + +
+ + Employment Details +
+ +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+
+
+ diff --git a/frontend/src/app/pages/session/profile/profile.component.spec.ts b/frontend/src/app/pages/session/profile/profile.component.spec.ts new file mode 100644 index 0000000..658617a --- /dev/null +++ b/frontend/src/app/pages/session/profile/profile.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ProfileComponent } from './profile.component'; + +describe('ProfileComponent', () => { + let component: ProfileComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProfileComponent] + }).compileComponents(); + + fixture = TestBed.createComponent(ProfileComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/pages/session/profile/profile.component.ts b/frontend/src/app/pages/session/profile/profile.component.ts new file mode 100644 index 0000000..3cdb91f --- /dev/null +++ b/frontend/src/app/pages/session/profile/profile.component.ts @@ -0,0 +1,60 @@ +import { UserProfile } from './../../../models/session.model'; +import { Component, OnInit } from '@angular/core'; +import { FloatLabelModule } from "primeng/floatlabel" +import { InputTextModule } from 'primeng/inputtext'; +import { DividerModule } from 'primeng/divider'; +import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { SessionService } from '../../../services/commons/session.service'; +import { CardModule } from "primeng/card"; + +@Component({ + selector: 'app-profile', + imports: [FloatLabelModule, InputTextModule, FormsModule, ReactiveFormsModule, CardModule, DividerModule], + templateUrl: './profile.component.html', + styleUrl: './profile.component.css' +}) +export class ProfileComponent implements OnInit { + userProfile: UserProfile; + profileForm: FormGroup; + constructor(private fb: FormBuilder, private sessionService: SessionService){ + this.userProfile = {}; + this.profileForm = this.fb.group({ + username: [{ value: null, disabled: true }], + roleName: [{ value: null, disabled: true }], + employeeId: [{ value: null, disabled: true }], + joiningDate: [{ value: null, disabled: true }], + displayName: [null], + department: [{ value: null, disabled: true }], + designation: [{ value: null, disabled: true }], + name: [{ value: null, disabled: true }], + fatherName: [{ value: null, disabled: true }], + gender: [{ value: null, disabled: true }], + dob: [{ value: null, disabled: true }], + contactNo: [{ value: null, disabled: true }], + alternateContactNo: [null], + emailId: [null] + }); + } + + ngOnInit(): void { + const userDetails = this.sessionService.getItem('userDetails'); + const companies = this.sessionService.getItem("companies") ? JSON.parse(this.sessionService.getItem("companies")) : ''; + this.userProfile = userDetails ? JSON.parse(userDetails) : {}; + //One liner approach commented out for later user + //this.profileForm.patchValue(this.userProfile as Partial); + this.profileForm.patchValue({ + ...this.userProfile, + roleName: companies ? companies[0].branches[0].roles[0].groupName : '', + joiningdate: this.userProfile.joiningDate + ? new Date(this.userProfile.joiningDate) + : null, + dob: this.userProfile.dob + ? new Date(this.userProfile.dob) + : null + }); + } + + onSave() : void{ + + } +} diff --git a/frontend/src/app/pages/tools/allocation/localities/localities.component.css b/frontend/src/app/pages/tools/allocation/localities/localities.component.css new file mode 100644 index 0000000..aec6235 --- /dev/null +++ b/frontend/src/app/pages/tools/allocation/localities/localities.component.css @@ -0,0 +1 @@ +/* localities.component.css */ diff --git a/frontend/src/app/pages/tools/allocation/localities/localities.component.html b/frontend/src/app/pages/tools/allocation/localities/localities.component.html new file mode 100644 index 0000000..8374135 --- /dev/null +++ b/frontend/src/app/pages/tools/allocation/localities/localities.component.html @@ -0,0 +1,289 @@ +
+ + + + + + + + + + + + + + + +
+

Manage Localities

+ + + + +
+
+ + + # + +
Locality Name
+ + +
Admin Area
+ + +
Pincode
+ + +
Area
+ + +
Updated At
+ + +
Updated By
+ + +
Status
+ + + +
+ + + {{ rowIndex + 1 }} + {{ row.localityName }} + {{ row.adminArea }}, {{ row.masterStateName }} + {{ row.pincode }} + {{ row.areaName }} + {{ row.updatedAt | date:'dd/MM/yyyy HH:mm:ss' }} + {{ row.updatedUser }}N/A + + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+
+
+ +
+
+ +
+
+ + +
+
+
+
+ + + + + +
+
+
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+
+
+
+ + + + +
+ + + +
diff --git a/frontend/src/app/pages/tools/allocation/localities/localities.component.ts b/frontend/src/app/pages/tools/allocation/localities/localities.component.ts new file mode 100644 index 0000000..732c176 --- /dev/null +++ b/frontend/src/app/pages/tools/allocation/localities/localities.component.ts @@ -0,0 +1,542 @@ +import { ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { Table, TableModule } from 'primeng/table'; +import { Dialog } from 'primeng/dialog'; +import { Button } from 'primeng/button'; +import { ToastModule } from 'primeng/toast'; +import { ToolbarModule } from 'primeng/toolbar'; +import { ConfirmDialog } from 'primeng/confirmdialog'; +import { InputTextModule } from 'primeng/inputtext'; +import { TextareaModule } from 'primeng/textarea'; +import { CommonModule } from '@angular/common'; +import { SelectModule } from 'primeng/select'; +import { Tag } from 'primeng/tag'; +import { Skeleton } from 'primeng/skeleton'; +import { IconFieldModule } from 'primeng/iconfield'; +import { InputIconModule } from 'primeng/inputicon'; +import { DropdownModule } from 'primeng/dropdown'; +import { FloatLabelModule } from "primeng/floatlabel"; +import { ValidationService } from '../../../../services/utilities/validation.service'; +import { TooltipModule } from 'primeng/tooltip'; +import { AutoCompleteModule } from 'primeng/autocomplete'; +import { CheckboxModule } from 'primeng/checkbox'; +import { Subject, debounceTime } from 'rxjs'; + +import { AllocationService } from '../../../../services/tools/allocation/allocation.service'; +import { MasterService } from '../../../../services/masters/master.service'; +import { CompanyService } from '../../../../services/account/company/company.service'; +import { OlaService } from '../../../../services/ola/ola.service'; +import { LocalityDTO, AreaDTO, LocalityTypeDTO } from '../../../../models/tools.model'; +import { CityDTO } from '../../../../models/masters/masters'; +import { CompanyVerifierModel } from '../../../../models/account.model'; + +interface Column { + field: string; + header: string; + customExportHeader?: string; +} + +interface ExportColumn { + title: string; + dataKey: string; +} + +@Component({ + selector: 'app-localities', + templateUrl: './localities.component.html', + standalone: true, + imports: [TableModule, Dialog, SelectModule, ToastModule, ToolbarModule, ConfirmDialog, InputTextModule, TextareaModule, CommonModule, DropdownModule, Tag, InputTextModule, IconFieldModule, InputIconModule, Button, FloatLabelModule, FormsModule, ReactiveFormsModule, TooltipModule, Skeleton, AutoCompleteModule, CheckboxModule], + providers: [MessageService, ConfirmationService], + styleUrls: ['./localities.component.css'] +}) +export class LocalitiesComponent implements OnInit { + localityForm: FormGroup; + areaForm: FormGroup; + + localityDialog: boolean = false; + areaDialog: boolean = false; + + localities!: LocalityDTO[]; + locality: LocalityDTO | undefined; + + localityTypes: LocalityTypeDTO[] = []; + areas: AreaDTO[] = []; + + selectedLocalities!: LocalityDTO[] | null; + + submittedLocality: boolean = false; + submittedArea: boolean = false; + + isLoading: boolean = true; + skeletonData: any[] = Array(10).fill({}); + + // Suggestions + areaSuggestions: any[] = []; + citySuggestions: any[] = []; + olaSuggestions: any[] = []; + + // Verifiers for dropdowns + verifiers: CompanyVerifierModel[] = []; + + private searchAreaSubject = new Subject(); + private searchCitySubject = new Subject(); + private searchOlaSubject = new Subject(); + + @ViewChild('dt') dt!: Table; + @ViewChild('localityNameInput') localityNameInput!: ElementRef; + + cols!: Column[]; + exportColumns!: ExportColumn[]; + + constructor( + private allocationService: AllocationService, + private masterService: MasterService, + private companyService: CompanyService, + private olaService: OlaService, + private messageService: MessageService, + private confirmationService: ConfirmationService, + private cd: ChangeDetectorRef, + private fb: FormBuilder, + ) { + this.localityForm = this.fb.group({ + id: [{ value: '', disabled: true }], + areaId: [{ value: null, disabled: false }, Validators.required], + stateCityId: [{ value: null, disabled: false }, Validators.required], + cityAutoComplete: [{ value: null, disabled: false }, Validators.required], + localityTypeId: [{ value: null, disabled: false }, Validators.required], + localityName: [{ value: '', disabled: false }, Validators.required], + adminArea: [{ value: '', disabled: false }, Validators.required], + olaPlaceId: [{ value: null, disabled: false }], + olaLocalityAutoComplete: [{ value: null, disabled: false }], + olaLocality: [{ value: '', disabled: false }], + stateName: [{ value: '', disabled: false }], + pincode: [{ value: '', disabled: false }], + latitude: [{ value: null, disabled: true }], + longitude: [{ value: null, disabled: true }], + active: [{ value: true, disabled: false }] + }); + + this.areaForm = this.fb.group({ + id: [{ value: '', disabled: true }], + areaName: [{ value: '', disabled: false }, Validators.required], + + groupAVerifierId: [{ value: null, disabled: false }, Validators.required], + groupBVerifierId: [{ value: null, disabled: false }, Validators.required], + groupCVerifierId: [{ value: null, disabled: false }, Validators.required] + }); + } + + exportCSV() { + this.dt.exportCSV(); + } + + ngOnInit() { + this.loadLocalities(); + this.loadLocalityTypes(); + this.loadAreas(); + + this.searchAreaSubject.pipe(debounceTime(400)).subscribe(query => { + if (query && query.length >= 2) { + const req = { data: { searchBy: 'NAME', searchValue: query }, compressed: true, target: 'models.commons.Search' }; + this.allocationService.searchAreas(req).subscribe({ + next: (areas) => { + this.areaSuggestions = areas; + this.cd.markForCheck(); + }, + error: () => this.areaSuggestions = [] + }); + } else { this.areaSuggestions = []; } + }); + + this.searchCitySubject.pipe(debounceTime(300)).subscribe(query => { + if (query && query.length >= 2) { + const req: any = { + data: { searchBy: 'CITY', searchValue: query }, + compressed: true, + target: 'models.commons.Search' + }; + this.masterService.searchCityStates(req).subscribe({ + next: (cities) => { + this.citySuggestions = cities.map(city => ({ + ...city, + display: `${city.cityName}, ${city.stateName}` + })); + this.cd.markForCheck(); + }, + error: () => this.citySuggestions = [] + }); + } else { this.citySuggestions = []; } + }); + + this.searchOlaSubject.pipe(debounceTime(400)).subscribe(query => { + if (query && query.length >= 3) { + this.olaService.autocomplete(query).subscribe({ + next: (res) => { + let predictions = res; + if (res && res.predictions) { + predictions = res.predictions; + } + this.olaSuggestions = Array.isArray(predictions) ? predictions.map((p: any) => { + let displayName = p.structured_formatting?.main_text || ''; + const terms = p.terms || []; + const n = terms.length; + if (n >= 4) displayName += ', ' + terms[n - 4].value; + if (n >= 3) displayName += ', ' + terms[n - 3].value; + if (n >= 2) displayName += ', ' + terms[n - 2].value; + if (n >= 1) displayName += ', ' + terms[n - 1].value; + + return { + name: displayName || p.description, + raw: p, + place_id: p.place_id + }; + }) : []; + this.cd.markForCheck(); + }, + error: () => { + this.olaSuggestions = []; + } + }); + } else { this.olaSuggestions = []; } + }); + + this.areaForm.get('areaName')?.valueChanges.pipe(debounceTime(400)).subscribe(val => { + if(val == null) return; + const textToSearch = typeof val === 'string' ? val : val.areaName; + + if (textToSearch && textToSearch.trim().length >= 2) { + const req = { data: { searchBy: 'NAME', searchValue: textToSearch }, compressed: true, target: 'models.commons.Search' }; + this.allocationService.searchAreas(req).subscribe({ + next: (areas) => { + const exactMatch = areas.find(a => a.areaName?.toLowerCase().trim() === textToSearch.toLowerCase().trim()); + if (exactMatch) { + const vA = this.verifiers.find(v => v.fullName === exactMatch.groupAVerifierName); + const vB = this.verifiers.find(v => v.fullName === exactMatch.groupBVerifierName); + const vC = this.verifiers.find(v => v.fullName === exactMatch.groupCVerifierName); + + this.areaForm.patchValue({ + id: exactMatch.id, + groupAVerifierId: vA ? vA.id : null, + groupBVerifierId: vB ? vB.id : null, + groupCVerifierId: vC ? vC.id : null + }, { emitEvent: false }); + } else { + this.areaForm.patchValue({ id: '' }, { emitEvent: false }); + } + } + }); + } else { + this.areaForm.patchValue({ id: '' }, { emitEvent: false }); + } + }); + + this.loadVerifiers(); + } + + loadVerifiers() { + this.companyService.getAllVerifiers().subscribe({ + next: (data) => { + this.verifiers = data.map(v => ({ + ...v, + display: `${v.verifierCode} - ${v.fullName}` + })); + this.cd.markForCheck(); + }, + error: (err) => console.error('Error loading verifiers', err) + }); + } + + loadLocalityTypes() { + this.allocationService.getAllLocalityTypes().subscribe({ + next: (types) => { + this.localityTypes = types; + } + }); + } + + loadAreas() { + this.allocationService.getAllAreas().subscribe({ + next: (data) => { + this.areas = data; + this.cd.markForCheck(); + }, + error: (err) => console.error(err) + }); + } + + loadLocalities() { + this.isLoading = true; + this.allocationService.getAllLocalities().subscribe({ + next: (data) => { + this.isLoading = false; + this.localities = data; + this.cd.markForCheck(); + }, + error: (err) => { + this.isLoading = false; + console.error(err); + } + }); + + this.cols = [ + { field: 'localityName', header: 'Locality Name' }, + { field: 'adminArea', header: 'Admin Area' }, + { field: 'areaName', header: 'Area' }, + { field: 'pincode', header: 'Pincode' }, + { field: 'updatedAt', header: 'Last Updated At' }, + { field: 'updatedUser', header: 'Last Updated By' } + ]; + + this.exportColumns = this.cols.map((col) => ({ title: col.header, dataKey: col.field })); + } + + // AREA AUTOCOMPLETE (Used only by Area Dialog now) + searchAreas(event: any) { this.searchAreaSubject.next(event.query); } + + onSelectAreaGroup(event: any) { + const item = event.value; + const vA = this.verifiers.find(v => v.fullName === item.groupAVerifierName); + const vB = this.verifiers.find(v => v.fullName === item.groupBVerifierName); + const vC = this.verifiers.find(v => v.fullName === item.groupCVerifierName); + + this.areaForm.patchValue({ + id: item.id, + areaName: item.areaName, + groupAVerifierId: vA ? vA.id : null, + groupBVerifierId: vB ? vB.id : null, + groupCVerifierId: vC ? vC.id : null + }); + } + + // CITY AUTOCOMPLETE + searchCities(event: any) { this.searchCitySubject.next(event.query); } + onSelectCity(event: any) { + this.localityForm.patchValue({ stateCityId: event.value.id }); + } + + // OLA AUTOCOMPLETE + searchOlaLocalities(event: any) { this.searchOlaSubject.next(event.query); } + onSelectOlaLocality(event: any) { + const item = event.value; + const rawItem = item.raw || item; + let pincode = ''; + let state = ''; + if (rawItem && rawItem.terms && rawItem.terms.length > 0) { + const terms = rawItem.terms; + const n = terms.length; + if (n >= 2) pincode = terms[n - 2].value; + if (n >= 3) state = terms[n - 3].value; + } + + this.localityForm.patchValue({ + olaPlaceId: rawItem.place_id || item.place_id, + olaLocality: rawItem.structured_formatting?.main_text || item.name, + stateName: state, + pincode: pincode, + latitude: rawItem.geometry?.location?.lat || item.lat, + longitude: rawItem.geometry?.location?.lng || item.lng + }); + } + + // VERIFIER AUTOCOMPLETE + // Using p-select now, so these are no longer needed + // DIALOGS + openNewLocality() { + this.locality = undefined; + this.localityForm.reset(); + this.localityForm.patchValue({ active: true }); + this.submittedLocality = false; + this.localityDialog = true; + } + + editLocality(loc: LocalityDTO) { + this.localityForm.reset(); + this.locality = { ...loc }; + + // Setup autoComplete selections and dropdown matching + const patchData: any = { ...this.locality }; + + if (patchData.masterCityName && patchData.masterStateName) { + patchData.cityAutoComplete = { id: patchData.stateCityId, display: `${patchData.masterCityName}, ${patchData.masterStateName}` }; + } else { + patchData.cityAutoComplete = { id: patchData.stateCityId, display: 'Selected City' }; + } + + if (patchData.olaPlaceId) { + patchData.olaLocalityAutoComplete = { place_id: patchData.olaPlaceId, name: patchData.olaLocality }; + } + + const matchingArea = this.areas.find(a => a.areaName === patchData.areaName); + if (matchingArea) patchData.areaId = matchingArea.id; + + const matchingLocType = this.localityTypes.find(l => l.type === patchData.localityTypeName); + if (matchingLocType) patchData.localityTypeId = matchingLocType.id; + + this.localityForm.patchValue(patchData); + this.localityDialog = true; + } + + openNewArea() { + this.areaForm.reset(); + this.submittedArea = false; + this.areaDialog = true; + } + + hideLocalityDialog() { + this.localityDialog = false; + this.submittedLocality = false; + } + + clearLocalityForm() { + this.localityForm.patchValue({ + id: null, + localityTypeId: null, + adminArea: '', + olaLocalityAutoComplete: null, + olaLocality: '', + stateName: '', + pincode: '', + latitude: null, + longitude: null, + olaPlaceId: null, + localityName: '' + }); + this.submittedLocality = false; + + setTimeout(() => { + if (this.localityNameInput && this.localityNameInput.nativeElement) { + this.localityNameInput.nativeElement.focus(); + } + }, 100); + } + + hideAreaDialog() { + this.areaDialog = false; + this.submittedArea = false; + } + + getSeverity(status: boolean) { + return status ? 'success' : 'warn'; + } + + getLocalityErrorMessage(fieldName: string): string { + const control = this.localityForm.get(fieldName); + return control ? ValidationService.getErrorMessage(control, fieldName) : ''; + } + + isLocalityFieldInvalid(fieldName: string): boolean { + const control = this.localityForm.get(fieldName); + return !!(control && control.invalid && (control.dirty || control.touched || this.submittedLocality)); + } + + getAreaErrorMessage(fieldName: string): string { + const control = this.areaForm.get(fieldName); + return control ? ValidationService.getErrorMessage(control, fieldName) : ''; + } + + isAreaFieldInvalid(fieldName: string): boolean { + const control = this.areaForm.get(fieldName); + return !!(control && control.invalid && (control.dirty || control.touched || this.submittedArea)); + } + + validateUniqueLocality(localityName: string): boolean { + const existing = (this.localities ?? []).some(o => + o.id !== this.localityForm.get('id')?.value && + o.localityName?.toLowerCase().trim() === localityName.toLowerCase().trim() + ); + return !existing; + } + + saveLocality() { + this.submittedLocality = true; + + if (this.localityForm.invalid) { + return; + } + + const data = this.localityForm.getRawValue(); + + if (!this.validateUniqueLocality(data.localityName)) { + this.messageService.add({ severity: 'error', summary: 'Validation Error', detail: 'Locality Name already exists', life: 3000 }); + return; + } + + const locDto: LocalityDTO = { + id: data.id, + areaId: data.areaId, + stateCityId: data.stateCityId, + localityTypeId: data.localityTypeId, + localityName: data.localityName, + adminArea: data.adminArea, + olaPlaceId: data.olaPlaceId, + olaLocality: data.olaLocality, + latitude: data.latitude, + longitude: data.longitude, + stateName: data.stateName, + pincode: data.pincode, + active: data.active + }; + + this.allocationService.saveLocality(locDto).subscribe({ + next: (savedLoc) => { + const index = locDto.id ? (this.localities ?? []).findIndex(v => v.id === locDto.id) : -1; + if (index !== -1) { + this.localities[index] = savedLoc; + } else { + if (!this.localities) { + this.localities = []; + } + this.localities.push(savedLoc); + } + this.localities = [...this.localities]; + this.messageService.add({ severity: 'success', summary: 'Successful', detail: index !== -1 ? 'Locality Updated' : 'Locality Created', life: 3000 }); + + if (locDto.id) { + this.localityForm.reset(); + this.hideLocalityDialog(); + } else { + this.clearLocalityForm(); + } + }, + error: (err) => { + console.error(err); + this.messageService.add({ severity: 'error', summary: 'Error', detail: 'Failed to save locality', life: 3000 }); + } + }); + } + + saveArea() { + this.submittedArea = true; + + if (this.areaForm.invalid) { + return; + } + + const data = this.areaForm.getRawValue(); + const extractedName = typeof data.areaName === 'string' ? data.areaName : data.areaName.areaName; + + const areaDto: AreaDTO = { + id: data.id, + areaName: extractedName, + groupAVerifierId: data.groupAVerifierId, + groupBVerifierId: data.groupBVerifierId, + groupCVerifierId: data.groupCVerifierId, + active: true + }; + + this.allocationService.saveArea(areaDto).subscribe({ + next: () => { + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Area Group Created/Updated', life: 3000 }); + this.areaDialog = false; + this.areaForm.reset(); + this.submittedArea = false; + }, + error: (err) => { + console.error(err); + this.messageService.add({ severity: 'error', summary: 'Error', detail: 'Failed to save Area Group', life: 3000 }); + } + }); + } + +} diff --git a/frontend/src/app/services/account/company/company.service.ts b/frontend/src/app/services/account/company/company.service.ts new file mode 100644 index 0000000..c91c942 --- /dev/null +++ b/frontend/src/app/services/account/company/company.service.ts @@ -0,0 +1,199 @@ +import { Request } from './../../../models/request.model'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from '../../../../environments/environment'; +import { HttpService } from '../../http.service'; + +import { SubsidiaryDTO, DepartmentDTO, DesignationDTO, EmployeeDTO, CompanyVerifierModel } from '../../../models/account.model'; +import { ResponseDto } from '../../../models/response.dto'; + +@Injectable({ + providedIn: 'root' +}) +export class CompanyService { + + constructor(private http: HttpService) {} + + // Subsidiaries + getAllSubsidiaries(): Observable { + return this.http.get(`${environment.accountService}/company/subsidiaries`).pipe( + map((response: ResponseDto) => response.data as SubsidiaryDTO[]) + ); + } + + saveSubsidiary(subsidiary: SubsidiaryDTO): Observable { + const requestPayload: Request = { + data: subsidiary, + compressed: true, + target: 'cygnus.models.account.Subsidiary' + }; + return this.http.post(`${environment.accountService}/company/subsidiaries`, requestPayload).pipe( + map((response: ResponseDto) => response.data as SubsidiaryDTO) + ); + } + + activateDeactivateSubsidiary(subsidiaryId: string, active: boolean): Observable { + const subsidiary: SubsidiaryDTO = ({ + id: subsidiaryId, + active: active + }); + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: subsidiary, + compressed: true, + target: 'cygnus.models.account.Subsidiary' + }; + return this.http.post(`${environment.accountService}/company/subsidiaries`, requestPayload).pipe( + map((response: ResponseDto) => response.data as SubsidiaryDTO) + ); + } + + // Departments + getAllDepartments(): Observable { + return this.http.get(`${environment.accountService}/company/departments`).pipe( + map((response: ResponseDto) => response.data as DepartmentDTO[]) + ); + } + + saveDepartment(department: DepartmentDTO): Observable { + const requestPayload: Request = { + data: department, + compressed: true, + target: 'cygnus.models.account.Department' + }; + return this.http.post(`${environment.accountService}/company/departments`, requestPayload).pipe( + map((response: ResponseDto) => response.data as DepartmentDTO) + ); + } + + activateDeactivateDepartment(departmentId: string, active: boolean): Observable { + const department: DepartmentDTO = ({ + id: departmentId, + active: active + } as DepartmentDTO); + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: department, + compressed: true, + target: 'cygnus.models.account.Department' + }; + return this.http.post(`${environment.accountService}/company/departments`, requestPayload).pipe( + map((response: ResponseDto) => response.data as DepartmentDTO) + ); + } + + // Designations + getAllDesignations(): Observable { + return this.http.get(`${environment.accountService}/company/designations`).pipe( + map((response: ResponseDto) => response.data as DesignationDTO[]) + ); + } + + saveDesignation(designation: DesignationDTO): Observable { + const requestPayload: Request = { + data: designation, + compressed: true, + target: 'cygnus.models.account.Designation' + }; + return this.http.post(`${environment.accountService}/company/designations`, requestPayload).pipe( + map((response: ResponseDto) => response.data as DesignationDTO) + ); + } + + activateDeactivateDesignation(designationId: string, active: boolean): Observable { + const designation: DesignationDTO = ({ + id: designationId, + active: active + } as DesignationDTO); + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: designation, + compressed: true, + target: 'cygnus.models.account.Designation' + }; + return this.http.post(`${environment.accountService}/company/designations`, requestPayload).pipe( + map((response: ResponseDto) => response.data as DesignationDTO) + ); + } + + // Employees + getAllEmployees(): Observable { + return this.http.get(`${environment.accountService}/company/employees`).pipe( + map((response: ResponseDto) => response.data as EmployeeDTO[]) + ); + } + + saveEmployee(employee: EmployeeDTO): Observable { + const requestPayload: Request = { + data: employee, + compressed: true, + target: 'cygnus.models.account.Employee' + }; + return this.http.post(`${environment.accountService}/company/employees`, requestPayload).pipe( + map((response: ResponseDto) => response.data as EmployeeDTO) + ); + } + + activateDeactivateEmployee(employeeId: string, active: boolean): Observable { + const employee: EmployeeDTO = ({ + id: employeeId, + active: active + } as EmployeeDTO); + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: employee, + compressed: true, + target: 'cygnus.models.account.Employee' + }; + return this.http.post(`${environment.accountService}/company/employees`, requestPayload).pipe( + map((response: ResponseDto) => response.data as EmployeeDTO) + ); + } + + searchEmployees(payload: Request): Observable { + return this.http.post(`${environment.accountService}/company/employees/search`, payload).pipe( + map((response: ResponseDto) => response.data as any[]) + ); + } + + // Verifiers + getAllVerifiers(): Observable { + return this.http.get(`${environment.accountService}/company/verifiers`).pipe( + map((response: ResponseDto) => response.data as CompanyVerifierModel[]) + ); + } + + saveVerifier(verifier: CompanyVerifierModel): Observable { + const requestPayload: Request = { + data: verifier, + compressed: true, + target: 'cygnus.models.account.CompanyVerifier' + }; + return this.http.post(`${environment.accountService}/company/verifiers`, requestPayload).pipe( + map((response: ResponseDto) => response.data as CompanyVerifierModel) + ); + } + + activateDeactivateVerifier(verifierId: string, active: boolean): Observable { + const verifier: any = ({ + id: verifierId, + active: active + }); + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: verifier, + compressed: true, + target: 'cygnus.models.account.CompanyVerifier' + }; + return this.http.post(`${environment.accountService}/company/verifiers`, requestPayload).pipe( + map((response: ResponseDto) => response.data as CompanyVerifierModel) + ); + } + + searchVerifiers(payload: Request): Observable { + return this.http.post(`${environment.accountService}/company/verifiers/search`, payload).pipe( + map((response: ResponseDto) => response.data as any[]) + ); + } +} \ No newline at end of file diff --git a/frontend/src/app/services/account/user/user.service.ts b/frontend/src/app/services/account/user/user.service.ts new file mode 100644 index 0000000..5dde5c6 --- /dev/null +++ b/frontend/src/app/services/account/user/user.service.ts @@ -0,0 +1,67 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from '../../../../environments/environment'; +import { HttpService } from '../../http.service'; +import { UserDTO } from '../../../models/user.model'; +import { ResponseDto } from '../../../models/response.dto'; +import { Request } from '../../../models/request.model'; + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + + constructor(private http: HttpService) { } + + getAllUsers(): Observable { + return this.http.get(`${environment.userService}/users`).pipe( + map((response: ResponseDto) => response.data as UserDTO[]) + ); + } + + searchUser(payload: Request): Observable { + return this.http.post(`${environment.userService}/users/search`, payload).pipe( + map((response: ResponseDto) => response.data as UserDTO) + ); + } + + getAllRoles(): Observable { + return this.http.get(`${environment.userService}/roles`).pipe( + map((response: any) => response.data as any[]) + ); + } + + getAllBranches(): Observable { + return this.http.get(`${environment.userService}/branches`).pipe( + map((response: any) => response.data as any[]) + ); + } + + saveUser(user: UserDTO): Observable { + const requestPayload: Request = { + data: user, + compressed: true, + target: 'cygnus.models.user.User' + }; + return this.http.post(`${environment.userService}/users`, requestPayload).pipe( + map((response: ResponseDto) => response.data as UserDTO) + ); + } + + activateDeactivateUser(userId: string, active: boolean): Observable { + const user: UserDTO = { + id: userId, + active: active + }; + const requestPayload: Request = { + scopes: [active ? "ACTIVATE" : "DEACTIVATE"], + data: user, + compressed: true, + target: 'cygnus.models.user.User' + }; + return this.http.post(`${environment.userService}/users`, requestPayload).pipe( + map((response: ResponseDto) => response.data as UserDTO) + ); + } +} \ No newline at end of file diff --git a/frontend/src/app/services/commons/session.service.ts b/frontend/src/app/services/commons/session.service.ts new file mode 100644 index 0000000..7a4ef2b --- /dev/null +++ b/frontend/src/app/services/commons/session.service.ts @@ -0,0 +1,51 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; + +@Injectable({ + providedIn: 'root' +}) +export class SessionService { + + constructor(private router: Router) { } + + setItem(key: string, value: T): void { + try { + sessionStorage.setItem(key, JSON.stringify(value)); + } catch (e) { + console.error(`Error saving ${key} to sessionStorage`, e); + } + } + + getDetails(key: string): T | null { + const details = this.getItem('details'); + if (details === null) return null; + const value = details[key]; + if (value === null) return null; + else return value; + } + + getItem(key: string): any | null { + const json = sessionStorage.getItem(key); + if (json === null) return null; + + try { + return JSON.parse(json); + } catch (e) { + console.warn(`Error parsing JSON for key ${key}`, e); + return null; + } + } + + removeItem(key: string): void { + sessionStorage.removeItem(key); + } + + clear(): void { + sessionStorage.clear(); + } + + logout(): void { + sessionStorage.clear(); + this.router.navigate(['/']); + } +} diff --git a/frontend/src/app/services/http.service.ts b/frontend/src/app/services/http.service.ts new file mode 100644 index 0000000..5b4f125 --- /dev/null +++ b/frontend/src/app/services/http.service.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; +import { ResponseDto } from '../models/response.dto'; + +@Injectable({ + providedIn: 'root' +}) +export class HttpService { + + constructor(private http: HttpClient) { + } + + get(url: string, headers?: HttpHeaders): Observable { + const options = { + headers, + withCredentials: true + }; + return this.http.get(url, options).pipe( + catchError(this.handleError) + ); + } + + post(url: string, body: any, headers?: HttpHeaders): Observable { + const options = { + headers, + withCredentials: true + }; + return this.http.post(url, body, options).pipe( + catchError(this.handleError) + ); + } + + put(url: string, body: any, headers?: HttpHeaders): Observable { + return this.http.put(url, body, { headers }).pipe( + catchError(this.handleError) + ); + } + + delete(url: string, headers?: HttpHeaders): Observable { + return this.http.delete(url, { headers }).pipe( + catchError(this.handleError) + ); + } + + private handleError(error: HttpErrorResponse) { + return throwError(() => error.error); + } + + setHeaders(additionalHeaders: { [key: string]: string }): HttpHeaders { + return new HttpHeaders({ + ...additionalHeaders + }); + } +} \ No newline at end of file diff --git a/frontend/src/app/services/masters/master.service.ts b/frontend/src/app/services/masters/master.service.ts new file mode 100644 index 0000000..f9f283f --- /dev/null +++ b/frontend/src/app/services/masters/master.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; +import { HttpService } from '../http.service'; +import { CityDTO } from '../../models/masters/masters'; +import { map, Observable } from 'rxjs'; +import { environment } from '../../../environments/environment'; +import { ResponseDto } from '../../models/response.dto'; +import { Request } from '../../models/request.model'; + +@Injectable({ + providedIn: 'root' +}) +export class MasterService { + private readonly baseUrl = '/master'; + + constructor(private http: HttpService) {} + + searchCityStates(payload: Request): Observable { + return this.http.post(`${environment.masterService}/cities-states/search`, payload).pipe( + map((response: ResponseDto) => response.data as CityDTO[]) + ); + } + + +} diff --git a/frontend/src/app/services/ola/ola.service.ts b/frontend/src/app/services/ola/ola.service.ts new file mode 100644 index 0000000..0c73517 --- /dev/null +++ b/frontend/src/app/services/ola/ola.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from '../../../environments/environment'; +import { HttpService } from '../http.service'; +import { ResponseDto } from '../../models/response.dto'; + +@Injectable({ + providedIn: 'root' +}) +export class OlaService { + + constructor(private http: HttpService) {} + + autocomplete(query: string): Observable { + // Assuming backend takes get parameter 'text' or something similar. + // Wait, the prompt says @GetMapping(AUTOCOMPLETE) on /ola/location/api/v1/autocomplete + // Let's pass query directly as a parameter like ?input=query + return this.http.get(`${environment.masterService}/ola-autocomplete?input=${encodeURIComponent(query)}`).pipe( + map((response: ResponseDto) => response.data) + ); + } + +} diff --git a/frontend/src/app/services/tools/allocation/allocation.service.ts b/frontend/src/app/services/tools/allocation/allocation.service.ts new file mode 100644 index 0000000..118c2fe --- /dev/null +++ b/frontend/src/app/services/tools/allocation/allocation.service.ts @@ -0,0 +1,73 @@ +import { Request } from './../../../models/request.model'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from '../../../../environments/environment'; +import { HttpService } from '../../http.service'; + +import { AreaDTO, LocalityDTO, LocalityTypeDTO } from '../../../models/tools.model'; +import { ResponseDto } from '../../../models/response.dto'; + +@Injectable({ + providedIn: 'root' +}) +export class AllocationService { + + constructor(private http: HttpService) {} + + // Areas + getAllAreas(): Observable { + return this.http.get(`${environment.toolsService}/areas`).pipe( + map((response: ResponseDto) => response.data as AreaDTO[]) + ); + } + + saveArea(area: AreaDTO): Observable { + const requestPayload: Request = { + data: area, + compressed: false, + target: 'cygnus.models.tools.Area' + }; + return this.http.post(`${environment.toolsService}/areas`, requestPayload).pipe( + map((response: ResponseDto) => response.data as AreaDTO) + ); + } + + searchAreas(payload: Request): Observable { + return this.http.post(`${environment.toolsService}/areas/search`, payload).pipe( + map((response: ResponseDto) => response.data as any[]) + ); + } + + // Localities + getAllLocalities(): Observable { + return this.http.get(`${environment.toolsService}/localities`).pipe( + map((response: ResponseDto) => response.data as LocalityDTO[]) + ); + } + + saveLocality(locality: LocalityDTO): Observable { + const requestPayload: Request = { + data: locality, + compressed: false, + target: 'cygnus.models.tools.Locality' + }; + return this.http.post(`${environment.toolsService}/localities`, requestPayload).pipe( + map((response: ResponseDto) => response.data as LocalityDTO) + ); + } + + searchLocalities(payload: Request): Observable { + return this.http.post(`${environment.toolsService}/localities/search`, payload).pipe( + map((response: ResponseDto) => response.data as any[]) + ); + } + + // Locality Types + getAllLocalityTypes(): Observable { + return this.http.get(`${environment.toolsService}/locality-types`).pipe( + map((response: ResponseDto) => response.data as LocalityTypeDTO[]) + ); + } + +} diff --git a/frontend/src/app/services/utilities/encryption.service.ts b/frontend/src/app/services/utilities/encryption.service.ts new file mode 100644 index 0000000..ecae54e --- /dev/null +++ b/frontend/src/app/services/utilities/encryption.service.ts @@ -0,0 +1,61 @@ +import { Injectable } from '@angular/core'; +import { environment } from '../../../environments/environment'; + +@Injectable({ + providedIn: 'root' +}) +export class EncryptionService { + + constructor() {} + + async encrypt(payload: any): Promise { + const encoder = new TextEncoder(); + const iv = crypto.getRandomValues(new Uint8Array(12)); + const jsonString = JSON.stringify(payload); + + const keyBytes = Uint8Array.from(atob(environment.encryptionKey), c => c.charCodeAt(0)); + const cryptoKey = await crypto.subtle.importKey( + "raw", + keyBytes, + { name: "AES-GCM" }, + false, + ["encrypt"] + ); + + const encrypted = await crypto.subtle.encrypt( + { name: "AES-GCM", iv }, + cryptoKey, + encoder.encode(jsonString) + ); + + const combined = new Uint8Array(iv.length + encrypted.byteLength); + combined.set(iv, 0); + combined.set(new Uint8Array(encrypted), iv.length); + + return btoa(String.fromCharCode(...combined)); + } + + async decrypt(base64Cipher: string): Promise { + const data = Uint8Array.from(atob(base64Cipher), c => c.charCodeAt(0)); + const iv = data.slice(0, 12); + const ciphertext = data.slice(12); + + const keyBytes = Uint8Array.from(atob(environment.encryptionKey), c => c.charCodeAt(0)); + const cryptoKey = await crypto.subtle.importKey( + "raw", + keyBytes, + { name: "AES-GCM" }, + false, + ["decrypt"] + ); + + const decrypted = await crypto.subtle.decrypt( + { name: "AES-GCM", iv }, + cryptoKey, + ciphertext + ); + + const decoder = new TextDecoder(); + return JSON.parse(decoder.decode(decrypted)); + } +} \ No newline at end of file diff --git a/frontend/src/app/services/utilities/rsa.service.ts b/frontend/src/app/services/utilities/rsa.service.ts new file mode 100644 index 0000000..a88ff21 --- /dev/null +++ b/frontend/src/app/services/utilities/rsa.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { environment } from '../../../environments/environment'; + +@Injectable({ + providedIn: 'root', +}) +export class RsaService { + constructor() {} + + private async importPublicKey(pemKey: string): Promise { + const pem = pemKey + .replace('-----BEGIN PUBLIC KEY-----', '') + .replace('-----END PUBLIC KEY-----', '') + .replace(/\s+/g, ''); + const binaryDer = Uint8Array.from(atob(pem), c => c.charCodeAt(0)); + + return crypto.subtle.importKey( + 'spki', + binaryDer.buffer, + { + name: 'RSA-OAEP', + hash: 'SHA-256', + }, + false, + ['encrypt'] + ); + } + + async encrypt(plaintext: string): Promise { + const key = await this.importPublicKey(environment.rsaPublicKey); + const encoded = new TextEncoder().encode(plaintext); + + const encrypted = await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, key, encoded); + + return btoa(String.fromCharCode(...new Uint8Array(encrypted))); + } +} diff --git a/frontend/src/app/services/utilities/validation.service.ts b/frontend/src/app/services/utilities/validation.service.ts new file mode 100644 index 0000000..2eacb14 --- /dev/null +++ b/frontend/src/app/services/utilities/validation.service.ts @@ -0,0 +1,167 @@ +import { Injectable } from '@angular/core'; +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +@Injectable({ + providedIn: 'root' +}) +export class ValidationService { + + // Regex patterns + static readonly PATTERNS = { + EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, + INDIAN_MOBILE: /^[6-9]\d{9}$/, + PINCODE: /^\d{6}$/, + PAN: /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/, + CIN: /^[UL][0-9]{5}[A-Z]{2}[0-9]{4}[A-Z]{3}[0-9]{6}$/, + MSME: /^UDYAM-[A-Z]{2}-\d{7}$/, + ALPHANUMERIC: /^[a-zA-Z0-9]+$/, + ALPHABET_WITH_SPACES: /^[a-zA-Z0-9\s.&'-]+$/, + CODE: /^[A-Z0-9]{2,10}$/ + }; + + // Error messages + static readonly ERROR_MESSAGES = { + REQUIRED: (fieldName: string) => { + const readableName = fieldName.replace(/([A-Z])/g, ' $1').trim(); + const titleCaseName = readableName.charAt(0).toUpperCase() + readableName.slice(1); + // special cases for common acronyms + const finalName = titleCaseName.replace(/\bId\b/g, 'ID'); + return `${finalName} is required`; + }, + EMAIL_INVALID: 'Please enter a valid email address', + MOBILE_INVALID: 'Please enter a valid 10-digit mobile number starting with 6-9', + PINCODE_INVALID: 'Please enter a valid 6-digit pincode', + PAN_INVALID: 'Please enter a valid PAN number (e.g., ABCDE1234F)', + CIN_INVALID: 'Please enter a valid CIN number', + MSME_INVALID: 'Please enter a valid MSME number (e.g., UDYAM-XX-XXXXXXX)', + CODE_INVALID: 'Code must be 2-10 alphanumeric characters', + NAME_INVALID: 'Name must be at least 2 characters and contain only letters, numbers, spaces, dots, ampersands, apostrophes, and hyphens', + CONTACT_PERSON_INVALID: 'Contact person name must be at least 2 characters', + MIN_LENGTH: (min: number) => `Minimum ${min} characters required`, + MAX_LENGTH: (max: number) => `Maximum ${max} characters allowed` + }; + + // Custom validators + static emailValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.EMAIL.test(control.value); + return isValid ? null : { invalidEmail: true }; + }; + } + + static mobileValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.INDIAN_MOBILE.test(control.value); + return isValid ? null : { invalidMobile: true }; + }; + } + + static pincodeValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.PINCODE.test(control.value); + return isValid ? null : { invalidPincode: true }; + }; + } + + static panValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.PAN.test(control.value); + return isValid ? null : { invalidPan: true }; + }; + } + + static cinValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.CIN.test(control.value); + return isValid ? null : { invalidCin: true }; + }; + } + + static msmeValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.MSME.test(control.value); + return isValid ? null : { invalidMsme: true }; + }; + } + + static codeValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + const isValid = this.PATTERNS.CODE.test(control.value); + return isValid ? null : { invalidCode: true }; + }; + } + + static nameValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + if (control.value.length < 2) return { minLength: { requiredLength: 2, actualLength: control.value.length } }; + const isValid = this.PATTERNS.ALPHABET_WITH_SPACES.test(control.value); + return isValid ? null : { invalidName: true }; + }; + } + + static contactPersonValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if (!control.value) return null; + return control.value.length >= 2 ? null : { minLength: { requiredLength: 2, actualLength: control.value.length } }; + }; + } + + // Get error message for a control + static getErrorMessage(control: AbstractControl, fieldName: string): string { + if (!control.errors) return ''; + + if (control.errors['required']) { + return this.ERROR_MESSAGES.REQUIRED(fieldName); + } + + if (control.errors['invalidEmail']) { + return this.ERROR_MESSAGES.EMAIL_INVALID; + } + + if (control.errors['invalidMobile']) { + return this.ERROR_MESSAGES.MOBILE_INVALID; + } + + if (control.errors['invalidPincode']) { + return this.ERROR_MESSAGES.PINCODE_INVALID; + } + + if (control.errors['invalidPan']) { + return this.ERROR_MESSAGES.PAN_INVALID; + } + + if (control.errors['invalidCin']) { + return this.ERROR_MESSAGES.CIN_INVALID; + } + + if (control.errors['invalidMsme']) { + return this.ERROR_MESSAGES.MSME_INVALID; + } + + if (control.errors['invalidCode']) { + return this.ERROR_MESSAGES.CODE_INVALID; + } + + if (control.errors['invalidName']) { + return this.ERROR_MESSAGES.NAME_INVALID; + } + + if (control.errors['minlength']) { + return this.ERROR_MESSAGES.MIN_LENGTH(control.errors['minlength'].requiredLength); + } + + if (control.errors['maxlength']) { + return this.ERROR_MESSAGES.MAX_LENGTH(control.errors['maxlength'].requiredLength); + } + + return 'Invalid input'; + } +} diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index a2396c0..116e41b 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -5,5 +5,6 @@ export const environment = { accountService: 'http://localhost:1701/cygnus/app/api/v1/account', userService: 'http://localhost:1701/cygnus/app/api/v1/user', masterService: 'http://localhost:1702/cygnus/app/api/v1/master', + toolsService: 'http://localhost:1703/cygnus/app/api/v1/tools', rsaPublicKey: `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq3RFV/f6ybsOF2m7NBLPUTMBq9b0frJG1HdIDYmrD9Wr1/aGBxTSJwq8IHFlatNpBF3OlJv9uEOybWMM1vXli4IgsuPPmcTOZsQ/O/9UGyBSL6apevNCw6pC1oa0MVLaN6COMAhDr+ri/PYiPQUcYsjDqghmAghMk99umHGUihz/oY/qgxzO+Q9cqePmjpH5c5RaXGBrOQxKoPlm7Uj6MqAfBhLC360VbcMot4XDoV+VeQXMzH0o6e870jdClsLOq1VsCA27jVvafj+HwaJ15ny9UWWilDuS/X8Sd7v+Rmd+qNezi6ROcglyaisXwKfeTWM8/o7HiUco2fL230+jEQIDAQAB` }; \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index ad457fa..54beb76 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -3,7 +3,7 @@ { "compileOnSave": false, "compilerOptions": { - "strict": true, + "strict": false, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true,