From 688eda79e14a1fe5d2766a2182129274af4aa1c0 Mon Sep 17 00:00:00 2001 From: Abhishek Yadav Date: Wed, 12 Mar 2025 12:08:21 +0530 Subject: [PATCH 01/52] Bulk user registration with excel file and download sample excel formate --- .../activities/activities.module.ts | 2 + .../employee-master-bulk-upload.component.css | 0 ...employee-master-bulk-upload.component.html | 56 ++++ ...loyee-master-bulk-upload.component.spec.ts | 21 ++ .../employee-master-bulk-upload.component.ts | 308 ++++++++++++++++++ .../employee-master-new.component.html | 20 ++ .../employee-master-new.component.ts | 20 ++ .../block-subcenter-mapping-service.ts | 4 + src/assets/bulkuser_excel_sheet.xlsx | Bin 0 -> 12657 bytes src/environments/environment.local.ts | 2 + 10 files changed, 433 insertions(+) create mode 100644 src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.css create mode 100644 src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html create mode 100644 src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.spec.ts create mode 100644 src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts create mode 100644 src/assets/bulkuser_excel_sheet.xlsx diff --git a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts index b6dc2968..af1cfd4c 100644 --- a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts +++ b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts @@ -19,6 +19,7 @@ import { import { CategorySubcategoryProvisioningComponent } from './category-subcategory-provisioning/category-subcategory-provisioning.component'; import { EditCategorySubcategoryComponent } from './category-subcategory-provisioning/edit-category-subcategory/edit-category-subcategory.component'; import { EmployeeMasterNewComponent } from './employee-master-new/employee-master-new.component'; +import { EmployeeMasterBulkUploadComponent } from './employee-master-bulk-upload/employee-master-bulk-upload.component'; import { FeedbackTypeMasterComponent, EditFeedbackModalComponent, @@ -161,6 +162,7 @@ import { CoreModule } from 'src/app/core/core.module'; ProjectServicelineMappingComponent, ProjectConfigutationScreenComponent, AddFieldsToProjectComponent, + EmployeeMasterBulkUploadComponent, ], imports: [ CommonModule, diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.css b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.css new file mode 100644 index 00000000..e69de29b diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html new file mode 100644 index 00000000..35eeba34 --- /dev/null +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html @@ -0,0 +1,56 @@ +
+
+
+

Bulk Member Upload

+
+
+
+ +
+
+
+ *This user doesn't have 104 serviceline previlage to upload data +
+
+
+ Upload File(Size :{{ file.size / 1024 / 1024 | number: "1.2-2" }}/{{ + maxFileSize + }}MB) + Upload File(Size :0/{{ maxFileSize }}MB), Supported File + Formats(.xls, .xlsx, .xlsm, .xlsb) + + Invalid file name + Supported File Formats(.xls, .xlsx, .xlsm, .xlsb) +
+
+ {{ fileuploadedCount }} out of {{ filetotalCount }} users created + successfully !
+ {{ errorloglist }} +
+
+
+
diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.spec.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.spec.ts new file mode 100644 index 00000000..4861434e --- /dev/null +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EmployeeMasterBulkUploadComponent } from './employee-master-bulk-upload.component'; + +describe('EmployeeMasterBulkUploadComponent', () => { + let component: EmployeeMasterBulkUploadComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [EmployeeMasterBulkUploadComponent], + }); + fixture = TestBed.createComponent(EmployeeMasterBulkUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts new file mode 100644 index 00000000..c97f2cbe --- /dev/null +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts @@ -0,0 +1,308 @@ +import { Component, OnInit } from '@angular/core'; +import { BlockSubcenterMappingService } from '../services/block-subcenter-mapping-service'; +import { ConfirmationDialogsService } from 'src/app/core/services/dialog/confirmation.service'; +import { dataService } from 'src/app/core/services/dataService/data.service'; +import * as XLSX from 'xlsx'; + +@Component({ + selector: 'app-employee-master-bulk-upload', + templateUrl: './employee-master-bulk-upload.component.html', + styleUrls: ['./employee-master-bulk-upload.component.css'], +}) +export class EmployeeMasterBulkUploadComponent { + file: any; + fileList!: FileList; + error1 = false; + successcount = false; + invalid_file_flag = false; + inValidFileName = false; + maxFileSize = 5.0; + jsonData: any; + enableUPloadButton = false; + valid_file_extensions = ['xls', 'xlsx', 'xlsm', 'xlsb']; + fileContent: any; + userID: any; + showProgressBar = false; + disableUpload = true; + showUpload = false; + fileuploadedCount = 0; + filetotalCount = 0; + errorloglist: any; + + constructor( + public dataService: dataService, + public blockSubcenterMappingService: BlockSubcenterMappingService, + public alertService: ConfirmationDialogsService, + ) {} + + ngOnInit() { + this.userID = this.dataService.uid; + const servicelines = this.dataService.userPriveliges; + // for (let element of servicelines) { + // if (element.serviceDesc?.toLowerCase() === '104 helpline') { + // this.showUpload = true; + // return this.showUpload; + // } + // } + this.showUpload = true; + return this.showUpload; + } + + onFileUploadd(ev: any) { + this.showProgressBar = true; + this.file = undefined; + + this.fileList = ev.target.files; + this.file = ev.target.files[0]; + + //this.file = undefined; + if (this.fileList.length === 0) { + this.error1 = true; + + this.invalid_file_flag = false; + this.inValidFileName = false; + this.disableUpload = false; + this.showProgressBar = false; + } else { + if (this.file) { + const fileNameExtension = this.file.name.split('.'); + const fileName = fileNameExtension[0]; + if (fileName !== undefined && fileName !== null && fileName !== '') { + const isvalid = this.checkExtension(this.file); + + if (isvalid) { + if (this.fileList[0].size / 1000 / 1000 > this.maxFileSize) { + console.log('File Size' + this.fileList[0].size / 1000 / 1000); + + this.error1 = false; + this.invalid_file_flag = false; + this.inValidFileName = false; + this.disableUpload = false; + this.showProgressBar = false; + } else { + this.error1 = false; + + this.invalid_file_flag = false; + this.inValidFileName = false; + this.disableUpload = false; + + const workBook: any = null; + // let workBook : any; + this.jsonData = null; + const reader = new FileReader(); + + // reader.onload = (event) => { + // const data = reader.result; + // workBook = ExcelJS.read(data, { type: 'binary' }); + // this.jsonData = workBook.SheetNames.reduce((initial: any, name: any) => { + // const sheet = workBook.Sheets[name]; + // initial[name] = ExcelJS.utils.sheet_to_json(sheet); + // return initial; + // }, {}); + // // this.dataString = JSON.stringify(jsonData.Sheet1); + + // } + this.enableUPloadButton = false; + reader.readAsBinaryString(this.file); + + const myReader: FileReader = new FileReader(); + myReader.onloadend = this.onLoadFileCallback.bind(this); + myReader.readAsDataURL(this.file); + this.invalid_file_flag = false; + this.disableUpload = false; + } + } else { + this.invalid_file_flag = true; + this.inValidFileName = false; + this.error1 = false; + + this.disableUpload = false; + this.showProgressBar = false; + } + } else { + //this.alertService.alert("Invalid file name", 'error'); + this.inValidFileName = true; + this.invalid_file_flag = false; + this.error1 = false; + this.disableUpload = false; + this.showProgressBar = false; + } + } else { + this.invalid_file_flag = false; + this.disableUpload = false; + this.showProgressBar = false; + } + } + } + + checkExtension(file: any) { + let count = 0; + console.log('FILE DETAILS', file); + if (file) { + const array_after_split = file.name.split('.'); + if (array_after_split.length === 2) { + const file_extension = array_after_split[array_after_split.length - 1]; + for (let i = 0; i < this.valid_file_extensions.length; i++) { + if ( + file_extension.toUpperCase() === + this.valid_file_extensions[i].toUpperCase() + ) { + count = count + 1; + } + } + if (count > 0) { + return true; + } else { + return false; + } + } else { + return false; + } + } else { + return true; + } + } + onLoadFileCallback = (event: any) => { + this.fileContent = event.currentTarget.result; + this.showProgressBar = false; + }; + + // uploadFile() { debugger + // const fileExtenstion = this.file; + // const formData = new FormData(); + + // formData.append('file', fileExtenstion); + // formData.append('userName', this.dataService.uname) + + // const reader: FileReader = new FileReader(); + // reader.readAsBinaryString(target.files[0]); + // reader.onload = (e: any) => { + // const binarystr: string = e.target.result; + // const wb: XLSX.WorkBook = XLSX.read(binarystr, { type: 'binary' }); + // const wsname: string = wb.SheetNames[0]; + // const ws: XLSX.WorkSheet = wb.Sheets[wsname]; + // const data = XLSX.utils.sheet_to_json(ws); + // const xmlData = this.convertJsonToXml(data); + // const reqObj = { + // fileName: this.file.name, + // fileExtension: fileExtenstion[fileExtenstion.length - 1], + // fileContent: this.fileContent, + // providerServiceMapID: this.dataService.providerServiceMapID_104, + // createdBy: this.dataService.uname, + // }; + // this.showProgressBar = true; + // this.blockSubcenterMappingService + // .uploadData(formData) + // .subscribe((response: any) => { + // if (response && response.statusCode === 200) { + // this.showProgressBar = false; + // this.alertService.alert('File Uploaded successfully', 'success'); + // this.resetFileInput(); + // this.file = undefined; + // this.fileContent = null; + // this.disableUpload = true; + // } else { + // this.showProgressBar = false; + // this.alertService.alert(response.errorMessage, 'error'); + // this.resetFileInput(); + // this.file = undefined; + // this.fileContent = null; + // this.disableUpload = true; + // } + // }); + // (err: any) => { + // this.showProgressBar = false; + // this.alertService.alert(err.errorMessage, 'error'); + // this.resetFileInput(); + // this.file = undefined; + // this.fileContent = null; + // this.disableUpload = true; + // }; + // } + + onFileUpload(event: any) { + // const fileExtenstion = this.file; + // const formData = new FormData(); + + // formData.append('file', fileExtenstion); + // formData.append('userName', this.dataService.uname) + + const target: DataTransfer = event.target; + if (target.files.length !== 1) { + throw new Error('Cannot use multiple files'); + } + const reader: FileReader = new FileReader(); + reader.readAsBinaryString(target.files[0]); + reader.onload = (e: any) => { + const binarystr: string = e.target.result; + const wb: XLSX.WorkBook = XLSX.read(binarystr, { type: 'binary' }); + const wsname: string = wb.SheetNames[0]; + const ws: XLSX.WorkSheet = wb.Sheets[wsname]; + const data = XLSX.utils.sheet_to_json(ws); + + const xmlData = this.convertJsonToXml(data); + + this.showProgressBar = true; + this.blockSubcenterMappingService + .memberBulkUploadXML(xmlData) + .subscribe((response: any) => { + if (response) { + this.showProgressBar = false; + this.alertService.alert('File Uploaded successfully', 'success'); + this.resetFileInput(); + this.file = undefined; + this.successcount = true; + this.fileuploadedCount = response.registeredUser; + this.filetotalCount = response.totalUser; + this.errorloglist = response.error; + } else { + this.showProgressBar = false; + this.alertService.alert(response.errorMessage, 'error'); + } + }); + (err: any) => { + this.showProgressBar = false; + this.alertService.alert(err.errorMessage, 'error'); + this.resetFileInput(); + this.file = undefined; + this.fileContent = null; + this.disableUpload = true; + }; + }; + } + + convertJsonToXml(json: any): string { + const xml = ['\n']; + json.forEach((item: any) => { + xml.push('\n'); + for (const [key, value] of Object.entries(item)) { + xml.push(`<${key}>${value}\n`); + } + xml.push('\n'); + }); + + xml.push('\n'); + return xml.join(''); + } + + // formatDate(date: Date): string { + // const year = date.getFullYear(); + // const month = String(date.getMonth() + 1).padStart(2, '0'); + // const day = String(date.getDate()).padStart(2, '0'); + // return `${year}-${month}-${day}`; + // } + + // excelSerialToDate(serial: number): Date { + // const excelEpoch = new Date(1900, 0, 1); // January 1, 1900 + // const msPerDay = 86400000; // Number of milliseconds in a day + // return new Date(excelEpoch.getTime() + (serial - 2) * msPerDay); + + // } + + resetFileInput() { + const fileInput = document.getElementById( + 'upload-file', + ) as HTMLInputElement; + fileInput.value = ''; + } +} diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 96c45fd8..df744c57 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -3,6 +3,26 @@

Employee Master

+
+ + + +
diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index 4b03e7dc..10a33c0c 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -151,6 +151,9 @@ export class EmployeeMasterNewComponent implements OnInit { permanentDistricts: any = []; communities: any = []; religions: any = []; + + downloadMemberExcelFile: any; + // objs: any = []; searchTerm: any; selfHealthProfessionalID: any; @@ -177,6 +180,7 @@ export class EmployeeMasterNewComponent implements OnInit { @ViewChild('communicationDetailsForm') communicationDetailsForm!: NgForm; disableGenerateOTP: any; + employeeMasterUpload = false; // md2.data: Observable>; @@ -1579,4 +1583,20 @@ export class EmployeeMasterNewComponent implements OnInit { this.enablehealthProfessionalID = false; } } + + uploadMaster() { + this.employeeMasterUpload = true; + } + + downloadMaster() { + const filePath = 'assets/bulkuser_excel_sheet.xlsx'; + + // Create a temporary link to trigger the download + const link = document.createElement('a'); + link.href = filePath; + link.download = 'bulkuser_excel_sheet.xlsx'; // Set the file name when downloaded + + // Trigger the click event on the anchor element to initiate the download + link.click(); + } } diff --git a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts index c80c4b5e..0e29c154 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts @@ -48,6 +48,10 @@ export class BlockSubcenterMappingService { return this.http.post(environment.getBlockSubcentreDataUploadUrl, formData); } + memberBulkUploadXML(formData: any) { + return this.http.post(environment.getXMLDataUploadUrl, formData); + } + handleError(error: Response | any) { return throwError(error); } diff --git a/src/assets/bulkuser_excel_sheet.xlsx b/src/assets/bulkuser_excel_sheet.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d0385f357deaadaa9ab4c96d3557e9f4bfac4a1b GIT binary patch literal 12657 zcmaJ{1z6tNvc-Pf-QBG?6e#X)#ogU04h4$4yO-kbuEpKmrMOGc2km|LoYQyj+u!#m zBpFH8PG&PROHL9L3>xTd1j=mkz3u;ZK)wE9Xk#E}Z)5B5PVQ9<_4NegFR_ovCctdK zKtLZsfPfJHE~aN|OYdT3nI6+A0m_INaO!)CXm6t!8WgvJDx8N=893`cJi4gM29>-& zc~7g&4cX>Hu_n^l$IuMpbSQjwBm11myVhYiC2gbzhZOGoo);ZPF#0d=jLO8z8<*uS&~af`CTYEbO)`F>k_l z=8;APS*fy1YK#FWLfIcn@3${F@bYtvddF?p}HR*x25 z&kya!#6MRwXdWio*!t|3!DHqT*Z_E|<*no^#)hvLBmEs?0~>pzH<0~f!7bvn8wm1XE6}= zgAT;^@38TYEey5`WK>E)D^o&2nRjFfyLq8shS=xnm3{;)?&@-j#spkY^K)6ygj8;D zQ6@vB33A%yIu4X@9nh6wdYfo;AQ3TZ`WpGF1!!dHzzI3>LGut6BWO7SbuyyL`PP63 z@&|dhpgWp9w~SMfm?STKvrmV&>$B{1x3fK!=D|E{ful9&y^j+w_I;&g^6x`@&_>AbXvK``l+(*Grg#re?*lI^A3eyVExfZ$ekE` z0~awkw7tuwk68X7i z$n*Z)q|HB(Cl2}IM)Qh1(kt>P|3Kc!!O_O*4g0)kehWVa%z#tBCx`(p6ob;*g6~Pt z27zd^*PNui$_&Azl^R$Nr;__kmEH79=UY!ME~}?Q%H{fJ5t^ym1Gry+LGTl$YFn50 z*3C2?VAipg`s=Xbw%>EufhvDLmadyH-(I{~c7Z37hKHYxkc5QevYklk_&!ONKABT# zJ?&o5RA!P!%?3qJ*8@31lp6N2i=f?hy-NfCSSPwv--N4rDMKV*!!YwKb`EN({=G}C z-RlRTPf$KJh#)Wa$RdG4K!?}`rsAYtw&ug0k;r&vNTPY&Y`&)|+Kk(aVc--!Y3pNL z9it#%V)ijXTskHx%2f!NGxBf`(d5kigP%&cH?*)y_Cp`UTy=U9nIdluSDE*nKV`@x zA_NB?un1CwSGCWcg_f6^2hba~|2e>bzGCZQ`75;iX94)%0?sz}77nIHMvi}mp@Bf& zpIiVSp!?TZ!u&t7zf>6CX6w7Emcu3+s^_WHi{IgflND*(hYoljL{q`o0O`7cRDCcP zeGP4m9&vBaazmI$K(*tyZWrW%$wpC86&01Pr*eXf;?^k!`y}4+X!$wTgC)zIyHua& zJFEM=VhbdS=a7cse9)&@k^8xg^7bnO^fqA)iAHc(FP8E8G>8N4+G z4)X7miGuaYBxFT4N%t2nvyH_w_vVR0=TmUlE{BEGT@yZ3C#L3`BnDBZ?L?nhVR!&< z0+HVyG{C>aO?~vG7?ZDQ`W8H%uUB8mJ^!>yh4hI z@+OtIl39;rJ_eFGpEM_yf$VxY;fYpA9BVSw$>Fzkq zNOl;C16UXZEOsGq++da-OKNGi!(>ZxieTaJp-A(}Jny)jzT;U)984aQ4Nkb9Q?BPE zu3O&wxIx^VR;S69*f&90cMSV*T!g`CAd=izowOkDrl`P3~`wCzPzpJ(Nz(GC{!1>`)I z1fmQrBuq!iG)_c#fOu>~ks=Nfx39eYqQ`4k32s8tBa4b?XHNpdK_nV78*PgJqhc~j zg~Zg8VD@2`i`0xuSTi1pG7>Wpi6b&84k?^_vnkAU7io$qCth?p4(XU%KY@^t_O|+X z8|jisls)pUHSEU@l6M?Z!TR(Pv{+|xC|Jx)2(g?)Hac+ux;>F$VDHBtiPb(1J}z zqgl2+#lOb*m+Z#zsTUF>jl7T9^$}8bAgur`5)*QWAZ>gWC#y;!@$vf_BE+&M27jW~ zZ!QqCtR3svRrxm8ypl$yd@NNfmLZZ_{gDt4Sfq&rDdt0R4tihk~(}vyG7=@ zj7aEonCwgSEq$W9$x7|GNxSY8CBydjl-!Mj{z{OU5FlcWFv!-p{cH4Eg7;-OwgQ0z zdjPdP+Ne_7;T9%%0>$Yi^fohjj+1qWZ)K%eTL%Ch9>`U)on}55F~07+OWBwOwI3aG zG_Ja^SD*d4N#QX}v<2AWY0nNUJk&Me$B$hlhS!O6Ttf zatGv?cCu*In*+>co>aSGFA(p47)kLPYrus-D#4X0)avjijdrzjHUXnUWU7wRpH`Vy_tDf#tJNU!f}i$Xn6 zW}>gJ<`M6dIb|dJP^%~>WCyovs@g&VZ4cB5S@Iua$?Ks#GsJe+LN^0ZyS4`HjVeeb z^^>2(!2;_I(+w8}p#gCt-qPb|C_+!9%esu|V}_Rb2obz%5R0sU%hEL5SjDT9nM2|S z_7Agr@wGK4b-bZVMB+N5tV));vPR<#{e&QoncIc5h88iRrz7XHZlR5MV2al!(wpQI zTDB7avz69Sya?ypWV+?N`&g~>Xnw&CF%q9gdPLmU*UH_etD&NRN3J>S6FC1KWZ&q- z?a{*U=?fnwmh)m`_jw!83&yfZIv4Kg$&ilNT8l&A*2+qKKIKn_(&&NigsBd{T>H#- zLN5@iBFjX1;as>}&NibP;SHf&9zU~T7{0KPrR}?l|>0_T-9q2XXj64{+Hmcl~*|Z$n zx`i%5DXb_uB&-lTB&;tVUVq(5n8@--#0$PLQ-&}lo^^LT%?b3h8ewPP4`Y}cbVz7D zYvWK#uT<#_0X=UT_?!X(BzoFiTX%X%Th&RZd+yA*D` z--2qTkLN5cSAHK$6T%xiH`5f!h;y4Lh;!Y30kdsLbsE^3cy$VLH=e@BoeYrxIxP&W(<=wz7Bx%CiYB>rQ^SUgAH-Wj!@hQK zJD#TPIsPD$B;CSt7+5+u7|>SiCOOm|EKHgRj?w2v`kg-ld<)2ZE1VCAx9FT03B{C9 z_~%1jFTvMhBK90i3L!3PznTXh0_M+2ffT@a72DN>heV!vy&#T(<-B0e7gYf6o6!c5 z*H}JJMj`eQlwWquZ?c5g!B+^a3^+UAM!@Vu5GIk?unIUQ-$u|(r1HHmISzx{y-1uf zYN~@_71Y-@v=7UcU3gJntDy4Qus$qXpIQ1pb3+%>O3_{)|JVpX(eH>EBu}^xxUwCB zV$>BkLXq^8bZglEf?4sk$|tYfM#4h2#tD5S_+zMg)y*>)wqaM%&sFn)Ne9<@dr9wK2ygK9)J1gC>V#}JE}CoUTGXwi!eMpz5mALQ}*)cnZf zv-yB349ddir+se#OKLhrFhS&8OH4-X)e%?|=4JOJKXaLni>Vjtrh^BKt6-~7!I&#P z1X33>*n+m3swI^ngAgi`yXXsU`scMT%5_CE#$^1Y*R7~z>o=>00w71>agyH78!fUM zjPU|+U~vfX7M5zJmK>#2Uy?%UcUBp5@CbIH76u@B^&Ud z){0K959o&4!N13Sonm#Yomf7hSJn_955wo!I2Q37U!+cZCoczQHj6`N2(;|rcT|wIK69d!go}iB^jsmkA@j7WN-pi)|T^-ui zHrJ>7tA*kzllDv=Z?F3!m8oVU=g*V@SaJdAGMVylw91Ry^0#+DUiy?H<=R zk-Ter_-wKKhs}vLI;|d;PjlW+k6jy{k-3#n1kqqHr}RAM_!VI21-S;7od#Zvq4Hrt zMn3vy$F?hpm4Fs5(P{sszE6+@cH>AGXR}Aa-<>colSw0zPkVv^-1=cB%qOrNc&v#? z8xyqQ%dwZq!S0{OD=kjwB}&0=O|T#-?HZ4I=W|>$bChx*^Htpr@KW`UR96fHN*eH^ zKQnidPr6IBcnYNvVMSMd6qC#ajp5VYrT2|8r(qL~Z1EJ)Dn8jTz=2uv`>!%uGKqVIcTy+qW!I_HDEgIyhF>wur``ur7(MIb(pu z9Se(L#x9W7;gPC`@}rS@HV0(A7yA*f1r=K7_uXm7E4qjkov(Bl8aJGqL(b_@1W&31 zl3qG!Q*MV!_L{hvGg&2hU%In~It!YBEd*NCxT&Ab8$=gITbB{<4tAR|0) z5NGE*=7FqFUpOa;u{$9u_%1xUbwt#d=nWBqIS?Aq(>39ci5YJx#W~y5y^_IG%;6@M z%{2%i31}PH`Ue9=;A5;Quw=>KeU#UlD%GEb4P~o99vWhG z^_wB?8K)nC&y>6^+OES;ueX<>Yz6~s3Cqkq%*Z9eoKA>Un?~Jo!ctDr3R`S7sO(@a zNY59?ELziS&&b=Cu{Ti)(IjLs zz18_=7K3}1>j`*W5@cRW*KalL*CoNhRL|bXP|?xe%-Y1^S8-K!$@+Co@O(G!O{hd@ z`gFNZpr`=(r z+S~nGnP66Rittr}R?liKAI`WxW}Sn{LVCB0$@AznpCa**@}V<2yfX94l?W*q4ZqH8kBkh>vb(exdJ}3p9X+ zTD6QX?~ZLiDP75m4Iu;9HEO8tpsSCK&6^^s_Sh@)n3bx;*W+eth4*Cgdh08tf+B%q zB=<^7JRV)BK-Cs5$&hbZ%wOWN`$WYnsYK>;LI$~260+I(}~sMY>=4`c26Lyej^8hUt{1Zo9=U>8cbrasY(xea9HcdFrOncK|OL+D+ z#QZWwP+8vy^3%{@iKg(0EEAV$fx4W=W-6Futz$e>M6P-V>lokJt(Ike4?d-irf{%2 zHcefVN5|y`u4CnMmwifHHLcgDvSt?EQ9*iqDCAJO1`LQQKtd5n&{3Get&@mR9rK9J zH}hkG*gOW|uZ*n~k2))ONvU*l1QmEvOsMcSjFe$N-}cFOYhNYju2a_7z+1dOmQ zWfNJ})B_XHlQmPoxPHPI_OE2uyu&nQSTo)S(_9k&_7wV!oS#M#x05k_6->PsBj1)v zS+!PO85y%rrejhcjGeY$F^g2+D4Ngk_>dG9lU|?@hcFOYg-Q&a)l{1-2zM&*1%Ub;|Ok8+XYgM7ymjO1wZawvgt z>`iG}LFp%C%p@-i3AYoC*#K?JU@I9kTyp0U3m(*@D+DgYXjuxaf+PjCZML+&bwy2{dZe2I8 zHX4IcH+-6~a#i+_xs*QE>LDY@a3PUYiPS@H_eh=@UoK?!qdUOXL&PP&MBN~+!J==B z+sl)U7g4d19DXG1uvf zg%c#0gh#&rLpk;Wyo0+}M(J~2Ptr3&(j(|U!=`B=!l2q~OJwLZbRzs!ZP&N4v3QG^ z;YwOIsSK!|nKdsRwAzY-lQmG#$pVm)d36U>H7gn92=u`p4Vaf`3%@v_IntEusyoPHIdwps1`VeiCLAPjx$2#< zS}Z~-lb8ZX7+AJip<=p1sW&qTyU@}UR7SQcvWC&z?c~Y(?qgBkgC;}2n2UL^Fl5hn zI_L+{s%`W0C;#Na=kWZJFDtkzh7vcmDnDPi=YgfpHHcE#oFBZ34bkTpeO@t2=VM*B zD7xpzoFCUs7d!|-^05@XJOvi|Mt6les`qm88_ZOQ#r;LW&nS#wjgT5BNnKZ%B^$ls zXFEkQpE!FliFZ;X%8mux7;4J4MFbNy(~r7iN0(668>__rSw8|)R@rODtGjbsWIIrp zx3U%17dqu7jM?g}EjJcIbI&pXdT>M+M?WYxs)^(rYP4ae3a6nlSCXdY;xycDE=(I) zXJD~=m#g<)7#2rUpF*HQZN7e_pNYn7mhsli0L&js<`vISlU`4p>T*D*bvCSVg)bL4 zA4H^UBc`R_1n99~W;AbjFor#|s95Vze=9%H5;35P6T23tWzy7XRH>iC+X#UZ!kFZS zo)RzJjbHc?R_z&0i^!!0v?uMX7k;@#{rUn?SzZ<_S+<+7Cg4dHzHg>J-!S{@j*xN!Rbr|$ zw65B3W8!)wlMO5smtvUtXcstJ${k#(VkSpYtx&0To>*XFTuQK2nu_kuxz)hV%}buQ zI*-GZ$c9>7HvGkpB4(VGXR4Qq&ceK@KCgb>7VTR3m;d=dDZNt*rgDGeh%q{xHYI z>+u}%e5H1Q(tR@z@%{PiuC*v0Tkrf6%DKut58V2kpG1pmwF;a8N5OtJY68l{;GrnT z({k?3#XB$>exSyqKv7}yd`8?hLO#n@4wRH$I16DZ8=D02VL=OZM2(A)W9ggFiy0WA z_pmwr+)%MfP@Dek*F=jXMQIp6k5URTz^hrZFnC~Q+Z383)o{51x!*P2nl@@#Q#Zy$lw7roA|w-&pFF9;(&+@z~ieIt134*x%qwE0p6TP<15XxCVcE zwPpMOjH7jbTA;mx(#^bhy96!Nt+{4^4a*r$5@;RCVgl{7(J)Y!QT9&4Dke#13UVLsA!XR%7*tz}Y8 z7YnGNI3{fndNCEArm}EGoGY=j@}pchCxjzQA(4M7b-n1UqZ_^2RN+>dc*1_ynyX>! zacui#e+vA`%Knq9VdIIT3y<0@%HA|LZ4+9GAca(^L|6=jVI5yPHfIDg6L{`Ke&>qN3BB7fcVr!;}1)t<(~S6NX$rZ)~z>?Fs|Q&(beg12$yCj!{nc zmH}#|%GJLP#k^?r@G}~A(bB<(>FThJN!#Op$tKJ2rSqif+2zjsrD}o=(!nWLtS54z z0mU5i;vJB@I^IQhMJtX`VOoF+qi1Lp=IP{)azBK7qBf;_EyQzaD1D+E%N_W!ZYfoG zy)Tg~|@8NC5bq!Gv8t z`Vtd;SFvUOsBl3@Omu~EMi^}|k7Z7BW|QL*+89AqLFd?Ll$Mx55_S_qxO_|}(diki zQ+cHS^AXqw^b4v5EhjZv!lhbzNrMKiHimHV^r)Yhb)=KnOJ8j`=xo9hdy(-Jkg7Bf zgnvLcZGKNw0y||>K5r53AY9Uiu@->Z@}y2XlKAspf@y!MztVl(+z`@&m^ponWVHr&-GL zz{9`OqQ{Kw)?cl~FGLlTp1%Q*&kXeGKrc;Pf=q2lJ_%H(dKF0MsFq4Ds5gZ zoq5iZqrB|{Tb*{29;5C zHlQ8X7@(&k`*iQ^W(I5HFE4hJz@c!26k#lhcZ;}P;a)-rl5Q&m**JGve>fi6$}OG= zuyZ7i%6(AKe}pVgB60%>#QfPmh%&2yU5gBuL#K?!58yWSr){X?3kGBSsz+ngSqqTZ zhHz&pI_YyhcT;@7insuLI~f!7cZs6EWXtGjAbsK-+_EZ&;cnw(mo? zEyf|hSo4)z4_z4#2+xH0L!M?Qy8YLFOvyn^%U3$UN+8(|TwN52@anw6Dgz8Z*DQf5 zv4JI(L4`jq6%%;fns`p+tC48-x;XavE@&w74a}|#*lKVcW>xTj`fvY~5~Cp;OlJVPoF3 zjIC#*+$ph{F(`YtX2Pa7yU!hkUkwzPXn3{nT~RomAMkq`3h+$#Kg(&VVW^XPMtQL=$wB$XGocMyyYMm%Nms1B=KR3>-%kXv#k`J?qnH-7Ut)XJKv6Y zEesC+e$3v9XXw;fBCw>?m<~=@(?3ZuWO+xk-HtZ7Pg8~Km@I8y%t5+CBU+G=gulv{P+HbKp z8rT0Oi@(rqjTtiUW92&%GN6G{TK(KRif(2GtCvrQQv1aCXYtjEcECx+qmGiRt&xM)TUuQjH)P%Q22%VzLUjE{eO>vFXg(gn zRDI=D$*4_;Of2}=@K;u0^DPjP;$Kf*Ftc3-m9la@KGtfT;}!ri}GQ29wX)CKZJ22NRX?HzzvD)3fvWKs)hg^kbrYW&nHLle3nxM z5mGdAUu@2`r@dJe)l{){0uBFxW&c$Y(DL(!3u3%K4cM!h;lC+KyKfPjGrU$-_i z|8cs08~D$3#`R(-T-#WiOp#RU=+ZXzKyg7Rtf8%oh z)8C(L?l zq2Cy#zsK7{>w*1?U;6gA|9MLOi4rdL-@?_OH~ME>d-L-fCBeU|{huiJr=35$4}aO& zLI2Oah(9g-SpxaXLJt0K3;!;N{C{Bm^Vy4E5&L&<{7;X6Hqrm`IQe(Azgp^l8u+tz z_?H3PS1Q@7-@n85|K0Q(CHVJvn_=JIGyD&N@IT+}KPkd*y1!?w?EmQgMHv3`_W$I) n{bhyV^}YJn?f;9S{A>4%1t%v7`1Q#n10e%Rzj}kGd(- Date: Wed, 12 Mar 2025 15:36:07 +0530 Subject: [PATCH 02/52] Coderabit Comment resolved --- ...employee-master-bulk-upload.component.html | 1 - .../employee-master-bulk-upload.component.ts | 191 ++---------------- 2 files changed, 13 insertions(+), 179 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html index 35eeba34..2c202763 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html @@ -27,7 +27,6 @@

Bulk Member Upload

this.maxFileSize) { - console.log('File Size' + this.fileList[0].size / 1000 / 1000); - - this.error1 = false; - this.invalid_file_flag = false; - this.inValidFileName = false; - this.disableUpload = false; - this.showProgressBar = false; - } else { - this.error1 = false; - - this.invalid_file_flag = false; - this.inValidFileName = false; - this.disableUpload = false; - - const workBook: any = null; - // let workBook : any; - this.jsonData = null; - const reader = new FileReader(); - - // reader.onload = (event) => { - // const data = reader.result; - // workBook = ExcelJS.read(data, { type: 'binary' }); - // this.jsonData = workBook.SheetNames.reduce((initial: any, name: any) => { - // const sheet = workBook.Sheets[name]; - // initial[name] = ExcelJS.utils.sheet_to_json(sheet); - // return initial; - // }, {}); - // // this.dataString = JSON.stringify(jsonData.Sheet1); - - // } - this.enableUPloadButton = false; - reader.readAsBinaryString(this.file); - - const myReader: FileReader = new FileReader(); - myReader.onloadend = this.onLoadFileCallback.bind(this); - myReader.readAsDataURL(this.file); - this.invalid_file_flag = false; - this.disableUpload = false; - } - } else { - this.invalid_file_flag = true; - this.inValidFileName = false; - this.error1 = false; - - this.disableUpload = false; - this.showProgressBar = false; - } - } else { - //this.alertService.alert("Invalid file name", 'error'); - this.inValidFileName = true; - this.invalid_file_flag = false; - this.error1 = false; - this.disableUpload = false; - this.showProgressBar = false; - } - } else { - this.invalid_file_flag = false; - this.disableUpload = false; - this.showProgressBar = false; - } - } - } - checkExtension(file: any) { let count = 0; console.log('FILE DETAILS', file); @@ -167,66 +75,7 @@ export class EmployeeMasterBulkUploadComponent { this.showProgressBar = false; }; - // uploadFile() { debugger - // const fileExtenstion = this.file; - // const formData = new FormData(); - - // formData.append('file', fileExtenstion); - // formData.append('userName', this.dataService.uname) - - // const reader: FileReader = new FileReader(); - // reader.readAsBinaryString(target.files[0]); - // reader.onload = (e: any) => { - // const binarystr: string = e.target.result; - // const wb: XLSX.WorkBook = XLSX.read(binarystr, { type: 'binary' }); - // const wsname: string = wb.SheetNames[0]; - // const ws: XLSX.WorkSheet = wb.Sheets[wsname]; - // const data = XLSX.utils.sheet_to_json(ws); - // const xmlData = this.convertJsonToXml(data); - // const reqObj = { - // fileName: this.file.name, - // fileExtension: fileExtenstion[fileExtenstion.length - 1], - // fileContent: this.fileContent, - // providerServiceMapID: this.dataService.providerServiceMapID_104, - // createdBy: this.dataService.uname, - // }; - // this.showProgressBar = true; - // this.blockSubcenterMappingService - // .uploadData(formData) - // .subscribe((response: any) => { - // if (response && response.statusCode === 200) { - // this.showProgressBar = false; - // this.alertService.alert('File Uploaded successfully', 'success'); - // this.resetFileInput(); - // this.file = undefined; - // this.fileContent = null; - // this.disableUpload = true; - // } else { - // this.showProgressBar = false; - // this.alertService.alert(response.errorMessage, 'error'); - // this.resetFileInput(); - // this.file = undefined; - // this.fileContent = null; - // this.disableUpload = true; - // } - // }); - // (err: any) => { - // this.showProgressBar = false; - // this.alertService.alert(err.errorMessage, 'error'); - // this.resetFileInput(); - // this.file = undefined; - // this.fileContent = null; - // this.disableUpload = true; - // }; - // } - onFileUpload(event: any) { - // const fileExtenstion = this.file; - // const formData = new FormData(); - - // formData.append('file', fileExtenstion); - // formData.append('userName', this.dataService.uname) - const target: DataTransfer = event.target; if (target.files.length !== 1) { throw new Error('Cannot use multiple files'); @@ -243,9 +92,8 @@ export class EmployeeMasterBulkUploadComponent { const xmlData = this.convertJsonToXml(data); this.showProgressBar = true; - this.blockSubcenterMappingService - .memberBulkUploadXML(xmlData) - .subscribe((response: any) => { + this.blockSubcenterMappingService.memberBulkUploadXML(xmlData).subscribe( + (response: any) => { if (response) { this.showProgressBar = false; this.alertService.alert('File Uploaded successfully', 'success'); @@ -259,15 +107,16 @@ export class EmployeeMasterBulkUploadComponent { this.showProgressBar = false; this.alertService.alert(response.errorMessage, 'error'); } - }); - (err: any) => { - this.showProgressBar = false; - this.alertService.alert(err.errorMessage, 'error'); - this.resetFileInput(); - this.file = undefined; - this.fileContent = null; - this.disableUpload = true; - }; + }, + (err: any) => { + this.showProgressBar = false; + this.alertService.alert(err.errorMessage, 'error'); + this.resetFileInput(); + this.file = undefined; + this.fileContent = null; + this.disableUpload = true; + }, + ); }; } @@ -285,20 +134,6 @@ export class EmployeeMasterBulkUploadComponent { return xml.join(''); } - // formatDate(date: Date): string { - // const year = date.getFullYear(); - // const month = String(date.getMonth() + 1).padStart(2, '0'); - // const day = String(date.getDate()).padStart(2, '0'); - // return `${year}-${month}-${day}`; - // } - - // excelSerialToDate(serial: number): Date { - // const excelEpoch = new Date(1900, 0, 1); // January 1, 1900 - // const msPerDay = 86400000; // Number of milliseconds in a day - // return new Date(excelEpoch.getTime() + (serial - 2) * msPerDay); - - // } - resetFileInput() { const fileInput = document.getElementById( 'upload-file', From ff915212021f0d67782d1fbccf8e2de93a061440 Mon Sep 17 00:00:00 2001 From: Abhishek Yadav Date: Thu, 27 Mar 2025 12:32:45 +0530 Subject: [PATCH 03/52] Bulk user registration with excel file and sample excel file download --- ...employee-master-bulk-upload.component.html | 34 +++- .../employee-master-bulk-upload.component.ts | 168 +++++++++++++----- .../employee-master-new.component.html | 31 ++-- .../employee-master-new.component.ts | 12 -- .../block-subcenter-mapping-service.ts | 6 + src/assets/bulkuser_excel_sheet.xlsx | Bin 12657 -> 12929 bytes src/environments/environment.local.ts | 1 + 7 files changed, 173 insertions(+), 79 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html index 2c202763..da5bb93f 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.html @@ -1,7 +1,19 @@
-

Bulk Member Upload

+

Bulk User Upload

+
+
+
@@ -27,6 +39,7 @@

Bulk Member Upload

Bulk Member Upload ngModel #uploadfile="ngModel" /> - Invalid file name + Supported File Formats(.xls, .xlsx, .xlsm, .xlsb) + File size should not exceed {{ maxFileSize }}MB
Bulk Member Upload {{ errorloglist }}
+
+
+ +
+
diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts index e469bfd2..b90176bb 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts @@ -1,8 +1,12 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, ViewChild, OnInit } from '@angular/core'; import { BlockSubcenterMappingService } from '../services/block-subcenter-mapping-service'; import { ConfirmationDialogsService } from 'src/app/core/services/dialog/confirmation.service'; import { dataService } from 'src/app/core/services/dataService/data.service'; +import { MatTableDataSource } from '@angular/material/table'; +import { MatPaginator } from '@angular/material/paginator'; import * as XLSX from 'xlsx'; +import { MatDialog } from '@angular/material/dialog'; +import { Location } from '@angular/common'; @Component({ selector: 'app-employee-master-bulk-upload', @@ -10,9 +14,25 @@ import * as XLSX from 'xlsx'; styleUrls: ['./employee-master-bulk-upload.component.css'], }) export class EmployeeMasterBulkUploadComponent { + objs = new MatTableDataSource(); + + paginator!: MatPaginator; + @ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) { + this.paginator = mp; + this.setDataSourceAttributes(); + } + + filteredsearchResult = new MatTableDataSource(); + + setDataSourceAttributes() { + this.filteredsearchResult.paginator = this.paginator; + // this.objs.paginator = this.paginator; + } + file: any; fileList!: FileList; error1 = false; + error2 = false; successcount = false; invalid_file_flag = false; inValidFileName = false; @@ -29,10 +49,15 @@ export class EmployeeMasterBulkUploadComponent { filetotalCount = 0; errorloglist: any; + tableMode = true; + editMode = false; + constructor( public dataService: dataService, public blockSubcenterMappingService: BlockSubcenterMappingService, public alertService: ConfirmationDialogsService, + public dialog: MatDialog, + private location: Location, ) {} ngOnInit() { @@ -43,33 +68,6 @@ export class EmployeeMasterBulkUploadComponent { return this.showUpload; } - checkExtension(file: any) { - let count = 0; - console.log('FILE DETAILS', file); - if (file) { - const array_after_split = file.name.split('.'); - if (array_after_split.length === 2) { - const file_extension = array_after_split[array_after_split.length - 1]; - for (let i = 0; i < this.valid_file_extensions.length; i++) { - if ( - file_extension.toUpperCase() === - this.valid_file_extensions[i].toUpperCase() - ) { - count = count + 1; - } - } - if (count > 0) { - return true; - } else { - return false; - } - } else { - return false; - } - } else { - return true; - } - } onLoadFileCallback = (event: any) => { this.fileContent = event.currentTarget.result; this.showProgressBar = false; @@ -80,6 +78,41 @@ export class EmployeeMasterBulkUploadComponent { if (target.files.length !== 1) { throw new Error('Cannot use multiple files'); } + + const file = target.files[0]; + + // Validate file size (e.g., max size 10 MB) + const maxSizeInMB = 5; // Set your max file size (in MB) + const fileSizeInMB = file.size / 1000 / 1000; // Convert file size to MB + + // Check if the file size exceeds the limit + if (fileSizeInMB > maxSizeInMB) { + this.alertService.alert( + `File size exceeds the maximum allowed size of ${maxSizeInMB} MB`, + 'error', + ); + this.resetFileInput(); + return; // Exit early if the file is too large + } + + // Validate file extension + + const valid_file_extensions = ['.xls', '.xlsx', '.xlsm']; // Define the allowed extensions + const fileExtension = file.name.split('.').pop()?.toLowerCase(); // Extract file extension + + // Check if the file extension is valid + if ( + !fileExtension || + !valid_file_extensions.includes(`.${fileExtension}`) + ) { + this.alertService.alert( + 'Invalid file extension. Please upload a valid Excel', + 'error', + ); + this.resetFileInput(); + return; // Exit early if the extension is not valid + } + const reader: FileReader = new FileReader(); reader.readAsBinaryString(target.files[0]); reader.onload = (e: any) => { @@ -92,31 +125,39 @@ export class EmployeeMasterBulkUploadComponent { const xmlData = this.convertJsonToXml(data); this.showProgressBar = true; - this.blockSubcenterMappingService.memberBulkUploadXML(xmlData).subscribe( - (response: any) => { + this.blockSubcenterMappingService + .memberBulkUploadXML(xmlData) + .subscribe((response: any) => { if (response) { + this.fileuploadedCount = response.registeredUser; + this.filetotalCount = response.totalUser; + + if ( + Number(this.fileuploadedCount) !== Number(this.filetotalCount) + ) { + this.downloadFile(); + } this.showProgressBar = false; - this.alertService.alert('File Uploaded successfully', 'success'); + this.alertService.alert('File Uploaded', 'success'); + this.resetFileInput(); this.file = undefined; this.successcount = true; - this.fileuploadedCount = response.registeredUser; - this.filetotalCount = response.totalUser; + this.errorloglist = response.error; } else { this.showProgressBar = false; this.alertService.alert(response.errorMessage, 'error'); } - }, - (err: any) => { - this.showProgressBar = false; - this.alertService.alert(err.errorMessage, 'error'); - this.resetFileInput(); - this.file = undefined; - this.fileContent = null; - this.disableUpload = true; - }, - ); + }); + (err: any) => { + this.showProgressBar = false; + this.alertService.alert(err.errorMessage, 'error'); + this.resetFileInput(); + this.file = undefined; + this.fileContent = null; + this.disableUpload = true; + }; }; } @@ -140,4 +181,45 @@ export class EmployeeMasterBulkUploadComponent { ) as HTMLInputElement; fileInput.value = ''; } + + downloadMaster() { + const filePath = 'assets/bulkuser_excel_sheet.xlsx'; + + // Create a temporary link to trigger the download + const link = document.createElement('a'); + link.href = filePath; + link.download = 'bulkuser_excel_sheet.xlsx'; // Set the file name when downloaded + + // Trigger the click event on the anchor element to initiate the download + link.click(); + } + + downloadFile(): void { + this.blockSubcenterMappingService.downloadErrorExcel().subscribe( + (blob: Blob) => { + const link = document.createElement('a'); + const url = window.URL.createObjectURL(blob); // Create a URL for the Blob + link.href = url; + link.download = 'Error-log-file.xlsx'; // Set the desired filename + link.click(); // Programmatically trigger the download + window.URL.revokeObjectURL(url); // Clean up the URL object + }, + (error) => { + console.error('Download failed', error); + }, + ); + } + + back() { + this.alertService + .confirm( + 'confirm', + 'Do you really want to cancel? Any unsaved data would be lost', + ) + .subscribe((res) => { + if (res) { + this.location.back(); + } + }); + } } diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index df744c57..836b4ed2 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -3,26 +3,6 @@

Employee Master

-
- - - -
@@ -141,6 +121,17 @@

Employee Master

mat-raised-button color="primary" class="pull-right mat_blue" + (click)="uploadMaster()" + style="margin-left: 10px" + > + Bulk User Upload + +
+
+
From ea412e9ae02951f1467a284ac80b990733e4457e Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 8 Sep 2025 13:08:55 +0530 Subject: [PATCH 08/52] fix: amm-1839 sms template saving issue in admin --- .../configurations/sms-template/sms-template.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/configurations/sms-template/sms-template.component.ts b/src/app/app-provider-admin/provider-admin/configurations/sms-template/sms-template.component.ts index f04794b9..02808972 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/sms-template/sms-template.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/sms-template/sms-template.component.ts @@ -392,7 +392,7 @@ export class SmsTemplateComponent implements OnInit, AfterViewInit { saveSMStemplate(form_values: any) { const requestObject = { - createdBy: this.commonData.Userdata.userName, + createdBy: this.commonData.uname, providerServiceMapID: this.providerServiceMapID, smsParameterMaps: this.smsParameterData.data, smsTemplate: form_values.smsTemplate, From eb76d43016675368da4516c7f9f3c2b2e30562c7 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Thu, 11 Sep 2025 19:12:00 +0530 Subject: [PATCH 09/52] fix: amm-1806 Added signature in a table and maganging upload, download, view, activate/deactivate, and serach by username --- .../employee-parking-place-mapping.service.ts | 4 + .../configurations/configurations.module.ts | 6 + .../user-signature-mapping.component.css | 45 ++++ .../user-signature-mapping.component.html | 162 +++++++----- .../user-signature-mapping.component.ts | 244 +++++++++++++++--- 5 files changed, 370 insertions(+), 91 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts b/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts index 2dbdebb8..115aa098 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts @@ -124,4 +124,8 @@ export class EmployeeParkingPlaceMappingService { observe: 'response', }); } + + activateOrDeActivateSignature(data: any) { + return this.http.post(environment.signatureStatus, data); + } } diff --git a/src/app/app-provider-admin/provider-admin/configurations/configurations.module.ts b/src/app/app-provider-admin/provider-admin/configurations/configurations.module.ts index a7119996..78b36204 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/configurations.module.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/configurations.module.ts @@ -47,6 +47,9 @@ import { WrapupTimeConfigurationService } from 'src/app/core/services/ProviderAd import { CoreModule } from 'src/app/core/core.module'; import { EmailConfigurationComponent } from './email-configuration/email-configuration.component'; import { EmailConfigurationService } from 'src/app/core/services/ProviderAdminServices/email-configuration-services.service'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatSortModule } from '@angular/material/sort'; +import { MatInputModule } from '@angular/material/input'; @NgModule({ declarations: [ @@ -83,6 +86,9 @@ import { EmailConfigurationService } from 'src/app/core/services/ProviderAdminSe MatIconModule, MatNativeDateModule, CoreModule, + MatPaginatorModule, + MatSortModule, + MatInputModule, ], providers: [ SnomedMasterService, diff --git a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.css b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.css index 413bee2c..a90741d3 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.css +++ b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.css @@ -7,4 +7,49 @@ border:none; margin:0; padding:0; +} +.mat-header-cell, +.mat-cell { + text-align: left; /* or left/right depending on need */ + vertical-align: middle; +} +.title { + margin: 0; + padding: 10px; + margin-bottom: 10px; + color: white; + font-weight:700; + font-size: 18px; + background-color: #0277bd !important; + } + + .message { + font: 500 20px / 32px Roboto, "Helvetica Neue", sans-serif; + padding:0px 24px 0px 24px; + + } + + .info { + background: #0277bd; + } + + .signature-container { + display: flex; + justify-content: center; /* center image horizontally */ + margin: 20px 0; /* space top & bottom */ +} + +.signature-img { + max-width: 100%; + max-height: 200px; +} + +.action { + display: flex; + justify-content: flex-end; /* align button right */ + margin: 20px 20px 10px 0; /* spacing: top right bottom left */ +} + +.ok-btn { + margin-right: 10px; /* small gap from edge */ } \ No newline at end of file diff --git a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html index 9436c4c5..6386f3c8 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html @@ -8,79 +8,117 @@

User Signature Mapping

Designation - + {{ item.designationName }}
-
- - UserName - - - {{ item.userName }} - - - -
-
- - - - -
-
+
img -
-
- +
-
+ + +
+ +
+ + + search + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Role {{ element.role }} Username {{ element.username }} Upload + + + Download + + View + + Active + + +
+ +
+ + + + +

{{ data.username }}'s Signature

+ +
+ signature +
+ +
+ +
+
+ +
\ No newline at end of file diff --git a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.ts b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.ts index d64048ea..2efa6592 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.ts @@ -19,20 +19,21 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see https://www.gnu.org/licenses/. */ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core'; import { FormBuilder, FormGroup, - FormControl, - FormArray, - NgForm, Validators, } from '@angular/forms'; import { ConfirmationDialogsService } from 'src/app/core/services/dialog/confirmation.service'; import { EmployeeParkingPlaceMappingService } from '../../activities/services/employee-parking-place-mapping.service'; import { dataService } from 'src/app/core/services/dataService/data.service'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; - +import { MatDialog } from '@angular/material/dialog'; +import { map, Observable, forkJoin, switchMap, takeUntil, Subject } from 'rxjs'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; @Component({ selector: 'app-user-signature-mapping', templateUrl: './user-signature-mapping.component.html', @@ -50,6 +51,12 @@ export class UserSignatureMappingComponent implements OnInit { public imagePath: any; imgURL: any; enableDownloadButton = false; + displayedColumns: string[] = ['role', 'username', 'upload', 'download', 'view', 'active']; + userSignatureTable: any[] = []; + selectedUser: any; + dataSource = new MatTableDataSource([]); + private destroy$ = new Subject(); + constructor( private fb: FormBuilder, @@ -57,14 +64,37 @@ export class UserSignatureMappingComponent implements OnInit { private alertMessage: ConfirmationDialogsService, private dataService: dataService, readonly sessionstorage: SessionStorageService, - ) {} + private dialog: MatDialog, + + ) { } + + @ViewChild('signatureDialog') signatureDialog!: TemplateRef; + @ViewChild(MatPaginator) paginator!: MatPaginator; + @ViewChild(MatSort) sort!: MatSort; ngOnInit() { this.signUploadForm = this.createSignUploadForm(); this.createdBy = this.dataService.uname; this.serviceProviderID = this.sessionstorage.getItem('service_providerID'); this.getDesignations(); + + this.dataSource.filterPredicate = (data: any, filter: string) => { + const dataStr = (data.role + data.username).toLowerCase(); + return dataStr.includes(filter); + }; + } + + ngAfterViewInit() { + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + ngAfterViewChecked() { + if (this.paginator && this.dataSource.paginator !== this.paginator) { + this.dataSource.paginator = this.paginator; + } } + createSignUploadForm() { return this.fb.group({ designation: [null, Validators.required], @@ -87,42 +117,91 @@ export class UserSignatureMappingComponent implements OnInit { }, ); } + + getUserNames() { const reqObj = { designationID: this.designation.designationID, serviceProviderID: this.serviceProviderID, }; + this.employeeParkingPlaceMappingService .getUserNameBasedOnDesig(reqObj) + .pipe( + switchMap((response: any) => { + if (!response?.data) return []; + this.userNames = response.data; + + // map users to observables + const requests = this.userNames.map((user: any) => + this.employeeParkingPlaceMappingService + .checkUsersignatureExist(user.userID) + .pipe( + map((signRes: any) => ({ + role: this.designation.designationName, + username: user.userName, + userID: user.userID, + signatureStatus: user?.signatureStatus || 'InActive', + signatureUrl: signRes?.data?.signatureUrl || null, + signExist: signRes?.data?.response || false, + active: signRes?.data?.active || false, + statusID: String(signRes?.data?.response).toLowerCase() === 'true', + })) + ) + ); + + return forkJoin(requests).pipe( + map(results => results as any[]) + ); // run all requests in parallel and cast result to any[] + }), + takeUntil(this.destroy$) + ) .subscribe( - (response: any) => { - if (response && response.data) this.userNames = response.data; - }, - (err) => { - console.log('usernames not fetched'); + (usersWithSignatures: any[]) => { + this.userSignatureTable = usersWithSignatures; + this.dataSource.data = this.userSignatureTable; }, + () => console.log('Usernames not fetched') ); } + + + // When a user is selected checkUsersignExist() { this.imgURL = null; + this.selectedUser = this.username; // Store selected user for table + this.employeeParkingPlaceMappingService .checkUsersignatureExist(this.username.userID) .subscribe( (response: any) => { this.signExist = response.data.response; - if (this.signExist === 'true') { - this.enableDownloadButton = true; - } else { - this.enableDownloadButton = false; - } + this.enableDownloadButton = this.signExist === 'true'; + + // Fill table data (example format) + this.userSignatureTable = [ + { + role: this.designation.designationName, + username: this.username.userName, + signatureUrl: response.data.signatureUrl || null, + active: response.data.active || false, + userID: this.username.userID, + statusID: this.username.statusID + }, + ]; + this.dataSource.data = this.userSignatureTable }, (err) => { console.log('Error while fetching response'); - }, + } ); } + public message: any; - preview(files: any) { + + preview(files: any, row: any) { + + this.selectedUser = row.userID; if (files.length === 0) return; const imgType = files[0].type; @@ -138,6 +217,7 @@ export class UserSignatureMappingComponent implements OnInit { this.checkImageSize(reader); }; } + checkImageSize(reader: any) { if (this.imagePath.size > 20000) { this.alertMessage.alert('Image size should be less than 20kb'); @@ -165,13 +245,14 @@ export class UserSignatureMappingComponent implements OnInit { createdBy: this.createdBy, fileName: this.imagePath.name, fileType: this.imagePath.type, - userID: this.username.userID, + userID: this.selectedUser, fileContent: this.imgURL !== undefined ? this.imgURL.split(',')[1] : '', }; this.employeeParkingPlaceMappingService.uploadSignature(signObj).subscribe( (response) => { this.alertMessage.alert('Saved successfully', 'success'); - this.signUploadForm.reset(); + this.getUserNames(); // Refresh table to show new signature + this.imgURL = null; this.signExist = null; this.enableDownloadButton = false; @@ -182,25 +263,130 @@ export class UserSignatureMappingComponent implements OnInit { }, ); } - downloadSign() { + + private processDownloadResponse(response: any): { filename: string; url: string } { + let filename = 'signature.png'; + const contentDisposition = response.headers.get('content-disposition'); + + if (contentDisposition) { + const utf8FilenameRegex = /filename\*\=UTF-8''(.+)/; + const asciiFilenameRegex = /filename="?([^"]+)"?/; + + let matches = utf8FilenameRegex.exec(contentDisposition); + if (matches?.[1]) { + filename = decodeURIComponent(matches[1]); + } else { + matches = asciiFilenameRegex.exec(contentDisposition); + if (matches?.[1]) { + filename = decodeURIComponent(matches[1]); + } + } + } + const blob = new Blob([response.body!], { type: response.body!.type }); + const url = URL.createObjectURL(blob); + + return { filename, url }; + } + + downloadSign(row: any) { this.employeeParkingPlaceMappingService - .downloadSign(this.username.userID) + .downloadSign(row?.userID) .subscribe( - (response: any) => { - const filename = response.headers.get('filename'); - // let blobResponse = response.body.blob(); - const blob = new Blob([response], { type: response.type }); - console.log(blob, 'blob'); - const url = window.URL.createObjectURL(blob); + (response) => { + const { filename, url } = this.processDownloadResponse(response); + const a = document.createElement('a'); a.href = url; a.download = filename; - document.body.appendChild(a); a.click(); + + URL.revokeObjectURL(url); }, (err) => { this.alertMessage.alert(err.errorMessage, 'error'); + } + ); + } + + downloadSignature(userID: any): Observable { + return this.employeeParkingPlaceMappingService.downloadSign(userID).pipe( + map((response) => { + const { url } = this.processDownloadResponse(response); + return url; + }) + ); + } + + // View signature popup + openSignatureDialog(row: any) { + if (!row.userID) { + this.alertMessage.alert('No signature uploaded for this user'); + return; + } + + this.downloadSignature(row.userID).subscribe( + (signatureUrl: string) => { + // Open dialog with image + this.dialogRef = this.dialog.open(this.signatureDialog, { + width: '400px', + data: { + username: row.username, + signatureUrl: signatureUrl + }, + }); + }, + (err) => { + this.alertMessage.alert('Error fetching signature', 'error'); + } + ); + } + applyFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + // Toggle signature status + toggleActive(row: any, action: boolean) { + const req = { userID: row.userID, active: action, role: this.designation.designationName, username: row.username }; + this.alertMessage + .confirm( + 'confirm', + 'Are you sure you want to ' + (action ? 'activate' : 'deactivate') + ' this signature?', + ).subscribe( + (res) => { + if (res) { + + this.employeeParkingPlaceMappingService + .activateOrDeActivateSignature(req) + .subscribe( + + () => { + if (action) + this.alertMessage.alert('Signature has been Activated', 'success') + else + this.alertMessage.alert('Signature has been Deactivated', 'success'); + + this.getUserNames(); // Refresh table to show new signature + + }, + (err) => { + this.alertMessage.alert('Error updating status', 'error'); + row.active = !row.active; // rollback on failure + } + ); + } + }, + (err) => { + console.log(err); }, ); } + + dialogRef: any; + + closeDialog(): void { + if (this.dialogRef) { + this.dialogRef.close(); + } + } } From 77066668a76913e23cdcc182167e29971033cd44 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Fri, 19 Sep 2025 16:35:44 +0530 Subject: [PATCH 10/52] fix: resolved code rabbit comments --- .../employee-parking-place-mapping.service.ts | 2 +- .../user-signature-mapping.component.html | 8 ++++---- .../user-signature-mapping.component.ts | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts b/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts index 115aa098..183ca9fe 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/employee-parking-place-mapping.service.ts @@ -127,5 +127,5 @@ export class EmployeeParkingPlaceMappingService { activateOrDeActivateSignature(data: any) { return this.http.post(environment.signatureStatus, data); - } + } } diff --git a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html index 6386f3c8..4e711208 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/configurations/user-signature-mapping/user-signature-mapping.component.html @@ -37,7 +37,7 @@

User Signature Mapping

- @@ -67,7 +67,7 @@

User Signature Mapping

@@ -78,7 +78,7 @@

User Signature Mapping

@@ -87,7 +87,7 @@

User Signature Mapping

@@ -183,8 +183,8 @@

Van Service Point Mapping

@@ -195,7 +195,7 @@

Van Service Point Mapping

Download View + [disabled]="!element.signExist">View Active diff --git a/src/app/app-provider-admin/provider-admin/configurations/van-service-point-mapping/van-service-point-mapping.component.ts b/src/app/app-provider-admin/provider-admin/configurations/van-service-point-mapping/van-service-point-mapping.component.ts index 859b9410..56f7159e 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/van-service-point-mapping/van-service-point-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/van-service-point-mapping/van-service-point-mapping.component.ts @@ -37,14 +37,10 @@ import { SessionStorageService } from 'Common-UI/src/registrar/services/session- export class VanServicePointMappingComponent implements OnInit, AfterViewInit { // [x: string]: any; filteredsearchResultArray = new MatTableDataSource(); - // bufferArray = new MatTableDataSource(); - // @ViewChild(MatPaginator) paginator: MatPaginator | null = null; - paginator!: MatPaginator; - @ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) { - this.paginator = mp; - this.setDataSourceAttributes(); - } + @ViewChild(MatPaginator) paginator!: MatPaginator; + + // @ViewChild(MatSort) sort!: MatSort; setDataSourceAttributes() { this.filteredsearchResultArray.paginator = this.paginator; } @@ -136,6 +132,11 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { this.filteredsearchResultArray.paginator = this.paginator; } + ngAfterViewChecked() { + if (this.paginator && this.filteredsearchResultArray.paginator !== this.paginator) { + this.filteredsearchResultArray.paginator = this.paginator; + } + } getServiceLines() { this.vanServicePointMappingService .getServiceLinesNew(this.userID) @@ -350,7 +351,8 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { console.log('response', response); console.log('response.data', response.data); const temp: any = this.MappingForm.controls['mappings'] as FormArray; - this.filteredsearchResultArray.data = response.data; + // this.filteredsearchResultArray.data = response.data; + this.filteredsearchResultArray = new MatTableDataSource(response.data); this.filteredsearchResultArray.paginator = this.paginator; console.log( 'this.filteredsearchResultArray.data', @@ -398,19 +400,26 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { } } - getCheckedData(VSession: any, index: any) { - const formData = this.MappingForm.controls['mappings'].value; - console.log('formData', formData); - if (VSession === 'vanSession1' && formData[index].vanSession1) { - return true; - } else if (VSession === 'vanSession2' && formData[index].vanSession2) { - return true; - } else if (VSession === 'vanSession3' && formData[index].vanSession3) { - return true; - } - return false; + getCheckedData(VSession: string, row: any) { + const mappingsArray = this.MappingForm.controls['mappings'].value; + + // find the mapping by unique servicePointID + const mapping = mappingsArray.find( + (m: any) => m.servicePointID === row.servicePointID + ); + + if (!mapping) return false; + + if (VSession === 'vanSession1') { + return mapping.vanSession1; + } else if (VSession === 'vanSession2') { + return mapping.vanSession2; + } else if (VSession === 'vanSession3') { + return mapping.vanSession3; } + return false; +} servicePointIDList: any = []; createItem(obj: any): FormGroup { console.log('objCreateItem', obj); @@ -438,31 +447,7 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { vanSession3: vanSession === 3, }); } - checkboxChange(event: any, checkboxName: any, i: any) { - const mappingsArray = this.MappingForm.get('mappings'); - const mappingGroup = mappingsArray.controls[i]; - const temp2: any = this.MappingForm.controls['mappings'] as FormArray; - - if (checkboxName === 'vanSession1') { - mappingGroup.controls['vanSession1'].setValue(event.checked); - mappingGroup.controls['vanSession1'].markAsTouched(); - // localStorage.setItem('vanSession1', event.checked); - } else if (checkboxName === 'vanSession2') { - mappingGroup.controls['vanSession2'].setValue(event.checked); - mappingGroup.controls['vanSession2'].markAsTouched(); - // localStorage.setItem('vanSession2', event.checked); - } - console.log( - 'vanSession1 value:', - mappingGroup.controls['vanSession1'].value, - ); - console.log( - 'vanSession2 value:', - mappingGroup.controls['vanSession2'].value, - ); - console.log('CKFIRST', this.MappingForm.value); - console.log('temp2', temp2); - } + vanID: any; selectedVan(van: any) { (this.vanID = van.vanID), @@ -470,24 +455,55 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { (this.parkingPlaceID = van.parkingPlaceID); } + checkboxChange(event: any, checkboxName: string, row: any) { + const mappingsArray = this.MappingForm.get('mappings'); + + // find index by unique ID + const index = mappingsArray.controls.findIndex( + (ctrl: any) => ctrl.value.servicePointID === row.servicePointID + ); + + if (index === -1) return; + + const mappingGroup = mappingsArray.controls[index]; + + if (checkboxName === 'vanSession1') { + mappingGroup.controls['vanSession1'].setValue(event.checked); + mappingGroup.controls['vanSession1'].markAsTouched(); + } else if (checkboxName === 'vanSession2') { + mappingGroup.controls['vanSession2'].setValue(event.checked); + mappingGroup.controls['vanSession2'].markAsTouched(); + } + + console.log('Updated FormArray:', this.MappingForm.value); +} + + storeVanServicePointMapping() { - console.log(this.MappingForm.value); + console.log("SERVrice ID:",this.MappingForm.value); const mappings = this.MappingForm.value.mappings; const mappingArray = this.MappingForm.controls['mappings']; + + for (let i = 0; i < mappings.length; i++) { const mappingGroup = mappingArray.controls[i]; + console.log("Mapping Group:", mappingGroup); console.log(mappingGroup.controls['vanSession1'].touched); if ( mappingGroup.controls['vanSession1'].touched || mappingGroup.controls['vanSession2'].touched ) { + console.log("vanServicePointMapID:",mappings[i].vanServicePointMapID); + console.log("Service Point Id", mappings[i].servicePointID); + + this.vanServicePointMappingObj = {}; this.vanServicePointMappingObj.vanServicePointMapID = mappings[i].vanServicePointMapID; this.vanServicePointMappingObj.vanID = this.vanID; - this.vanServicePointMappingObj.servicePointID = - mappings[i].servicePointID; + this.vanServicePointMappingObj.servicePointID = mappings[i].servicePointID; + if (mappings[i].vanSession1) { this.vanServicePointMappingObj.vanSession = 1; } @@ -505,6 +521,7 @@ export class VanServicePointMappingComponent implements OnInit, AfterViewInit { this.vanServicePointMappingList.push(this.vanServicePointMappingObj); } } + console.log('Req body:', this.vanServicePointMappingList); const obj = { vanServicePointMappings: this.vanServicePointMappingList }; this.vanServicePointMappingService .saveVanServicePointMappings(obj) From 89a5fcdf6dd307785ce3fad2a78faf62c52d1ed8 Mon Sep 17 00:00:00 2001 From: SnehaRH <77656297+snehar-nd@users.noreply.github.com> Date: Tue, 14 Oct 2025 17:29:22 +0530 Subject: [PATCH 15/52] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dd4f08a6..11960362 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.iemr.admin-ui admin-ui - 3.4.0 + 3.4.1 Admin-UI Piramal - admin: Module ui From 2ad4ce0f257b324f03743c8a74000256cda9e950 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Thu, 23 Oct 2025 14:54:11 +0530 Subject: [PATCH 16/52] fix: amm-1907 user parking place mapping --- .../employee-parking-place-mapping.component.html | 1 + .../employee-parking-place-mapping.component.ts | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html index 9bfd8a27..6b998611 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html @@ -493,6 +493,7 @@

Edit User Parking Place Mapping

> diff --git a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts index a7ad314b..7297789b 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts @@ -31,6 +31,8 @@ import { MappedVansComponent } from '../mapped-vans/mapped-vans.component'; import { MatTableDataSource } from '@angular/material/table'; import { MatPaginator } from '@angular/material/paginator'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; +import { MatSort } from '@angular/material/sort'; + @Component({ selector: 'app-employee-parking-place-mapping', @@ -42,6 +44,7 @@ export class EmployeeParkingPlaceMappingComponent paginator!: MatPaginator; @ViewChild('paginatorFirst') paginatorFirst!: MatPaginator; @ViewChild('paginatorSecond') paginatorSecond!: MatPaginator; + @ViewChild(MatSort) sort!: MatSort; [x: string]: any; filteredavailableEmployeeParkingPlaceMappings = new MatTableDataSource(); @@ -318,7 +321,7 @@ export class EmployeeParkingPlaceMappingComponent } availableEmployeeParkingPlaceMappings: any = []; remainingMaps: any = []; - getEmployeeParkingPlaceMappingsSuccessHandler(response: any) { + getEmployeeParkingPlaceMappingsSuccessHandler(response: any) { this.tableMode = true; this.availableEmployeeParkingPlaceMappings = []; this.filteredavailableEmployeeParkingPlaceMappings.data = []; @@ -326,6 +329,8 @@ export class EmployeeParkingPlaceMappingComponent this.filteredavailableEmployeeParkingPlaceMappings.data = response.data; this.filteredavailableEmployeeParkingPlaceMappings.paginator = this.paginatorSecond; + this.filteredavailableEmployeeParkingPlaceMappings.sort = this.sort; + } parkingPlaceID: any; selectedParkingPlace( From 45fd41496a3ef58f77b3ac93a85059f5e2501691 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 27 Oct 2025 14:16:18 +0530 Subject: [PATCH 17/52] Fix environment properties and resolve compilation errors --- Common-UI | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Common-UI b/Common-UI index 6412a482..6bb2b204 160000 --- a/Common-UI +++ b/Common-UI @@ -1 +1 @@ -Subproject commit 6412a482513a89ab2793422fb1cbbbe95d330324 +Subproject commit 6bb2b204b7381300cb9d0436c8f57c3fe86cb0e0 diff --git a/package.json b/package.json index 0df91aa4..08a00180 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve", + "start": "ng serve Admin-UI", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test", From d28a50ed9ab4bd48f41eb0077efafa49e72a0747 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 27 Oct 2025 14:23:44 +0530 Subject: [PATCH 18/52] Add missing environment properties to all environment files --- src/environments/environment.local.ts | 5 +++++ src/environments/environment.prod.ts | 5 +++++ src/environments/environment.test.ts | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 4050a08c..24146878 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -508,4 +508,9 @@ export const environment = { siteKey: siteKey, captchaChallengeURL: captchaChallengeURL, enableCaptcha: enableCaptcha, + + // Missing properties that services are trying to use + getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, + getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + signatureStatus: `${adminBaseUrl}signature1/status`, }; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index e1090e6e..35130886 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -506,4 +506,9 @@ export const environment = { siteKey: siteKey, captchaChallengeURL: captchaChallengeURL, enableCaptcha: enableCaptcha, + + // Missing properties that services are trying to use + getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, + getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + signatureStatus: `${adminBaseUrl}signature1/status`, }; diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 44d123c6..f1a7bec4 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -498,4 +498,9 @@ export const environment = { //ABDM Facility getAbdmFacilities: `${fhirBaseUrl}facility/getAbdmRegisteredFacilities`, + + // Missing properties that services are trying to use + getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, + getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + signatureStatus: `${adminBaseUrl}signature1/status`, }; From e9a9a1cfb0d4c2f60fb998370d2a68a5290c8d00 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 27 Oct 2025 14:35:49 +0530 Subject: [PATCH 19/52] Fix Angular Material module imports and resolve compilation errors --- Common-UI | 2 +- .../provider-admin/activities/activities.module.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Common-UI b/Common-UI index 6412a482..6bb2b204 160000 --- a/Common-UI +++ b/Common-UI @@ -1 +1 @@ -Subproject commit 6412a482513a89ab2793422fb1cbbbe95d330324 +Subproject commit 6bb2b204b7381300cb9d0436c8f57c3fe86cb0e0 diff --git a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts index b6dc2968..7acde32d 100644 --- a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts +++ b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts @@ -9,6 +9,8 @@ import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatNativeDateModule } from '@angular/material/core'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTableModule } from '@angular/material/table'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatSortModule } from '@angular/material/sort'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ProviderAdminRoleService } from './services/state-serviceline-role.service'; import { MaterialModule } from 'src/app/core/material.module'; @@ -173,6 +175,9 @@ import { CoreModule } from 'src/app/core/core.module'; MatNativeDateModule, MatTooltipModule, MatTableModule, + MatPaginatorModule, + MatSortModule, + MatButtonModule, MaterialModule, FormsModule, ReactiveFormsModule, From 6e9739c4a7251e8c32e7cd1a3c2970e0cd22906f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 29 Oct 2025 17:47:15 +0530 Subject: [PATCH 20/52] fix: import FormsModule in ActivitiesModule; export MatCheckboxModule --- .../activities/activities.module.ts | 26 +------------------ src/app/core/material.module.ts | 13 ++++++++++ 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts index 5912fae6..449749aa 100644 --- a/src/app/app-provider-admin/provider-admin/activities/activities.module.ts +++ b/src/app/app-provider-admin/provider-admin/activities/activities.module.ts @@ -1,16 +1,5 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MatSelectModule } from '@angular/material/select'; -import { MatInputModule } from '@angular/material/input'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatNativeDateModule } from '@angular/material/core'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { MatTableModule } from '@angular/material/table'; -import { MatPaginatorModule } from '@angular/material/paginator'; -import { MatSortModule } from '@angular/material/sort'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ProviderAdminRoleService } from './services/state-serviceline-role.service'; import { MaterialModule } from 'src/app/core/material.module'; @@ -111,7 +100,7 @@ import { ProjectConfigutationScreenComponent } from './project-configutation-scr import { ProjectConfigurationService } from './services/project-configuration-service'; import { AddFieldsToProjectComponent } from './add-fields-to-project/add-fields-to-project.component'; import { AddFieldsService } from './services/add-fields-service'; -import { MatChipGrid, MatChipsModule } from '@angular/material/chips'; +import { MatChipsModule } from '@angular/material/chips'; import { CoreModule } from 'src/app/core/core.module'; @NgModule({ @@ -168,22 +157,9 @@ import { CoreModule } from 'src/app/core/core.module'; ], imports: [ CommonModule, - MatSelectModule, - MatInputModule, - MatFormFieldModule, - MatIconModule, - MatDialogModule, - MatDatepickerModule, - MatNativeDateModule, - MatTooltipModule, - MatTableModule, - MatPaginatorModule, - MatSortModule, - MatButtonModule, MaterialModule, FormsModule, ReactiveFormsModule, - MatNativeDateModule, MatChipsModule, CoreModule, ], diff --git a/src/app/core/material.module.ts b/src/app/core/material.module.ts index 304ea092..cda068d1 100644 --- a/src/app/core/material.module.ts +++ b/src/app/core/material.module.ts @@ -12,10 +12,13 @@ import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatDialogModule } from '@angular/material/dialog'; import { MatSelectModule } from '@angular/material/select'; +import { MatOptionModule } from '@angular/material/core'; import { MatMenuModule } from '@angular/material/menu'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatButtonModule } from '@angular/material/button'; import { MatInputModule } from '@angular/material/input'; +import { MatFormFieldModule } from '@angular/material/form-field'; import { MatRadioModule } from '@angular/material/radio'; import { MatStepperModule } from '@angular/material/stepper'; import { MatExpansionModule } from '@angular/material/expansion'; @@ -25,6 +28,7 @@ import { MatListModule } from '@angular/material/list'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatTableModule } from '@angular/material/table'; +import { MatSortModule } from '@angular/material/sort'; @NgModule({ imports: [ @@ -40,9 +44,12 @@ import { MatTableModule } from '@angular/material/table'; MatDialogModule, MatProgressSpinnerModule, MatSelectModule, + MatOptionModule, MatButtonToggleModule, + MatButtonModule, MatSlideToggleModule, MatInputModule, + MatFormFieldModule, MatRadioModule, MatStepperModule, MatExpansionModule, @@ -54,6 +61,7 @@ import { MatTableModule } from '@angular/material/table'; MatListModule, MatSnackBarModule, MatTableModule, + MatSortModule, ], providers: [], exports: [ @@ -70,9 +78,12 @@ import { MatTableModule } from '@angular/material/table'; MatDialogModule, MatProgressSpinnerModule, MatSelectModule, + MatOptionModule, MatButtonToggleModule, + MatButtonModule, MatSlideToggleModule, MatInputModule, + MatFormFieldModule, MatRadioModule, MatStepperModule, MatExpansionModule, @@ -83,6 +94,8 @@ import { MatTableModule } from '@angular/material/table'; MatProgressBarModule, MatListModule, MatSnackBarModule, + MatTableModule, + MatSortModule, ], }) export class MaterialModule {} From 4d2111055cdb981e5a0350b457b80b162f6e964d Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 29 Oct 2025 18:36:37 +0530 Subject: [PATCH 21/52] fix: add missing getXMLDataUploadUrl and getDataUploadErrorExcel properties to environment files --- src/environments/environment.ci.ts.template | 3 +++ src/environments/environment.local.ts | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index a60e137b..5b9ab5b9 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -507,5 +507,8 @@ export const environment = { captchaChallengeURL: captchaChallengeURL, enableCaptcha: enableCaptcha, + // Missing properties that services are trying to use + getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, + getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, signatureStatus: `${adminBaseUrl}signature1/activateOrdeActivateSignature` }; diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 24146878..416550cd 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -83,8 +83,6 @@ export const environment = { getQuestionType_url: `${commonBaseURL}questionTypeController/get/questionTypeList`, editQuestionnaire_url: `${adminBaseUrl}editQuestionnaire`, getBlockSubcentreDataUploadUrl: `${adminBaseUrl}uptsu/saveFacility`, - getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, - getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, getServiceLines_newrole_url: `${adminBaseUrl}m/role/serviceNew`, getStates_newparking_url: `${adminBaseUrl}m/role/stateNew`, From a3011e24e671ed84dfc8d1bd987bfd7f5d1eff78 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Wed, 29 Oct 2025 18:58:30 +0530 Subject: [PATCH 22/52] fix: add navigation functionality for bulk user upload button --- .../employee-master-bulk-upload.component.ts | 11 +++++++++-- .../employee-master-new.component.html | 7 +++++-- .../employee-master-new.component.ts | 8 ++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts index 471bf4ef..7beb6721 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-bulk-upload/employee-master-bulk-upload.component.ts @@ -1,4 +1,10 @@ -import { Component, ViewChild, OnInit } from '@angular/core'; +import { + Component, + ViewChild, + OnInit, + Output, + EventEmitter, +} from '@angular/core'; import { BlockSubcenterMappingService } from '../services/block-subcenter-mapping-service'; import { ConfirmationDialogsService } from 'src/app/core/services/dialog/confirmation.service'; import { dataService } from 'src/app/core/services/dataService/data.service'; @@ -15,6 +21,7 @@ import { HttpErrorResponse, HttpResponse } from '@angular/common/http'; styleUrls: ['./employee-master-bulk-upload.component.css'], }) export class EmployeeMasterBulkUploadComponent { + @Output() closeUpload = new EventEmitter(); objs = new MatTableDataSource(); paginator!: MatPaginator; @@ -231,7 +238,7 @@ export class EmployeeMasterBulkUploadComponent { ) .subscribe((res) => { if (res) { - this.location.back(); + this.closeUpload.emit(); } }); } diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 836b4ed2..32664e7a 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -1,5 +1,5 @@
-
+

Employee Master

@@ -141,7 +141,7 @@

Employee Master

@@ -1159,4 +1159,7 @@

Permanent Address

+
+ +
diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index 88fa734b..b2410950 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -1586,5 +1586,13 @@ export class EmployeeMasterNewComponent implements OnInit { uploadMaster() { this.employeeMasterUpload = true; + this.tableMode = false; + this.formMode = false; + } + + closeBulkUpload() { + this.employeeMasterUpload = false; + this.tableMode = true; + this.formMode = false; } } From 12b5ac3a4f6ffa186f05157ad8d31265fcf9b781 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:51:36 +0530 Subject: [PATCH 23/52] Update environment.prod.ts --- src/environments/environment.prod.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 35130886..beac063c 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -508,7 +508,7 @@ export const environment = { enableCaptcha: enableCaptcha, // Missing properties that services are trying to use - getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, - getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/status`, }; From af9bcca7e8baccd712aa54ddb8c4bd8b7b47c796 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:51:57 +0530 Subject: [PATCH 24/52] Update environment.test.ts --- src/environments/environment.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index f1a7bec4..5457a23e 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -500,7 +500,7 @@ export const environment = { getAbdmFacilities: `${fhirBaseUrl}facility/getAbdmRegisteredFacilities`, // Missing properties that services are trying to use - getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, - getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/status`, }; From b608d5e0c35dd9c47ae115bf069ad4eedf35866b Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:52:17 +0530 Subject: [PATCH 25/52] Update XML data upload and error Excel URLs --- src/environments/environment.ci.ts.template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 5b9ab5b9..e20a5326 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -508,7 +508,7 @@ export const environment = { enableCaptcha: enableCaptcha, // Missing properties that services are trying to use - getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, - getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/activateOrdeActivateSignature` }; From 63c26e3f88f4ba4f1fd105bd2486000b19449146 Mon Sep 17 00:00:00 2001 From: Saurav Mishra <80103738+SauravBizbRolly@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:52:39 +0530 Subject: [PATCH 26/52] Update environment.local.ts --- src/environments/environment.local.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 416550cd..c9d81906 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -508,7 +508,7 @@ export const environment = { enableCaptcha: enableCaptcha, // Missing properties that services are trying to use - getXMLDataUploadUrl: `${adminBaseUrl}uptsu/upload/xml`, - getDataUploadErrorExcel: `${adminBaseUrl}uptsu/download/errorExcel`, + getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/status`, }; From b713581b4fd55ede9a9d07bce87f329c256d15ef Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 30 Oct 2025 23:14:34 +0530 Subject: [PATCH 27/52] chore(env): sync environment endpoints and templates for bulk upload # Conflicts: # src/environments/environment.local.ts # src/environments/environment.test.ts --- src/environments/environment.local.ts | 2 +- src/environments/environment.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index c9d81906..79107641 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -509,6 +509,6 @@ export const environment = { // Missing properties that services are trying to use getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, - getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/status`, }; diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 5457a23e..3300c1fb 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -501,6 +501,6 @@ export const environment = { // Missing properties that services are trying to use getXMLDataUploadUrl: `${adminBaseUrl}bulkRegistration`, - getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, + getDataUploadErrorExcel: `${adminBaseUrl}download-error-sheet`, signatureStatus: `${adminBaseUrl}signature1/status`, }; From 8155e6b68df6e2906a6114d73d604739d1f1c83f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 6 Nov 2025 15:44:30 +0530 Subject: [PATCH 28/52] fix: update employee master and parking place mapping components --- .../employee-master-new/employee-master-new.component.html | 2 +- .../employee-parking-place-mapping.component.html | 1 + .../employee-parking-place-mapping.component.ts | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 32664e7a..7730fb25 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -1,5 +1,5 @@
-
+

Employee Master

diff --git a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html index 9bfd8a27..6b998611 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.html @@ -493,6 +493,7 @@

Edit User Parking Place Mapping

>
diff --git a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts index a7ad314b..801daa4f 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts @@ -31,6 +31,7 @@ import { MappedVansComponent } from '../mapped-vans/mapped-vans.component'; import { MatTableDataSource } from '@angular/material/table'; import { MatPaginator } from '@angular/material/paginator'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; +import { MatSort } from '@angular/material/sort'; @Component({ selector: 'app-employee-parking-place-mapping', @@ -42,6 +43,7 @@ export class EmployeeParkingPlaceMappingComponent paginator!: MatPaginator; @ViewChild('paginatorFirst') paginatorFirst!: MatPaginator; @ViewChild('paginatorSecond') paginatorSecond!: MatPaginator; + @ViewChild(MatSort) sort!: MatSort; [x: string]: any; filteredavailableEmployeeParkingPlaceMappings = new MatTableDataSource(); @@ -326,6 +328,7 @@ export class EmployeeParkingPlaceMappingComponent this.filteredavailableEmployeeParkingPlaceMappings.data = response.data; this.filteredavailableEmployeeParkingPlaceMappings.paginator = this.paginatorSecond; + this.filteredavailableEmployeeParkingPlaceMappings.sort = this.sort; } parkingPlaceID: any; selectedParkingPlace( From 7e6ab739e7ae9d55299cf2c3c2ddabfc5f06b007 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Thu, 6 Nov 2025 16:04:45 +0530 Subject: [PATCH 29/52] fix: add null check for MatSort to prevent sortChange error --- .../employee-parking-place-mapping.component.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts index 801daa4f..76f716b0 100644 --- a/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/configurations/employee-parking-place-mapping/employee-parking-place-mapping.component.ts @@ -127,6 +127,9 @@ export class EmployeeParkingPlaceMappingComponent this.filteredavailableEmployeeParkingPlaceMappings.paginator = this.paginatorSecond; this.employeeParkingPlaceMappingList.paginator = this.paginatorFirst; + if (this.sort) { + this.filteredavailableEmployeeParkingPlaceMappings.sort = this.sort; + } } ngOnInit() { @@ -328,7 +331,9 @@ export class EmployeeParkingPlaceMappingComponent this.filteredavailableEmployeeParkingPlaceMappings.data = response.data; this.filteredavailableEmployeeParkingPlaceMappings.paginator = this.paginatorSecond; - this.filteredavailableEmployeeParkingPlaceMappings.sort = this.sort; + if (this.sort) { + this.filteredavailableEmployeeParkingPlaceMappings.sort = this.sort; + } } parkingPlaceID: any; selectedParkingPlace( From 45dc2a67bb95798a88faf15ac93a64203611902f Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 10 Nov 2025 17:06:58 +0530 Subject: [PATCH 30/52] fix: parse employee list response --- .../employee-master-new.component.ts | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index b2410950..619d98d4 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -211,16 +211,49 @@ export class EmployeeMasterNewComponent implements OnInit { this.employeeMasterNewService.getAllUsers(this.serviceProviderID).subscribe( (response: any) => { - if (response) { - console.log('All details of the user', response); - this.searchResult = response.data; - this.filteredsearchResult.data = response.data; - this.filteredsearchResult.paginator = this.paginator; - } + const employeeList = this.extractEmployeeList(response); + console.log('All details of the user', employeeList); + this.searchResult = employeeList; + this.filteredsearchResult = new MatTableDataSource(employeeList); + this.filteredsearchResult.paginator = this.paginator; }, (err) => console.log('error', err), ); } + + private extractEmployeeList(response: any): any[] { + const rawData = response?.data ?? response; + if (Array.isArray(rawData)) { + return rawData; + } + if (rawData === null || rawData === undefined) { + return []; + } + if (typeof rawData === 'string') { + try { + const parsed = JSON.parse(rawData); + if (Array.isArray(parsed)) { + return parsed; + } + if (Array.isArray(parsed?.data)) { + return parsed.data; + } + if (Array.isArray(parsed?.response)) { + return parsed.response; + } + } catch (error) { + console.error('Failed to parse employee master response', error); + return []; + } + } + if (Array.isArray(rawData?.data)) { + return rawData.data; + } + if (Array.isArray(rawData?.response)) { + return rawData.response; + } + return []; + } showForm() { this.tableMode = false; this.formMode = true; From 5a65250886b432c932af3a2777d515bcb46f878b Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Mon, 10 Nov 2025 17:17:07 +0530 Subject: [PATCH 31/52] fix: handle nested employee payload --- .../employee-master-new.component.ts | 70 +++++++++++++------ 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index 619d98d4..9117c5a0 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -214,7 +214,7 @@ export class EmployeeMasterNewComponent implements OnInit { const employeeList = this.extractEmployeeList(response); console.log('All details of the user', employeeList); this.searchResult = employeeList; - this.filteredsearchResult = new MatTableDataSource(employeeList); + this.filteredsearchResult.data = employeeList; this.filteredsearchResult.paginator = this.paginator; }, (err) => console.log('error', err), @@ -222,37 +222,61 @@ export class EmployeeMasterNewComponent implements OnInit { } private extractEmployeeList(response: any): any[] { - const rawData = response?.data ?? response; + let rawData = response; + + if (rawData && typeof rawData === 'object' && 'data' in rawData) { + rawData = rawData.data; + } + + rawData = this.deepParseIfString(rawData); + if (Array.isArray(rawData)) { return rawData; } - if (rawData === null || rawData === undefined) { - return []; + + if (rawData && typeof rawData === 'object') { + if (Array.isArray(rawData.data)) { + return rawData.data; + } + if (Array.isArray(rawData.response)) { + return rawData.response; + } + if (Array.isArray(rawData.result)) { + return rawData.result; + } + const firstArray = Object.values(rawData).find((value) => + Array.isArray(value), + ); + if (Array.isArray(firstArray)) { + return firstArray; + } } - if (typeof rawData === 'string') { + + return []; + } + + private deepParseIfString(candidate: any): any { + let parsedValue = candidate; + const seen = new Set(); + + while (typeof parsedValue === 'string') { + const trimmed = parsedValue.trim(); + if (!trimmed) { + return []; + } + if (seen.has(trimmed)) { + break; + } + seen.add(trimmed); try { - const parsed = JSON.parse(rawData); - if (Array.isArray(parsed)) { - return parsed; - } - if (Array.isArray(parsed?.data)) { - return parsed.data; - } - if (Array.isArray(parsed?.response)) { - return parsed.response; - } + parsedValue = JSON.parse(trimmed); } catch (error) { - console.error('Failed to parse employee master response', error); + console.error('Failed to parse employee master response string', error); return []; } } - if (Array.isArray(rawData?.data)) { - return rawData.data; - } - if (Array.isArray(rawData?.response)) { - return rawData.response; - } - return []; + + return parsedValue; } showForm() { this.tableMode = false; From a07431a900b2c754df523b8e51cb349275c44fdd Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 00:04:35 +0530 Subject: [PATCH 32/52] fix --- .../employee-master-new/employee-master-new.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 7730fb25..4603b684 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -141,7 +141,7 @@

Employee Master

From 9374cdfe99847552d242813a7bce753b7b82fdf6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 00:15:07 +0530 Subject: [PATCH 33/52] fix --- .../employee-master-new.component.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 4603b684..9a50bf32 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -19,7 +19,10 @@

Employee Master

-
+
Employee Master
-
- No Records Found -
Employee Master + +
+ No Records Found +
+
Date: Tue, 11 Nov 2025 00:28:09 +0530 Subject: [PATCH 34/52] fix --- .../employee-master-new.component.html | 10 +- .../employee-master-new.component.ts | 99 ++++++++++++------- 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 9a50bf32..b809c5b3 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -21,7 +21,10 @@

Employee Master

Employee Master - +
- No Records Found + Loading... + No Records Found
(); + isLoading = false; setDataSourceAttributes() { - this.filteredsearchResult.paginator = this.paginator; + if (this.filteredsearchResult && this.paginator) { + this.filteredsearchResult.paginator = this.paginator; + } // this.objs.paginator = this.paginator; } //ngModel @@ -190,6 +201,7 @@ export class EmployeeMasterNewComponent implements OnInit { public dialogService: ConfirmationDialogsService, public dialog: MatDialog, readonly sessionstorage: SessionStorageService, + private cdr: ChangeDetectorRef, ) { this.filteredsearchResult.data = []; } @@ -209,16 +221,29 @@ export class EmployeeMasterNewComponent implements OnInit { getAllUserDetails() { console.log('serviceProvider', this.serviceProviderID); - this.employeeMasterNewService.getAllUsers(this.serviceProviderID).subscribe( - (response: any) => { - const employeeList = this.extractEmployeeList(response); - console.log('All details of the user', employeeList); - this.searchResult = employeeList; - this.filteredsearchResult.data = employeeList; - this.filteredsearchResult.paginator = this.paginator; - }, - (err) => console.log('error', err), - ); + this.isLoading = true; + this.employeeMasterNewService + .getAllUsers(this.serviceProviderID) + .pipe( + finalize(() => { + this.isLoading = false; + if (!(this.cdr as ViewRef).destroyed) { + this.cdr.detectChanges(); + } + }), + ) + .subscribe( + (response: any) => { + const employeeList = this.extractEmployeeList(response); + console.log('All details of the user', employeeList); + this.searchResult = employeeList; + this.refreshFilteredData(employeeList); + }, + (err) => { + console.log('error', err); + this.refreshFilteredData([]); + }, + ); } private extractEmployeeList(response: any): any[] { @@ -361,8 +386,7 @@ export class EmployeeMasterNewComponent implements OnInit { if (res) { this.objs.data = []; this.searchTerm = null; - this.filteredsearchResult.data = this.searchResult; - this.filteredsearchResult.paginator = this.paginator; + this.refreshFilteredData(this.searchResult); this.showTable(); this.resetAllFlags(); } @@ -1597,28 +1621,25 @@ export class EmployeeMasterNewComponent implements OnInit { } filterComponentList(searchTerm?: string) { if (!searchTerm) { - this.filteredsearchResult.data = this.searchResult; - this.filteredsearchResult.paginator = this.paginator; - } else { - this.filteredsearchResult.data = []; - this.searchResult.forEach((item: any) => { - for (const key in item) { - if ( - key === 'userName' || - key === 'emergencyContactNo' || - key === 'emailID' || - key === 'designationName' - ) { - const value: string = '' + item[key]; - if (value.toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0) { - this.filteredsearchResult.data.push(item); - break; - } - } - } - }); - this.filteredsearchResult.paginator = this.paginator; + this.refreshFilteredData(this.searchResult); + return; } + + const normalizedTerm = searchTerm.trim().toLowerCase(); + const filtered = this.searchResult.filter((item: any) => + ['userName', 'emergencyContactNo', 'emailID', 'designationName'].some( + (key) => { + const value = item[key]; + return ( + value !== undefined && + value !== null && + value.toString().toLowerCase().includes(normalizedTerm) + ); + }, + ), + ); + + this.refreshFilteredData(filtered); } // to enable health professional ID feild upon selecting designation enableHPID() { @@ -1652,4 +1673,12 @@ export class EmployeeMasterNewComponent implements OnInit { this.tableMode = true; this.formMode = false; } + + private refreshFilteredData(rows: any[]) { + this.filteredsearchResult = new MatTableDataSource(rows); + this.setDataSourceAttributes(); + if (this.filteredsearchResult.paginator) { + this.filteredsearchResult.paginator.firstPage(); + } + } } From a68febb0855170dfe01374bad9c83b53da6ee6ff Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 00:37:50 +0530 Subject: [PATCH 35/52] fix --- .../employee-master-new/employee-master-new.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index 63945975..f637d3e5 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -1675,10 +1675,12 @@ export class EmployeeMasterNewComponent implements OnInit { } private refreshFilteredData(rows: any[]) { - this.filteredsearchResult = new MatTableDataSource(rows); + const safeRows = Array.isArray(rows) ? rows : []; + this.filteredsearchResult.data = safeRows; this.setDataSourceAttributes(); if (this.filteredsearchResult.paginator) { this.filteredsearchResult.paginator.firstPage(); } + this.filteredsearchResult._updateChangeSubscription(); } } From 8b2b369899e98490aabe13011a2ef40204d42b20 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 00:47:36 +0530 Subject: [PATCH 36/52] fix --- .../employee-master-new.component.html | 27 ++++++++++--------- .../employee-master-new.component.ts | 8 ++++-- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index b809c5b3..1f45a8b9 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -19,13 +19,12 @@

Employee Master

-
+
+
Employee Master
+
+ No Records Found +
- -
- Loading... - No Records Found -
-
{ const employeeList = this.extractEmployeeList(response); console.log('All details of the user', employeeList); + console.log('list length', employeeList?.length); this.searchResult = employeeList; this.refreshFilteredData(employeeList); }, @@ -1676,11 +1677,14 @@ export class EmployeeMasterNewComponent implements OnInit { private refreshFilteredData(rows: any[]) { const safeRows = Array.isArray(rows) ? rows : []; - this.filteredsearchResult.data = safeRows; + console.log('refreshFilteredData rows', safeRows.length); + this.filteredsearchResult.data = [...safeRows]; this.setDataSourceAttributes(); if (this.filteredsearchResult.paginator) { this.filteredsearchResult.paginator.firstPage(); } - this.filteredsearchResult._updateChangeSubscription(); + if (!(this.cdr as ViewRef).destroyed) { + this.cdr.detectChanges(); + } } } From 61af3c33484e41e561cf4ef82fdcd2fc8cf2dd4c Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 00:53:24 +0530 Subject: [PATCH 37/52] fix --- .../employee-master-new.component.html | 1 + .../employee-master-new/employee-master-new.component.ts | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html index 1f45a8b9..9cc8e523 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.html @@ -28,6 +28,7 @@

Employee Master

diff --git a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts index 25b3c455..6255b411 100644 --- a/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/employee-master-new/employee-master-new.component.ts @@ -31,6 +31,7 @@ import { NgForm } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatPaginator } from '@angular/material/paginator'; import { MatTableDataSource } from '@angular/material/table'; +import { MatSort } from '@angular/material/sort'; import { finalize } from 'rxjs/operators'; import { EmployeeMasterNewServices } from 'src/app/app-provider-admin/provider-admin/activities/services/employee-master-new-services.service'; import { dataService } from 'src/app/core/services/dataService/data.service'; @@ -69,10 +70,15 @@ export class EmployeeMasterNewComponent implements OnInit { 'action', ]; paginator!: MatPaginator; + sort!: MatSort; @ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) { this.paginator = mp; this.setDataSourceAttributes(); } + @ViewChild(MatSort) set matSort(ms: MatSort) { + this.sort = ms; + this.setDataSourceAttributes(); + } filteredsearchResult = new MatTableDataSource(); isLoading = false; @@ -80,6 +86,9 @@ export class EmployeeMasterNewComponent implements OnInit { if (this.filteredsearchResult && this.paginator) { this.filteredsearchResult.paginator = this.paginator; } + if (this.filteredsearchResult && this.sort) { + this.filteredsearchResult.sort = this.sort; + } // this.objs.paginator = this.paginator; } //ngModel From 1346439bd7d5155547ad0df62314d5005ae02f86 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 01:01:38 +0530 Subject: [PATCH 38/52] fix --- .../services/block-subcenter-mapping-service.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts index 4107af3e..59c63d2f 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts @@ -20,12 +20,13 @@ * along with this program. If not, see https://www.gnu.org/licenses/. */ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; // import { InterceptedHttp } from "app/http.interceptor"; // import { SecurityInterceptedHttp } from "app/http.securityinterceptor"; import { Observable, map, throwError } from 'rxjs'; import { ConfigService } from 'src/app/core/services/config/config.service'; import { environment } from 'src/environments/environment'; +import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; @Injectable() export class BlockSubcenterMappingService { @@ -36,6 +37,7 @@ export class BlockSubcenterMappingService { constructor( private http: HttpClient, public basepaths: ConfigService, + private sessionStorage: SessionStorageService, ) { this.admin_Base_Url = this.basepaths.getAdminBaseUrl(); this.common_Base_Url = this.basepaths.getCommonBaseURL(); @@ -49,7 +51,14 @@ export class BlockSubcenterMappingService { } memberBulkUploadXML(formData: any) { - return this.http.post(environment.getXMLDataUploadUrl, formData); + const userName = + this.sessionStorage.getItem('uname') || + this.sessionStorage.getItem('userName') || + ''; + const params = new HttpParams().set('userName', userName); + return this.http.post(environment.getXMLDataUploadUrl, formData, { + params, + }); } downloadErrorExcel(): Observable { From 5cb08f2d6e6e8367ae3228c4286f45e70fe552ba Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 16:19:18 +0530 Subject: [PATCH 39/52] fix --- .../services/block-subcenter-mapping-service.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts index 59c63d2f..5b0611f1 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts @@ -55,7 +55,20 @@ export class BlockSubcenterMappingService { this.sessionStorage.getItem('uname') || this.sessionStorage.getItem('userName') || ''; - const params = new HttpParams().set('userName', userName); + + const serviceProviderID = + this.sessionStorage.getItem('providerServiceID') || + this.sessionStorage.getItem('providerServiceID') || + ''; + + const serviceProviderMapID = + this.sessionStorage.getItem('providerServiceID') || + this.sessionStorage.getItem('providerServiceID') || + ''; + const params = new HttpParams() + .set('userName', userName) + .set('serviceProviderID', serviceProviderID) + .set('serviceProviderMapID', serviceProviderMapID); return this.http.post(environment.getXMLDataUploadUrl, formData, { params, }); From fae2c70f0e71bbacc610a74b7dba61a92d58e4f9 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 16:23:12 +0530 Subject: [PATCH 40/52] fix --- .../activities/services/block-subcenter-mapping-service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts index 5b0611f1..1818958e 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts @@ -57,8 +57,8 @@ export class BlockSubcenterMappingService { ''; const serviceProviderID = - this.sessionStorage.getItem('providerServiceID') || - this.sessionStorage.getItem('providerServiceID') || + this.sessionStorage.getItem('service_providerID') || + this.sessionStorage.getItem('service_providerID') || ''; const serviceProviderMapID = From 58cbfa9c9a825bcccbbf289c820ce5308b3fa5a6 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 17:03:17 +0530 Subject: [PATCH 41/52] fix --- .../activities/services/block-subcenter-mapping-service.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts index 1818958e..c33a8cee 100644 --- a/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts +++ b/src/app/app-provider-admin/provider-admin/activities/services/block-subcenter-mapping-service.ts @@ -61,14 +61,10 @@ export class BlockSubcenterMappingService { this.sessionStorage.getItem('service_providerID') || ''; - const serviceProviderMapID = - this.sessionStorage.getItem('providerServiceID') || - this.sessionStorage.getItem('providerServiceID') || - ''; + const params = new HttpParams() .set('userName', userName) .set('serviceProviderID', serviceProviderID) - .set('serviceProviderMapID', serviceProviderMapID); return this.http.post(environment.getXMLDataUploadUrl, formData, { params, }); From adfa9439ad7febc8e815f1938a918094cd2dc029 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 17:49:02 +0530 Subject: [PATCH 42/52] fix --- .../work-location-mapping.component.html | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html index 5fe308f9..40bf749a 100644 --- a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html @@ -51,9 +51,9 @@

@@ -109,7 +109,7 @@

!element.providerServiceMappingDeleted " (click)="editRow(element)" - >editedit @@ -362,7 +362,7 @@

One user can be mapped with one role only for ECD + >One user can be mapped with one role only for ECD serviceLine @@ -396,16 +396,16 @@

name="teleConsultation" > ESanjeevaniESanjeevani SwymedSwymed Not RequiredNot Required @@ -421,7 +421,7 @@

[checked]="isInbound" [(ngModel)]="isInbound" (selectionChange)="setInbound($event)" - >InboundInbound [checked]="isOutbound" [(ngModel)]="isOutbound" (selectionChange)="setOutbound($event)" - >OutboundOutbound @@ -450,7 +450,7 @@

role="img" aria-hidden="true" style="cursor: pointer" - >addadd @@ -483,9 +483,9 @@

@@ -549,7 +549,7 @@

element.userID ) " - >deletedelete @@ -824,16 +824,16 @@

name="teleConsultationEdit" > ESanjeevaniESanjeevani SwymedSwymed Not RequiredNot Required @@ -848,7 +848,7 @@

[checked]="isInboundEdit" [(ngModel)]="isInboundEdit" (selectionChange)="setInbound($event)" - >InboundInbound [checked]="isOutboundEdit" [(ngModel)]="isOutboundEdit" (selectionChange)="setOutbound($event)" - >OutboundOutbound From ba358cf963babc0174e28855bc56a8b12d4e86c7 Mon Sep 17 00:00:00 2001 From: Saurav Mishra Date: Tue, 11 Nov 2025 17:57:56 +0530 Subject: [PATCH 43/52] fix --- .../work-location-mapping.component.html | 6 ++- .../work-location-mapping.component.ts | 42 ++++++++++++++++--- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html index 40bf749a..e6ab52ff 100644 --- a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.html @@ -28,7 +28,9 @@

State {{ - element.serviceName === "1097" - ? "All states" - : element.stateName + element.serviceName === "1097" + ? "All states" + : element.stateName }} State {{ - element.serviceName === "1097" - ? "All states" - : element.stateName + element.serviceName === "1097" + ? "All states" + : element.stateName }}
@@ -460,6 +462,8 @@

diff --git a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.ts b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.ts index 3563ee7e..ca29ff08 100644 --- a/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.ts +++ b/src/app/app-provider-admin/provider-admin/activities/work-location-mapping/work-location-mapping.component.ts @@ -24,6 +24,7 @@ import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; import { NgForm } from '@angular/forms'; import { MatTableDataSource } from '@angular/material/table'; import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; import { VillageMasterService } from 'src/app/core/services/adminServices/AdminVillage/village-master-service.service'; import { ConfirmationDialogsService } from 'src/app/core/services/dialog/confirmation.service'; import { WorkLocationMapping } from '../services/work-location-mapping.service'; @@ -34,7 +35,7 @@ import { SessionStorageService } from 'Common-UI/src/registrar/services/session- templateUrl: './work-location-mapping.component.html', styleUrls: ['./work-location-mapping.component.css'], }) -export class WorkLocationMappingComponent implements OnInit { +export class WorkLocationMappingComponent implements OnInit, AfterViewInit { userID: any; serviceProviderID: any; createdBy: any; @@ -129,6 +130,8 @@ export class WorkLocationMappingComponent implements OnInit { @ViewChild('paginatorFirst') paginatorFirst!: MatPaginator; @ViewChild('paginatorSecond') paginatorSecond!: MatPaginator; + @ViewChild('sortFirst') sortFirst!: MatSort; + @ViewChild('sortSecond') sortSecond!: MatSort; @ViewChild('workplaceform') eForm!: NgForm; @ViewChild('workplaceeform') @@ -167,6 +170,13 @@ export class WorkLocationMappingComponent implements OnInit { this.getUserName(this.serviceProviderID); } + ngAfterViewInit(): void { + this.filteredmappedWorkLocationsList.paginator = this.paginatorFirst; + this.filteredmappedWorkLocationsList.sort = this.sortFirst; + this.bufferArray.paginator = this.paginatorSecond; + this.bufferArray.sort = this.sortSecond; + } + setIsNational(value: any) { this.isNational = value; } @@ -226,8 +236,13 @@ export class WorkLocationMappingComponent implements OnInit { ); this.mappedWorkLocationsList = response.data; this.filteredmappedWorkLocationsList.data = response.data; - this.filteredmappedWorkLocationsList.paginator = - this.paginatorFirst; + if (this.paginatorFirst) { + this.filteredmappedWorkLocationsList.paginator = + this.paginatorFirst; + } + if (this.sortFirst) { + this.filteredmappedWorkLocationsList.sort = this.sortFirst; + } } }, (err: any) => { @@ -1161,7 +1176,12 @@ export class WorkLocationMappingComponent implements OnInit { workLocationObj['district'] = null; } this.bufferArray.data.push(workLocationObj); - this.bufferArray.paginator = this.paginatorSecond; + if (this.paginatorSecond) { + this.bufferArray.paginator = this.paginatorSecond; + } + if (this.sortSecond) { + this.bufferArray.sort = this.sortSecond; + } } resetAllArrays() { @@ -1183,7 +1203,12 @@ export class WorkLocationMappingComponent implements OnInit { deleteRow(i: any, serviceID: any, providerServiceMapID: any, userID: any) { this.bufferArray.data.splice(i, 1); - this.bufferArray.paginator = this.paginatorSecond; + if (this.paginatorSecond) { + this.bufferArray.paginator = this.paginatorSecond; + } + if (this.sortSecond) { + this.bufferArray.sort = this.sortSecond; + } this.getAllRoles(serviceID, providerServiceMapID, userID); this.availableRoles = []; this.RolesList = []; @@ -1191,7 +1216,12 @@ export class WorkLocationMappingComponent implements OnInit { removeRole(rowIndex: any, roleIndex: any) { this.bufferArray.data[rowIndex].roleID1.splice(roleIndex, 1); - this.bufferArray.paginator = this.paginatorSecond; + if (this.paginatorSecond) { + this.bufferArray.paginator = this.paginatorSecond; + } + if (this.sortSecond) { + this.bufferArray.sort = this.sortSecond; + } this.getAllRoles( this.bufferArray.data[rowIndex].serviceID, this.bufferArray.data[rowIndex].providerServiceMapID, From bba00d6136a608908fefa46c6395444b9b6240d6 Mon Sep 17 00:00:00 2001 From: Amoghavarsh <93114621+5Amogh@users.noreply.github.com> Date: Thu, 4 Dec 2025 11:17:47 +0530 Subject: [PATCH 44/52] Bump version from 3.4.1 to 3.6.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 11960362..6e048740 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0com.iemr.admin-uiadmin-ui - 3.4.1 + 3.6.0Admin-UIPiramal - admin: Module ui From 0dec97770e8840d364df785151a1ee41c84645c6 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Wed, 10 Dec 2025 17:05:04 +0530 Subject: [PATCH 45/52] fix: amm-1999 provider creation issue --- .../service-provider-master.component.html | 1 + .../service-provider-master.component.ts | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.html b/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.html index adf5a266..0236eb33 100644 --- a/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.html +++ b/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.html @@ -26,6 +26,7 @@

diff --git a/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.ts b/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.ts index 4856b244..acb1298f 100644 --- a/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.ts +++ b/src/app/app-provider-admin/super-admin/super-admin/Activities/service-provider-master/service-provider-master.component.ts @@ -26,6 +26,8 @@ import { dataService } from 'src/app/core/services/dataService/data.service'; import { SuperAdmin_ServiceProvider_Service } from 'src/app/core/services/adminServices/AdminServiceProvider/superadmin_serviceprovider.service'; import { MatTableDataSource } from '@angular/material/table'; import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; + @Component({ selector: 'app-service-provider-master', @@ -108,6 +110,11 @@ export class ServiceProviderMasterComponent implements OnInit { this.getAllProviders(); } + @ViewChild(MatSort) sort!: MatSort; + ngAfterViewInit() { + this.filteredsearchResult.sort = this.sort; + } + showTable() { if (this.editMode) { this.tableMode = true; From f700cdc5162f45904b14ebac1b8d80929f061604 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Thu, 11 Dec 2025 13:54:47 +0530 Subject: [PATCH 46/52] fix: amm-1931 session expiry --- .../http-interceptor.service.ts | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/app/core/services/httpInterceptor/http-interceptor.service.ts b/src/app/core/services/httpInterceptor/http-interceptor.service.ts index c8d9029a..97571eec 100644 --- a/src/app/core/services/httpInterceptor/http-interceptor.service.ts +++ b/src/app/core/services/httpInterceptor/http-interceptor.service.ts @@ -82,7 +82,26 @@ export class HttpInterceptorService implements HttpInterceptor { }), catchError((error: HttpErrorResponse) => { console.error(error); - + if (error.status === 401) { + this.confirmationService.alert( + this.currentLanguageSet.sessionExpiredPleaseLogin || 'Your session has expired. Please login again.', + ); + } else if (error.status === 403) { + this.confirmationService.alert( + this.currentLanguageSet.accessDenied || 'You do not have permission to access this resource.', + 'error', + ); + } else if (error.status === 500) { + this.confirmationService.alert( + this.currentLanguageSet.internaleServerError || 'Internal server error occurred. Please try again later.', + 'error', + ); + } else { + this.confirmationService.alert( + error.message || this.currentLanguageSet.somethingWentWrong || 'Something went wrong. Please try again later.', + 'error', + ); + } this.spinnerService.setLoading(false); return throwError(error.error); }), @@ -110,7 +129,6 @@ export class HttpInterceptorService implements HttpInterceptor { console.log('there', Date()); if ( - this.sessionstorage.getItem('authenticationToken') && sessionStorage.getItem('isAuthenticated') ) { this.confirmationService @@ -130,7 +148,7 @@ export class HttpInterceptorService implements HttpInterceptor { this.sessionstorage.clear(); localStorage.clear(); this.confirmationService.alert( - this.currentLanguageSet.sessionExpired, + this.currentLanguageSet.sessionExpired || 'Your session has expired. Please login again.', 'error', ); this.router.navigate(['/login']); @@ -140,7 +158,7 @@ export class HttpInterceptorService implements HttpInterceptor { this.sessionstorage.clear(); localStorage.clear(); this.confirmationService.alert( - this.currentLanguageSet.sessionExpired, + this.currentLanguageSet.sessionExpired || 'Your session has expired. Please login again.', 'error', ); this.router.navigate(['/login']); From 8487714d1d59607bce6d30696f08cbbffdf93d9d Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Thu, 11 Dec 2025 16:53:09 +0530 Subject: [PATCH 47/52] fix: amm-1931 handled error messages --- .../httpInterceptor/http-interceptor.service.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/app/core/services/httpInterceptor/http-interceptor.service.ts b/src/app/core/services/httpInterceptor/http-interceptor.service.ts index 97571eec..0599f51a 100644 --- a/src/app/core/services/httpInterceptor/http-interceptor.service.ts +++ b/src/app/core/services/httpInterceptor/http-interceptor.service.ts @@ -82,26 +82,29 @@ export class HttpInterceptorService implements HttpInterceptor { }), catchError((error: HttpErrorResponse) => { console.error(error); - if (error.status === 401) { - this.confirmationService.alert( - this.currentLanguageSet.sessionExpiredPleaseLogin || 'Your session has expired. Please login again.', - ); + if(error.status === 401){ + this.sessionstorage.clear(); + this.confirmationService.alert('Session expired. Please login again.', 'error'); + } else if (error.status === 403) { this.confirmationService.alert( - this.currentLanguageSet.accessDenied || 'You do not have permission to access this resource.', + 'Access Denied', 'error', ); } else if (error.status === 500) { this.confirmationService.alert( - this.currentLanguageSet.internaleServerError || 'Internal server error occurred. Please try again later.', + 'Internal Server Error', 'error', ); } else { this.confirmationService.alert( - error.message || this.currentLanguageSet.somethingWentWrong || 'Something went wrong. Please try again later.', + error.message || 'Something went wrong', 'error', ); } + this.router.navigate(['/login']); + sessionStorage.clear(); + this.sessionstorage.clear(); this.spinnerService.setLoading(false); return throwError(error.error); }), From fc9b822b248f981a87729c874eb2d63a978a7619 Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Fri, 12 Dec 2025 13:30:19 +0530 Subject: [PATCH 48/52] fix: amm-2012 admin data table issue fixed --- .../location-serviceline-mapping.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-provider-admin/provider-admin/activities/location-serviceline-mapping/location-serviceline-mapping.component.html b/src/app/app-provider-admin/provider-admin/activities/location-serviceline-mapping/location-serviceline-mapping.component.html index e53d133a..15811621 100644 --- a/src/app/app-provider-admin/provider-admin/activities/location-serviceline-mapping/location-serviceline-mapping.component.html +++ b/src/app/app-provider-admin/provider-admin/activities/location-serviceline-mapping/location-serviceline-mapping.component.html @@ -125,7 +125,7 @@

Create Work Location

- +
ActionAction