import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import * as Papa from 'papaparse'; import { AREAS_OF_WORK, COUNTRIES, STATES, COMMUNITIES, PREFERRED_MODE_OF_COMMUNICATION, PREFERRED_LANGUAGES, AREAS_OF_SUPPORT } from 'src/shared/data/form-options'; import { UserData, UserDataOption } from 'src/shared/structure/user'; import * as XLSX from 'xlsx' type ExportType = "CSV" | "XLSX"; @Component({ selector: 'app-partner-details', templateUrl: './partner-details.component.html', styleUrls: ['./partner-details.component.scss'] }) export class PartnerDetailsComponent implements OnInit { partnerDetails: UserData | undefined; isFormEditable: boolean = false; selectedSegment: 1 | 2 | 3 = 1; showExportOptions: boolean = false; areasOfWork = AREAS_OF_WORK; countries = COUNTRIES; states = STATES; districts: Array = []; communities = COMMUNITIES; preferredModesOfCommunication = PREFERRED_MODE_OF_COMMUNICATION; preferredLanguages = PREFERRED_LANGUAGES; areasOfSupport = AREAS_OF_SUPPORT; exportData: Array = []; exportSurveyCtoData: Array = []; isProfileData: boolean = true; isImplementationData: boolean = false; isBothData: boolean = false; constructor( private activateRouter: ActivatedRoute ) { } ngOnInit(): void { this.activateRouter.queryParams.subscribe((data: any) => { this.partnerDetails = JSON.parse(data.data); }).unsubscribe(); } hasIndiaBranchLocation() { return this.partnerDetails?.detailedProfile.branchLocationCountries.find(country => country.name === 'India'); } updateDistricts(states: Array<{ districts: Array }>) { console.log(states); this.districts = states.map(state => state.districts).flat(); } loadExportData(partnerData: UserData) { let exportData: Array = []; let exportHiiData: Array = []; let exportSpData: Array = []; let exportSPSchemaData: Array = []; let surveyCtoData: Array = []; exportData = [{ "PortalID": partnerData.portalId ? partnerData.portalId : '-', // Primary Contact "Primary Name": partnerData.primaryContact.name, "Primary Contact Number": partnerData.primaryContact.contactNumber, "Primary Email": partnerData.primaryContact.email, "Primary Designation": partnerData.primaryContact.designation, // Basic Info "Areas Of Work": partnerData.organizationBasicInfo.areasOfWork ? partnerData.organizationBasicInfo.areasOfWork.map(option => option.name).join(', ') : '', "Name": partnerData.organizationBasicInfo.name, "Reason For Becoming Member": partnerData.organizationBasicInfo.reasonForBecomingMember, "Referral Name": partnerData.organizationBasicInfo.referralName, "Source": partnerData.organizationBasicInfo.source, "Type": partnerData.organizationBasicInfo.type, "Website": partnerData.organizationBasicInfo.website, "Would Like Updates": partnerData.organizationBasicInfo.wouldLikeUpdates, // Alternative Contact 'Alternative Name': partnerData.alternateContact.name, 'Alternative ContactNumber': partnerData.alternateContact.contactNumber, 'Alternative Email': partnerData.alternateContact.email, 'Alternative Designation': partnerData.alternateContact.designation, // Detailed Profile 'Bio': partnerData.detailedProfile.bio, 'Branch Location Countries': partnerData.detailedProfile.branchLocationCountries ? partnerData.detailedProfile.branchLocationCountries.map(option => option.name).join(', ') : '', "Communities": partnerData.detailedProfile.communities ? partnerData.detailedProfile.communities.map(option => option.name).join(', ') : '', "District": partnerData.detailedProfile.district, "Districts": partnerData.detailedProfile.districts ? partnerData.detailedProfile.districts.map(option => option.name).join(', ') : '', "Files": partnerData.detailedProfile.files, "Have Branches In Other Districts": partnerData.detailedProfile.haveBranchesInOtherDistricts, "Logo": partnerData.detailedProfile.logo, "partnerData Location": partnerData.detailedProfile.partnerLocation, "Preferred Languages": partnerData.detailedProfile.preferredLanguages ? partnerData.detailedProfile.preferredLanguages.map(option => option.name).join(', ') : '', "Preferred Mode Of Communications": partnerData.detailedProfile.preferredModeOfCommunications ? partnerData.detailedProfile.preferredModeOfCommunications.map(option => option.name).join(', ') : '', "State": partnerData.detailedProfile.state, "States": partnerData.detailedProfile.states ? partnerData.detailedProfile.states.map(option => option.name).join(', ') : '', "Total Reach Of Organization": partnerData.detailedProfile.totalReachOfOrganization, "Year Of Establishment": partnerData.detailedProfile.yearOfEstablishment, // Strength "Other Specific Support Required": partnerData.strengthAndCapability.otherSpecificSupportRequired, "Primary Areas Of Support Offered": partnerData.strengthAndCapability.otherSpecificSupportRequired ? partnerData.strengthAndCapability.otherSpecificSupportRequired.toString() : '', "Primary Areas Of Support Offered Description": partnerData.strengthAndCapability.primaryAreasOfSupportOffered.map(option => option.name).join(', '), "Primary Areas Of Support Offered Other": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedDescription, "Primary Areas Of Support Required": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther ? partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther.toString() : '', "Primary Areas Of Support Required Description": partnerData.strengthAndCapability.primaryAreasOfSupportRequired.map(option => option.name).join(', '), "Primary Areas Of Support Required Other": partnerData.strengthAndCapability.primaryAreasOfSupportRequiredOther, }] let surveyCtoHIIData = []; for (const hiidata of partnerData.surveyCtoData.hiiData) { let partnerHiiDetails = { "HII Id": hiidata.id, "HII Name": hiidata.name, "HII Packages Health": hiidata.packagesHealth, "HII Implementation Status": hiidata.implementationStatus, "HII Disaggregation Note": hiidata.disaggregationNote, "HII No Of Males": hiidata.id, "HII No Of Females": hiidata.noOfMales, "HII No Of Transgender": hiidata.noOfTransgender, "HII Health Remarks": hiidata.healthRemarks, "HII Relevant Documents": hiidata.relevantDocuments, } surveyCtoHIIData.push(partnerHiiDetails) } surveyCtoHIIData.forEach(data => { exportHiiData.push(data) }) let surveyCtoSpData = [] for (const spData of partnerData.surveyCtoData.spData) { let partnerSpDetails = { "SP Id": spData.id, "SP Name": spData.name, "SP Status": spData.status, "SP TotalAggregation": spData.totalAggregation, "SP OtherRemarks": spData.otherRemarks, "SP RelevantDocuments": spData.relevantDocuments, } surveyCtoSpData.push(partnerSpDetails) } surveyCtoSpData.forEach(data => { exportSpData.push(data) }) let surveyCtoSpSchemaData = [] for (const spSchema of partnerData.surveyCtoData.spSchemeData) { let partnerSpSchemaDetails = { "SPSchema SchemeId": spSchema.schemeId, "SPSchema Count": spSchema.count, } surveyCtoSpSchemaData.push(partnerSpSchemaDetails) } surveyCtoSpSchemaData.forEach(data => { exportSPSchemaData.push(data) }) surveyCtoData.push(exportHiiData) surveyCtoData.push(exportSpData) surveyCtoData.push(exportSPSchemaData) this.exportData = exportData; this.exportSurveyCtoData = surveyCtoData } exportProfileData(exportType: ExportType) { const fileTypeXLS = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8', fileTypeCSV = 'text/csv;charset=utf-8;', fileExtension = exportType === 'CSV' ? '.csv' : '.xlsx', element = document.createElement('a'); let blob; if (!this.partnerDetails) { return; } this.loadExportData(this.partnerDetails) const partnerData = XLSX.utils.json_to_sheet(this.exportData); const hiiData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[0]); const spData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[1]); const spSchema = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[2]); const wb = XLSX.utils.book_new(); if (exportType === 'CSV') { let csvData = Papa.unparse(this.exportData); blob = new Blob([csvData], { type: fileTypeCSV }); let url = URL.createObjectURL(blob); element.href = url; element.setAttribute('download', 'PartnerProfile' + fileExtension); element.click(); } else if (this.isImplementationData) { XLSX.utils.book_append_sheet(wb, hiiData, "Hii Data"); XLSX.utils.book_append_sheet(wb, spData, "Sp DATA"); XLSX.utils.book_append_sheet(wb, spSchema, "SP Schema Data"); XLSX.writeFile(wb, 'PartnerProfile' + fileExtension); } else if (this.isBothData) { XLSX.utils.book_append_sheet(wb, partnerData, "Partner Profile"); XLSX.utils.book_append_sheet(wb, hiiData, "Hii Data"); XLSX.utils.book_append_sheet(wb, spData, "Sp DATA"); XLSX.utils.book_append_sheet(wb, spSchema, "SP Schema Data"); XLSX.writeFile(wb, 'PartnerProfile' + fileExtension); } else { XLSX.utils.book_append_sheet(wb, partnerData, "Partner Profile"); XLSX.writeFile(wb, 'PartnerProfile' + fileExtension); } } }