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.

partner-details.component.ts 12 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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. let areaOfWork: any = [];
  55. let branchLocationCountries: any = [];
  56. let communities: any = [];
  57. let preferredLanguages: any = [];
  58. let primaryAreasOfSupportOffered: any = [];
  59. let primaryAreasOfSupportRequired: any = [];
  60. partnerData.strengthAndCapability.primaryAreasOfSupportOffered.forEach(x => { primaryAreasOfSupportOffered.push(x.name) })
  61. partnerData.strengthAndCapability.primaryAreasOfSupportRequired.forEach(x => { primaryAreasOfSupportRequired.push(x.name) })
  62. partnerData.detailedProfile.preferredLanguages.forEach(x => { preferredLanguages.push(x.name) })
  63. partnerData.detailedProfile.communities.forEach(x => { communities.push(x.name) })
  64. partnerData.detailedProfile.branchLocationCountries.forEach(x => { branchLocationCountries.push(x.name) })
  65. partnerData.organizationBasicInfo.areasOfWork.forEach(x => { areaOfWork.push(x.name) })
  66. exportData = [{
  67. "PortalID": partnerData.portalId ? partnerData.portalId : '-',
  68. // Primary Contact
  69. "Primary Name": partnerData.primaryContact.name,
  70. "Primary Contact Number": partnerData.primaryContact.contactNumber,
  71. "Primary Email": partnerData.primaryContact.email,
  72. "Primary Designation": partnerData.primaryContact.designation,
  73. // Basic Info
  74. "Areas Of Work": areaOfWork.toString(),
  75. "Name": partnerData.organizationBasicInfo.name,
  76. "Reason For Becoming Member": partnerData.organizationBasicInfo.reasonForBecomingMember,
  77. "Referral Name": partnerData.organizationBasicInfo.referralName,
  78. "Source": partnerData.organizationBasicInfo.source,
  79. "Type": partnerData.organizationBasicInfo.type,
  80. "Website": partnerData.organizationBasicInfo.website,
  81. "Would Like Updates": partnerData.organizationBasicInfo.wouldLikeUpdates,
  82. // Alternative Contact
  83. 'Alternative Name': partnerData.alternateContact.name,
  84. 'Alternative ContactNumber': partnerData.alternateContact.contactNumber,
  85. 'Alternative Email': partnerData.alternateContact.email,
  86. 'Alternative Designation': partnerData.alternateContact.designation,
  87. // Detailed Profile
  88. 'Bio': partnerData.detailedProfile.bio,
  89. 'Branch Location Countries': branchLocationCountries.toString(),
  90. "Communities": communities.toString(),
  91. "District": partnerData.detailedProfile.district,
  92. "Districts": partnerData.detailedProfile.districts ? partnerData.detailedProfile.districts.toString() : '',
  93. "Files": partnerData.detailedProfile.files,
  94. "Have Branches In Other Districts": partnerData.detailedProfile.haveBranchesInOtherDistricts,
  95. "Logo": partnerData.detailedProfile.logo,
  96. "partner Location": partnerData.detailedProfile.partnerLocation,
  97. "Preferred Languages": preferredLanguages.toString(),
  98. "Preferred Mode Of Communications": partnerData.detailedProfile.preferredModeOfCommunications ? partnerData.detailedProfile.preferredModeOfCommunications.toString() : '',
  99. "State": partnerData.detailedProfile.state,
  100. "States": partnerData.detailedProfile.states ? partnerData.detailedProfile.states.toString() : '',
  101. "Total Reach Of Organization": partnerData.detailedProfile.totalReachOfOrganization,
  102. "Year Of Establishment": partnerData.detailedProfile.yearOfEstablishment,
  103. // Strength
  104. "Other Specific Support Required": partnerData.strengthAndCapability.otherSpecificSupportRequired,
  105. "Primary Areas Of Support Offered": partnerData.strengthAndCapability.otherSpecificSupportRequired ? partnerData.strengthAndCapability.otherSpecificSupportRequired.toString() : '',
  106. "Primary Areas Of Support Offered Description": primaryAreasOfSupportOffered.toString(),
  107. "Primary Areas Of Support Offered Other": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedDescription,
  108. "Primary Areas Of Support Required": partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther ? partnerData.strengthAndCapability.primaryAreasOfSupportOfferedOther.toString() : '',
  109. "Primary Areas Of Support Required Description": primaryAreasOfSupportRequired.toString(),
  110. "Primary Areas Of Support Required Other": partnerData.strengthAndCapability.primaryAreasOfSupportRequiredOther,
  111. }]
  112. let surveyCtoHIIData = [];
  113. for (const hiidata of partnerData.surveyCtoData.hiiData) {
  114. let partnerHiiDetails = {
  115. "HII Id": hiidata.id,
  116. "HII Name": hiidata.name,
  117. "HII Packages Health": hiidata.packagesHealth,
  118. "HII Implementation Status": hiidata.implementationStatus,
  119. "HII Disaggregation Note": hiidata.disaggregationNote,
  120. "HII No Of Males": hiidata.id,
  121. "HII No Of Females": hiidata.noOfMales,
  122. "HII No Of Transgender": hiidata.noOfTransgender,
  123. "HII Health Remarks": hiidata.healthRemarks,
  124. "HII Relevant Documents": hiidata.relevantDocuments,
  125. }
  126. surveyCtoHIIData.push(partnerHiiDetails)
  127. }
  128. surveyCtoHIIData.forEach(data => {
  129. exportHiiData.push(data)
  130. })
  131. let surveyCtoSpData = []
  132. for (const spData of partnerData.surveyCtoData.spData) {
  133. let partnerSpDetails = {
  134. "SP Id": spData.id,
  135. "SP Name": spData.name,
  136. "SP Status": spData.status,
  137. 'SP Reason Name': spData.reasonName,
  138. "SP Female Number": spData.femaleNo ? spData.femaleNo : '',
  139. "SP Male Number": spData.maleNo ? spData.maleNo : '',
  140. "Tg Number": spData.tgNo ? spData.tgNo : '',
  141. "SP TotalAggregation": spData.totalAggregation,
  142. "SP OtherRemarks": spData.otherRemarks,
  143. "SP RelevantDocuments": spData.relevantDocuments,
  144. }
  145. surveyCtoSpData.push(partnerSpDetails)
  146. }
  147. surveyCtoSpData.forEach(data => {
  148. exportSpData.push(data)
  149. })
  150. let surveyCtoSpSchemaData = []
  151. for (const spSchema of partnerData.surveyCtoData.spSchemeData) {
  152. let partnerSpSchemaDetails = {
  153. "SPSchema SchemeId": spSchema.schemeId,
  154. "SPSchema Count": spSchema.count,
  155. }
  156. surveyCtoSpSchemaData.push(partnerSpSchemaDetails)
  157. }
  158. surveyCtoSpSchemaData.forEach(data => {
  159. exportSPSchemaData.push(data)
  160. })
  161. surveyCtoData.push(exportHiiData)
  162. surveyCtoData.push(exportSpData)
  163. surveyCtoData.push(exportSPSchemaData)
  164. this.exportData = exportData;
  165. this.exportSurveyCtoData = surveyCtoData
  166. }
  167. async save() {
  168. this.isFormEditable = false;
  169. if (this.partnerDetails) {
  170. try {
  171. await this.partnerProfileService.updatePartnerData(this.partnerDetails);
  172. } catch (e) {
  173. console.error('Could not update partner data', e);
  174. }
  175. }
  176. }
  177. exportProfileData(exportType: ExportType) {
  178. if (!this.partnerDetails) {
  179. return;
  180. }
  181. this.loadExportData(this.partnerDetails)
  182. const fileTypeCSV = 'text/csv;charset=utf-8;',
  183. element = document.createElement('a');
  184. let blob;
  185. const partnerData = XLSX.utils.json_to_sheet(this.exportData);
  186. const hiiData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[0]);
  187. const spData = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[1]);
  188. const spSchema = XLSX.utils.json_to_sheet(this.exportSurveyCtoData[2]);
  189. const wb = XLSX.utils.book_new();
  190. if (exportType === 'CSV') {
  191. if (this.isProfileData) {
  192. let csvData = Papa.unparse(this.exportData);
  193. blob = new Blob([csvData], { type: fileTypeCSV });
  194. let url = URL.createObjectURL(blob);
  195. element.href = url;
  196. element.setAttribute('download', 'ProfileData' + '.csv');
  197. element.click();
  198. } else if (this.isImplementationData) {
  199. this.exportJsonToCSV(this.exportSurveyCtoData, ['HiiData', 'SPData', 'SPSchemaData'])
  200. } else {
  201. let completeData = this.exportSurveyCtoData
  202. completeData.push(this.exportData)
  203. this.exportJsonToCSV(completeData, ['HiiData', 'SPData', 'SPSchemaData', 'ProfileData',])
  204. }
  205. } else {
  206. if (this.isProfileData) {
  207. XLSX.utils.book_append_sheet(wb, partnerData, "Partner Profile");
  208. XLSX.writeFile(wb, 'PartnerProfile.xlsx');
  209. } else if (this.isImplementationData) {
  210. XLSX.utils.book_append_sheet(wb, hiiData, "Hii Data");
  211. XLSX.utils.book_append_sheet(wb, spData, "Sp DATA");
  212. XLSX.utils.book_append_sheet(wb, spSchema, "SP Schema Data");
  213. XLSX.writeFile(wb, 'PartnerProfile.xlsx');
  214. } else {
  215. XLSX.utils.book_append_sheet(wb, partnerData, "PartneData");
  216. XLSX.utils.book_append_sheet(wb, hiiData, "HiiData");
  217. XLSX.utils.book_append_sheet(wb, spData, "SPData");
  218. XLSX.utils.book_append_sheet(wb, spSchema, "SPSchemaData");
  219. XLSX.writeFile(wb, 'PartnerProfile.xlsx');
  220. }
  221. }
  222. }
  223. exportJsonToCSV(csvData: any, fileName?: any) {
  224. const fileTypeCSV = 'text/csv;charset=utf-8;',
  225. element = document.createElement('a');
  226. let blob;
  227. csvData.forEach((exportData: any, index: number) => {
  228. let csvData = Papa.unparse(exportData);
  229. blob = new Blob([csvData], { type: fileTypeCSV });
  230. let url = URL.createObjectURL(blob);
  231. element.href = url;
  232. element.setAttribute('download', fileName[index] + '.csv');
  233. element.click();
  234. });
  235. }
  236. }