Angular app for CAC desktop
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

partner-details.component.ts 13 KiB

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