Angular app for CAC desktop
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

230 lignes
10 KiB

  1. import { Component, OnInit } from '@angular/core';
  2. import { ActivatedRoute } from '@angular/router';
  3. import * as Papa from 'papaparse';
  4. import { AREAS_OF_WORK, COUNTRIES, STATES, COMMUNITIES, PREFERRED_MODE_OF_COMMUNICATION, PREFERRED_LANGUAGES, AREAS_OF_SUPPORT } from 'src/shared/data/form-options';
  5. import { UserData, UserDataOption } from 'src/shared/structure/user';
  6. import * as XLSX from 'xlsx'
  7. type ExportType = "CSV" | "XLSX";
  8. @Component({
  9. selector: 'app-partner-details',
  10. templateUrl: './partner-details.component.html',
  11. styleUrls: ['./partner-details.component.scss']
  12. })
  13. export class PartnerDetailsComponent implements OnInit {
  14. partnerDetails: UserData | undefined;
  15. isFormEditable: boolean = false;
  16. selectedSegment: 1 | 2 | 3 = 1;
  17. showExportOptions: boolean = false;
  18. areasOfWork = AREAS_OF_WORK;
  19. countries = COUNTRIES;
  20. states = STATES;
  21. districts: Array<UserDataOption> = [];
  22. communities = COMMUNITIES;
  23. preferredModesOfCommunication = PREFERRED_MODE_OF_COMMUNICATION;
  24. preferredLanguages = PREFERRED_LANGUAGES;
  25. areasOfSupport = AREAS_OF_SUPPORT;
  26. exportData: Array<any> = [];
  27. exportSurveyCtoData: Array<any> = [];
  28. isProfileData: boolean = true;
  29. isImplementationData: boolean = false;
  30. isBothData: boolean = false;
  31. constructor(
  32. private activateRouter: ActivatedRoute
  33. ) { }
  34. ngOnInit(): void {
  35. this.activateRouter.queryParams.subscribe((data: any) => {
  36. this.partnerDetails = JSON.parse(data.data);
  37. }).unsubscribe();
  38. }
  39. hasIndiaBranchLocation() {
  40. return this.partnerDetails?.detailedProfile.branchLocationCountries.find(country => country.name === 'India');
  41. }
  42. updateDistricts(states: Array<{ districts: Array<UserDataOption> }>) {
  43. console.log(states);
  44. this.districts = states.map(state => state.districts).flat();
  45. }
  46. loadExportData(partnerData: UserData) {
  47. let exportData: Array<any> = [];
  48. let exportHiiData: Array<any> = [];
  49. let exportSpData: Array<any> = [];
  50. let exportSPSchemaData: Array<any> = [];
  51. let surveyCtoData: Array<any> = [];
  52. exportData = [{
  53. "PortalID": partnerData.portalId ? partnerData.portalId : '-',
  54. // Primary Contact
  55. "Primary Name": partnerData.primaryContact.name,
  56. "Primary Contact Number": partnerData.primaryContact.contactNumber,
  57. "Primary Email": partnerData.primaryContact.email,
  58. "Primary Designation": partnerData.primaryContact.designation,
  59. // Basic Info
  60. "Areas Of Work": partnerData.organizationBasicInfo.areasOfWork ? partnerData.organizationBasicInfo.areasOfWork.map(option => option.name).join(', ') : '',
  61. "Name": partnerData.organizationBasicInfo.name,
  62. "Reason For Becoming Member": partnerData.organizationBasicInfo.reasonForBecomingMember,
  63. "Referral Name": partnerData.organizationBasicInfo.referralName,
  64. "Source": partnerData.organizationBasicInfo.source,
  65. "Type": partnerData.organizationBasicInfo.type,
  66. "Website": partnerData.organizationBasicInfo.website,
  67. "Would Like Updates": partnerData.organizationBasicInfo.wouldLikeUpdates,
  68. // Alternative Contact
  69. 'Alternative Name': partnerData.alternateContact.name,
  70. 'Alternative ContactNumber': partnerData.alternateContact.contactNumber,
  71. 'Alternative Email': partnerData.alternateContact.email,
  72. 'Alternative Designation': partnerData.alternateContact.designation,
  73. // Detailed Profile
  74. 'Bio': partnerData.detailedProfile.bio,
  75. 'Branch Location Countries': partnerData.detailedProfile.branchLocationCountries ? partnerData.detailedProfile.branchLocationCountries.map(option => option.name).join(', ') : '',
  76. "Communities": partnerData.detailedProfile.communities ? partnerData.detailedProfile.communities.map(option => option.name).join(', ') : '',
  77. "District": partnerData.detailedProfile.district,
  78. "Districts": partnerData.detailedProfile.districts ? partnerData.detailedProfile.districts.map(option => option.name).join(', ') : '',
  79. "Files": partnerData.detailedProfile.files,
  80. "Have Branches In Other Districts": partnerData.detailedProfile.haveBranchesInOtherDistricts,
  81. "Logo": partnerData.detailedProfile.logo,
  82. "partnerData Location": partnerData.detailedProfile.partnerLocation,
  83. "Preferred Languages": partnerData.detailedProfile.preferredLanguages ? partnerData.detailedProfile.preferredLanguages.map(option => option.name).join(', ') : '',
  84. "Preferred Mode Of Communications": partnerData.detailedProfile.preferredModeOfCommunications ? partnerData.detailedProfile.preferredModeOfCommunications.map(option => option.name).join(', ') : '',
  85. "State": partnerData.detailedProfile.state,
  86. "States": partnerData.detailedProfile.states ? partnerData.detailedProfile.states.map(option => option.name).join(', ') : '',
  87. "Total Reach Of Organization": partnerData.detailedProfile.totalReachOfOrganization,
  88. "Year Of Establishment": partnerData.detailedProfile.yearOfEstablishment,
  89. // Strength
  90. "Other Specific Support Required": partnerData.strengthAndCapability.otherSpecificSupportRequired,
  91. "Primary Areas Of Support Offered": partnerData.strengthAndCapability.otherSpecificSupportRequired ? partnerData.strengthAndCapability.otherSpecificSupportRequired.toString() : '',
  92. "Primary Areas Of Support Offered Description": partnerData.strengthAndCapability.primaryAreasOfSupportOffered.map(option => option.name).join(', '),
  93. "Primary Areas Of Support Offered Other": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedDescription,
  94. "Primary Areas Of Support Required": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther ? partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther.toString() : '',
  95. "Primary Areas Of Support Required Description": partnerData.strengthAndCapability.primaryAreasOfSupportRequired.map(option => option.name).join(', '),
  96. "Primary Areas Of Support Required Other": partnerData.strengthAndCapability.primaryAreasOfSupportRequiredOther,
  97. }]
  98. let surveyCtoHIIData = [];
  99. for (const hiidata of partnerData.surveyCtoData.hiiData) {
  100. let partnerHiiDetails = {
  101. "HII Id": hiidata.id,
  102. "HII Name": hiidata.name,
  103. "HII Packages Health": hiidata.packagesHealth,
  104. "HII Implementation Status": hiidata.implementationStatus,
  105. "HII Disaggregation Note": hiidata.disaggregationNote,
  106. "HII No Of Males": hiidata.id,
  107. "HII No Of Females": hiidata.noOfMales,
  108. "HII No Of Transgender": hiidata.noOfTransgender,
  109. "HII Health Remarks": hiidata.healthRemarks,
  110. "HII Relevant Documents": hiidata.relevantDocuments,
  111. }
  112. surveyCtoHIIData.push(partnerHiiDetails)
  113. }
  114. surveyCtoHIIData.forEach(data => {
  115. exportHiiData.push(data)
  116. })
  117. let surveyCtoSpData = []
  118. for (const spData of partnerData.surveyCtoData.spData) {
  119. let partnerSpDetails = {
  120. "SP Id": spData.id,
  121. "SP Name": spData.name,
  122. "SP Status": spData.status,
  123. "SP TotalAggregation": spData.totalAggregation,
  124. "SP OtherRemarks": spData.otherRemarks,
  125. "SP RelevantDocuments": spData.relevantDocuments,
  126. }
  127. surveyCtoSpData.push(partnerSpDetails)
  128. }
  129. surveyCtoSpData.forEach(data => {
  130. exportSpData.push(data)
  131. })
  132. let surveyCtoSpSchemaData = []
  133. for (const spSchema of partnerData.surveyCtoData.spSchemeData) {
  134. let partnerSpSchemaDetails = {
  135. "SPSchema SchemeId": spSchema.schemeId,
  136. "SPSchema Count": spSchema.count,
  137. }
  138. surveyCtoSpSchemaData.push(partnerSpSchemaDetails)
  139. }
  140. surveyCtoSpSchemaData.forEach(data => {
  141. exportSPSchemaData.push(data)
  142. })
  143. surveyCtoData.push(exportHiiData)
  144. surveyCtoData.push(exportSpData)
  145. surveyCtoData.push(exportSPSchemaData)
  146. this.exportData = exportData;
  147. this.exportSurveyCtoData = surveyCtoData
  148. }
  149. exportProfileData(exportType: ExportType) {
  150. const fileTypeXLS = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',
  151. fileTypeCSV = 'text/csv;charset=utf-8;',
  152. fileExtension = exportType === 'CSV' ? '.csv' : '.xlsx',
  153. element = document.createElement('a');
  154. let blob;
  155. if (!this.partnerDetails) {
  156. return;
  157. }
  158. this.loadExportData(this.partnerDetails)
  159. const partnerData = XLSX.utils.json_to_sheet(this.exportData);
  160. const hiiData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[0]);
  161. const spData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[1]);
  162. const spSchema = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[2]);
  163. const wb = XLSX.utils.book_new();
  164. if (exportType === 'CSV') {
  165. let csvData = Papa.unparse(this.exportData);
  166. blob = new Blob([csvData], { type: fileTypeCSV });
  167. let url = URL.createObjectURL(blob);
  168. element.href = url;
  169. element.setAttribute('download', 'PartnerProfile' + fileExtension);
  170. element.click();
  171. } else if (this.isImplementationData) {
  172. XLSX.utils.book_append_sheet(wb, hiiData, "Hii Data");
  173. XLSX.utils.book_append_sheet(wb, spData, "Sp DATA");
  174. XLSX.utils.book_append_sheet(wb, spSchema, "SP Schema Data");
  175. XLSX.writeFile(wb, 'PartnerProfile' + fileExtension);
  176. } else if (this.isBothData) {
  177. XLSX.utils.book_append_sheet(wb, partnerData, "Partner Profile");
  178. XLSX.utils.book_append_sheet(wb, hiiData, "Hii Data");
  179. XLSX.utils.book_append_sheet(wb, spData, "Sp DATA");
  180. XLSX.utils.book_append_sheet(wb, spSchema, "SP Schema Data");
  181. XLSX.writeFile(wb, 'PartnerProfile' + fileExtension);
  182. } else {
  183. XLSX.utils.book_append_sheet(wb, partnerData, "Partner Profile");
  184. XLSX.writeFile(wb, 'PartnerProfile' + fileExtension);
  185. }
  186. }
  187. }