Angular app for CAC desktop
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

268 rader
12 KiB

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