@posiwise/smart-crm 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +4 -4
  2. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +7 -7
  3. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +7 -7
  4. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +5 -5
  5. package/esm2022/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.mjs +4 -4
  6. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +5 -5
  7. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +14 -5
  8. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +4 -4
  9. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +4 -4
  10. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +14 -5
  11. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +4 -4
  12. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +14 -5
  13. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +4 -4
  14. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +13 -5
  15. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +4 -4
  16. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +5 -5
  17. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +4 -4
  18. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +5 -5
  19. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +5 -5
  20. package/esm2022/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.mjs +4 -4
  21. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +4 -4
  22. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.mjs +5 -5
  23. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +5 -5
  24. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +5 -5
  25. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +5 -5
  26. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +4 -4
  27. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +5 -5
  28. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +4 -4
  29. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.mjs +4 -4
  30. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +32 -16
  31. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +41 -15
  32. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +5 -5
  33. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +82 -22
  34. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.mjs +4 -4
  35. package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.mjs +5 -5
  36. package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.mjs +5 -5
  37. package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary.component.mjs +4 -4
  38. package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +4 -4
  39. package/esm2022/lib/private/smart-crm-private.module.mjs +5 -5
  40. package/esm2022/lib/private/smart-crm-private.routing.module.mjs +5 -5
  41. package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +4 -4
  42. package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +4 -4
  43. package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +4 -4
  44. package/esm2022/lib/public/smart-crm-public.module.mjs +5 -5
  45. package/esm2022/lib/public/smart-crm-public.routing.module.mjs +5 -5
  46. package/esm2022/lib/shared/models/smart-crm.model.mjs +6 -3
  47. package/fesm2022/posiwise-smart-crm.mjs +330 -192
  48. package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
  49. package/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.d.ts +1 -1
  50. package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +1 -1
  51. package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.d.ts +1 -0
  52. package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.d.ts +1 -0
  53. package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.d.ts +1 -0
  54. package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.d.ts +1 -0
  55. package/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.d.ts +2 -2
  56. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.d.ts +3 -1
  57. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +11 -1
  58. package/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.d.ts +7 -7
  59. package/lib/shared/models/smart-crm.model.d.ts +2 -1
  60. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"posiwise-smart-crm.mjs","sources":["../../../../libs/smart-crm/src/lib/shared/models/smart-crm.model.ts","../../../../libs/smart-crm/src/lib/shared/routers/routers.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-insight.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-insight.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.ts","../../../../libs/smart-crm/src/lib/private/smart-crm-private.routing.module.ts","../../../../libs/smart-crm/src/lib/private/smart-crm-private.module.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.html","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.html","../../../../libs/smart-crm/src/lib/public/components/smart-crm-signup/smart-crm-signup.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-signup/smart-crm-signup.component.html","../../../../libs/smart-crm/src/lib/public/smart-crm-public.routing.module.ts","../../../../libs/smart-crm/src/lib/public/smart-crm-public.module.ts","../../../../libs/smart-crm/src/index.ts","../../../../libs/smart-crm/src/posiwise-smart-crm.ts"],"sourcesContent":["import { UntypedFormBuilder, Validators } from '@angular/forms';\n\nexport class AppSmartCrm {\n static getAccountsForm() {\n return new UntypedFormBuilder().group({\n name: ['', Validators.required],\n owner_id: ['', Validators.required],\n location: ['', Validators.required],\n subscription_id: ['', Validators.required],\n tel: ['', Validators.minLength(9)],\n description: [''],\n organization_size_id: [''],\n organization_type_id: [''],\n organization_industry_id: [''],\n country: [null, Validators.required],\n company_url: [''],\n status: ['', [Validators.required]],\n priority: ['', [Validators.required]],\n crm_source_id: ['']\n });\n }\n\n static getContactsForm() {\n return new UntypedFormBuilder().group({\n first_name: ['', Validators.required],\n last_name: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n dob: [null],\n headline: ['', Validators.required],\n tel: ['', Validators.minLength(9)],\n department_id: [''],\n crm_account_id: [{}, Validators.required],\n linkedin_url: [''],\n potential: [''],\n labels: [''],\n crm_source_id: [''],\n email_verified: ['']\n });\n }\n\n static getLeadsForm() {\n return new UntypedFormBuilder().group({\n first_name: [''],\n last_name: [''],\n email: ['', [Validators.required, Validators.email]],\n dob: [null],\n headline: [''],\n tel: ['', Validators.minLength(9)],\n crm_account_id: [''],\n linkedin_url: [''],\n crm_source_id: ['', Validators.required],\n subscription_id: ['', Validators.required],\n potential: [''],\n labels: [''],\n email_verified: ['']\n });\n }\n\n static getMarketingForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n owner_id: ['', [Validators.required]],\n title: ['', [Validators.required]],\n body: ['', Validators.required],\n feature_keys: [''],\n location: [''],\n send_until: ['', [Validators.required]],\n send_at: ['', [Validators.required]],\n is_pushed: [false, [Validators.required]],\n days_to_wait_from_previous_newsletter: [''],\n product_ids: [null],\n previous_newsletter_id: [''],\n contact_potential: [''],\n account_size: [''],\n account_status: [''],\n account_priority: [''],\n account_source: [''],\n contact_label: [''],\n can_reply: [''],\n contact_source: [''],\n only_new_contacts: ['']\n });\n }\n\n static getOpportunitiesForm() {\n return new UntypedFormBuilder().group({\n title: ['', Validators.required],\n crm_contact_id: [{}],\n crm_account_id: ['', Validators.required],\n description: [''],\n feature_keys: [''],\n one_time_amount: [null, Validators.required],\n win_chances: [null, Validators.required],\n starting_at: [Date, Validators.required],\n monthly_amount: [null, Validators.required],\n lost_reason: [''],\n trial_start_at: [''],\n won_reason: [''],\n crm_opportunity_stage_id: ['', Validators.required],\n won: [null],\n crm_opportunity_category_ids: ['', Validators.required]\n });\n }\n\n static getOpportunityCategoriesForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n previous_category_id: [''],\n is_visible: [false],\n is_default: [false]\n });\n }\n\n static getSettingsForm() {\n return new UntypedFormBuilder().group({\n name: ['', Validators.required],\n target_week: ['', Validators.required],\n target_week_min: ['', Validators.required],\n subscription_id: [''],\n previous_action_id: [''],\n visible: [true]\n });\n }\n\n static getSourceForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n is_default: ['']\n });\n }\n\n static getStageForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n previous_stage_id: [''],\n visible: [false],\n is_default: [false],\n color_code: '',\n crm_opportunity_category_ids: ['', Validators.required]\n });\n }\n\n static getWidgetForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n position: ['', Validators.required],\n owner_id: ['', Validators.required],\n crm_widget_id: [''],\n visible: [false]\n });\n }\n\n static getAccountActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n owner_id: ['', Validators.required],\n crm_account_id: [null],\n comment: ['', [Validators.required]],\n crm_contact_id: [null],\n crm_action_id: ['', [Validators.required]],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null]\n });\n }\n\n static getContactActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n comment: ['', Validators.required],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null],\n crm_account_id: ['', Validators.required],\n crm_contact_id: ['', Validators.required],\n crm_action_id: ['', Validators.required],\n owner_id: ['']\n });\n }\n\n static getOpportunityActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n comment: ['', Validators.required],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null],\n crm_account_id: ['', Validators.required],\n crm_contact_id: [''],\n crm_action_id: ['', Validators.required],\n crm_opportunity_id: ['', Validators.required],\n owner_id: ['']\n });\n }\n}\n","const baseUrl = '/crm/';\n\nexport const ROUTERS = {\n accounts: `${baseUrl}accounts/`,\n contacts: `${baseUrl}contacts`,\n accountInfo: `${baseUrl}accounts/info/`,\n addAccount: `${baseUrl}accounts/add`,\n contactInfo: `${baseUrl}contacts/info/`,\n contactAdd: `${baseUrl}contacts/add`,\n contactDetails: `${baseUrl}contacts/detail/`,\n opportunityAdd: `${baseUrl}opportunities/add`,\n opportunities: `${baseUrl}opportunities/`,\n opportunityInfo: `${baseUrl}opportunities/info/`,\n configurationDetails: `${baseUrl}configuration/detail/`,\n configurations: `${baseUrl}configuration/`,\n leadsDetails: `${baseUrl}leads/details/`,\n marketingDetails: `${baseUrl}marketing/details/`,\n marketing: `${baseUrl}marketing`,\n categoryDetails: `${baseUrl}/configuration/category-details/`,\n sourceDetails: `${baseUrl}/configuration/source-details/`,\n stageDetails: `${baseUrl}/configuration/stage-details/`,\n widgetsDetails: `${baseUrl}/configuration/widget-details/`\n};\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { PAGE_SIZE, User, Subscription } from '@posiwise/common-utilities';\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, GeoService, SubscriptionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-company-details',\n templateUrl: './smart-crm-account-details.component.html'\n})\nexport class SmartCrmCompanyDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n user: User;\n\n id: number;\n\n submitted = false;\n\n data: CrmAccount;\n\n onEdit = false;\n\n subscriptionMembers: [] = [];\n\n organizationSizes$: Observable<any>;\n\n organizationTypes$: Observable<any>;\n\n organizationIndustries$: Observable<any>;\n\n private countries$: Observable<any>;\n\n allSubscriptionMembers: any;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n filteredOwners: any;\n\n subscription: Subscription;\n\n status = [];\n\n priority = [];\n\n source = [];\n\n private countryNames = [];\n\n filteredCountries: any;\n\n constructor(\n injector: Injector,\n private subscriptionService: SubscriptionService,\n private crmService: CrmService,\n private commonService: CommonService,\n private geoService: GeoService\n ) {\n super(injector);\n this.form = AppSmartCrm.getAccountsForm();\n }\n\n onSearchOwner(event) {\n let values = [];\n if (event.query) {\n values = this.allSubscriptionMembers.filter((x: any) => {\n return x.first_name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allSubscriptionMembers.forEach(item => {\n values.push(item);\n });\n }\n this.filteredOwners = values;\n }\n\n ngOnInit() {\n this.organizationTypes$ = this.commonService.getOrganizationTypes();\n this.organizationSizes$ = this.commonService.getOrganizationSizes();\n this.organizationIndustries$ = this.commonService.getOrganizationIndustries();\n this.countries$ = this.geoService.getCountries();\n this.countries$.subscribe(res => {\n this.countryNames = res;\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getUserInfo(this.subscription?.id, this.hasAccess);\n this.accountDefaultValues(this.subscription?.id);\n this.form.get('subscription_id').setValue(this.subscription?.id);\n }\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.status = response.status;\n this.priority = response.priority;\n this.source = response.source;\n });\n }\n\n /** Function to get subscription members */\n private getAllSubscriptionMembers(id: number) {\n this.subscriptionService\n .getEnrolledSubscription(id, { page_size: PAGE_SIZE })\n .subscribe(response => {\n this.allSubscriptionMembers = response.members;\n if (this.id) {\n this.onEdit = true;\n this.getAccountDetail();\n } else {\n this.onEdit = false;\n }\n if (this.id === 0) {\n const currentUser = this.allSubscriptionMembers.find(\n x => x.id === this.user.id\n );\n this.form.get('owner_id').setValue(currentUser);\n }\n });\n }\n\n // /** Function to get user info */\n private getUserInfo(subscriptionId: number, hasAccess: boolean) {\n this.userStore().subscribe(user => {\n this.user = user;\n if (hasAccess) {\n this.form.get('owner_id').setValue(user);\n this.getAllSubscriptionMembers(subscriptionId);\n } else {\n this.form.get('owner_id').setValue(user);\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to execute on form submit */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n this.form.get('owner_id').setValue(this.form.get('owner_id').value.id);\n this.form.get('country').setValue(this.form.get('country').value.code);\n const sub$ = this.id\n ? this.crmService.updateAccount(this.subscription?.id, this.id, this.form.value)\n : this.crmService.postAccount(this.form.value, this.subscription?.id);\n sub$.subscribe(response => {\n this.toast.success(this.translation.translate('Crm.AccountMessage.UpdatedMessage'));\n this.router.navigate([\n `/${this.subscription?.slug}${ROUTERS.accountInfo}${response.id}`\n ]);\n });\n }\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('location').setValue(event.formatted_address);\n }\n\n /** Function to get account detail on edit form */\n private getAccountDetail() {\n this.crmService.getAccountDetail(this.subscription?.id, this.id).subscribe(res => {\n this.form.patchValue(res);\n this.data = res;\n this.allSubscriptionMembers.forEach(member => {\n if (this.data.owner_id === member.id) {\n this.form.get('owner_id').patchValue(member);\n }\n });\n this.countryNames.forEach(x => {\n if (x['code'] === res['country']) {\n this.form.get('country').patchValue(x);\n }\n });\n this.subscriptionService\n .getEnrolledSubscription(this.subscription?.id, { page_size: PAGE_SIZE })\n .subscribe({\n next: response => {\n this.subscriptionMembers = response.members;\n },\n error: error => this.toast.showToast(error)\n });\n });\n }\n\n onSearchCountry(event) {\n let values = [];\n if (event.query) {\n values = this.countryNames.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n }\n\n this.countryNames.forEach(item => {\n values.push(item);\n });\n this.filteredCountries = values;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.AccountMessage.Country' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"first_name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport {\n DOCUMENT_TYPE_EXT,\n PAGE_SIZE,\n TOKEN_HEADER_KEY,\n Paging,\n User,\n Subscription\n} from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-company-files',\n templateUrl: './smart-crm-account-files.component.html'\n})\nexport class SmartCrmCompanyFilesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n @Input() accountId: number;\n\n @Input() contactId: number;\n\n @Input() opportunityId: number;\n\n isLoaded = false;\n\n allFiles: any[];\n\n searchText = '';\n\n totalRecordsUnFilter = 0;\n\n totalRecords: number;\n\n loading = true;\n\n hasAccess: boolean;\n\n user: User;\n\n userId: number;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n Done: boolean;\n\n page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private modalService: NgbModal,\n private authService: AuthService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n }\n\n ngOnInit() {\n this.getUserInfo();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n }\n });\n }\n\n /** Function to get all account files */\n private getAllFiles(paging: Paging) {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getAllAccountFiles(\n this.subscription?.id,\n this.accountId || null,\n this.contactId || null,\n this.opportunityId || null,\n paging\n )\n .subscribe(filesResponse => {\n this.allFiles = filesResponse?.crm_account_files || [];\n this.totalRecords = filesResponse.object_count;\n this.totalRecordsUnFilter = filesResponse.unfiltered_count;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete file */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteAccountFiles(this.subscription?.id, id).subscribe(() => {\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountFilesMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: String(this.userId),\n crm_account_id: String(this.accountId),\n crm_contact_id: String(this.contactId) || '',\n crm_opportunity_id: String(this.opportunityId) || ''\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row d-none\">\n <div class=\"col-12 mb-3\">\n <h2>Account Files</h2>\n </div>\n</div>\n<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-file\"\n (click)=\"openModal(content)\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add File' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <p-table #dt\n [value]=\"allFiles\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search Files...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.AccountFilesMessage.Owner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_account_id\">\n {{ 'Crm.AccountFilesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_contact_id\">\n {{ 'Crm.AccountFilesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_opportunity_id\">\n {{ 'Crm.AccountFilesMessage.Opportunity' | transloco }}\n <p-sortIcon field=\"crm_opportunity_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"file\">\n {{ 'Crm.AccountFilesMessage.File' | transloco }}\n <p-sortIcon field=\"file\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-file>\n <tr>\n <td data-head=\"Owner\">{{ file.owner?.first_name }} {{ file.owner?.last_name }}</td>\n <td data-head=\"Account\">\n <a *ngIf=\"file.crm_account_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n file.crm_account_id\n ]\">{{ file.crm_account?.name }}</a>\n </td>\n <td data-head=\"Contact\">\n <a *ngIf=\"file.crm_contact_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n file.crm_contact_id\n ]\">{{ file.crm_contact | ifNameNullShowEmail }}</a>\n </td>\n <td data-head=\"Opportunities\">{{ file?.crm_opportunity?.title }}</td>\n <td data-head=\"Files\">\n <a href=\"{{ file.file?.url }}\"\n target=\"blank\">{{\n file.file.url.split('?')[0].split('/')[\n file.file.url.split('?')[0].split('/').length - 1\n ]\n }}</a>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess || file.owner_id === userId\">\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(file.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFilter !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFilter === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.AccountFilesMessage.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LogoCacheService } from '@posiwise/common-services';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport { LazyLoadEvent } from 'primeng/api';\nimport { Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport {\n DOCUMENT_TYPE_EXT,\n PAGE_SIZE,\n TOKEN_HEADER_KEY,\n Paging,\n Subscription,\n User\n} from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport {\n AuthService,\n CommonService,\n FormHelperService,\n GeoService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-company-info',\n templateUrl: './smart-crm-account-info.component.html',\n styleUrls: ['./smart-crm-account-info.component.scss']\n})\nexport class SmartCrmCompanyInfoComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscription: Subscription;\n\n actionControls: UntypedFormGroup;\n\n aboutControls: UntypedFormGroup;\n\n accountId: number;\n\n userId: number;\n\n isFormEdit = true;\n\n user: User;\n\n allSubscriptionMembers: any;\n\n filteredOwner: any;\n\n data: any;\n\n submitted = false;\n\n accountComments = [];\n\n hasAccess = false;\n\n body: string;\n\n editComment = false;\n\n filteredContact: any;\n\n private isContactValid = true;\n\n filteredContactComment: any;\n\n contactId: number;\n\n isLoaded = false;\n\n totalRecords: number;\n\n totalRecordsUnFilter = 0;\n\n loading = true;\n\n searchText = '';\n\n potential = ['low', 'medium', 'high'];\n\n filterByPotentials: string;\n\n showFullComment = false;\n\n commentId: number;\n\n status: any[];\n\n priority: any[];\n\n source: any[];\n\n organizationSizes$: Observable<any>;\n\n organizationIndustries$: Observable<any>;\n\n countries$: Observable<any>;\n\n organizationTypes$: Observable<any>;\n\n owner: any;\n\n actions: any;\n\n buttonDisable: boolean;\n\n isDisabled = false;\n\n dangerColor: boolean;\n\n updating = false;\n\n actionId: number;\n\n accountVersioning: any[];\n\n contacts: any[];\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n Done: boolean;\n\n direction = '';\n\n private page = 1;\n\n currentPage = 1;\n\n private totalContacts = 0;\n\n selector = '.timeline-container';\n\n submitAction = false;\n\n subscriptionId: number;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private subscriptionService: SubscriptionService,\n private geoService: GeoService,\n private commonService: CommonService,\n private modalService: NgbModal,\n private authService: AuthService,\n private cdr: ChangeDetectorRef,\n private logoCacheService: LogoCacheService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getAccountActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getAccountsForm();\n }\n\n ngOnInit() {\n this.countries$ = this.geoService.getCountries();\n this.organizationIndustries$ = this.commonService.getOrganizationIndustries();\n this.organizationTypes$ = this.commonService.getOrganizationTypes();\n this.organizationSizes$ = this.commonService.getOrganizationSizes();\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getActions();\n this.accountDefaultValues(this.subscription.id);\n }\n this.route.params.subscribe(data => {\n this.accountId = Number(data['id']);\n if (this.accountId) {\n this.getAccountDetails();\n this.getContactVersion();\n }\n });\n });\n this.getAllComments();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.status = response.status;\n this.priority = response.priority;\n this.source = response.source;\n });\n }\n\n /** Function to call account by ID */\n getAccountDetails() {\n this.crmService\n .getAccountDetail(this.subscription?.id, this.accountId)\n .subscribe(response => {\n this.data = response;\n this.aboutControls.patchValue(response);\n this.aboutControls.get('owner_id').setValue(response.owner);\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n updateAccountInfo() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n this.aboutControls\n .get('owner_id')\n .setValue(this.aboutControls.get('owner_id').value.id);\n this.crmService\n .updateAccount(this.subscription?.id, this.accountId, this.aboutControls.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getAccountDetails();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n onScrollTimeline() {\n this.currentPage++;\n const totalPages = Math.ceil(this.totalContacts / 5);\n // Prevent API call if all messages have been fetched\n if (this.currentPage <= totalPages) {\n this.getAllComments();\n }\n }\n\n /** Function to save comment */\n onSave() {\n this.submitAction = true;\n const form = this.actionControls.value;\n form.owner_id = this.data?.owner_id;\n form.crm_account_id = this.accountId;\n form.crm_contact_id = form?.crm_contact_id?.id;\n form.when = HelperService.dateFormat(form.when);\n if (this.actionControls.invalid) {\n FormHelperService.validateAllFormFields(this.actionControls);\n } else {\n this.crmService\n .postAccountComment(this.subscription?.id, form)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getAllComments();\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n /** Function to get comments */\n private getAllComments() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAccountComments(this.accountId, this.subscriptionId, {\n page: this.currentPage,\n page_size: 5\n })\n .subscribe(resp => {\n this.totalContacts = resp.object_count;\n if (resp?.crm_account_actions?.length) {\n this.accountComments = [\n ...this.accountComments,\n ...resp.crm_account_actions\n ];\n\n this.accountComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(\n moment(new Date()),\n 'days'\n );\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.accountComments.sort((a, b) => {\n return (\n <any>new Date(a.when).getTime() -\n <any>new Date(b.when).getTime()\n );\n });\n this.accountComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.accountComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.accountComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.accountComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n });\n }\n\n /** Function to update comment */\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id,\n crm_contact_id: this.contactId\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined, '');\n this.getAllComments();\n });\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.aboutControls.get('location').setValue(event.formatted_address);\n }\n\n /** Function to get subscription members */\n getAllSubscriptionMembers() {\n this.subscriptionService\n .getEnrolledSubscription(this.subscription?.id)\n .subscribe(member => {\n this.allSubscriptionMembers = member.members;\n });\n }\n\n /** Function to show edit comment section */\n showEditControls(event, action) {\n if (action && action.crm_contact) {\n this.contactId = action.crm_contact.id;\n }\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n /** Function to get and show all the actions */\n getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp?.crm_actions?.length) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id: number, action, completedOrUncompleted: boolean) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getAllComments();\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id: number, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getAllComments();\n });\n }\n });\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getAllComments();\n this.updating = false;\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to get the contacts related to account */\n private getAccountContacts(paging: Paging) {\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAccountContacts(\n this.accountId,\n this.subscriptionId,\n this.filterByPotentials || '',\n paging\n )\n .subscribe(response => {\n if (response.contacts) {\n this.contacts = response.contacts;\n this.totalRecords = response.object_count;\n this.totalRecordsUnFilter = response.unfiltered_count;\n this.contacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${\n member.last_name || ''\n } - ${member.email}`.trim();\n });\n }\n })\n .add(() => {\n this.loading = false;\n });\n }\n });\n }\n\n /** Function when auto-complete dropdown selected */\n onDropdownClick() {\n if (this.contacts.length === 0) {\n this.filteredContact = [{ displayName: 'No contact to choose' }];\n this.filteredContactComment = [{ first_name: 'No contact to choose' }];\n }\n }\n\n /** search owner */\n search(event) {\n const values = [];\n if (event.query) {\n this.filteredOwner = this.allSubscriptionMembers.filter((x: any) => {\n return x.first_name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allSubscriptionMembers.forEach(element => {\n values.push(element);\n });\n }\n this.filteredOwner = values;\n }\n\n searchContact(event) {\n this.isContactValid = false;\n let values = [];\n if (event.query) {\n values = this.contacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.contacts.forEach(element => {\n values.push(element);\n });\n }\n this.filteredContact = values;\n }\n\n selectContact(event) {\n this.isContactValid = this.contacts.some(x => x.id === event.id);\n }\n\n OnContactBlur() {\n if (!this.isContactValid) {\n this.actionControls.get('crm_contact_id').setValue('');\n }\n }\n\n searchContactInComment(event) {\n let values = [];\n if (event.query) {\n values = this.contacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.contacts.forEach(element => {\n values.push(element);\n });\n }\n this.filteredContactComment = values;\n }\n\n selectCommentContact(event) {\n this.contactId = event.id;\n }\n\n /** Function to delete contact */\n onDeleteContact(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.DeletedMessage')\n );\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to get contact versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.accountId, 'CrmAccount')\n .subscribe(response => {\n this.accountVersioning = response.versions;\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_account_id: `${this.accountId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n getAccountLogo(url: string) {\n if (url) {\n return this.logoCacheService.getLogo(\n `https://logo.clearbit.com/${url?.split('.')[1]}.${\n url?.split('.')[2]?.split('/')[0]\n }`\n );\n }\n\n return '';\n }\n\n navigateToAddOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { account_id: this.accountId }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Account Info\n </h2>\n </div>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToAddOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img alt=\"Profile Image\"\n width=\"100\"\n height=\"100\"\n [src]=\"getAccountLogo(data?.company_url)\"\n class=\"img-fluid company-logo\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.name }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"isFormEdit = !isFormEdit; this.getAllSubscriptionMembers()\">{{ 'Button.Edit' | transloco }}</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.AccountMessage.Name' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.AccountMessage.Location' | transloco\n }}</label>\n <input ngx-gp-autocomplete\n class=\"form-control rounded-0 ps-1 user-value\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"countries$ | async as countries\">\n <label>{{ 'Crm.AccountMessage.Country' | transloco\n }}<span class=\"text-danger\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"country\"\n [ngClass]=\"{ 'is-invalid': submitted && f['country'].errors }\">\n <option *ngFor=\"let country of countries\"\n [value]=\"country.code\">\n {{ country.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{ 'Crm.AccountMessage.Owner' | transloco }}</label>\n <p class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.owner_id\">\n {{ data?.owner?.first_name }} {{ data?.owner?.last_name }}\n </p>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.owner_id\"\n [suggestions]=\"filteredOwner\"\n formControlName=\"owner_id\"\n dataKey=\"id\"\n field=\"first_name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search owner\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.AccountMessage.CompanyUrl' | transloco\n }}</label>\n <a [href]=\"data?.company_url\"\n target=\"blank\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.company_url\">{{ data?.company_url }}</a>\n <input *ngIf=\"!isFormEdit || !data?.company_url\"\n type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"data?.tel\">\n <label class=\"label mb-0\">{{ 'Crm.AccountMessage.Tel' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"tel\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationTypes$ | async as types\">\n <label>{{ 'Organization.OrganizationType' | transloco }}</label>\n <div class=\"mb-3\">\n <select formControlName=\"organization_type_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <label>{{ 'Organization.OrganizationIndustry' | transloco }}</label>\n <select formControlName=\"organization_industry_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <label>{{ 'Crm.AccountMessage.Size' | transloco }}</label>\n <select formControlName=\"organization_size_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Status' | transloco }}</label>\n <select formControlName=\"status\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Priority' | transloco }}</label>\n <select formControlName=\"priority\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Source' | transloco }}</label>\n <select formControlName=\"crm_source_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getAccountDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateAccountInfo()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionControls.get('crm_action_id').invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4 ps-0\">\n <p-autoComplete [suggestions]=\"filteredContact\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"searchContact($event)\"\n (onSelect)=\"selectContact($event)\"\n (onBlur)=\"OnContactBlur()\"\n styleClass=\"w-100\"\n placeholder=\"Search contact\"\n [multiple]=\"false\"\n (onDropdownClick)=\"onDropdownClick()\">\n </p-autoComplete>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <a class=\"btn btn-outline-primary me-0 me-sm-2\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2\"\n value=\"Submit Note\" />\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [message]=\"\n 'Crm.AccountMessage.NoActionsInAccountInfoMessage' | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!accountComments?.length && isLoaded\"\n class=\"no-actions pt-2\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"accountComments?.length\">\n <div id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper timeline-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"selector\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScrollTimeline()\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd || last }\"\n *ngFor=\"\n let item of accountComments;\n index as i;\n let odd = odd;\n let even = even;\n let last = last;\n let first = first\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span></span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <div class=\"auto-complete mb-3 ui-fluid skills-modal\">\n <p-autoComplete [(ngModel)]=\"item.crm_contact\"\n [suggestions]=\"filteredContactComment\"\n dataKey=\" id \"\n field=\"first_name\"\n dropdown=\" true \"\n (completeMethod)=\"\n searchContactInComment($event)\n \"\n (onSelect)=\"selectCommentContact($event)\"\n (onBlur)=\"OnContactBlur()\"\n styleClass=\" w-100 \"\n placeholder=\" Search contact \"\n [multiple]=\"false\"\n (onDropdownClick)=\"onDropdownClick()\">\n </p-autoComplete>\n </div>\n <p class=\"float-start mb-0\"\n *ngIf=\"\n !showFullComment || item.id !== commentId\n \">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true;\n commentId = item.id\n \">...show more\n </a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 &&\n showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event, item)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <a class=\"text-secondary action-owner\"\n *ngIf=\"item.crm_contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n item.crm_contact.id\n ]\">{{ item.crm_contact.first_name }}\n {{ item.crm_contact.last_name || '' }}</a>\n <p>\n By\n {{\n item.owner.first_name +\n ' ' +\n item.owner.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i\n class=\"fa fa-tasks completed\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i\n class=\"far fa-window-close\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <div class=\"control-btns mt-3 text-end form-action-buttons\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined, '')\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Contacts</a>\n <ng-template ngbNavContent>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactAdd,\n accountId\n ]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n </div>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <p-table class=\"table\"\n #dt\n [value]=\"contacts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.ContactMessage.ContactOwner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"headline\">\n {{ 'Crm.ContactMessage.Headline' | transloco }}\n <p-sortIcon field=\"headline\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-contact>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n contact.id\n ]\">{{\n contact.first_name + ' ' + contact.last_name\n | textTruncate: 20\n }}</a>\n </td>\n <td data-head=\"OwnerName\">\n {{ contact.owner | ifNameNullShowEmail }}\n </td>\n <td data-head=\"Headline\"\n class=\"headline-content\">\n {{ contact?.headline | textTruncate: 20 }}\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n contact.id\n ]\">\n <i\n class=\"fa fa-eye see-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Add opportunity\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.opportunityAdd\n ]\"\n [queryParams]=\"{ contact_id: contact.id }\">\n <i\n class=\"fa fa-plus-circle add-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.contactDetails,\n contact.id\n ]\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDeleteContact(contact.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFilter !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n <div *ngIf=\"totalRecordsUnFilter === 0\">\n <pw-no-data [message]=\"'Crm.ContactMessage.ContactsAdminMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let versioning of accountVersioning\">\n <p>\n <strong>Event: </strong>{{ versioning.event }} |\n <strong>Author: </strong><a *ngIf=\"versioning?.author\"\n [routerLink]=\"['/members', versioning?.author?.slug]\">{{ versioning?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ versioning.created_at | dateFormat: 'datetime' }}<br />\n <strong>Object: </strong>{{ versioning.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"accountVersioning?.length === 0\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"4\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [accountId]=\"accountId\"></pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Plotly, Subscription } from '@posiwise/common-utilities';\nimport { CrmAccountResponse } from '../../../shared/interface/crm-account.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, LogoCacheService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-companies',\n templateUrl: './smart-crm-accounts.component.html',\n styleUrls: ['./smart-crm-accounts.component.scss']\n})\nexport class SmartCrmCompaniesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmAccountResponse = {\n accounts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n subscriptionId: number;\n\n organizationSizes = [];\n\n userId: number;\n\n hasAccess = false;\n\n isLoaded = false;\n\n private allIndustries: any;\n\n searchOptions: any = [];\n\n filterByIndustries = [];\n\n status = [];\n\n priority = [];\n\n source = [];\n\n filterBySource = [];\n\n filterByStatus = [];\n\n filterByPriority = [];\n\n filterBySizeId = [];\n\n searchLocationText: string;\n\n private filterByLocation: string;\n\n accountGeography: Plotly.Figure;\n\n accountActivities: any;\n\n accountLastInvoices: any;\n\n accountInsight: any;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n private commonService: CommonService,\n private logoCacheService: LogoCacheService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.accountDefaultValues(this.subscription.id);\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getUserInfo();\n }\n });\n this.getIndustries();\n this.getAllOrganizationSize();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user?.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getAccountGeography();\n this.getAccountActivities();\n this.getAccountLastInvoices();\n this.getAccountInsight();\n }\n }\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n const { status } = response;\n status.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.status.push(data);\n });\n const { priority } = response;\n priority.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.priority.push(data);\n });\n const { source } = response;\n source.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.source.push(data);\n });\n });\n }\n\n /** Function to get the accounts list */\n private getAllAccounts(paging: Paging) {\n this.data.accounts = [];\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllAccounts(\n this.subscriptionId,\n paging,\n this.filterByIndustries.join() || '',\n this.filterBySizeId.join() || '',\n this.filterByStatus.join() || '',\n this.filterByPriority.join() || '',\n this.filterBySource.join() || '',\n this.filterByLocation || ''\n )\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to call accounts size */\n private getAllOrganizationSize() {\n this.commonService.getOrganizationSizes().subscribe(response => {\n const organizationSizes = response.organization_sizes;\n organizationSizes.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.organizationSizes.push(data);\n });\n });\n }\n\n /** Function to get organization industries */\n private getIndustries() {\n this.commonService.getOrganizationIndustries().subscribe(response => {\n this.allIndustries = response.organization_industries;\n this.allIndustries.forEach(val => {\n const industries = {\n label: val.name,\n value: val.id\n };\n this.searchOptions.push(industries);\n });\n });\n }\n\n /** Function to execute on delete button click */\n onDelete(id: number, subscription_id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteAccount(id, subscription_id).subscribe(() => {\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** filtering accounts */\n onSearchOptionChange(event, filterBy: string) {\n if (filterBy === 'industry') {\n this.filterByIndustries = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'size') {\n this.filterBySizeId = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'status') {\n this.filterByStatus = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'priority') {\n this.filterByPriority = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'source') {\n this.filterBySource = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.filterByLocation = event.formatted_address;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n /** Location filter while keyup */\n locationSearch(event) {\n if (event.target.value.length === 0) {\n this.filterByLocation = '';\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to clear all filters */\n clearFilters() {\n this.filterBySizeId = [];\n this.filterByIndustries = [];\n this.filterByPriority = [];\n this.filterBySource = [];\n this.filterByStatus = [];\n this.searchText = '';\n this.filterByLocation = '';\n this.searchLocationText = '';\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n /** Function to call account geography */\n private getAccountGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_geography')\n .subscribe(response => {\n this.accountGeography = response;\n });\n }\n\n getUserAccountInfo(account: any): { message: string; iconClass: string } {\n if (account.signed_up_at !== null) {\n if (account.unsubscribed_at === null) {\n return { message: 'Paid Customer', iconClass: 'fas fa-dollar-sign money-icon' };\n } else {\n return {\n message: 'Old Customer',\n iconClass: 'fas fa-exclamation-triangle text-danger'\n };\n }\n } else if (account.child_subscription_id !== null) {\n return {\n message: 'Account with existing subscription',\n iconClass: 'fas fa-link account-link-icon'\n };\n }\n return { message: null, iconClass: null };\n }\n\n formatMRR(mrrInCents: number) {\n const mrrInDollars = (mrrInCents / 100).toFixed(2);\n return '$' + mrrInDollars.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n /** Function to call account activities */\n private getAccountActivities() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_last_activities')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountActivities = [];\n } else this.accountActivities = response;\n });\n }\n\n /** Function to call last invoice */\n private getAccountLastInvoices() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_last_invoices')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountLastInvoices = [];\n } else this.accountLastInvoices = response;\n });\n }\n\n /** Function to call account insight */\n private getAccountInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountInsight = [];\n } else this.accountInsight = response;\n });\n }\n\n getAccountLogo(url: string) {\n if (url) {\n return this.logoCacheService.getLogo(\n `https://logo.clearbit.com/${url?.split('.')[1]}.${\n url?.split('.')[2]?.split('/')[0]\n }`\n );\n }\n\n return '';\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Accounts</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.addAccount]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.AccountMessage.AddAccount' | transloco }} </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.accounts\" [paginator]=\"true\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\" [loading]=\"loading\" [filterDelay]=\"1000\" (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row m-0\">\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Industry\" [options]=\"searchOptions\" [(ngModel)]=\"filterByIndustries\"\n (onChange)=\"onSearchOptionChange($event, 'industry')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Size\" [options]=\"organizationSizes\" [(ngModel)]=\"filterBySizeId\"\n (onChange)=\"onSearchOptionChange($event, 'size')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Status\" [options]=\"status\" [(ngModel)]=\"filterByStatus\"\n (onChange)=\"onSearchOptionChange($event, 'status')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Priority\" [options]=\"priority\" [(ngModel)]=\"filterByPriority\"\n (onChange)=\"onSearchOptionChange($event, 'priority')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Source\" [options]=\"source\" [(ngModel)]=\"filterBySource\"\n (onChange)=\"onSearchOptionChange($event, 'source')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4 mb-2\">\n <input ngx-gp-autocomplete class=\"form-control location\" #places=\"ngx-places\" [(ngModel)]=\"searchLocationText\"\n placeholder=\"Search location...\" (keyup)=\"locationSearch($event)\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </div>\n </div>\n <div class=\"search-filter\">\n <a class=\"mt-3 ms-3 text-start text-primary\" (click)=\"clearFilters()\">Clear all filters</a>\n <div class=\"text-end mt-0 mt-sm-3\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search accounts...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"name\"> {{ 'Crm.AccountMessage.Name' | transloco }} <p-sortIcon field=\"name\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"location\"> {{ 'Crm.AccountMessage.Location' | transloco }} <p-sortIcon\n field=\"location\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"owner_id\"> {{ 'Crm.AccountMessage.Owner' | transloco }} <p-sortIcon\n field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"organization_size_id\"> {{ 'Crm.AccountMessage.Size' | transloco }} <p-sortIcon\n field=\"organization_size_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"expected_mrr\"> {{ 'Crm.AccountMessage.MRR' | transloco }} <p-sortIcon field=\"expected_mrr\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"signed_up_at\"> {{ 'Crm.AccountMessage.SignUp' | transloco }} <p-sortIcon field=\"signed_up_at\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"sessions_last_quarter\"> {{ 'Crm.AccountMessage.Quarter' | transloco }} <p-sortIcon field=\"sessions_last_quarter\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"sessions_last_month\"> {{ 'Crm.AccountMessage.Month' | transloco }} <p-sortIcon field=\"sessions_last_month\">\n </p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-account>\n <tr>\n <td data-head=\"Name\" class=\"name-column\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, account.id]\" class=\"name-link\">\n <img alt=\"company image\" [src]=\"getAccountLogo(account.company_url)\" class=\"img-fluid company-logo me-2\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n <span class=\"account-name\">{{ account.name }}</span>\n <i [ngClass]=\"getUserAccountInfo(account).iconClass\" [ngbTooltip]=\"getUserAccountInfo(account).message\"\n class=\"info-icon\"></i>\n </a>\n </td>\n <td data-head=\"Location\">{{ account.location }}</td>\n <td data-head=\"Owner\">\n <a [routerLink]=\"['/members', account?.owner?.slug]\"> {{ account.owner | ifNameNullShowEmail }}</a>\n </td>\n <td data-head=\"Size\">{{ account?.organisation_size?.name !== 'Not available' ? account?.organisation_size?.name : '' }}\n</td>\n <td data-head=\"MRR\">{{ account?.expected_mrr !== null && account?.expected_mrr !== 0 ? formatMRR(account?.expected_mrr) : '' }}\n</td>\n <td data-head=\"Signed Up\">{{ account.signed_up_at | date: 'dd/MMM/yyyy' }}</td>\n <td data-head=\"Quarter\">{{ account.sessions_last_quarter }}</td>\n <td data-head=\"Month\">{{ account.sessions_last_month }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"See contacts\" class=\"me-2 me-sm-3 see-icon\"\n [routerLink]=\"['/' + subscription?.slug + routers.contacts, account.id]\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </li>\n <ng-container *ngIf=\"hasAccess || account.owner_id === userId\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.accounts,\n account.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(account.id, subscription.id)\"\n aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoAccountMessage' | transloco\"> </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\" *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"accountInsight\" [paginator]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Value' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Reason' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Title\">{{ insight.title }}</td>\n <td data-head=\"Value\">{{ insight.value }}</td>\n <td data-head=\"Reason\">{{ insight.reason }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ accountInsight.length }}</span>\n </div>\n <div *ngIf=\"accountInsight?.length === 0\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"accountGeography\">\n <plotly-plot [data]=\"accountGeography?.data\" [layout]=\"accountGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!accountGeography\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Last Activities -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Last Activities</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountActivities?.length\">\n <p-table class=\"table\" #dt [value]=\"accountActivities\" [paginator]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountActivities.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Contact' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Action' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Comment' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-activities>\n <tr>\n <td data-head=\"Owner\"> {{ activities.owner?.first_name }} {{ activities.owner?.last_name }} </td>\n <td data-head=\"Account\">{{ activities.crm_account?.name }}</td>\n <td data-head=\"Contact\"> {{ activities.crm_contact?.first_name }} {{ activities.crm_contact?.last_name }}\n </td>\n <td data-head=\"Action\">{{ activities.crm_action?.name }}</td>\n <td data-head=\"Comment\">{{ activities.comment }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ accountActivities.length }}</span>\n </div>\n <div *ngIf=\"accountActivities?.length === 0\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Last Invoices -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Last Invoices</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountLastInvoices?.length\">\n <p-table class=\"table\" #dt [value]=\"accountLastInvoices\" [paginator]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountLastInvoices.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Contact' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.File' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-invoice>\n <tr>\n <td data-head=\"Owner\"> {{ invoice.owner?.first_name }} {{ invoice.owner?.last_name }} </td>\n <td data-head=\"Organization\"> {{ invoice.subcription?.organization }} </td>\n <td data-head=\"Contact\">{{ invoice.subcription?.contact_name }}</td>\n <td data-head=\"File\">\n <a target=\"blank\" href=\"{{ invoice.file }}\">{{ invoice.file.split('/')[invoice.file.split('/').length -\n 1] }}</a>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ accountLastInvoices.length }}</span>\n </div>\n <div *ngIf=\"accountLastInvoices?.length === 0\">\n <pw-no-data [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-competition',\n templateUrl: './smart-crm-competition.component.html'\n})\nexport class SmartCrmCompetitionComponent {}\n","<pw-coming-soon message=\"Competition\"></pw-coming-soon>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAction } from '../../../../../shared/interface/crm-action.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-settings-details',\n templateUrl: './smart-crm-actions-details.component.html',\n styleUrls: ['./smart-crm-actions-details.component.scss']\n})\nexport class SmartCrmSettingsDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n id: number;\n\n submitted = false;\n\n user: User;\n\n data: CrmAction;\n\n targetWeek = [];\n\n targetWeekMin = [];\n\n subscriptionId: number;\n\n actions$: Observable<any>;\n\n subscription: Subscription;\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n this.form = AppSmartCrm.getSettingsForm();\n }\n\n ngOnInit() {\n this.targetWeek = HelperService.getNumbersRange(100);\n this.targetWeekMin = HelperService.getNumbersRange(100);\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.form.get('subscription_id').setValue(this.subscription?.id);\n this.actions$ = this.crmService.getAllActions(this.subscription?.id);\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n });\n if (this.id) {\n this.getActionDetails();\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to get action details on edit form */\n private getActionDetails() {\n this.crmService.getAction(this.subscription?.id, this.id).subscribe({\n next: resp => {\n this.data = resp;\n this.form.patchValue(resp);\n },\n error: error => this.toast.showToast(error)\n });\n }\n\n /** Function to update existing action */\n onSave() {\n this.form.value['previous_action_id'] = this.form.value['previous_action_id']\n ? this.form.value['previous_action_id'].id\n : null;\n Number(this.form.get('target_week').value);\n Number(this.form.get('target_week_min').value);\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.updateActionCon(this.subscription?.id, this.form.value, this.id)\n : this.crmService.postNewAction(this.subscription?.id, this.form.value);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.Settings.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n onChange(event) {\n if (event === true) {\n this.form.get('visible').setValue(true);\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\" (click)=\"back()\" class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\"\n aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Action: {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-3\">\n <pw-input-container [label]=\"'Crm.Settings.Name' | transloco\" name=\"name\"\n [errorMsg]=\"'Crm.Settings.NameFieldErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <label class=\"mb-2\">{{ 'Crm.Settings.TargetWeek' | transloco }}<span class=\"text-danger\">*</span></label>\n <select formControlName=\"target_week\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['target_week'].errors }\">\n <option *ngFor=\"let option of targetWeek\" [value]=\"option\">{{ option }}</option>\n </select>\n <div class=\"danger\" *ngIf=\"\n form.get('target_week').touched && form.get('target_week')?.errors?.required\n \">\n <span> {{ 'Crm.Settings.TargetWeekErrorMessage' | transloco }} </span>\n </div>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <label class=\"mb-2\">{{ 'Crm.Settings.TargetWeekMin' | transloco }}<span class=\"text-danger\">*</span></label>\n <select formControlName=\"target_week_min\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['target_week_min'].errors }\">\n <option *ngFor=\"let option of targetWeekMin\" [value]=\"option\"> {{ option }} </option>\n </select>\n <div class=\"danger\" *ngIf=\"\n form.get('target_week_min').touched &&\n form.get('target_week_min')?.errors?.required\n \">\n <span> {{ 'Crm.Settings.TargetWeekMinErrorMessage' | transloco }} </span>\n </div>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Crm.Settings.Tooltip.PreviousAction' | transloco\"\n [label]=\"'Crm.Settings.PreviousAction' | transloco\" name=\"previous_action_id\"\n *ngIf=\"actions$ | async as actions\">\n <p-dropdown [options]=\"actions['crm_actions']\" formControlName=\"previous_action_id\" optionLabel=\"name\"\n [showClear]=\"true\" placeholder=\"Select a PreviousAction\"></p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 col-lg-2 pe-0 mx-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Settings.Visible' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.Settings.Tooltip.Visible' | transloco }}</span>\n </label>\n <ui-switch checked class=\"d-block\" (change)=\"onChange($event)\" name=\"visible\" formControlName=\"visible\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" (click)=\"back()\"> {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\"> {{ 'Button.Submit' | transloco }} </button>\n </div>\n </div>\n </form>\n</div>","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmActionResponse } from '../../../../shared/interface/crm-action.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\nimport { Table } from 'primeng/table';\n\n@Component({\n selector: 'pw-smart-crm-actions',\n templateUrl: './smart-crm-actions.component.html',\n styleUrls: ['./smart-crm-actions.component.scss']\n})\nexport class SmartCrmActionsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmActionResponse = {\n crm_actions: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n subscriptionId: number;\n\n searchText = '';\n\n loading = true;\n\n userId: number;\n\n hasAccess = false;\n\n isLoaded = false;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getActions({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n shouldShowTableContent(): boolean {\n return this.data.unfiltered_count !== 0;\n }\n\n /** Function to get and show all the actions */\n private getActions(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllActions(this.subscriptionId, paging)\n .subscribe(resp => {\n this.data = resp;\n })\n .add(() => {\n this.loading = false;\n this.isLoaded = true;\n });\n }\n });\n }\n\n /** Function to delete existing setting */\n onDelete(id: number) {\n HelperService.raiseDeletePopup()\n .then(resp => {\n if (resp.value) {\n this.crmService.deleteAction(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.DeletedMessage')\n );\n this.getActions({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n })\n .catch(error => this.toast.showToast(error));\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>\n Please define the actions you want to associate with your contacts. For example you\n could choose Phone Call, or Meeting, or Email Sent, etc.\n </p>\n <a *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + subscription?.slug + routers.configurationDetails + 'add']\"\n data-cy=\"add-action\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Settings.AddAction' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_actions\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"100\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search action...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\" >\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.Settings.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"target_week\">\n {{ 'Crm.Settings.TargetWeek' | transloco }}\n <p-sortIcon field=\"target_week\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"target_week_min\">\n {{ 'Crm.Settings.TargetWeekMin' | transloco }}\n <p-sortIcon field=\"target_week_min\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Settings.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n *ngIf=\"hasAccess\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-action>\n <tr>\n <td data-head=\"Name\">{{ action.name }}</td>\n <td data-head=\"TargetWeek\">{{ action.target_week }}</td>\n <td data-head=\"TargetWeekMin\">{{ action.target_week_min }}</td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: action?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!action?.visible }}</span>\n </td>\n <td data-head=\"Action\"\n *ngIf=\"hasAccess\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.configurationDetails,\n action.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(action.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n <div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.Settings.NoActionMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmSourceResponse } from '../../../../shared/interface/crm-source.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-source',\n templateUrl: './smart-crm-source.component.html'\n})\nexport class SmartCrmCompanySourceComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n hasAccess = false;\n\n isLoaded = false;\n\n data: CrmSourceResponse = {\n crm_sources: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n subscriptionId: number;\n\n page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllSource({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to all account source */\n private getAllSource(paging: Paging) {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getAllAccountSource(subscription?.id, paging)\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete account source */\n onDelete(id) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteSource(this.subscription?.id, id).subscribe(() => {\n this.getAllSource({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountSourceMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>Please define the sources that you want to associate with your prospect accounts.</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.sourceDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.AccountSourceMessage.AddAccountSource' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_sources\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.AccountSourceMessage.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-source>\n <tr>\n <td data-head=\"Name\">{{ source.name }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.sourceDetails,\n source.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(source.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.object_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.AccountSourceMessage.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmWidgetResponse } from '../../../../shared/interface/crm-widget.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-widgets',\n templateUrl: './smart-crm-widgets.component.html'\n})\nexport class SmartCrmWidgetsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n data: CrmWidgetResponse = {\n crm_widget_relationships: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n allWidgets: any[];\n\n positions = [];\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllSubscriptionWidgets({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n this.getWidgetPositions();\n }\n\n /** Function to get all widgets */\n private getAllSubscriptionWidgets(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (response) {\n this.crmService\n .getAllSubscriptionWidgets(this.subscriptionId, paging)\n .subscribe(res => {\n this.getAllWidgets();\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get all widgets */\n private getAllWidgets() {\n this.crmService.getAllWidgets(this.subscriptionId).subscribe(widgets => {\n this.allWidgets = widgets.crm_widgets || [];\n this.data.crm_widget_relationships?.forEach(subscriptionWidget => {\n this.allWidgets?.forEach(widget => {\n if (subscriptionWidget.crm_widget_id === widget.id) {\n subscriptionWidget['crm_widget'] = widget.name;\n }\n });\n });\n });\n }\n\n /** Function to delete widget */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService\n .deleteSubscriptionWidget(id, this.subscription?.id)\n .subscribe(() => {\n this.getAllSubscriptionWidgets({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.Widgets.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get positions */\n private getWidgetPositions() {\n this.crmService.getWidgetPositions(this.subscriptionId).subscribe(response => {\n this.positions = response;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>Please define the widgets you want to use.</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.widgetsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Widgets.AddWidgets' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_widget_relationships\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"crm_widget_id\">\n {{ 'Crm.Widgets.CrmWidget' | transloco }}\n <p-sortIcon field=\"crm_widget_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"position\">\n {{ 'Crm.Widgets.Position' | transloco }}\n <p-sortIcon field=\"position\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Widgets.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-widget>\n <tr>\n <td data-head=\"Crm Widget\">{{ widget.crm_widget }}</td>\n <td data-head=\"Position\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: positions,\n item: widget?.position\n }\"\n color=\"default\">{{ widget.position }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: widget?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!widget?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.widgetsDetails,\n widget.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(widget.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.Widgets.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmStageResponse } from '../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-stages',\n templateUrl: './smart-crm-stages.component.html'\n})\nexport class SmartCrmStagesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n data: CrmStageResponse = {\n crm_opportunity_stages: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n private page = 1;\n\n subscription: Subscription;\n\n stageNames = [];\n\n categories = [];\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getAllOpportunityCategories();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllStages({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get all stages */\n private getAllStages(paging: Paging) {\n this.getUserSubscriptionId().subscribe(res => {\n if (res) {\n this.subscriptionId = res;\n this.crmService\n .getAllStages(this.subscriptionId, paging)\n .subscribe(response => {\n this.data = response;\n this.sortByPreviousStageId();\n this.stageNames = response?.crm_opportunity_stages?.map(stage => {\n return stage.name;\n });\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n private sortByPreviousStageId() {\n // eslint-disable-next-line consistent-return\n this.data.crm_opportunity_stages.sort((a, b) => {\n if (a.previous_stage_id === null || b.previous_stage_id === a.id) {\n return -1;\n }\n if (b.previous_stage_id === null || a.previous_stage_id === b.id) {\n return 1;\n }\n\n return 0;\n });\n }\n\n /** Function to delete stage */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteStage(this.subscription?.id, id).subscribe(() => {\n this.getAllStages({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.StageMessages.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories?.map(category => {\n return category?.name;\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'Crm.StageMessages.StageTitle' | transloco }}</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.stageDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.StageMessages.AddStage' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_opportunity_stages\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search stages...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.StageMessages.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"previous_stage_id\">\n {{ 'Crm.StageMessages.PreviousStage' | transloco }}\n <p-sortIcon field=\"previous_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_opportunity_category_ids\">\n {{ 'Crm.StageMessages.OpportunityCategory' | transloco }}\n <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.StageMessages.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-stage>\n <tr>\n <td data-head=\"Name\">{{ stage?.name }}</td>\n <td data-head=\"Previous Stage\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: stageNames,\n item: stage?.crm_previous_stage?.name\n }\"\n color=\"warning\">{{ stage?.crm_previous_stage?.name }}</span>\n </td>\n <td data-head=\"Opportunity Category\">\n <span *ngFor=\"let category of stage?.crm_opportunity_categories\"\n class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\"\n color=\"blue-grey\">{{ category?.name }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: stage?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!stage?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.stageDetails,\n stage.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(stage.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.StageMessages.NoStageMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmOpportunityCategoryResponse } from '../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-opportunity-categories',\n templateUrl: './smart-crm-opportunity-categories.component.html'\n})\nexport class SmartCrmOpportunityCategoriesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmOpportunityCategoryResponse = {\n crm_opportunity_categories: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n user: User;\n\n private page = 1;\n\n subscription: Subscription;\n\n categoryNames = [];\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllOpportunityCategories({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.crmService\n .getAllOpportunityCategories(this.subscriptionId, paging)\n .subscribe(res => {\n this.data = res;\n this.categoryNames = res?.crm_opportunity_categories?.map(category => {\n return category?.name;\n });\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete categories */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService\n .deleteOpportunityCategory(this.subscription?.id, id)\n .subscribe(() => {\n this.getAllOpportunityCategories({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.CommonMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'Crm.CategoriesMessages.CategoriesTitle' | transloco }}</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-category\"\n [routerLink]=\"['/' + subscription?.slug + routers.categoryDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.CategoriesMessages.AddCategory' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_opportunity_categories\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search stages...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.CategoriesMessages.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"previous_category_id\">\n {{ 'Crm.CategoriesMessages.PreviousCategory' | transloco }}\n <p-sortIcon field=\"previous_category_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_visible\">\n {{ 'Crm.CategoriesMessages.Visible' | transloco }}\n <p-sortIcon field=\"is_visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-stage>\n <tr>\n <td data-head=\"Name\">{{ stage?.name }}</td>\n <td data-head=\"Previous Stage\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: categoryNames,\n item: stage?.previous_category?.name\n }\"\n color=\"blue-grey\">{{ stage?.previous_category?.name }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: stage?.is_visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ stage?.is_visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.categoryDetails,\n stage.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(stage.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.CategoriesMessages.NoCategoriesMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-configuration',\n templateUrl: './smart-crm-configuration.component.html',\n styleUrls: ['./smart-crm-configuration.component.scss']\n})\nexport class SmartCrmConfigurationComponent extends AppBaseComponent implements OnInit {\n activeTab = 'actions';\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.activeTab = data['tabId'] || 'actions';\n });\n }\n\n onTabChange(event) {\n this.getUserSubscription().subscribe(subscription => {\n this.router.navigate([`${subscription.slug}${ROUTERS.configurations}${event.nextId}`]);\n });\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>CRM Configuration</h2>\n </div>\n</div>\n<ul ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"activeTab\"\n (navChange)=\"onTabChange($event)\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"'actions'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Actions</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-actions></pw-smart-crm-actions>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'categories'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Categories</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-opportunity-categories></pw-smart-crm-opportunity-categories>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'stage'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Stages</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-stages></pw-smart-crm-stages>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'source'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'Pages.Beta'\">\n <a ngbNavLink>Sources</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-source></pw-smart-crm-source>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'widget'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'SuperAdmin'\">\n <a ngbNavLink>Widgets</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-widgets></pw-smart-crm-widgets>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'admin'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'SuperAdmin'\">\n <a ngbNavLink>Admin</a>\n <ng-template ngbNavContent>\n <pw-coming-soon message=\"Admin\"></pw-coming-soon>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmOpportunityCategory } from '../../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-opportunity-categories-details',\n templateUrl: './smart-crm-opportunity-categories-details.component.html'\n})\nexport class SmartCrmOpportunityCategoriesDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n data: CrmOpportunityCategory;\n\n subscriptionId: number;\n\n submitted: boolean;\n\n id: number;\n\n categories$: Observable<any>;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getOpportunityCategoriesForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.categories$ = this.crmService.getAllOpportunityCategories(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n if (this.id) {\n this.getOpportunityDetails(this.id);\n }\n });\n }\n\n /** Function to get opportunity Details */\n private getOpportunityDetails(id: number) {\n this.crmService\n .getOpportunityCategoryDetails(this.subscriptionId, id)\n .subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** on submit the form */\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.editOpportunityCategory(this.subscriptionId, this.id, this.form.value)\n : this.crmService.postOpportunityCategory(this.subscriptionId, this.form.value);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CommonMessage.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.CategoriesMessages.Category' | transloco }}:\n {{ data?.name || ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.CategoriesMessages.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'Crm.CategoriesMessages.NameRequired' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Crm.CategoriesMessages.Tooltip.PreviousCategory' | transloco\n \"\n [label]=\"'Crm.CategoriesMessages.PreviousCategory' | transloco\"\n name=\"previous_category_id\"\n [errorMsg]=\"'Crm.CategoriesMessages.PreviousCategoryRequired' | transloco\"\n *ngIf=\"categories$ | async as categories\">\n <select formControlName=\"previous_category_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['previous_category_id'].errors }\">\n <option value=\"\">select previous category</option>\n <option *ngFor=\"let option of categories['crm_opportunity_categories']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col col-md-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CategoriesMessages.Tooltip.Visible' | transloco\"\n [label]=\"'Crm.CategoriesMessages.Visible' | transloco\"\n name=\"is_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_visible\"\n name=\"is_visible\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col col-md-2\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [label]=\"'Crm.CategoriesMessages.Default' | transloco\"\n [tooltipText]=\"'Crm.CategoriesMessages.Tooltip.Default' | transloco\"\n name=\"is_default\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_default\"\n name=\"is_default\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmSource } from '../../../../../shared/interface/crm-source.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-source-details',\n templateUrl: './smart-crm-source-details.component.html'\n})\nexport class SmartCrmSourceDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n subscriptionId: number;\n\n submitted = false;\n\n sourceForm: UntypedFormGroup;\n\n data: CrmSource;\n\n sourceId: number;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.sourceForm = AppSmartCrm.getSourceForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.sourceForm.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.route.params.subscribe(data => {\n this.sourceId = Number(data['id']);\n if (this.sourceId) {\n this.getSourceDetails(this.sourceId);\n }\n });\n }\n\n /** Function to get source details */\n private getSourceDetails(id) {\n this.crmService.getAccountSourceDetails(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n this.sourceForm.patchValue(response);\n });\n }\n\n onSave() {\n this.submitted = true;\n if (this.sourceForm.valid) {\n const data = this.sourceForm.value;\n const sub$ = this.sourceId\n ? this.crmService.updateAccountSource(this.subscriptionId, this.sourceId, data)\n : this.crmService.saveAccountSource(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.AccountSourceMessage.UpdatedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.sourceForm.controls;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountSourceMessage.AccountSource' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"sourceForm\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountSourceMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'name is required' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-3 col-lg-2 pe-0 cancel-button\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <label class=\"d-sm-block vertical-bottom mb-2\">{{\n 'Crm.AccountSourceMessage.IsDefault' | transloco\n }}</label>\n <ui-switch class=\"ms-3 ms-sm-0\"\n name=\"is_default\"\n formControlName=\"is_default\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmStage } from '../../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-stage-details',\n templateUrl: './smart-crm-stage-details.component.html',\n styleUrls: ['./smart-crm-stage-details.component.scss']\n})\nexport class SmartCrmStageDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmStage;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n submitted: boolean;\n\n id: number;\n\n stages$: Observable<any>;\n\n categories = [];\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getStageForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n this.stages$ = this.crmService.getAllStages(this.subscriptionId);\n this.getAllOpportunityCategories();\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n if (this.id) {\n this.getStageDetails(this.id);\n }\n });\n }\n\n /** Function to get stage tDetails */\n private getStageDetails(id) {\n this.crmService.getStageDetails(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n onSave() {\n if (this.form.valid) {\n const data = this.form.value;\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.editStage(this.subscriptionId, this.id, data)\n : this.crmService.postStage(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.StageMessages.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscriptionId).subscribe(response => {\n const categories = response?.crm_opportunity_categories || [];\n categories.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.categories.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.StageMessages.Stage' | transloco }}:\n {{ data?.name || ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [label]=\"'Crm.StageMessages.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'Crm.StageMessages.NameRequired' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [label]=\"'Crm.StageMessages.ColorCode' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.ColorCode' | transloco\"\n name=\"color_code\">\n <input type=\"color\"\n class=\"form-control color-code-stage account-color-code\"\n formControlName=\"color_code\"\n [ngClass]=\"{ 'is-invalid': submitted && f['color_code'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.PreviousStage' | transloco\"\n [label]=\"'Crm.StageMessages.PreviousStage' | transloco\"\n name=\"previous_stage_id\"\n [errorMsg]=\"'Crm.StageMessages.PreviousStageRequired' | transloco\"\n *ngIf=\"stages$ | async as stages\">\n <select formControlName=\"previous_stage_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['previous_stage_id'].errors }\">\n <option value=\"\">select previous stage</option>\n <option *ngFor=\"let option of stages['crm_opportunity_stages']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\" *ngIf=\"categories.length > 0\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.OpportunityCategory' | transloco\"\n [label]=\"'Crm.StageMessages.OpportunityCategory' | transloco\"\n name=\"crm_opportunity_category_ids\"\n errorMsg=\"category is required\">\n <p-multiSelect [options]=\"categories\"\n formControlName=\"crm_opportunity_category_ids\"\n appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-2 col-md-1\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.StageMessages.Visible' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.StageMessages.Tooltip.Visible' | transloco\n }}</span></label><br />\n <ui-switch formControlName=\"visible\"\n name=\"visible\"></ui-switch>\n </div>\n </div>\n <div class=\"col-12 col-sm-2 col-md-1\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.StageMessages.Default' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.StageMessages.Tooltip.Default' | transloco\n }}</span></label><br />\n <ui-switch formControlName=\"is_default\"\n name=\"is_default\"> </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmWidget } from '../../../../../shared/interface/crm-widget.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\n\n@Component({\n selector: 'pw-smart-crm-widgets-details',\n templateUrl: './smart-crm-widgets-details.component.html',\n styleUrls: ['./smart-crm-widgets-details.component.scss']\n})\nexport class SmartCrmWidgetsDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmWidget;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n user: User;\n\n submitted: boolean;\n\n positions$: Observable<any>;\n\n allWidgets$: Observable<any>;\n\n private widgetId: number;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getWidgetForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.widgetId = Number(data['id']);\n if (this.widgetId) {\n this.getWidgetDetails(this.widgetId);\n }\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.allWidgets$ = this.crmService.getAllWidgets(this.subscriptionId);\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.getUserInfo();\n this.positions$ = this.crmService.getWidgetPositions(this.subscriptionId);\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.form.get('owner_id').setValue(user.id);\n }\n });\n }\n\n /** Function to get widgetDetails */\n private getWidgetDetails(id) {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n if (subscriptionId) {\n this.crmService\n .getSubscriptionWidgetDetails(id, subscriptionId)\n .subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function on submit the form */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n const data = this.form.value;\n const sub$ = this.widgetId\n ? this.crmService.updateSubscriptionWidget(this.subscriptionId, this.widgetId, data)\n : this.crmService.postSubscriptionWidget(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.Widgets.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.Widgets.Widget' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3 widget-tooltip\">\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"allWidgets$ | async as widgets\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Widgets.CrmWidget' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Name' | transloco\n }} </span>\n </label>\n <pw-input-container\n name=\"crm_widget_id\"\n [errorMsg]=\"'Crm Widget is required' | transloco\">\n <select formControlName=\"crm_widget_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_widget_id'].errors }\">\n <option *ngFor=\"let option of widgets['crm_widgets']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Widgets.Position' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Position' | transloco\n }} </span>\n </label>\n <pw-input-container\n name=\"position\"\n [errorMsg]=\"'Position is required' | transloco\"\n *ngIf=\"positions$ | async as positions\">\n <select formControlName=\"position\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['position'].errors }\">\n <option *ngFor=\"let option of positions\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-md-3 col-lg-2 pe-0 cancel-button\">\n <div class=\"mb-3\">\n <label class=\"d-sm-block vertical-bottom info-circle mb-2 visible-tooltip\">{{\n 'Crm.Widgets.Visible' | transloco\n }}<span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Visible'| transloco\n }} </span></label>\n <ui-switch class=\"ms-3 ms-sm-0\"\n name=\"visible\"\n formControlName=\"visible\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { CrmContact } from '../../../../shared/interface/crm-contact.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { CommonService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-contact-details',\n templateUrl: './smart-crm-contact-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SmartCrmContactDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmContact;\n\n id: number;\n\n user: User;\n\n submitted = false;\n\n departments$: Observable<any>;\n\n accounts: CrmAccount[];\n\n subscriptionId: number;\n\n accountId: number;\n\n filteredAccounts: any = [];\n\n potentials = [];\n\n labels = [];\n\n crmSources$: Observable<any>;\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n constructor(\n private commonService: CommonService,\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n this.form = AppSmartCrm.getContactsForm();\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n this.accountId = Number(data['accountId']);\n });\n this.departments$ = this.commonService.getOrganizationDepartments();\n this.form.get('crm_account_id').setValue(null);\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.crmSources$ = this.crmService.getAllAccountSource(this.subscriptionId);\n this.getDefaultValues(this.subscriptionId);\n if (this.subscriptionId) {\n this.getAccountsBySubscription();\n }\n });\n }\n\n /** Function to get the list of accounts by subscriptionId */\n private getAccountsBySubscription() {\n this.crmService.getAccountsBySubscription(this.subscriptionId).subscribe(res => {\n this.accounts = res.accounts;\n if (this.id) {\n this.getContactDetails(this.id);\n } else if (this.accountId) {\n const accountyData = this.accounts.find(x => x.id === this.accountId);\n this.form.get('crm_account_id').patchValue(accountyData);\n }\n });\n }\n\n /** Function to execute on form submission */\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n this.form.get('crm_account_id').setValue(this.form.get('crm_account_id').value.id);\n this.form.value.crm_account_id = Number(this.form.value.crm_account_id);\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n const sub$ = this.id\n ? this.crmService.updateContact(this.subscriptionId, this.id, data)\n : this.crmService.postNewContact(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.back();\n this.toast.success(this.translation.translate('Crm.ContactMessage.UpdatedMessage'));\n }).add(() => {\n this.submitted = true;\n });\n }\n\n /** Function to get the specific contact details on edit form */\n private getContactDetails(id) {\n this.crmService.getContactById(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n let dobObject: NgbDateStruct;\n if (response.dob) {\n dobObject = {\n year: Number(response.dob.substring(0, 4)),\n month: Number(response.dob.substring(5, 7)),\n day: Number(response.dob.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ dob: dobObject });\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.form.get('crm_account_id').patchValue(account);\n }\n });\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredAccounts = data;\n }\n\n getDefaultValues(id) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potentials = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.ContactMessage.Contact' | transloco }}:\n {{\n data?.first_name\n ? data?.first_name + ' ' + data.last_name\n : ('Label.AddNew' | transloco)\n }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\"\n name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\"\n name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\"\n name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Email' | transloco\"\n name=\"email\"\n errorMsg=\"{{\n f['email']?.errors?.required ? 'Please enter email' : 'Please Enter valid email'\n }}\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"email\"\n id=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerified' | transloco\"\n class=\"nowrap\"\n name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\"\n name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\"\n name=\"linkedin_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_url\"\n id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.ContactMessage.Account' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Department' | transloco\"\n name=\"department_id\"\n *ngIf=\"departments$ | async as departments\">\n <select class=\"form-select\"\n formControlName=\"department_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['department_id'].errors }\">\n <option *ngFor=\"let option of departments['organization_departments']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label>{{ 'Crm.ContactMessage.Potential' | transloco }}</label>\n <select formControlName=\"potential\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label>{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\"\n *ngIf=\"crmSources$ | async as source\">\n <label>{{ 'Crm.ContactMessage.Source' | transloco }}</label>\n <select formControlName=\"crm_source_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option value=\"\">select crm source</option>\n <option *ngFor=\"let option of source['crm_sources']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\"\n name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbCalendar, NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport swal from 'sweetalert2';\n\nimport { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY, Subscription } from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, FormHelperService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-contact-info',\n templateUrl: './smart-crm-contact-info.component.html',\n styleUrls: ['./smart-crm-contact-info.component.scss']\n})\nexport class SmartCrmContactInfoComponent extends AppBaseComponent implements OnInit, OnDestroy {\n actionControls: UntypedFormGroup;\n\n aboutControls: UntypedFormGroup;\n\n contactId: number;\n\n data: any = [];\n\n isDisabled = false;\n\n actions: any = [];\n\n model: NgbDateStruct;\n\n date: { year: number; month: number };\n\n subscriptionId: number;\n\n isFormEdit = true;\n\n accounts = [];\n\n submitted = false;\n\n contactComments = [];\n\n userId: number;\n\n hasAccess = false;\n\n contactVersioning: any = [];\n\n updating = false;\n\n actionId: number;\n\n dangerColor: boolean;\n\n potentials = ['low', 'medium', 'high'];\n\n labels = [];\n\n buttonDisable: boolean;\n\n filteredAccounts: any = [];\n\n showFullComment = false;\n\n commentId: number;\n\n accountId: number;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n isLoaded = false;\n\n submitAction = false;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private calendar: NgbCalendar,\n private modalService: NgbModal,\n private authService: AuthService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getContactActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getContactsForm();\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.contactId = Number(data['id']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getDefaultValues(this.subscription?.id);\n this.getActions();\n this.getContactComments();\n }\n });\n this.actionControls.get('crm_contact_id').setValue(this.contactId);\n this.model = this.calendar.getToday();\n this.actionControls.get('when').setValue(this.model);\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n this.onDateSelected();\n this.getContactVersion();\n }\n\n getDefaultValues(id) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n /** Function to get contact versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.contactId, 'CrmContact')\n .subscribe(response => {\n this.contactVersioning = response.versions;\n });\n }\n\n showEditControls(event) {\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined);\n this.getContactComments();\n });\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n /**\n * Function to get the list of accounts by subscriptionId\n */\n private getAccountsBySubscription() {\n this.crmService\n .getAccountsBySubscription(this.subscription?.id, { page_size: this.PAGE_SIZE })\n .subscribe(res => {\n this.getUserInfo();\n this.accounts = res.accounts;\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n get actionFormControls() {\n return this.actionControls.controls;\n }\n\n updateContactInfo() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n this.aboutControls\n .get('crm_account_id')\n .setValue(this.aboutControls.get('crm_account_id').value.id);\n this.crmService\n .updateContactById(this.subscription?.id, this.contactId, this.aboutControls.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getUserInfo();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n private getContactComments() {\n this.crmService\n .getContactComments(this.contactId, this.subscription?.id)\n .subscribe(resp => {\n if (resp?.crm_account_actions?.length) {\n this.contactComments = resp.crm_account_actions;\n\n this.contactComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(moment(new Date()), 'days');\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.contactComments.sort((a, b) => {\n return <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime();\n });\n this.contactComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.contactComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.contactComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.contactComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n\n onSave() {\n this.submitAction = true;\n if (this.actionControls.invalid) {\n FormHelperService.validateAllFormFields(this.actionControls);\n } else {\n const data = this.actionControls.value;\n data.when = HelperService.dateFormat(data?.when);\n this.crmService\n .postAccountComment(this.subscription?.id, data)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getContactComments();\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n }\n\n onDateSelected() {\n this.actionControls.get('when').valueChanges.subscribe(() => {\n const selectedDate = this.document.getElementById('when')?.['value'];\n const todayDate = moment(new Date()).format('YYYY-MM-DD');\n if (todayDate < selectedDate) {\n this.isDisabled = true;\n this.actionControls.get('completed').disable({ onlySelf: true });\n this.actionControls.get('completed').setValue(false);\n } else {\n this.actionControls.get('completed').enable({ onlySelf: true });\n this.isDisabled = false;\n }\n });\n }\n\n /** Function to get and show all the actions */\n getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp && resp.crm_actions && resp.crm_actions.length > 0) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getAccountsBySubscription();\n }\n\n /** Function to get the contact details by Id */\n getUserInfo() {\n this.crmService\n .getContactById(this.subscription?.id, this.contactId)\n .subscribe(response => {\n this.data = response;\n this.aboutControls.patchValue(response);\n this.actionControls.get('crm_account_id').patchValue(response.crm_account_id);\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.aboutControls.get('crm_account_id').patchValue(account);\n this.accountId = response.crm_account_id;\n }\n });\n });\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id, action, completedOrUncompleted) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getContactComments();\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getContactComments();\n });\n }\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_accounts_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getContactComments();\n this.updating = false;\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredAccounts = data;\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_accounts_id: `${this.accountId}`,\n crm_contact_id: `${this.contactId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n navigateToOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { contact_id: this.contactId }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Contact Info\n </h2>\n </div>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data | ifNameNullShowEmail }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"isFormEdit = !isFormEdit\">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.FirstName' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.LastName' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{ 'Crm.ContactMessage.Account' | transloco }}\n </label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n [class.is-invalid]=\"\n (f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\n \"\n *ngIf=\"isFormEdit\"\n [class.disableFormControl]=\"!data?.crm_account_id\">{{ f['crm_account_id'].value?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [inputStyleClass]=\"\n (f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\n ? 'invalid-field'\n : ''\n \"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n <span *ngIf=\"(f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\"\n class=\"text-danger\">account is required</span>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Email' | transloco }}</label>\n <a href=\"mailTo:{{ data.email }}\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data.email\">{{ data.email }}</a>\n <input type=\"text\"\n *ngIf=\"!isFormEdit || !data.email\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.LinkedInUrl' | transloco\n }}</label>\n <a [href]=\"data.linkedin_url\"\n target=\"blank\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data.linkedin_url\">{{ data.linkedin_url }}</a>\n <input *ngIf=\"!isFormEdit || !data.linkedin_url\"\n type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"linkedin_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['linkedin_url'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.Headline' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"data.tel\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Tel' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"tel\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.Potential' | transloco\n }}</label>\n <select formControlName=\"potential\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n [class.disableFormControl]=\"isFormEdit\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getUserInfo()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateContactInfo()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls['crm_action_id'].invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n value=\"Submit Note\" />\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [message]=\"\n 'Crm.ContactMessage.NoActionsInContactInfoMessage' | transloco\n \">\n <span><a [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.configurations +\n 'actions'\n ]\">Take me to the actions configuration section.</a></span>\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!contactComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [message]=\"'Crm.ContactMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"contactComments.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of contactComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span></span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <!-- <a>{{item.comment}}</a> -->\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n [value]=\"item.when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{ item.owner.first_name + ' ' + item.owner.last_name }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of contactVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at | dateFormat: 'datetime' }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"contactVersioning?.length === 0\">\n <pw-no-data [message]=\"'Crm.ContactMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NavigationEnd } from '@angular/router';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { PAGE_SIZE, Paging, Plotly, User, Subscription } from '@posiwise/common-utilities';\nimport { CrmContactResponse } from '../../../shared/interface/crm-contact.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-crm-contacts',\n templateUrl: './smart-crm-contacts.component.html',\n styleUrls: ['./smart-crm-contacts.component.scss']\n})\nexport class SmartCrmContactComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmContactResponse = {\n contacts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n contactId: number;\n\n accountData: any = [];\n\n accountId: number;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n userId: number;\n\n isLoaded = false;\n\n filterByPotentials: string;\n\n potential = [];\n\n labels = [];\n\n filterByStatus: string;\n\n user: User;\n\n contactInsight: any;\n\n contactGeography: Plotly.Figure;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n selectedLabels = [];\n selectedAccount = [];\n accountDropDown = [];\n crmAccountIds: string;\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.contactId = Number(data['accountId']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getDefaultValues(this.subscription?.id);\n this.getTableState();\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getUserInfo();\n this.getAccountsDropdown();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n /**get accounts dropdown */\n public getAccountsDropdown() {\n this.crmService.getAllAccounts(this.subscription?.id).subscribe({\n next: res => {\n this.accountDropDown = res?.accounts.map(x => {\n return {\n id: x?.id,\n name: x?.name\n };\n });\n }\n });\n }\n /**select option from account dropdown */\n onSelectAccount() {\n this.crmAccountIds = this.selectedAccount.map(y => y.id).join();\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n private getTableState() {\n this.searchText =\n JSON.parse(this.localStorage.getItem('smart-crm-contacts'))?.filters?.global.value ||\n '';\n const data = JSON.parse(this.localStorage.getItem('crmContactsState'));\n this.filterByStatus = data?.label;\n this.filterByPotentials = data?.potential;\n this.selectedLabels = data?.label ? data?.label.split(',') : [];\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getData({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private getData(paging: Paging) {\n if (this.contactId > 0) {\n this.getAccountContacts(paging);\n this.getAccountDetail();\n } else {\n this.getAllContacts(paging);\n }\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getContactInsight();\n this.getContactGeography();\n }\n }\n });\n }\n\n /** Function to get all contacts */\n private getAllContacts(paging: Paging) {\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAllContacts(\n this.subscriptionId,\n this.filterByPotentials || '',\n paging,\n this.filterByStatus || '',\n this.crmAccountIds || ''\n )\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get the contacts related to accounts */\n private getAccountContacts(paging: Paging) {\n this.data.contacts = [];\n this.isLoaded = true;\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAccountContacts(\n this.contactId,\n this.subscriptionId,\n this.filterByPotentials || '',\n paging,\n this.filterByStatus || ''\n )\n .subscribe(response => {\n this.data = response;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get the account name */\n private getAccountDetail() {\n this.crmService\n .getAccountDetail(this.subscription?.id, this.contactId)\n .subscribe(response => {\n this.accountData = response;\n this.accountId = response.id;\n });\n }\n\n /** Function to delete contact */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.DeletedMessage')\n );\n this.data.contacts = [];\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to filter by potential */\n filterByPotential(event) {\n this.filterByPotentials = event.target.value;\n this.localStorage.setItem$(\n 'crmContactsState',\n JSON.stringify({ label: this.filterByStatus, potential: this.filterByPotentials })\n );\n if (this.contactId > 0) {\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.getAccountDetail();\n } else {\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to call contact insight */\n private getContactInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'contacts_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.contactInsight = [];\n } else this.contactInsight = response;\n });\n }\n\n /** Function to call contact geography */\n getContactGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'contacts_geography')\n .subscribe(response => {\n this.contactGeography = response;\n });\n }\n\n navigateToOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { account_id: this.accountId }\n });\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potential = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n this.getTableState();\n });\n }\n\n onLabelChange(event) {\n this.filterByStatus = event.value.join();\n this.localStorage.setItem$(\n 'crmContactsState',\n JSON.stringify({ label: this.filterByStatus, potential: this.filterByPotentials })\n );\n if (this.contactId > 0) {\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.getAccountDetail();\n } else {\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n override ngOnDestroy() {\n const notifier = new Subject();\n this.router.events.pipe(takeUntil(notifier)).subscribe(event => {\n if (event instanceof NavigationEnd) {\n if (!event.urlAfterRedirects.includes('/contacts')) {\n this.localStorage.removeItem$('smart-crm-contacts');\n this.localStorage.removeItem$('crmContactsState');\n notifier.complete();\n }\n }\n });\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2 *ngIf=\"!accountData?.name\">Contacts</h2>\n <h3 *ngIf=\"accountData?.name\"\n class=\"mb-2\">\n {{ accountData.name }}\n <span [routerLink]=\"[routers.accounts, accountData.id]\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></span>\n </h3>\n <h4 *ngIf=\"accountData?.location\"\n class=\"mb-1\">Location: {{ accountData.location }}</h4>\n <h4 *ngIf=\"accountData?.tel\">Tel: {{ accountData.tel }}</h4>\n <h4 *ngIf=\"accountData?.company_url\">\n URL:\n <a href=\"{{ accountData.company_url }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{ accountData.company_url }}\n </a>\n </h4>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3 ms-2\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactAdd, accountId]\"\n *ngIf=\"accountData?.name\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactAdd, accountId]\"\n *ngIf=\"!accountData?.name\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary me-3 float-end\"\n data-cy=\"list-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contacts]\"\n *ngIf=\"accountData?.name\">\n <i class=\"fa fa-plus-list\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.ShowAllContacts' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table class=\"table\"\n #dt\n [value]=\"data.contacts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [lazy]=\"true\"\n [filterDelay]=\"1000\"\n stateStorage=\"local\"\n stateKey=\"smart-crm-contacts\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div class=\"col-sm-3 col-6 mb-2 mb-sm-0\">\n <select class=\"form-select\" (change)=\"filterByPotential($event)\">\n <option value=\"\">Select Priority</option>\n <option *ngFor=\"let option of potential\" [selected]=\"filterByPotentials === option\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect [(ngModel)]=\"selectedLabels\" placeholder=\"Select Label\" [options]=\"labels\" [filter]=\"false\"\n [showHeader]=\"true\" [showToggleAll]=\"true\" (onChange)=\"onLabelChange($event)\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <!-- multiple select account drop down -->\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect [(ngModel)]=\"selectedAccount\" placeholder=\"Select Account\" [options]=\"accountDropDown\" [filter]=\"false\"\n [showHeader]=\"true\" [showToggleAll]=\"true\" optionLabel=\"name\" (onChange)=\"onSelectAccount()\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-3 col-md-4 col-lg-3\">\n <div class=\"d-flex\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"form-control\" />\n </div>\n </div>\n\n </div>\n\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.ContactMessage.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.ContactMessage.ContactOwner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_account_id\">\n {{ 'Crm.ContactMessage.AccountOwner' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"labels\">\n {{ 'Crm.ContactMessage.Labels' | transloco }}\n <p-sortIcon field=\"labels\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"potential\">\n {{ 'Crm.ContactMessage.Potential' | transloco }}\n <p-sortIcon field=\"potential\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-contact>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a ngbTooltip=\"{{contact.headline ? contact.headline : 'No headline for this contact'}}\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, contact.id]\">{{ (contact?.first_name || '') + ' ' + (contact?.last_name || '') | textTruncate: 20 }}\n </a>\n </td>\n <td data-head=\"OwnerName\">{{ contact.owner | ifNameNullShowEmail }}</td>\n <td data-head=\"Account Name\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n contact.crm_account.id\n ]\" ngbTooltip=\"{{contact?.crm_account.name}}\">{{ contact?.crm_account.name | textTruncate: 20 }}</a>\n </td>\n <td data-head=\"Labels\">\n <span class=\"badge bg-info m-1\"\n *ngFor=\"let item of contact.labels\">{{\n item\n }}</span>\n </td>\n <td data-head=\"Potential\">\n <span [appDynamicBadge]=\"{ itemsArray: potential, item: contact.potential }\"\n color=\"warning\"\n class=\"badge\">{{ contact.potential }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + '/crm/contacts/info',\n contact.id\n ]\">\n <i class=\"fa fa-eye see-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Add opportunity\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{ contact_id: contact.id }\">\n <i class=\"fa fa-plus-circle add-icon\" aria-hidden=\"true\"></i>\n </li>\n <!-- <ng-container *ngIf=\"contact\"> -->\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactDetails,\n contact.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(contact.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.ContactMessage.ContactsAdminMessage' | transloco\"> </pw-no-data>\n</div>\n\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\"\n *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"contactInsight?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"contactInsight\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"contactInsight.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Value' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Reason' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-insight>\n <tr>\n <td data-head=\"Title\">\n {{ insight.title }}\n </td>\n <td data-head=\"Value\">\n {{ insight.value }}\n </td>\n <td data-head=\"Reason\">\n {{ insight.reason }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">Total: {{ contactInsight.length }}</span>\n </div>\n <div *ngIf=\"contactInsight?.length === 0\">\n <pw-no-data [message]=\"'Crm.ContactMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"contactGeography\">\n <plotly-plot [data]=\"contactGeography?.data\"\n [layout]=\"contactGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!contactGeography\">\n <pw-no-data [message]=\"'Crm.ContactMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-customer-success',\n templateUrl: './smart-crm-customer-success.component.html'\n})\nexport class SmartCrmCustomerSuccessComponent {}\n","<pw-coming-soon message=\"Customer Success\"></pw-coming-soon>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Plotly } from '@posiwise/common-utilities';\n\n@Component({\n selector: 'pw-smart-crm-overview',\n templateUrl: './smart-crm-overview.component.html'\n})\nexport class SmartCrmOverviewComponent extends AppBaseComponent implements OnInit, OnDestroy {\n graph: Plotly.Figure;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n userId: number;\n\n isLoaded = false;\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.userStore().subscribe(user => {\n if (user) {\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getChartData();\n }\n }\n });\n }\n\n /** Function to get the data for the graph */\n private getChartData() {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n this.subscriptionId = subscriptionId;\n if (this.subscriptionId) {\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.crmService\n .getChartData(this.subscriptionId)\n .subscribe(response => {\n this.graph = response;\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <div *ngIf=\"hasAccess\">\n <div class=\"row\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <!-- Activities -->\n <div class=\"col-12 col-lg-8 my-3 px-2\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <!-- Opportunities funnel -->\n <div class=\"col-12 col-lg-4 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <div class=\"col-12 col-lg-4 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <!-- Opportunities timeline -->\n <div class=\"col-12 col-lg-8 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hasAccess && isLoaded\"\n class=\"w-100\">\n <pw-no-data [message]=\"'Crm.Insight.NoDataMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-insight',\n templateUrl: './smart-crm-insight.component.html'\n})\nexport class SmartCrmInsightComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>Insight</h2>\n <p>\n You'll find below some insights for your CRM. <br />\n Please note that the graphs are refreshed every few hours.\n </p>\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Overview</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-overview></pw-smart-crm-overview>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Analysis</a>\n <ng-template ngbNavContent>\n <pw-coming-soon message=\"Analysis\"></pw-coming-soon>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { CrmLead } from '../../../../shared/interface/crm-lead.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-leads-details',\n templateUrl: './smart-crm-leads-details.component.html'\n})\nexport class SmartCrmLeadsDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmLead;\n\n submitted = false;\n\n id: number;\n\n subscriptionId: number;\n\n accounts: CrmAccount[];\n\n filteredAccounts: any = [];\n\n source$: Observable<any>;\n\n potentials = [];\n\n labels = [];\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getLeadsForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getDefaultValues(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n this.getAccountsBySubscription();\n this.source$ = this.crmService.getAllAccountSource(this.subscriptionId);\n }\n });\n }\n\n /** Function to get the specific contact details on edit form */\n private getLeadDetails() {\n this.crmService.getContactById(this.subscriptionId, this.id).subscribe(response => {\n this.data = response;\n let dobObject: NgbDateStruct;\n if (response.dob) {\n dobObject = {\n year: Number(response.dob.substring(0, 4)),\n month: Number(response.dob.substring(5, 7)),\n day: Number(response.dob.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ dob: dobObject });\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.form.get('crm_account_id').patchValue(account);\n }\n });\n });\n }\n\n /** Function to execute on form submission */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n const { form } = this;\n if (form.value.crm_account_id) {\n form.get('crm_account_id').setValue(form.get('crm_account_id').value.id);\n form.value.crm_account_id = Number(form.value.crm_account_id);\n }\n if (this.id) {\n this.onUpdateLead();\n } else {\n this.onPostLead();\n }\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to post the new lead */\n private onPostLead() {\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n data.is_manual = true;\n this.crmService\n .postCrmLead(this.subscriptionId, data)\n .subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CrmLeads.AddedMessage'));\n this.back();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to update the leads */\n private onUpdateLead() {\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n this.crmService.updateContact(this.subscriptionId, this.id, data).subscribe(() => {\n this.back();\n this.toast.success(this.translation.translate('Crm.CrmLeads.UpdatedMessage'));\n });\n }\n\n /** Function to get the list of accounts by subscriptionId */\n private getAccountsBySubscription() {\n this.crmService\n .getAccountsBySubscription(this.subscriptionId)\n .subscribe(res => {\n this.accounts = res.accounts;\n if (this.id) {\n this.getLeadDetails();\n }\n })\n .add(() => {\n this.submitted = false;\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n\n this.filteredAccounts = data;\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potentials = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\" (click)=\"back()\" class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\"\n aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.CrmLeads.Lead' | transloco }}: {{ data?.first_name || data?.last_name ? data?.first_name ||\n data?.last_name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\" name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"first_name\" id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\" name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"last_name\" id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\" name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\" name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"tel\" id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <label>{{ 'Crm.ContactMessage.Email' | transloco }} <span class=\"text-danger\">*</span>\n <span *ngIf=\"data && data.email_verified\" class=\"text-success fw-bold\">Verified</span>\n </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n <pw-field-error-display [displayError]=\"(submitted || f['email'].touched) && f['email'].errors\" [errorMsg]=\"\n f['email']?.errors?.required\n ? 'Please enter email'\n : 'Please Enter valid email'\n \">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <!-- <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerfied' | transloco\" class=\"nowrap\"\n <pw-input-containername=\"email_verified\"> -->\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.EmailVerified' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.ContactMessage.Tooltip.EmailVerified'| transloco\n }} </span>\n </label>\n <pw-input-container class=\"nowrap\" name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\" name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n <!-- </pw-input-container> -->\n </div>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\" name=\"linkedin_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"linkedin_url\" id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Account' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">After assigning a company the contact will be visible in the\n Contacts tabs</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\" formControlName=\"crm_account_id\" dataKey=\"id\"\n autocomplete=\"off\" field=\"name\" [dropdown]=\"true\" (completeMethod)=\"search($event)\" styleClass=\"w-100\"\n [inputStyle]=\"\n submitted && f['crm_account_id'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" placeholder=\"Search accounts\" [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.CrmLeads.Source' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.CrmLeads.Tooltip.Source' | transloco }}</span>\n </label>\n <pw-input-container name=\"crm_source_id\" errorMsg=\"source is required\" *ngIf=\"source$ | async as source\">\n <select class=\"form-select\" formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source['crm_sources']\" [value]=\"option.id\"> {{ option.name }} </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\" name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\" placeholder=\"yyyy-mm-dd\" formControlName=\"dob\" ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\" (click)=\"d.toggle()\" type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Potential' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{ 'Crm.ContactMessage.Tooltip.Potential' | transloco\n }}</span>\n </label>\n <select formControlName=\"potential\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\" [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Labels' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{ 'Crm.ContactMessage.Tooltip.Labels' | transloco }}\n </span>\n </label>\n <p-multiSelect [options]=\"labels\" formControlName=\"labels\" appendTo=\"body\"></p-multiSelect>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" (click)=\"back()\"> {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"> {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmLeadResponse } from '../../../shared/interface/crm-lead.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-leads',\n templateUrl: './smart-crm-leads.component.html'\n})\nexport class SmartCrmLeadsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n hasAccess: boolean;\n\n data: CrmLeadResponse = {\n crm_leads: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n isLoaded = false;\n\n loading = true;\n\n userId: number;\n\n page = 1;\n\n subscription: Subscription;\n\n allSource = [];\n\n routers = ROUTERS;\n\n filterBySource: string;\n\n crmSources = [];\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n this.getAllSource(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user?.id;\n }\n });\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private getAllCrmLeads(paging: Paging) {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getCrmLeads(this.subscription?.id, this.filterBySource || '', paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete Lead */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CrmLeads.DeletedMessage'));\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to all account source */\n private getAllSource(id: number) {\n this.crmService.getAllAccountSource(id).subscribe(response => {\n if (response?.crm_sources?.length) {\n this.crmSources = response?.crm_sources.map(val => {\n return {\n label: val.name,\n value: val.id\n };\n });\n this.allSource = response?.crm_sources?.map(source => {\n return source?.name;\n });\n }\n });\n }\n\n onSourceChange(event) {\n this.filterBySource = event.value.join();\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Leads</h2>\n <p>\n In this section you'll find a list of prospects we found for you - based on your domain\n of activity - and we think you should reach out to.\n </p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-leads\"\n [routerLink]=\"['/' + subscription?.slug + routers.leadsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.CrmLeads.AddLead' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_leads\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"d-flex\">\n <div class=\"col-sm-3\">\n <p-multiSelect placeholder=\"Select Source\"\n [options]=\"crmSources\"\n [filter]=\"false\"\n (onChange)=\"onSourceChange($event)\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end ms-auto\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search leads...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.ContactMessage.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Crm.CrmLeads.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Crm.CrmLeads.EmailVerified' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"created_at\">\n {{ 'Crm.CrmLeads.CreatedAt' | transloco }}\n <p-sortIcon field=\"created_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_source_id\">\n {{ 'Crm.CrmLeads.Source' | transloco }}\n <p-sortIcon field=\"crm_source_id\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-lead>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, lead?.id]\">\n {{\n lead?.first_name === null || lead.last_name === null\n ? 'N/A'\n : (lead?.first_name + ' ' + lead.last_name | textTruncate: 20)\n }}\n </a>\n </td>\n <td data-head=\"Email\">\n <a href=\"mailto:{{ lead?.email }}\">{{ lead?.email }}</a>\n <span *ngIf=\"lead?.enquiry\"\n class=\"ms-2\"\n [pTooltip]=\"lead?.enquiry\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </td>\n <td data-head=\"Email Verified\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: lead?.email_verified\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ lead?.email_verified ? 'true' : 'false' }}</span>\n <span class=\"ms-2 cursor-pointer\"\n [pTooltip]=\"'Crm.CrmLeads.Tooltip.NewsLetterUnsubscribed' | transloco\"\n tooltipPosition=\"top\"\n *ngIf=\"!lead?.newsletter_subscribed\"><i class=\"fas fa-exclamation-triangle text-danger\"></i></span>\n </td>\n <td data-head=\"Created At\">\n {{ lead?.created_at | dateFormat }}\n </td>\n <td>\n <span class=\"badge\"\n [appDynamicBadge]=\"{ itemsArray: allSource, item: lead?.crm_source?.name }\"\n color=\"default\">{{ lead?.crm_source?.name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n lead?.id\n ]\">\n <i class=\"fa fa-eye see-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n lead?.owner_id === userId ||\n lead?.crm_account?.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.leadsDetails,\n lead?.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n lead?.owner_id === userId ||\n lead?.crm_account?.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(lead.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.CrmLeads.NoCrmLeadMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { NewsLetterContactResponse } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-marketing-users-list',\n templateUrl: './smart-crm-marketing-contacts.component.html'\n})\nexport class SmartCrmMarketingUsersListComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n searchText = '';\n\n data: NewsLetterContactResponse = {\n newsletter_contacts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n isLoaded = false;\n\n loading = true;\n\n id: number;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getNewsletterInsight(this.id, {\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to call users list for newsletter */\n private getNewsletterInsight(id: number, paging: Paging) {\n this.crmService\n .getCrmNewsletterInsight(this.subscription?.id, id, paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <p>This is a summary of the contacts that received your marketing email.</p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-3 table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.newsletter_contacts\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.MarketingInsight.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Crm.MarketingInsight.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.SentAt' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.LastOpened' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.OpenCount' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.ClickedAt' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.ClickedCount' | transloco }}\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"Name\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, user.id]\">{{\n user | ifNameNullShowEmail\n }}</a>\n </td>\n <td data-head=\"Email\">\n <a href=\"mailto:{{ user?.email }}\">{{ user?.email }}</a>\n </td>\n <td data-head=\"Sent At\">{{ user?.message_insight?.sent_at | dateFormat }}</td>\n <td data-head=\"Last Opened\">{{ user?.message_insight?.opened_at }}</td>\n <td data-head=\"Open Count\">{{ user?.message_insight?.open_count }}</td>\n <td data-head=\"Clicked At\">{{ user?.message_insight?.clicked_at }}</td>\n <td data-head=\"Clicked Count\">{{ user?.message_insight?.click_count }}</td>\n <td data-head=\"Actions\"></td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.MarketingInsight.NoUserListMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmNewsLetter } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User, Product } from '@posiwise/common-utilities';\nimport { CommonService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-communications-details',\n templateUrl: './smart-crm-marketing-details.component.html'\n})\nexport class SmartCrmCommunicationsDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n subscriptionId: number;\n\n hasAccess: boolean;\n\n form: UntypedFormGroup;\n\n user: User;\n\n data: CrmNewsLetter;\n\n submitted = false;\n\n crmProduct: Product;\n\n status = [];\n\n priority = [];\n\n source = [];\n\n organizationSizes = [];\n\n featureKeys = [];\n\n labels = [];\n\n contactSource = [];\n\n potentials = [\n { label: 'low', value: 'low' },\n { label: 'medium', value: 'medium' },\n { label: 'high', value: 'high' }\n ];\n\n allCommunications = [];\n\n id: number;\n\n daysToNewsletterField: boolean;\n\n userNameSyntax = '{{ @user.share_name }}';\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private commonService: CommonService\n ) {\n super(injector);\n this.form = AppSmartCrm.getMarketingForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.getDefaultValues(this.subscriptionId);\n\n if (this.subscriptionId) {\n this.getAllCrmProducts();\n this.accountDefaultValues(this.subscriptionId);\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(response);\n this.getAllCrmNewsletters(this.subscriptionId);\n }\n });\n this.getUserInfo();\n }\n\n private getAllCrmNewsletters(id: number) {\n this.crmService.getAllCrmNewsletters(id).subscribe(res => {\n if (res.crm_newsletters?.length) {\n const data = res['crm_newsletters'];\n this.allCommunications = data.filter(x => x.id !== this.id);\n }\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.form.get('owner_id').setValue(user.id);\n this.user = user;\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n const data = { ...this.form.value };\n data.send_until = HelperService.dateFormat(this.form.get('send_until').value);\n data.send_at = HelperService.dateFormat(this.form.get('send_at').value);\n this.submitted = true;\n const sub$ = this.data?.id\n ? this.crmService.updateCrmNewsLetter(this.subscriptionId, this.data?.id, data)\n : this.crmService.saveCrmNewsletter(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.CommunicationsMessage.AddedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to get edit communication details */\n private getCommunicationDetails(id: number) {\n this.crmService.getCrmNewsletter(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n let sendUntilObj: NgbDateStruct;\n if (response.send_until) {\n sendUntilObj = {\n year: Number(response.send_until.substring(0, 4)),\n month: Number(response.send_until.substring(5, 7)),\n day: Number(response.send_until.substring(8, 10))\n };\n }\n let sendAtlObj: NgbDateStruct;\n if (response.send_at) {\n sendAtlObj = {\n year: Number(response.send_at.substring(0, 4)),\n month: Number(response.send_at.substring(5, 7)),\n day: Number(response.send_at.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ send_until: sendUntilObj });\n this.form.patchValue({ send_at: sendAtlObj });\n if (response.days_to_wait_from_previous_newsletter) {\n this.daysToNewsletterField = true;\n } else {\n this.daysToNewsletterField = false;\n }\n });\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('location').setValue(event.formatted_address);\n }\n\n /** Function for toggle */\n onChange(event: boolean, formControlName: string) {\n if (event === false) {\n this.form.get(formControlName).setValue(false);\n } else {\n this.form.get(formControlName).setValue(true);\n }\n }\n\n /** Function to call Crm products */\n private getAllCrmProducts() {\n this.crmService.getCrmProducts(this.subscriptionId).subscribe(response => {\n const data = response.available_crm_subscription_products;\n if (data?.length) {\n this.crmProduct = response.available_crm_subscription_products.map(item => {\n return {\n label: item.name,\n value: item.id\n };\n });\n const featureKeys = Array.from(new Set(data.map(item => item.feature_key)));\n this.featureKeys = featureKeys.map(item => {\n return {\n label: item,\n value: item\n };\n });\n }\n });\n }\n\n /** Function to call account Default Values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.getAccountSize();\n const { status } = response;\n status.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.status.push(data);\n });\n const { priority } = response;\n priority.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.priority.push(data);\n });\n const { source } = response;\n source.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.source.push(data);\n });\n });\n }\n\n /** Function to call account size */\n private getAccountSize() {\n this.commonService.getOrganizationSizes().subscribe(res => {\n if (this.id) {\n this.getCommunicationDetails(this.id);\n }\n const organizationSizes = res.organization_sizes;\n organizationSizes.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.organizationSizes.push(data);\n });\n });\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n const label = res['labels'];\n const contactSource = res['source'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n contactSource.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.contactSource.push(data);\n });\n });\n }\n\n /** Function on select previous newsletter */\n onNewsletterSelect(event) {\n if (event.target.value) {\n const newsletterId = Number(event.target.value);\n if (newsletterId > 0) {\n this.daysToNewsletterField = true;\n }\n } else {\n this.daysToNewsletterField = false;\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ data?.id ? 'Edit' : 'Create new' }} marketing email</span>\n </h3>\n </div>\n</div>\n<ng-container>\n <div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <p class=\"my-3\">\n You can insert the user name by adding the following syntax in the body or title:\n {{ userNameSyntax }}\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-12\">\n <pw-input-container [label]=\"'Crm.CommunicationsMessage.Title' | transloco\"\n name=\"title\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CommunicationsMessage.Tooltip.Title' | transloco\"\n errorMsg=\"Please enter subject\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-12\">\n <pw-input-container [label]=\"'Crm.CommunicationsMessage.Body' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CommunicationsMessage.Tooltip.Body' | transloco\"\n name=\"body\"\n errorMsg=\"Please enter body\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"body\"\n [ngClass]=\"{ 'is-invalid': submitted && f['body'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.SendAt' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.SendAt' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"send_at\"\n ngbDatepicker\n #c=\"ngbDatepicker\"\n [ngClass]=\"{ 'is-invalid': submitted && f['send_at'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.SendUntil' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.SendUntil' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"send_until\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [ngClass]=\"{ 'is-invalid': submitted && f['send_until'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-md-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.PreviousNewsletter' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.PreviousNewsletter' | transloco\n }}</span></label>\n <select class=\"form-select\"\n formControlName=\"previous_newsletter_id\"\n (change)=\"onNewsletterSelect($event)\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['previous_newsletter_id'].errors\n }\">\n <option value=\"\">select previous newsletter</option>\n <option *ngFor=\"let option of allCommunications\"\n [value]=\"option.id\">\n {{ option.title }}\n </option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-2\"\n *ngIf=\"daysToNewsletterField\">\n <pw-input-container [label]=\"\n 'Crm.CommunicationsMessage.DaysToWaitFromPreviousNewsletter'\n | transloco\n \"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Crm.CommunicationsMessage.Tooltip.DaysToWaitFromPreviousNewsletter'\n | transloco\n \"\n name=\"days_to_wait_from_previous_newsletter\"\n errorMsg=\"Please enter days to wait from previous newsletter\">\n <input type=\"number\"\n class=\"form-control\"\n formControlName=\"days_to_wait_from_previous_newsletter\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && f['days_to_wait_from_previous_newsletter'].errors\n }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-1\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ShouldDeliver' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.IsPushed' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"is_pushed\"\n (change)=\"onChange($event, 'is_pushed')\"\n name=\"is_pushed\">\n </ui-switch>\n </div>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.CanReply' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.CanReply' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"can_reply\"\n name=\"can_reply\">\n </ui-switch>\n </div>\n </div>\n </div>\n\n <h3>Decide who will receive the email</h3>\n\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Location' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Location' | transloco\n }}</span></label>\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </div>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Products' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Products' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"crmProduct\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"product_ids\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Features' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Features' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"featureKeys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactPotential' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactPotential' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"potentials\"\n formControlName=\"contact_potential\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactLabel' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactLabel' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"contact_label\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactSource' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactSource' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"contactSource\"\n formControlName=\"contact_source\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountPriority' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountPriority' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"priority\"\n formControlName=\"account_priority\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountStatus' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountStatus' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"status\"\n formControlName=\"account_status\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountSource' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountSource' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"source\"\n formControlName=\"account_source\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountSize' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountSize' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"organizationSizes\"\n formControlName=\"account_size\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <!-- Only new contacts -->\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.CommunicationsMessage.OnlyNewContacts' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.OnlyNewContacts' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"only_new_contacts\"\n name=\"only_new_contacts\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['only_new_contacts'].errors\n }\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"!form.valid\"\n >\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n</ng-container>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\nimport swal from 'sweetalert2';\n\nimport { PAGE_SIZE } from '@posiwise/common-utilities';\nimport {\n CrmNewsLetter,\n CrmNewsLetterResponse\n} from '../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging } from '@posiwise/common-utilities';\nimport { Plotly } from '@posiwise/common-utilities';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-communications',\n templateUrl: './smart-crm-marketing-list.component.html',\n styleUrls: ['./smart-crm-marketing-list.component.scss']\n})\nexport class SmartCrmCommunicationsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n searchText = '';\n\n data: CrmNewsLetterResponse = {\n crm_newsletters: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n isLoaded = false;\n\n loading = true;\n\n user: User;\n\n communicationsInsight: any;\n\n communicationEngagement: Plotly.Figure;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllCommunications({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getCommunicationInsight();\n this.getCommunicationEngagement();\n }\n }\n });\n }\n\n /** Function to call all communications */\n private getAllCommunications(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllCrmNewsletters(this.subscriptionId, paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete communication */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteCrmNewsletter(this.subscription?.id, id).subscribe(() => {\n this.getAllCommunications({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.CommunicationsMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to send mail */\n sendTestEmail(item: CrmNewsLetter) {\n swal.fire({\n title: 'Send Email',\n text: `A test email will be sent to \"${this.user.email}\". Do you want to continue?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(sendOk => {\n if (sendOk.value === true) {\n this.crmService.sendTestMail(this.subscription?.id, item.id).subscribe({\n next: response => {\n if (response) {\n this.toast.success(\n this.translation.translate('Newsletter test email sent correctly')\n );\n }\n }\n });\n }\n });\n }\n\n /** Function to call communication insight */\n private getCommunicationInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'communications_insights')\n .subscribe(response => {\n this.communicationsInsight = response;\n });\n }\n\n /** Function to call communication engagement */\n private getCommunicationEngagement() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'communications_engagement')\n .subscribe(response => {\n this.communicationEngagement = response;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Email Marketing</h2>\n <p>In this section you can create and manage your email marketing strategy.</p>\n </div>\n <div class=\"col-12 col-md-12 text-end\">\n <button class=\"btn btn-sm btn-outline-primary\"\n [routerLink]=\"['/' + subscription?.slug + routers.marketingDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add New Email' }}\n </button>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-3 table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_newsletters\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search communication emails...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"title\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n <p-sortIcon field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"body\">\n {{ 'Crm.CommunicationsMessage.Body' | transloco }}\n <p-sortIcon field=\"body\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"location\">\n {{ 'Crm.CommunicationsMessage.Location' | transloco }}\n <p-sortIcon field=\"location'\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"send_until\">\n {{ 'Crm.CommunicationsMessage.SendUntil' | transloco }}\n <p-sortIcon field=\"send_until\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_pushed\">\n {{ 'Crm.CommunicationsMessage.Pushed' | transloco }}\n <p-sortIcon field=\"is_pushed\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_sent\">\n {{ 'Crm.CommunicationsMessage.Sent' | transloco }}\n <p-sortIcon field=\"is_sent\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-column\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr class=\"table-row\">\n <td data-head=\"Title\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.marketing, item.id]\">{{\n item.title\n }}</a>\n </td>\n <td data-head=\"Body\"\n [innerHtml]=\"item.body | removeHtml | textTruncate: 200\"></td>\n <td data-head=\"Location\">{{ item.location }}</td>\n <td data-head=\"Send Until\">{{ item.send_until | dateFormat }}</td>\n <td data-head=\"Pushed?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_pushed }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_pushed }}</span>\n </td>\n <td data-head=\"Sent?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_sent }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_sent }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Send test email\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-comment-alt cta1-icon\"\n (click)=\"sendTestEmail(item)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-edit edit-icon\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketingDetails,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(item.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Newsletter recipients\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-fw fa-list\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketing,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.CommunicationsMessage.NoCommunicationMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\"\n *ngIf=\"isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"communicationsInsight?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"communicationsInsight\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"communicationsInsight.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Value' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Reason' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-insight>\n <tr>\n <td data-head=\"Title\">{{ insight.title }}</td>\n <td data-head=\"Value\">{{ insight.value }}</td>\n <td data-head=\"Reason\">{{ insight.reason }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ communicationsInsight.length }}</span>\n </div>\n <div *ngIf=\"!communicationsInsight?.length\">\n <pw-no-data [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Engagement</h5>\n <div>\n <ng-template [ngIf]=\"communicationEngagement\">\n <plotly-plot [data]=\"communicationEngagement?.data\"\n [layout]=\"communicationEngagement?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!communicationEngagement\">\n <pw-no-data [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmNewsLetter } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-communication-view-details',\n templateUrl: './smart-crm-marketing-view-details.component.html',\n styleUrls: ['./smart-crm-marketing-view-details.component.scss']\n})\nexport class SmartCrmCommunicationViewDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n id: number;\n\n isLoaded = false;\n\n communicationDetails: CrmNewsLetter;\n subscriptionId: number;\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n if (this.id) {\n this.getSubscription();\n }\n });\n }\n /**subscriptionId */\n getSubscription() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getCommunicationDetails(this.id);\n }\n });\n }\n\n /** Function to get edit communication details */\n private getCommunicationDetails(id: number) {\n this.crmService\n .getCrmNewsletter(this.subscriptionId, id)\n .subscribe(response => {\n this.communicationDetails = response;\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <p>This is a summary of your marketing email.</p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"container-fluid pw-tab overflow-hidden\"\n *ngIf=\"communicationDetails\">\n <div class=\"card pb-0\">\n <div class=\"card-body p-4\">\n <div class=\"row\"\n *ngIf=\"communicationDetails\">\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Subject' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.title }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Body' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p [innerHTML]=\"communicationDetails?.body\"></p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Location' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p [innerHTML]=\"communicationDetails?.location\"></p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.SendUntil' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.send_until | dateFormat: 'datetime' }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.SendAt' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.send_at | dateFormat: 'datetime' }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Pushed' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10 d-flex\">\n <p>\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: communicationDetails?.is_pushed\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ communicationDetails?.is_pushed ? 'Yes' : 'No' }}</span>\n </p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>Sent:</h4>\n </div>\n <div class=\"col-12 col-sm-10 d-flex\">\n <p>\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: communicationDetails?.is_sent\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ communicationDetails?.is_sent ? 'Yes' : 'No' }}</span>\n </p>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Injector } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-marketing-view',\n templateUrl: './smart-crm-marketing.component.html'\n})\nexport class SmartCrmMarketingViewComponent extends AppBaseComponent {\n constructor(injector: Injector) {\n super(injector);\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-3\">Your Marketing Email at a Glance</h2>\n </div>\n</div>\n\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>View</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-communication-view-details></pw-smart-crm-communication-view-details>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Recipients</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-marketing-users-list></pw-smart-crm-marketing-users-list>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmOpportunity } from '../../../../shared/interface/crm-opportunity.interface';\nimport { CrmStage } from '../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-board',\n templateUrl: './smart-crm-board.component.html',\n styleUrls: ['./smart-crm-board.component.scss']\n})\nexport class SmartCrmBoardComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private draggedOpportunity: any;\n\n stages: CrmStage[];\n\n allOpportunities: CrmOpportunity[];\n\n opportunitiesGroup = [];\n\n private changedStage: any;\n\n isLoaded = false;\n\n categories = [];\n\n private availableOpportunities = [];\n\n subscription: Subscription;\n\n totalCount: number;\n\n routers = ROUTERS;\n\n masterStages: CrmStage[] = [];\n\n private defaultSelectedCategory = 'first';\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getAllOpportunityCategories();\n this.getStages();\n }\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories || [];\n });\n }\n\n /** Function ot get opportunity stages */\n private getStages() {\n this.crmService.getAvailableOpportunityStages(this.subscription?.id).subscribe(response => {\n this.stages = response.available_crm_opportunity_stages;\n this.masterStages = response.available_crm_opportunity_stages;\n this.getAllOpportunities();\n });\n }\n\n /** Function to get all opportunities */\n private getAllOpportunities() {\n this.crmService\n .getAllOpportunities(this.subscription?.id)\n .subscribe(response => {\n this.allOpportunities = response?.crm_opportunities || [];\n this.totalCount = response?.object_count;\n this.availableOpportunities = response?.crm_opportunities || [];\n if (this.defaultSelectedCategory) {\n this.opportunitiesGroups(this.categories?.length ? this.categories[0].id : '');\n this.defaultSelectedCategory = null;\n } else {\n this.opportunitiesGroups();\n }\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n private treefy(list) {\n const idAttr = 'id';\n const parentAttr = 'previous_stage_id';\n const childrenAttr = 'children';\n\n const treeList = [];\n const lookup = {};\n list.forEach(obj => {\n lookup[obj[idAttr]] = obj;\n obj[childrenAttr] = [];\n });\n list.forEach(obj => {\n if (obj[parentAttr] !== null) {\n if (lookup[obj[parentAttr]] !== undefined) {\n lookup[obj[parentAttr]][childrenAttr].push(obj);\n } else {\n treeList.push(obj);\n }\n } else {\n treeList.push(obj);\n }\n });\n\n return treeList;\n }\n\n private flatten(arr) {\n return arr.reduce((result, current) => {\n if (current.children) {\n const children = this.flatten(current.children);\n delete current.children;\n result.push(current);\n result.push(...children);\n } else {\n result.push(current);\n }\n\n return result;\n }, []);\n }\n\n /** Function to opportunities group by stages */\n private opportunitiesGroups(val?: any) {\n this.opportunitiesGroup = [];\n this.stages = this.masterStages;\n if (val !== undefined && val !== 0) {\n this.stages = this.stages.filter(x => x.crm_opportunity_category_ids.includes(val));\n }\n this.stages = this.stages.sort((a, b) =>\n // eslint-disable-next-line no-nested-ternary\n a.id > b.id ? 1 : b.id > a.id ? -1 : 0\n );\n const temp = this.treefy(this.stages);\n this.stages = this.flatten(temp);\n this.stages.forEach(stage => {\n const opportunities = { stage: null, opportunities: [] };\n const data = this.allOpportunities.filter(\n opportunity => opportunity.crm_opportunity_stage_id === stage.id\n );\n opportunities.opportunities = data;\n opportunities.stage = stage;\n this.opportunitiesGroup.push(opportunities);\n });\n }\n\n /** Function to filter opportunities by categories */\n onChangeCategory(event) {\n const categories = Number(event);\n if (categories) {\n this.allOpportunities = this.availableOpportunities.filter(opportunity =>\n opportunity?.crm_opportunity_category_ids?.includes(categories)\n );\n this.totalCount = this.allOpportunities?.length;\n this.opportunitiesGroups(categories);\n } else {\n this.allOpportunities = this.availableOpportunities;\n this.totalCount = this.allOpportunities?.length;\n this.opportunitiesGroups();\n }\n }\n\n dropItem(event: CdkDragDrop<string[]>) {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n this.draggedOpportunity = event?.item?.data;\n this.changedStage = this.stages.find(stage => stage.name === event?.container?.id)?.id;\n if (this.draggedOpportunity) {\n const opportunitiesDetails = { ...this.draggedOpportunity };\n opportunitiesDetails['crm_opportunity_stage_id'] = this.changedStage;\n HelperService.deleteProps(opportunitiesDetails, [\n 'crm_account',\n 'crm_opportunity_stage',\n 'crm_opportunity_categories',\n 'crm_contact',\n 'owner'\n ]);\n this.crmService\n .updateOpportunities(\n this.subscription?.id,\n opportunitiesDetails.id,\n opportunitiesDetails\n )\n .subscribe({\n next: () => {\n this.getAllOpportunities();\n this.toast.success(\n this.translation.translate(\n 'Crm.OpportunitiesMessage.UpdatedMessage'\n )\n );\n },\n error: () => {\n this.getAllOpportunities();\n }\n });\n this.draggedOpportunity = null;\n this.changedStage = '';\n }\n }\n }\n\n getConnectedList(): any[] {\n return this.opportunitiesGroup.map(x => `${x.stage.name}`);\n }\n\n dropGroup(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.opportunitiesGroup, event.previousIndex, event.currentIndex);\n }\n\n toggleColumn(event) {\n $(event.target).toggleClass('fa-angle-right fa-angle-down');\n $(event.target).closest('.main-div').toggleClass('dynamic-columns-wrapper');\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row mb-4\"\n *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\"\n (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\"\n [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded\"\n class=\"list-container d-flex\"\n cdkDropList\n [cdkDropListData]=\"opportunitiesGroup\"\n (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup\n class=\"opportunities-container main-div crm-board-primary\"\n *ngFor=\"let group of opportunitiesGroup\"\n cdkDrag\n [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas fa-angle-right\" (click)=\"toggleColumn($event)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{\n stage_id: group?.stage?.id,\n category: group.stage.crm_opportunity_category_ids\n }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div cdkDropList\n class=\"opportunities-list items-container\"\n [id]=\"group.stage.name\"\n [cdkDropListData]=\"group.opportunities\"\n (cdkDropListDropped)=\"dropItem($event)\"\n [cdkDropListConnectedTo]=\"getConnectedList()\">\n <div class=\"opportunities-box mb-3\"\n *ngFor=\"let item of group.opportunities\"\n cdkDrag\n [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\"\n class=\"float-end edit-button\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n item?.crm_account_id\n ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">{{ item?.one_time_amount / 100 | currency }}</p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\"\n [routerLink]=\"['/members', item?.owner[0]?.slug]\"><img alt=\"member image\"\n [src]=\"item?.owner[0]?.user_avatar[0]?.url\"\n [width]=\"'30'\"\n class=\"squared_logo float-end\"\n [height]=\"'30'\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" /></a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!masterStages?.length && isLoaded\">\n <pw-no-data [message]=\"'Crm.OpportunitiesBoardMessages.NoStages' | transloco\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'categories']\">Take me to the configuration page.</a>\n </pw-no-data>\n</div>\n\n<div *ngIf=\"totalCount === 0 && !masterStages.length && categories.length\">\n <pw-no-data [message]=\"'Crm.OpportunitiesBoardMessages.NoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n\n<div *ngIf=\"!opportunitiesGroup.length && isLoaded && masterStages.length && categories.length\">\n <pw-no-data [message]=\"'Crm.OpportunitiesBoardMessages.NoStageAssociated' | transloco\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'stage']\">Please add some in the configuration section.</a>\n </pw-no-data>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { PAGE_SIZE, User } from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-details',\n templateUrl: './smart-crm-opportunities-details.component.html',\n styleUrls: ['./smart-crm-opportunities-details.component.scss']\n})\nexport class SmartCrmOpportunitiesDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n user: User;\n\n id: number;\n\n onEdit = false;\n\n data: any;\n\n submitted = false;\n\n searchText = '';\n\n subscriptionId: number;\n\n allContacts: any = [];\n\n contactId: number;\n\n private opportunityData: any;\n\n filteredUsers: any = [];\n\n cancelledTrue: any;\n\n winChance = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];\n\n opportunities = [];\n\n WonField = false;\n\n LostField = false;\n\n TrialStartField = false;\n\n accounts = [];\n\n filteredAccounts: any[];\n\n account_id: number;\n\n masterStages = [];\n\n stages = [];\n\n categories = [];\n\n featureKeys = [];\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getOpportunitiesForm();\n }\n\n ngOnInit() {\n this.toggleStageField();\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getAvailableOpportunityStages(this.subscriptionId);\n this.getAllOpportunityCategories();\n }\n });\n this.form.get('crm_contact_id').setValue(null);\n this.contactId = Number(this.route.snapshot.queryParamMap.get('contact_id'));\n this.account_id = Number(this.route.snapshot.queryParamMap.get('account_id'));\n this.getUserInfo();\n this.getAllContacts();\n }\n\n private getAvailableOpportunityStages(id) {\n this.crmService.getAvailableOpportunityStages(id).subscribe(res => {\n this.masterStages = res?.available_crm_opportunity_stages || [];\n this.stages = res?.available_crm_opportunity_stages || [];\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n this.user = user;\n });\n }\n\n /** Function to call accounts */\n private getAllAccounts() {\n this.crmService.getAllAccounts(this.subscriptionId).subscribe(response => {\n this.accounts = response.accounts;\n if (this.account_id) {\n const accountData = this.accounts.find(x => x.id === this.account_id);\n this.form.get('crm_account_id').setValue(accountData);\n }\n });\n }\n\n /** Function to call contacts */\n private getAllContacts() {\n this.allContacts = [];\n\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n this.subscriptionId = subscriptionId;\n if (this.subscriptionId) {\n this.getAllAccounts();\n this.crmService\n .getAllContacts(this.subscriptionId, '', { page_size: PAGE_SIZE })\n .subscribe(response => {\n this.allContacts = response.contacts;\n this.allContacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${\n member.last_name || ''\n } - ${member.email}`.trim();\n });\n if (this.id) {\n this.onEdit = true;\n this.getOpportunityDetails(this.id);\n } else {\n this.onEdit = false;\n }\n if (this.contactId) {\n const contactData = this.allContacts.find(x => x.id === this.contactId);\n this.form.get('crm_contact_id').setValue(contactData);\n this.form.get('crm_account_id').setValue(contactData.crm_account);\n }\n if (this.account_id) {\n this.allContacts = this.allContacts.filter(\n x => x.crm_account_id === this.account_id\n );\n }\n });\n }\n });\n }\n\n /** Function to get opportunities data */\n private getOpportunityDetails(id: number) {\n this.crmService.getOpportunityDetails(this.subscriptionId, id).subscribe(response => {\n this.opportunityData = response;\n let startingAtObj: NgbDateStruct;\n let trialStartAtObj: NgbDateStruct;\n if (response.starting_at) {\n startingAtObj = {\n year: Number(response.starting_at.substring(0, 4)),\n month: Number(response.starting_at.substring(5, 7)),\n day: Number(response.starting_at.substring(8, 10))\n };\n }\n if (response.trial_start_at) {\n trialStartAtObj = {\n year: Number(response.trial_start_at.substring(0, 4)),\n month: Number(response.trial_start_at.substring(5, 7)),\n day: Number(response.trial_start_at.substring(8, 10))\n };\n }\n if (response.stage === 'Trailing') {\n this.TrialStartField = true;\n } else {\n this.WonField = false;\n }\n if (response.stage === 'Won') {\n this.LostField = true;\n } else {\n this.LostField = false;\n }\n if (response.stage === 'Lost') {\n this.WonField = true;\n } else {\n this.WonField = false;\n }\n this.form.patchValue(this.opportunityData);\n this.form.patchValue({\n starting_at: startingAtObj,\n trial_start_at: trialStartAtObj,\n one_time_amount: response.one_time_amount / 100,\n monthly_amount: response.monthly_amount / 100\n });\n\n this.allContacts.forEach(contact => {\n if (this.opportunityData.crm_contact_id === contact.id) {\n this.form.get('crm_contact_id').setValue(contact);\n }\n });\n this.accounts.forEach(account => {\n if (this.opportunityData.crm_account_id === account.id) {\n this.form.get('crm_account_id').setValue(account);\n }\n });\n });\n }\n\n /** Function to execute on submit opportunities form */\n onSave() {\n this.submitted = true;\n const data = { ...this.form.value };\n data.one_time_amount *= 100;\n data.monthly_amount *= 100;\n if (data.crm_contact_id) {\n data.crm_contact_id = data.crm_contact_id.id;\n }\n data.crm_account_id = data.crm_account_id.id;\n data.starting_at = HelperService.dateFormat(this.form.get('starting_at').value);\n data.trial_start_at = HelperService.dateFormat(this.form.get('trial_start_at').value);\n const sub$ = this.id\n ? this.crmService.updateOpportunities(this.subscriptionId, this.id, data)\n : this.crmService.postOpportunities(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.UpdatedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscriptionId).subscribe(response => {\n const categories = response?.crm_opportunity_categories || [];\n categories.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.categories.push(data);\n });\n this.getValues();\n });\n }\n\n private getValues() {\n if (!this.id) {\n this.route.queryParams.subscribe(res => {\n if ('stage_id' in res) {\n const stageId = Number(res['stage_id']);\n let category;\n if (typeof res['category'] === 'string') {\n category = res['category'].split(',').map(x => Number(x));\n } else {\n category = res['category']?.map(x => Number(x));\n }\n this.form.patchValue({\n crm_opportunity_stage_id: stageId || '',\n crm_opportunity_category_ids: category?.length ? category : ''\n });\n }\n });\n }\n }\n\n search(event) {\n let data = [];\n if (event.query) {\n data = this.allContacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allContacts.forEach(item => {\n data.push(item);\n });\n }\n this.filteredUsers = data;\n }\n\n searchAccount(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(item => {\n data.push(item);\n });\n }\n this.filteredAccounts = data;\n }\n\n onCategoryChange(event) {\n this.stages = [...this.masterStages];\n if (event.value?.length) {\n this.stages = this.stages.filter(x =>\n x.crm_opportunity_category_ids?.some(item => event.value.includes(item))\n );\n }\n }\n\n private toggleStageField() {\n this.form.get('crm_opportunity_stage_id').disable();\n this.form.get('crm_opportunity_category_ids').valueChanges.subscribe(() => {\n const val = this.form.get('crm_opportunity_category_ids').value;\n if (!val?.length) {\n this.form.get('crm_opportunity_stage_id').disable();\n } else {\n this.form.get('crm_opportunity_stage_id').enable();\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.OpportunitiesMessage.CrmOpportunity' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-8\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Title' | transloco\"\n name=\"title\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TitleErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.OpportunitiesMessage.Account' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"searchAccount($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [inputStyle]=\"\n submitted && f['crm_account_id'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label>{{ 'Crm.OpportunitiesMessage.Contact' | transloco }}</label>\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contact\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.one_time_amount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.monthly_amount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n </div>\n\n <!-- Features -->\n <div class=\"mb-3 col-12 col-md-4\">\n <label>{{ 'Crm.OpportunitiesMessage.Features' | transloco }} </label>\n <p-multiSelect [options]=\"featureKeys\"\n placeholder=\"Select feature keys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <span class=\"text-danger\">*</span>\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.win_chance' | transloco }}\n </span>\n </label>\n <select formControlName=\"win_chances\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['win_chances'].errors }\">\n <option *ngFor=\"let option of winChance\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.Won' | transloco }}\n <span class=\"text-danger\">*</span>\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.Won' | transloco }}\n </span>\n </label>\n <input type=\"number\"\n NumberDirective\n class=\"form-control\"\n formControlName=\"won\"\n id=\"won\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.OpportunitiesMessage.StartingAt' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.starting_at' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"starting_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['starting_at'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.Category' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Categories' | transloco\"\n name=\"crm_opportunity_category_ids\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.CategoryErrorMessage' | transloco\">\n <p-multiSelect [options]=\"categories\"\n (onChange)=\"onCategoryChange($event)\"\n formControlName=\"crm_opportunity_category_ids\"\n appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"TrialStartField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\"\n name=\"trial_start_at\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"trial_start_at\"\n ngbDatepicker\n #c=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"LostField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\"\n name=\"lost_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"lost_reason\"\n id=\"lost_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['lost_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"WonField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\"\n name=\"won_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"won_reason\"\n id=\"won_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.Stage' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Stage' | transloco\"\n name=\"crm_opportunity_stage_id\"\n errorMsg=\"Please select stage\">\n <select class=\"form-select\"\n formControlName=\"crm_opportunity_stage_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_opportunity_stage_id'].errors }\">\n <option value=\"\">Select Stage</option>\n <option *ngFor=\"let option of stages\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-12\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.DescriptionErrorMessage' | transloco\">\n <textarea rows=\"10\"\n type=\"text\"\n class=\"form-control description-field\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport swal from 'sweetalert2';\n\nimport { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY } from '@posiwise/common-utilities';\nimport { CrmAccount } from '../../../../../shared/interface/crm-account.interface';\nimport { CrmAction } from '../../../../../shared/interface/crm-action.interface';\nimport { CrmVersion } from '../../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { AuthService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-info',\n templateUrl: './smart-crm-opportunities-info.component.html',\n styleUrls: ['./smart-crm-opportunities-info.component.scss']\n})\nexport class SmartCrmOpportunitiesInfoComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n isLoaded = false;\n\n isFormEdit = true;\n\n opportunitiesId: number;\n\n data: any;\n\n aboutControls: UntypedFormGroup;\n\n submitted = false;\n\n accounts: CrmAccount[];\n\n filteredAccounts: CrmAccount[] = [];\n\n subscriptionId: number;\n\n actions: CrmAction[];\n\n buttonDisable: boolean;\n\n hasAccess: boolean;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n contactId: number;\n\n accountId: number;\n\n userId: number;\n\n actionControls: UntypedFormGroup;\n\n isDisabled = false;\n\n updating = false;\n\n actionId: number;\n\n showFullComment = false;\n\n commentId: number;\n\n opportunitiesComments: any[];\n\n dangerColor: boolean;\n\n allContacts: any[];\n\n filteredContacts: any[];\n\n opportunitiesVersioning: CrmVersion[];\n\n submitAction = false;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private modalService: NgbModal,\n private authService: AuthService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getOpportunityActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getOpportunitiesForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.opportunitiesId = Number(data['id']);\n if (this.opportunitiesId) {\n this.getOpportunityDetails();\n this.actionControls.get('crm_opportunity_id').setValue(this.opportunitiesId);\n }\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getActions();\n this.getOpportunitiesComments();\n }\n });\n this.onDateSelected();\n this.getContactVersion();\n this.userInfo();\n }\n\n /** Function to call user info */\n private userInfo() {\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n }\n\n /** Function to get opportunities details */\n getOpportunityDetails() {\n this.crmService\n .getOpportunityDetails(this.subscriptionId, this.opportunitiesId)\n .subscribe(response => {\n if (response) {\n if (response.crm_contact_id) {\n response.crm_contact.displayName = `${response.crm_contact.first_name} ${response.crm_contact.last_name}`;\n }\n this.data = response;\n // eslint-disable-next-line operator-assignment\n this.data.monthly_amount = this.data.monthly_amount / 100;\n // eslint-disable-next-line operator-assignment\n this.data.one_time_amount = this.data.one_time_amount / 100;\n this.contactId = response.crm_contact_id;\n this.accountId = response.crm_account_id;\n this.aboutControls.patchValue(response);\n this.aboutControls.get('crm_contact_id').patchValue(response.crm_contact);\n this.aboutControls.get('crm_account_id').patchValue(response.crm_account);\n this.actionControls.get('crm_contact_id').setValue(this.contactId);\n this.actionControls.get('crm_account_id').setValue(this.accountId);\n }\n });\n }\n\n /** Function to update opportunities */\n updateOpportunities() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n const formData = this.aboutControls;\n formData.get('crm_account_id').setValue(formData.get('crm_account_id').value?.id);\n formData.get('crm_contact_id').setValue(formData.get('crm_contact_id').value?.id);\n formData.get('one_time_amount').setValue(formData.get('one_time_amount').value * 100);\n formData.get('monthly_amount').setValue(formData.get('monthly_amount').value * 100);\n this.crmService\n .updateOpportunities(this.subscription?.id, this.opportunitiesId, formData.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getOpportunityDetails();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to save comment */\n @ValidateForm('actionControls')\n onCommentSave() {\n const data = this.actionControls.value;\n data.when = HelperService.dateFormat(data?.when);\n this.crmService\n .postAccountComment(this.subscription?.id, data)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getOpportunitiesComments();\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n onDateSelected() {\n this.actionControls.get('when').valueChanges.subscribe(() => {\n const selectedDate = this.document.getElementById('when')?.['value'];\n const todayDate = moment(new Date()).format('YYYY-MM-DD');\n if (todayDate < selectedDate) {\n this.isDisabled = true;\n this.actionControls.get('completed').disable({ onlySelf: true });\n this.actionControls.get('completed').setValue(false);\n } else {\n this.actionControls.get('completed').enable({ onlySelf: true });\n this.isDisabled = false;\n }\n });\n }\n\n /** Function to get all comments */\n private getOpportunitiesComments() {\n this.crmService\n .getOpportunitiesComments(this.opportunitiesId, this.subscription?.id)\n .subscribe(resp => {\n if (resp?.crm_account_actions?.length) {\n this.opportunitiesComments = resp.crm_account_actions;\n\n this.opportunitiesComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(moment(new Date()), 'days');\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.opportunitiesComments.sort((a, b) => {\n return <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime();\n });\n this.opportunitiesComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.opportunitiesComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.opportunitiesComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.opportunitiesComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n get actionFormControls() {\n return this.actionControls.controls;\n }\n\n /** Function to get the list of accounts by subscriptionId */\n getAccountsBySubscription() {\n this.crmService.getAccountsBySubscription(this.subscription?.id).subscribe(res => {\n this.accounts = res.accounts;\n });\n }\n\n /** Function to get and show all the actions */\n private getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp && resp.crm_actions && resp.crm_actions.length > 0) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n\n showEditControls(event) {\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getOpportunitiesComments();\n this.updating = false;\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id, action, completedOrUncompleted) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getOpportunitiesComments();\n });\n }\n });\n }\n\n /** Function to update comment */\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined);\n this.getOpportunitiesComments();\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getOpportunityDetails();\n });\n }\n });\n }\n\n /** Function to call contacts */\n getAllContacts() {\n this.crmService.getAllContacts(this.subscription?.id, '').subscribe(response => {\n this.allContacts = response.contacts;\n this.allContacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${member.last_name || ''} - ${\n member.email\n }`.trim();\n });\n });\n }\n\n /** search accounts */\n accountSearch(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredContacts = data;\n }\n\n onContactSearch(event) {\n let data = [];\n if (event.query) {\n data = this.allContacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allContacts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredContacts = data;\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n /** Function to get opportunities versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.opportunitiesId, 'CrmOpportunity')\n .subscribe(response => {\n this.opportunitiesVersioning = response.versions;\n });\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_account_id: `${this.accountId}`,\n crm_contact_id: `${this.contactId}`,\n crm_opportunity_id: `${this.opportunitiesId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Opportunity Info\n </h2>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.title }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"\n isFormEdit = !isFormEdit; getAccountsBySubscription(); getAllContacts()\n \">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.Title' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\"\n *ngIf=\"data?.crm_contact_id\">\n <label class=\"label mb-2\">{{\n 'Crm.OpportunitiesMessage.Contact' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n data.crm_contact_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_contact_id\">{{ data?.crm_contact?.first_name }} {{ data?.crm_contact?.last_name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_contact_id\"\n [suggestions]=\"filteredContacts\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"onContactSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contacts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{\n 'Crm.OpportunitiesMessage.Account' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_account_id\">{{ data?.crm_accounty?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_account_id\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"accountSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}</label>\n <a class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.one_time_amount\">{{ data?.one_time_amount | currency }}</a>\n <input *ngIf=\"!isFormEdit || !data?.one_time_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}</label>\n <a class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.monthly_amount\">{{ data?.monthly_amount | currency }}</a>\n <input *ngIf=\"!isFormEdit || !data?.monthly_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getOpportunityDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateOpportunities()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onCommentSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls.crm_action_id.invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n value=\"Submit Note\" />\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [message]=\"\n 'Crm.OpportunitiesMessage.NoActionsInOpportunitiesInfoMessage'\n | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!opportunitiesComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [message]=\"'Crm.OpportunitiesMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"opportunitiesComments?.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of opportunitiesComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span>\n </span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{\n item?.owner?.first_name +\n ' ' +\n item?.owner?.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of opportunitiesVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"opportunitiesVersioning?.length === 0\">\n <pw-no-data [message]=\"'Crm.OpportunitiesMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\"\n [opportunityId]=\"opportunitiesId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE } from '@posiwise/common-utilities';\nimport { CrmOpportunityResponse } from '../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging, Plotly, Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-list',\n templateUrl: './smart-crm-opportunities-list.component.html',\n styleUrls: ['./smart-crm-opportunities-list.component.scss']\n})\nexport class SmartCrmOpportunitiesListComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscription: Subscription;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n searchText = '';\n\n data: CrmOpportunityResponse = {\n crm_opportunities: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n id = '';\n\n isLoaded = false;\n\n loading = true;\n\n opportunitiesInsight: any;\n\n opportunitiesGeography: Plotly.Figure;\n\n user: User;\n\n userId: number;\n\n page = 1;\n\n stages = [];\n\n categories = [];\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getUserInfo();\n this.getAvailableOpportunityStages();\n this.getAllOpportunityCategories();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllOpportunities({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getOpportunitiesInsight();\n this.getContactGeography();\n }\n }\n });\n }\n\n private getAllOpportunities(paging?: Paging) {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n this.subscriptionId = subscriptionId;\n if (this.subscriptionId) {\n this.crmService\n .getAllOpportunities(this.subscriptionId, paging)\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteOpportunities(this.subscription?.id, id).subscribe(() => {\n this.getAllOpportunities({ page: this.page, page_size: PAGE_SIZE });\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get available opportunities */\n private getAvailableOpportunityStages() {\n this.crmService.getAvailableOpportunityStages(this.subscription?.id).subscribe(response => {\n this.stages = response?.available_crm_opportunity_stages?.map(stage => {\n return stage?.name;\n });\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories?.map(category => {\n return category?.name;\n });\n });\n }\n\n /** Function to call opportunities insight */\n private getOpportunitiesInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'opportunities_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.opportunitiesInsight = [];\n } else this.opportunitiesInsight = response;\n });\n }\n\n /** Function to call contact geography */\n private getContactGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'opportunities_geography')\n .subscribe(response => {\n this.opportunitiesGeography = response;\n });\n }\n\n checkPermission(permission: string) {\n return this.permissionService.evaluatePermissions(permission);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.crm_opportunities\" [paginator]=\"true\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n class=\"contact-table\" [totalRecords]=\"data.object_count\" [loading]=\"loading\" filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\" [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search opportunities...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"title\"> {{ 'Crm.OpportunitiesMessage.Title' | transloco }} <p-sortIcon\n field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_contact_id\"> {{ 'Crm.OpportunitiesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_account_id\"> {{ 'Crm.OpportunitiesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"one_time_amount\"> {{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }} <p-sortIcon field=\"one_time_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"win_chances\"> {{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <p-sortIcon field=\"win_chances\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"monthly_amount\"> {{ 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }} <p-sortIcon field=\"monthly_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_stage_id\"> {{ 'Crm.OpportunitiesMessage.Stage' | transloco\n }} <p-sortIcon field=\"crm_opportunity_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_category_ids\"> {{ 'Crm.OpportunitiesMessage.Categories' |\n transloco }} <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"starting_at\"> {{ 'Crm.OpportunitiesMessage.StartingAt' | transloco }}\n <p-sortIcon field=\"starting_at\"></p-sortIcon>\n </th>\n <th class=\"actions-list-two\" scope=\"true\"> {{ 'Label.Actions' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-opportunities>\n <tr>\n <td data-head=\"Title\">\n <a *ngIf=\"\n hasAccess ||\n opportunities?.owner_id === userId ||\n checkPermission('Pages.Product.CRM.Role.Admin')\n \" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunityInfo,\n opportunities.id\n ]\">\n <span>{{ opportunities?.title | textTruncate: 15 }} </span>\n </a>\n <a *ngIf=\"\n !hasAccess &&\n opportunities?.owner_id !== userId &&\n checkPermission('Pages.Product.CRM.Role.Admin')\n \"> {{ opportunities?.title | textTruncate: 15 }} </a>\n </td>\n <td class=\"contactname\" data-head=\"Crm Contact\">\n <a *ngIf=\"opportunities?.crm_contact_id\" [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n opportunities.crm_contact_id.id\n ]\">{{ opportunities.crm_contact?.first_name + ' ' +\n opportunities.crm_contact?.last_name }}</a>\n </td>\n <td data-head=\"Account\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n opportunities.crm_account.id\n ]\">{{ opportunities.crm_account.name }}</a>\n </td>\n <td data-head=\"Amount\"> {{ opportunities.one_time_amount / 100 | currency }} </td>\n <td data-head=\"WinChance\"> {{ opportunities.win_chances / 100 | percent }} <span class=\"text-danger\"\n *ngIf=\"opportunities.cancelled\">!Cancelled!</span>\n </td>\n <td data-head=\"Monthly Amount\"> {{ opportunities.monthly_amount / 100 | currency }} </td>\n <td data-head=\"Stage\">\n <span class=\"badge\" [appDynamicBadge]=\"{\n itemsArray: stages,\n item: opportunities?.crm_opportunity_stage?.name\n }\" color=\"cyan\">{{ opportunities?.crm_opportunity_stage?.name }}</span>\n </td>\n <td data-head=\"Categories\">\n <span *ngFor=\"let category of opportunities?.crm_opportunity_categories\" class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\" color=\"blue-grey\">{{ category?.name\n }}</span>\n </td>\n <td data-head=\"Starting At\"> {{ opportunities.starting_at | dateFormat }} </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess || opportunities?.owner_id === userId\">\n <ng-container *rbacAllow=\"'Pages.Product.CRM.Role.Admin'\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunities,\n opportunities.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(opportunities.id)\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data message=\"No Result\"> </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [message]=\"'Crm.OpportunitiesMessage.NoOpportunitiesMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\" *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"opportunitiesInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"opportunitiesInsight\" [paginator]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"opportunitiesInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.OpportunitiesMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.OpportunitiesMessage.Value' | transloco }}</th>\n <th scope=\"true\"> {{ 'Crm.OpportunitiesMessage.Reason' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Title\"> {{ insight.title }} </td>\n <td data-head=\"Value\"> {{ insight.value }} </td>\n <td data-head=\"Reason\"> {{ insight.reason }} </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ opportunitiesInsight.length }}</span>\n </div>\n <div *ngIf=\"opportunitiesInsight?.length === 0\">\n <pw-no-data [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"opportunitiesGeography\">\n <plotly-plot [data]=\"opportunitiesGeography?.data\" [layout]=\"opportunitiesGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!opportunitiesGeography\">\n <pw-no-data [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-opportunities',\n templateUrl: './smart-crm-opportunities.component.html',\n styleUrls: ['./smart-crm-opportunities.component.scss']\n})\nexport class SmartCrmOpportunitiesComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>Opportunities</h2>\n <p>In this section you can track your business opportunities.</p>\n </div>\n</div>\n\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>List</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-opportunities-list></pw-smart-crm-opportunities-list>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Board view</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-board></pw-smart-crm-board>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport uniqBy from 'lodash/uniqBy';\nimport swal from 'sweetalert2';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-summary-actions',\n templateUrl: './smart-crm-summary-actions.component.html',\n styleUrls: ['./smart-crm-summary-actions.component.scss']\n})\nexport class SmartCrmSummaryActionsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n contactActions = [];\n\n isLoaded = false;\n\n contactId: number;\n\n p: number;\n\n p1: number;\n\n accountActionSuggested = [];\n\n updating = false;\n\n actionId: number;\n\n dangerColor: boolean;\n\n isLoadedSuggested = false;\n\n userId: number;\n\n showFullComment = false;\n\n commentId: number;\n\n allSubscriptionMembers: any;\n\n contactActionsAll = [];\n\n showFilter = false;\n\n subscription: Subscription;\n\n selector = '.pending-actions-wrapper';\n\n private totalPendingActions = 0;\n\n currentPage = 1;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getAccountActions();\n this.getAccountActionSuggested(this.subscription?.id);\n }\n });\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n }\n });\n }\n\n onScrollPendingActions() {\n this.currentPage++;\n const totalPages = Math.ceil(this.totalPendingActions / 5);\n // Prevent API call if all records have been fetched\n if (this.currentPage <= totalPages) {\n this.getAccountActions();\n }\n }\n\n /** Function to get all actions */\n private getAccountActions() {\n this.crmService\n .getAccountActions(this.subscription?.id, { page: this.currentPage, page_size: 5 })\n .subscribe({\n next: response => {\n if (response?.crm_account_actions?.length) {\n this.totalPendingActions = response?.object_count;\n this.contactActionsAll = [\n ...this.contactActionsAll,\n ...response.crm_account_actions\n ];\n // unique values\n this.contactActionsAll = [\n ...uniqBy(this.contactActionsAll.reverse(), 'id').reverse()\n ];\n this.contactActionsAll.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(\n moment(new Date()),\n 'days'\n );\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n this.contactActionsAll.sort((a, b) => {\n return (\n <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime()\n );\n });\n this.contactActions = [...this.contactActionsAll];\n this.allSubscriptionMembers = [];\n const ownerObject = {};\n this.contactActionsAll.forEach(data => {\n const { id } = data.owner;\n ownerObject[id] = data.owner;\n });\n // eslint-disable-next-line no-restricted-syntax\n for (const i of Object.keys(ownerObject)) {\n this.allSubscriptionMembers.push(ownerObject[i]);\n }\n this.showFilter = false;\n if (this.allSubscriptionMembers.length > 1) {\n this.showFilter = true;\n }\n }\n }\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /** Function to get account action suggested */\n private getAccountActionSuggested(subscription_id: number) {\n this.crmService\n .getAccountActionSuggested(subscription_id)\n .subscribe(response => {\n this.accountActionSuggested = response?.crm_account_actions || [];\n })\n .add(() => {\n this.isLoadedSuggested = true;\n });\n }\n\n editComment(event) {\n const comments = this.document.getElementsByClassName('comment-section');\n if (event !== undefined) {\n if (event.target.closest('.comment-section').classList.contains('show-controls')) {\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n } else {\n event.target.closest('.comment-section').classList.add('show-controls');\n }\n } else {\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n }\n\n // if(event.target.closest('.comment-section').classList.find())\n }\n\n updateComment(action) {\n const commentObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.editComment(undefined);\n this.getAccountActions();\n });\n }\n\n /** Function to set the action as completed */\n setAsCompleted(id: number, action, index: number) {\n return swal\n .fire({\n title: 'Completed',\n html: `Are you sure you want to set as Completed?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: true,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.contactActions.splice(index, 1);\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id: number, action, index: number) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.contactActions.splice(index, 1);\n });\n }\n });\n }\n\n /** Function to show DatePicker */\n showDatePicker(actionId: number) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getAccountActions();\n this.updating = false;\n });\n }\n\n /** Function to filter the data by user */\n filterByUser(event) {\n const userId = event.target.value;\n if (userId !== '0') {\n const filteredData = this.contactActionsAll.filter(\n action => action.owner_id === Number(userId)\n );\n this.contactActions = filteredData;\n } else {\n this.contactActions = this.contactActionsAll;\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <div class=\"col-12 col-sm-3 float-start mb-2\"\n *ngIf=\"showFilter\">\n <select class=\"form-select\"\n (change)=\"filterByUser($event)\">\n <option value=\"0\">Filter by user</option>\n <option *ngFor=\"let member of allSubscriptionMembers\"\n [value]=\"member.id\">\n {{ member.first_name }} {{ member.last_name }}\n </option>\n </select>\n </div>\n <div>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.addAccount]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.AccountMessage.AddAccount' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end me-3\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactDetails, 0]\"\n data-cy=\"add-action\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n </div>\n </div>\n <!-- Pending Actions -->\n <div class=\"col-12 col-md-6 mb-3\">\n <h5 class=\"accordion-heading\">Pending Actions</h5>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"contactActions?.length === 0 && isLoaded\"\n class=\"px-2\">\n <pw-no-data [message]=\"'Crm.Summary.SummaryMessage' | transloco\"> </pw-no-data>\n </div>\n <!-- wrapper for infinite scroll -->\n <div class=\"pending-actions-wrapper\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"selector\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScrollPendingActions()\">\n <div class=\"mb-4 action-card bg-white\"\n *ngFor=\"let action of contactActions; let i = index\">\n <div class=\"p-2\">\n <ul class=\"list-inline\">\n <li class=\"list-inline-item me-2\">\n <h6 *ngIf=\"!updating || actionId !== action.id\">\n {{ action.when_short_date }}\n </h6>\n <input *ngIf=\"updating && actionId === action.id\"\n placeholder=\"yyyy-mm-dd\"\n [value]=\"action.when_short_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, action)\" />\n </li>\n <li>\n <button type=\"button\"\n class=\"btn btn-sm when-btn\"\n (click)=\"showDatePicker(action?.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n ngbTooltip=\"Click to Edit\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </li>\n <li class=\"list-inline-item\">\n <span class=\"badge bg-primary\">{{ action.crm_action?.name }}</span>\n </li>\n <li class=\"list-inline-item float-end\">\n <a *ngIf=\"action?.crm_contact\"\n ngbTooltip=\"See this contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n action?.crm_contact?.id\n ]\">\n <i class=\"fa fa-eye me-3 see-icon\" aria-hidden=\"true\"></i>\n </a>\n <a ngbTooltip=\"Set as completed\"\n class=\"me-3\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCompleted(action.id, action, i)\">\n <i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(action.id, action, i)\">\n <i\n class=\"fa fa-times text-danger delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n </li>\n </ul>\n <p [class.text-danger]=\"!action.color\"\n class=\"mb-0\"\n *ngIf=\"action.due\">\n {{ action.due }}\n </p>\n <p *ngIf=\"action.owner?.id !== userId\"\n class=\"m-0 mt-1\">\n <a class=\"font-italic grey\"\n [routerLink]=\"['/members', action?.owner?.slug]\">Added by\n {{ action.owner?.first_name + ' ' + action.owner?.last_name }}</a>\n </p>\n <p class=\"mt-1 mb-1 fw-bold\">\n <a class=\"text-secondary\"\n *ngIf=\"action?.crm_contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n action?.crm_contact?.id\n ]\">\n {{\n action?.crm_contact?.first_name +\n ' ' +\n action?.crm_contact?.last_name\n }}\n </a>\n <a *ngIf=\"!action.crm_contact_id\">N/A</a> at\n <a *ngIf=\"action.crm_account_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n action?.crm_account?.id\n ]\">\n {{ action?.crm_account?.name }}\n </a>\n </p>\n <div class=\"comment-section\">\n <textarea class=\"mt-1 textarea form-control mb-2\"\n [(ngModel)]=\"action.comment\">{{ action.comment }}</textarea>\n <div class=\"d-flex\">\n <p class=\"my-1 comment\"\n *ngIf=\"!showFullComment || action.id !== commentId\">\n {{ action.comment | slice: 0:230\n }}<a *ngIf=\"action.comment.length > 230\"\n class=\"text-secondary\"\n (click)=\"showFullComment = true; commentId = action.id\">...show more\n </a>\n </p>\n <p class=\"my-1 comment\"\n *ngIf=\"showFullComment && action.id === commentId\">\n {{ action.comment }}\n <a *ngIf=\"action.comment.length > 230 && showFullComment\"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn\"\n (click)=\"editComment($event)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"control-btns edit-control-btns\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"editComment(undefined)\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-sm btn-primary\"\n (click)=\"updateComment(action)\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Suggested Actions -->\n <div class=\"col-12 col-md-6 mb-3\">\n <h5 class=\"accordion-heading\">Suggested Actions</h5>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"mb-4 action-card bg-white\"\n *ngFor=\"\n let suggestedAction of accountActionSuggested\n | paginate: { id: 'suggestedAction', itemsPerPage: 10, currentPage: p1 };\n let i = index\n \">\n <div class=\"p-2\">\n <p class=\"mt-1 mb-1 fw-bold\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n suggestedAction?.crm_account?.id\n ]\">{{ suggestedAction?.crm_account?.name }}</a>\n </p>\n <p class=\"fw-bold mb-1\">{{ suggestedAction.crm_action }}</p>\n <p class=\"mb-0\">{{ suggestedAction.reason }}</p>\n </div>\n </div>\n <div class=\"text-center pagination-controls w-100 mt-3\"\n *ngIf=\"accountActionSuggested?.length > 10\">\n <pagination-controls id=\"suggestedAction\"\n (pageChange)=\"p1 = $event\">\n </pagination-controls>\n </div>\n <div *ngIf=\"accountActionSuggested.length === 0 && isLoadedSuggested\"\n class=\"px-2\">\n <pw-no-data [message]=\"'Crm.Summary.SummarySuggestionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription, User } from '@posiwise/common-utilities';\n\n@Component({\n selector: 'pw-smart-crm-summary-others',\n templateUrl: './smart-crm-summary-others.component.html'\n})\nexport class SmartCrmSummaryOthersComponent extends AppBaseComponent implements OnInit, OnDestroy {\n signedUpLastThirtyDays: any;\n\n activeOpportunities: any;\n\n accountAtRisk: any;\n\n ContractRenewal: any;\n\n creditCardExpiring: any;\n\n magicMoment: any;\n\n user: User;\n\n signUpLastThirtyDaysLoaded = false;\n\n activeOpportunitiesLoaded = false;\n\n accountAtRiskDetailsLoaded = false;\n\n contactRenewalLoaded = false;\n\n creditCardExpiringDetailsLoaded = false;\n\n magicMomentLoaded = false;\n\n subscription: Subscription;\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n }\n });\n }\n\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n if (\n this.permissionService.isGranted('Pages.Beta') ||\n this.permissionService.isSuperAdmin()\n ) {\n this.getSignedUpLastThirtyDays();\n this.getActiveOpportunities();\n this.getAccountAtRiskDetails();\n this.getContactRenewal();\n this.getCreditCardExpiringDetails();\n this.getMagicMoment();\n }\n }\n });\n }\n\n /** Function to call signed up last 30 days details */\n private getSignedUpLastThirtyDays() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_signed_up_last_30_days')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.signedUpLastThirtyDays = [];\n } else this.signedUpLastThirtyDays = response;\n })\n .add(() => {\n this.signUpLastThirtyDaysLoaded = true;\n });\n }\n\n /** Function to call Active Opportunities details */\n private getActiveOpportunities() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_active_opportunities')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.activeOpportunities = [];\n } else this.activeOpportunities = response;\n })\n .add(() => {\n this.activeOpportunitiesLoaded = true;\n });\n }\n\n /** Function to call Account At Risk details */\n private getAccountAtRiskDetails() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_accounts_at_risk')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountAtRisk = [];\n } else this.accountAtRisk = response;\n })\n .add(() => {\n this.accountAtRiskDetailsLoaded = true;\n });\n }\n\n /** Function to call Contract renewal details */\n private getContactRenewal() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_contract_renewal')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.ContractRenewal = [];\n } else this.ContractRenewal = response;\n })\n .add(() => {\n this.contactRenewalLoaded = true;\n });\n }\n\n /** Function to call Credit Card Expiring details */\n private getCreditCardExpiringDetails() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'credit_card_expiring')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.creditCardExpiring = [];\n } else this.creditCardExpiring = response;\n })\n .add(() => {\n this.creditCardExpiringDetailsLoaded = true;\n });\n }\n /** Function to call magic moment */\n private getMagicMoment() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'magic_moment')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.magicMoment = [];\n } else this.magicMoment = response;\n })\n .add(() => {\n this.magicMomentLoaded = true;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <ng-container class=\"mt-5\"\n *rbacAllow=\"'Pages.Beta'\">\n <!-- Signed up last 30 days -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Signed up Last 30 Days</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!signUpLastThirtyDaysLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"signedUpLastThirtyDays?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"signedUpLastThirtyDays\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"signedUpLastThirtyDays.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-signUp>\n <tr>\n <td data-head=\"Owner\">\n {{ signUp.owner?.first_name }} {{ signUp.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ signUp.contact_name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ signUp.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ signedUpLastThirtyDays.length }}</span>\n </div>\n <div *ngIf=\"signedUpLastThirtyDays?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Active Opportunities -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Active Opportunities</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!activeOpportunitiesLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"activeOpportunities?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"activeOpportunities\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"activeOpportunities.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.OneTimeAmount' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.WinChance' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.MonthlyAmount' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-opportunities>\n <tr>\n <td data-head=\"Title\">\n {{ opportunities.title }}\n </td>\n <td data-head=\"Contact Name\">\n {{ opportunities.crm_contact?.first_name }}\n {{ opportunities.crm_contact?.last_name }}\n </td>\n <td data-head=\"Account\">\n {{ opportunities.crm_account?.name }}\n </td>\n <td data-head=\"One Time Amount\">\n {{ opportunities.one_time_amount / 100 | currency }}\n </td>\n <td data-head=\"Monthly Amount\">\n {{ opportunities.monthly_amount / 100 | currency }}\n </td>\n <td data-head=\"Win Chance\">\n {{ opportunities.win_chances | percent }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ activeOpportunities.length }}</span>\n </div>\n <div *ngIf=\"activeOpportunities?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Accounts at risk -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Accounts at Risk</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!accountAtRiskDetailsLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"accountAtRisk?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"accountAtRisk\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"accountAtRisk.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ accountAtRisk.length }}</span>\n </div>\n <div *ngIf=\"accountAtRisk?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Contract renewal -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Contract Renewal</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!contactRenewalLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"ContractRenewal?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"ContractRenewal\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"ContractRenewal.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ ContractRenewal.length }}</span>\n </div>\n <div *ngIf=\"ContractRenewal?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Credit Card Expiring -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Credit Card Expiring</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!creditCardExpiringDetailsLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"creditCardExpiring?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"creditCardExpiring\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"creditCardExpiring.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ creditCardExpiring.length }}</span>\n </div>\n <div *ngIf=\"creditCardExpiring?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Magic Moment -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Magic Moment</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!magicMomentLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"magicMoment?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"magicMoment\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"magicMoment.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ magicMoment.length }}</span>\n </div>\n <div *ngIf=\"magicMoment?.length === 0\">\n <pw-no-data [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n </ng-container>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-summary',\n templateUrl: './smart-crm-summary.component.html',\n styleUrls: ['./smart-crm-summary.component.scss']\n})\nexport class SmartCrmSummaryComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>{{ 'Crm.SmartCrmSummary' | transloco }}</h2>\n <p>In this section you can see your CRM at a glance.</p>\n </div>\n</div>\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Actions</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-summary-actions></pw-smart-crm-summary-actions>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\"\n *rbacAllow=\"'Pages.Beta'\">\n <a ngbNavLink>Other</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-summary-others></pw-smart-crm-summary-others>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { Component, Injector } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CRM_PERMISSIONS } from '@posiwise/smart-crm-shared';\n\n@Component({\n selector: 'pw-smart-crm-private-tabs',\n template: `<pw-tabs [items]=\"items\" [withSubscription]=\"true\"></pw-tabs>`\n})\nexport class SmartCrmTabsComponent extends AppBaseComponent {\n items: MenuItem[];\n\n constructor(injector: Injector) {\n super(injector);\n this.items = [\n {\n id: 'summary_tab',\n label: 'Summary',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/crm/summary'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Summary}`)\n },\n {\n id: 'accounts_tab',\n label: 'Accounts',\n icon: 'fas fa-user-friends',\n routerLink: ['/crm/accounts'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Accounts}`)\n },\n {\n id: 'contacts_tab',\n label: 'Contacts',\n icon: 'fa fa-fw fa-users',\n routerLink: ['/crm/contacts'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Contacts}`)\n },\n {\n id: 'leads_tab',\n label: 'Leads',\n icon: 'fa fa-fw fa-cog',\n routerLink: ['/crm/leads'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Leads}`)\n },\n {\n id: 'opportunities_tab',\n label: 'Opportunities',\n icon: 'fa fa-handshake',\n routerLink: ['/crm/opportunities'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Opportunities}`\n )\n },\n {\n id: 'marketing_tab',\n label: 'Marketing',\n icon: 'fas fa-bullhorn',\n routerLink: ['/crm/marketing'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Marketing}`)\n },\n {\n id: 'customer-success',\n label: 'Customer Success',\n icon: 'fa fa-check-circle',\n routerLink: ['/crm/customer-success'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.CustomerSuccess}`\n )\n },\n {\n id: 'competition',\n label: 'Competition',\n icon: 'fa fa-trophy',\n routerLink: ['/crm/competition'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Competition}`\n )\n },\n {\n id: 'insight_tab',\n label: 'Insight',\n icon: 'fa fa-fw fa-signature',\n routerLink: ['/crm/insight'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Insight}`)\n },\n {\n id: 'configuration_tab',\n label: 'Configuration',\n icon: 'fa fa-fw fa-cog',\n routerLink: ['/crm/configuration'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Configuration}`\n )\n }\n ];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { SmartCrmCompanyDetailsComponent } from './components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nimport { SmartCrmCompanyInfoComponent } from './components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nimport { SmartCrmCompaniesComponent } from './components/smart-crm-accounts/smart-crm-accounts.component';\nimport { SmartCrmCompetitionComponent } from './components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nimport { SmartCrmSettingsDetailsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nimport { SmartCrmConfigurationComponent } from './components/smart-crm-configuration/smart-crm-configuration.component';\nimport { SmartCrmOpportunityCategoriesDetailsComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nimport { SmartCrmSourceDetailsComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nimport { SmartCrmStageDetailsComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nimport { SmartCrmWidgetsDetailsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nimport { SmartCrmContactDetailsComponent } from './components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nimport { SmartCrmContactInfoComponent } from './components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nimport { SmartCrmContactComponent } from './components/smart-crm-contacts/smart-crm-contacts.component';\nimport { SmartCrmCustomerSuccessComponent } from './components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nimport { SmartCrmInsightComponent } from './components/smart-crm-insight/smart-crm-insight.component';\nimport { SmartCrmLeadsDetailsComponent } from './components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nimport { SmartCrmLeadsComponent } from './components/smart-crm-leads/smart-crm-leads.component';\nimport { SmartCrmCommunicationsDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nimport { SmartCrmCommunicationsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nimport { SmartCrmMarketingViewComponent } from './components/smart-crm-marketing/smart-crm-marketing.component';\nimport { SmartCrmOpportunitiesDetailsComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nimport { SmartCrmOpportunitiesInfoComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nimport { SmartCrmOpportunitiesComponent } from './components/smart-crm-opportunities/smart-crm-opportunities.component';\nimport { SmartCrmSummaryComponent } from './components/smart-crm-summary/smart-crm-summary.component';\nimport { SmartCrmTabsComponent } from './components/smart-crm-tabs/smart-crm-tabs.component';\n\nimport { PageAccessGuard } from '@posiwise/core-guards';\nimport { CRM_PERMISSIONS } from '@posiwise/smart-crm-shared';\n\n// These are the private routes. The public routes and modules needs to be defined in public.routes.ts\nconst routes: Routes = [\n {\n path: '',\n component: SmartCrmTabsComponent,\n data: {\n title: 'Smart CRM Modules',\n permission: `${CRM_PERMISSIONS.SmartCrmModules}`\n },\n canActivate: [PageAccessGuard], // Gets called for the current route\n canActivateChild: [PageAccessGuard], // Gets called for the children route\n children: [\n {\n path: '',\n redirectTo: '/home',\n pathMatch: 'full'\n },\n {\n path: 'summary',\n component: SmartCrmSummaryComponent\n },\n //////////////////////\n // Accounts view\n //////////////////////\n {\n path: 'accounts',\n component: SmartCrmCompaniesComponent\n },\n {\n path: 'accounts/:id',\n component: SmartCrmCompanyDetailsComponent\n },\n {\n path: 'accounts/add',\n component: SmartCrmCompanyDetailsComponent\n },\n {\n path: 'accounts/info/:id',\n component: SmartCrmCompanyInfoComponent\n },\n //////////////////////\n // Contacts view\n //////////////////////\n {\n path: 'contacts',\n component: SmartCrmContactComponent\n },\n {\n path: 'contacts/:accountId',\n component: SmartCrmContactComponent\n },\n {\n path: 'contacts/detail/:id',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/add/:accountId',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/add',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/info/:id',\n component: SmartCrmContactInfoComponent\n },\n //////////////////////\n // Opportunities view\n //////////////////////\n {\n path: 'opportunities',\n component: SmartCrmOpportunitiesComponent\n },\n {\n path: 'opportunities/:id',\n component: SmartCrmOpportunitiesDetailsComponent\n },\n {\n path: 'opportunities/add',\n component: SmartCrmOpportunitiesDetailsComponent\n },\n {\n path: 'opportunities/info/:id',\n component: SmartCrmOpportunitiesInfoComponent\n },\n //////////////////////\n // Leads view\n //////////////////////\n {\n path: 'leads',\n component: SmartCrmLeadsComponent\n },\n {\n path: 'leads/details/add',\n component: SmartCrmLeadsDetailsComponent\n },\n {\n path: 'leads/details/:Id',\n component: SmartCrmLeadsDetailsComponent\n },\n //////////////////////\n // Marketing view\n //////////////////////\n {\n path: 'marketing',\n component: SmartCrmCommunicationsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/details/add',\n component: SmartCrmCommunicationsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/details/:Id',\n component: SmartCrmCommunicationsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/:Id',\n component: SmartCrmMarketingViewComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n //////////////////////\n // Customer Success view\n //////////////////////\n {\n path: 'customer-success',\n component: SmartCrmCustomerSuccessComponent,\n data: {\n permission: `${CRM_PERMISSIONS.CustomerSuccess}`\n }\n },\n //////////////////////\n // Competition view\n //////////////////////\n {\n path: 'competition',\n component: SmartCrmCompetitionComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Competition}`\n }\n },\n //////////////////////\n // Insight view\n //////////////////////\n {\n path: 'insight',\n component: SmartCrmInsightComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Insight}`\n }\n },\n //////////////////////\n // Configuration view\n //////////////////////\n {\n path: 'configuration',\n component: SmartCrmConfigurationComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/:tabId',\n component: SmartCrmConfigurationComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/detail/add',\n component: SmartCrmSettingsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/detail/:id',\n component: SmartCrmSettingsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/source-details/:id',\n component: SmartCrmSourceDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/source-details/add',\n component: SmartCrmSourceDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/stage-details/:id',\n component: SmartCrmStageDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/stage-details/add',\n component: SmartCrmStageDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/category-details/:id',\n component: SmartCrmOpportunityCategoriesDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/category-details/add',\n component: SmartCrmOpportunityCategoriesDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget-details/:id',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget-details/add',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/admin',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n }\n ]\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class SmartCrmPrivateRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { TRANSLOCO_SCOPE } from '@ngneat/transloco';\nimport { SmartCrmCompanyDetailsComponent } from './components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nimport { SmartCrmCompanyFilesComponent } from './components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component';\nimport { SmartCrmCompanyInfoComponent } from './components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nimport { SmartCrmCompaniesComponent } from './components/smart-crm-accounts/smart-crm-accounts.component';\nimport { SmartCrmCompetitionComponent } from './components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nimport { SmartCrmSettingsDetailsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nimport { SmartCrmActionsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component';\nimport { SmartCrmConfigurationComponent } from './components/smart-crm-configuration/smart-crm-configuration.component';\nimport { SmartCrmOpportunityCategoriesDetailsComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nimport { SmartCrmOpportunityCategoriesComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component';\nimport { SmartCrmSourceDetailsComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nimport { SmartCrmCompanySourceComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source.component';\nimport { SmartCrmStageDetailsComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nimport { SmartCrmStagesComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component';\nimport { SmartCrmWidgetsDetailsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nimport { SmartCrmWidgetsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component';\nimport { SmartCrmContactDetailsComponent } from './components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nimport { SmartCrmContactInfoComponent } from './components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nimport { SmartCrmContactComponent } from './components/smart-crm-contacts/smart-crm-contacts.component';\nimport { SmartCrmCustomerSuccessComponent } from './components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nimport { SmartCrmInsightComponent } from './components/smart-crm-insight/smart-crm-insight.component';\nimport { SmartCrmOverviewComponent } from './components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component';\nimport { SmartCrmLeadsDetailsComponent } from './components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nimport { SmartCrmLeadsComponent } from './components/smart-crm-leads/smart-crm-leads.component';\nimport { SmartCrmMarketingUsersListComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component';\nimport { SmartCrmCommunicationsDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nimport { SmartCrmCommunicationsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nimport { SmartCrmCommunicationViewDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component';\nimport { SmartCrmMarketingViewComponent } from './components/smart-crm-marketing/smart-crm-marketing.component';\nimport { SmartCrmBoardComponent } from './components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component';\nimport { SmartCrmOpportunitiesDetailsComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nimport { SmartCrmOpportunitiesInfoComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nimport { SmartCrmOpportunitiesListComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';\nimport { SmartCrmOpportunitiesComponent } from './components/smart-crm-opportunities/smart-crm-opportunities.component';\nimport { SmartCrmSummaryActionsComponent } from './components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component';\nimport { SmartCrmSummaryOthersComponent } from './components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component';\nimport { SmartCrmSummaryComponent } from './components/smart-crm-summary/smart-crm-summary.component';\nimport { SmartCrmTabsComponent } from './components/smart-crm-tabs/smart-crm-tabs.component';\nimport { SmartCrmPrivateRoutingModule } from './smart-crm-private.routing.module';\nimport { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { QuillModule } from 'ngx-quill';\nimport { NgxUploaderModule } from 'ngx-uploader';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { SharedComponentsModule } from '@posiwise/shared-components';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { PlotlyViaCDNModule } from 'angular-plotly.js';\nimport { UiSwitchModule } from 'ngx-ui-switch';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { Loader } from '@googlemaps/js-api-loader';\nimport { AppConfigService } from '@posiwise/app-config-service';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { DropdownModule } from 'primeng/dropdown';\nPlotlyViaCDNModule.setPlotlyVersion('1.55.2');\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgxPaginationModule,\n PipesModule,\n InputTextModule,\n UiSwitchModule,\n DirectivesModule,\n ReactiveFormsModule,\n NgbModule,\n PlotlyViaCDNModule,\n NgxGpAutocompleteModule,\n SmartCrmPrivateRoutingModule,\n SharedComponentsModule,\n CoreTranslocoModule,\n DragDropModule,\n // SharedModule,\n QuillModule.forRoot(),\n NgxUploaderModule,\n InfiniteScrollModule,\n DropdownModule\n // LazyLoadModules\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {\n scope: 'smart-crm',\n alias: 'Crm'\n }\n },\n {\n provide: Loader,\n useFactory: (appConfigService: AppConfigService) => {\n return new Loader({\n apiKey: appConfigService.getGoogleApiKey(),\n libraries: ['places']\n });\n },\n deps: [AppConfigService]\n }\n ],\n declarations: [\n SmartCrmTabsComponent,\n SmartCrmSummaryComponent,\n SmartCrmCompaniesComponent,\n SmartCrmContactComponent,\n SmartCrmConfigurationComponent,\n SmartCrmSettingsDetailsComponent,\n SmartCrmContactDetailsComponent,\n SmartCrmCompanyDetailsComponent,\n SmartCrmInsightComponent,\n SmartCrmContactInfoComponent,\n SmartCrmLeadsComponent,\n SmartCrmOpportunitiesComponent,\n SmartCrmOpportunitiesDetailsComponent,\n SmartCrmBoardComponent,\n SmartCrmCommunicationsComponent,\n SmartCrmCompanyInfoComponent,\n SmartCrmCompanySourceComponent,\n SmartCrmCompanyFilesComponent,\n SmartCrmWidgetsComponent,\n SmartCrmCustomerSuccessComponent,\n SmartCrmCompetitionComponent,\n SmartCrmOpportunitiesInfoComponent,\n SmartCrmSourceDetailsComponent,\n SmartCrmWidgetsDetailsComponent,\n SmartCrmActionsComponent,\n SmartCrmOpportunitiesListComponent,\n SmartCrmOverviewComponent,\n SmartCrmSummaryActionsComponent,\n SmartCrmSummaryOthersComponent,\n SmartCrmCommunicationsDetailsComponent,\n SmartCrmCommunicationViewDetailsComponent,\n SmartCrmLeadsDetailsComponent,\n SmartCrmMarketingUsersListComponent,\n SmartCrmStagesComponent,\n SmartCrmStageDetailsComponent,\n SmartCrmMarketingViewComponent,\n SmartCrmOpportunityCategoriesComponent,\n SmartCrmOpportunityCategoriesDetailsComponent\n ],\n exports: [\n SmartCrmTabsComponent,\n SmartCrmSummaryComponent,\n SmartCrmCompaniesComponent,\n SmartCrmContactComponent,\n SmartCrmConfigurationComponent,\n SmartCrmSettingsDetailsComponent,\n SmartCrmContactDetailsComponent,\n SmartCrmCompanyDetailsComponent,\n SmartCrmInsightComponent,\n SmartCrmContactInfoComponent,\n SmartCrmLeadsComponent,\n SmartCrmOpportunitiesComponent,\n SmartCrmOpportunitiesDetailsComponent,\n SmartCrmBoardComponent,\n SmartCrmCommunicationsComponent,\n SmartCrmCompanyInfoComponent,\n SmartCrmCompanySourceComponent,\n SmartCrmCompanyFilesComponent,\n SmartCrmWidgetsComponent,\n SmartCrmCustomerSuccessComponent,\n SmartCrmCompetitionComponent,\n SmartCrmOpportunitiesInfoComponent,\n SmartCrmSourceDetailsComponent,\n SmartCrmWidgetsDetailsComponent,\n SmartCrmActionsComponent,\n SmartCrmOpportunitiesListComponent,\n SmartCrmOverviewComponent,\n SmartCrmSummaryActionsComponent,\n SmartCrmSummaryOthersComponent,\n SmartCrmCommunicationsDetailsComponent,\n SmartCrmCommunicationViewDetailsComponent,\n SmartCrmLeadsDetailsComponent,\n SmartCrmMarketingUsersListComponent,\n SmartCrmStagesComponent,\n SmartCrmStageDetailsComponent,\n SmartCrmMarketingViewComponent,\n SmartCrmOpportunityCategoriesComponent,\n SmartCrmOpportunityCategoriesDetailsComponent\n ]\n})\nexport class SmartCrmPrivateModule {}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { StatusCodes } from 'http-status-codes';\n\n@Component({\n selector: 'pw-crm-newsletter-confirmation',\n templateUrl: './smart-crm-newsletter-confirmation.component.html',\n styleUrls: ['./smart-crm-newsletter-confirmation.component.scss']\n})\nexport class CrmNewsletterConfirmationComponent implements OnInit {\n token = '';\n\n email = '';\n\n message = '';\n\n errorMsg = '';\n\n error = false;\n\n // TODO: Move to en.json\n // success = 'Congratulations. You are successfully subscribed to our newsletter.';\n // failure =\n // \"We couldn't verify your subscription to our newsletter. If the problem persists, please contact our support team. \";\n\n constructor(\n private route: ActivatedRoute,\n private crmService: CrmService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.subscribe(params => {\n this.token = params['verification_token'] || '';\n this.email = params['email'] || '';\n if (this.token && this.email) {\n this.getNewsletterConfirmation();\n } else {\n this.message = 'You need to pass a valid token to be able to subscribe';\n }\n });\n }\n\n getNewsletterConfirmation() {\n this.crmService.crmLeadsConfirmEmail(this.email, this.token).subscribe({\n next: (response: any) => {\n if (response.status === StatusCodes.OK) {\n this.message = response.message;\n }\n },\n error: (err: HttpErrorResponse) => {\n this.message = err.error.message.error;\n }\n });\n }\n}\n","<pw-public-layout title=\"Newsletter Confirmation\">\n <div class=\"login-inner\">\n <div class=\"card-block public-inner\">\n <div class=\"message\">\n {{ message }}\n </div>\n <ng-container *ngIf=\"!message\">\n <div class=\"page-loading\">\n <img src=\"/assets/img/logos/oval.svg\"\n alt=\"\"\n class=\"loading-icon\" />\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mb-2\">\n <br /><br />\n <strong>\n <a class=\"footer-links me-4\"\n routerLink=\"/\">{{ 'Button.Home' | transloco }}</a>\n <a class=\"footer-links\"\n routerLink=\"/register\">{{\n 'User.Account.CreateAccount' | transloco\n }}</a>\n </strong>\n </div>\n</pw-public-layout>\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { StatusCodes } from 'http-status-codes';\n\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-crm-newsletter-unsubscribe',\n templateUrl: './smart-crm-newsletter-unsubscribe.component.html'\n})\nexport class CrmNewsletterUnsubscribeComponent {\n token = '';\n\n message = '';\n\n errorMsg = '';\n\n error = false;\n\n success = \"You've successfully been removed from our newsletter.\";\n\n failure =\n 'Something went wrong and we were not able to unsubscribe you. If the problem persists, please contact us.';\n\n constructor(\n private route: ActivatedRoute,\n private crmService: CrmService\n ) {\n this.route.queryParams.subscribe(params => {\n this.token = params['crm_newsletter_token'] || '';\n if (this.token) {\n this.getNewsletterConfirmation();\n } else {\n this.error = true;\n this.errorMsg = this.failure;\n }\n });\n }\n\n getNewsletterConfirmation() {\n this.crmService.unsubscribeCrmContact(this.token).subscribe({\n next: (response: any) => {\n if (response.status === StatusCodes.OK) {\n this.message = this.success;\n } else {\n this.error = true;\n this.errorMsg = this.failure;\n }\n },\n error: error => {\n this.errorMsg = HelperService.getErrorMessage(error);\n this.error = true;\n }\n });\n }\n}\n","<pw-public-layout title=\"Newsletter Unsubscribe\">\n <div class=\"login-inner\">\n <div class=\"card-block public-inner\">\n <div class=\"alert alert-danger\"\n *ngIf=\"error\">\n <ng-container *ngIf=\"error\">\n {{ errorMsg }}\n </ng-container>\n </div>\n\n <div class=\"message\">\n {{ message }}\n </div>\n\n <ng-container *ngIf=\"!message && !error\">\n <div class=\"page-loading\">\n <img src=\"/assets/img/logos/oval.svg\"\n alt=\"\"\n class=\"loading-icon\" />\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"mb-2\">\n <br /><br /><br />\n <strong>\n <a class=\"footer-links me-4\"\n routerLink=\"/\">{{ 'Button.Home' | transloco }}</a>\n <a class=\"footer-links\"\n routerLink=\"/register\">{{\n 'User.Account.CreateAccount' | transloco\n }}</a>\n </strong>\n </div>\n</pw-public-layout>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { CRM_KEYS } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-crm-signup',\n templateUrl: './smart-crm-signup.component.html',\n styleUrls: ['./smart-crm-signup.component.scss']\n})\nexport class CrmSignupComponent extends AppBaseComponent implements OnInit {\n subject: string;\n\n productKey = CRM_KEYS.CRM_Yearly;\n\n masterProductId = this.appConfig.master_subscription.product_id;\n\n constructor(\n private authService: AuthService,\n injector: Injector\n ) {\n super(injector);\n this.subject = 'SmartCRM Product Contact Request';\n }\n\n ngOnInit() {\n // Redirect user to the home if its already logged in\n this.authService.getToken$().subscribe(tok => {\n if (tok && typeof tok === 'string') {\n this.router.navigate(['home']);\n }\n });\n\n this.scrollableLeft();\n }\n\n private scrollableLeft() {\n $('.register').css('opacity', 1);\n }\n}\n","<div class=\"container-fluid register\">\n <div class=\"register-container row h-100\">\n <div class=\"col-8 col-xl-9 col-md-7 col-lg-8 register-outer\">\n <h1 class=\"my-5\">\n Not just a CRM <br />\n but\n <span data-period=\"3000\"\n class=\"txt-rotate\"\n [attr.data-rotate]=\"[\n 'Qualified Leads',\n 'New Prospects',\n 'New Business Opportunities'\n ]\"></span>\n <span class=\"blinking-cursor\">|</span>\n <br />regularly delivered to you\n </h1>\n\n <h3 class=\"my-5\">\n We use growth hacking tools - mainly crawlers and machine learning - to automate the\n sourcing of new prospect lists.\n </h3>\n\n <div class=\"row services\">\n <div class=\"col-lg-6 col-md-12 service-desc service-image\">\n <figure>\n <img src=\"/assets/img/products/smart-crm/crm-effective-solution.png\"\n alt=\"Effective Solution\"\n class=\"img-fluid\" />\n </figure>\n </div>\n <div class=\"col-lg-6 col-md-12 service-desc product-features text-start\">\n <h2><span>A More Effective</span> solution to increase your sales funnel.</h2>\n <p>Our proprietary technology automates the sourcing of new leads.</p>\n\n <ul class=\"list-unstyled\">\n <li>\n <span class=\"icon-check branding-color\"></span> Stop wasting time\n searching for new prospects. Let us automate the process instead.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> We provide all you need\n to contact prospects effectively.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Focus on what's really\n important - talking to your clients.\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"row services\">\n <div class=\"col-lg-6 col-md-12 service-desc product-features text-start\">\n <h2>The full power of <span>Machine Learning</span>.</h2>\n <p>\n We have built a system that is able to understand when a prospect is most\n likely to be looking for new vendors.\n </p>\n <ul class=\"list-unstyled\">\n <li>\n <span class=\"icon-check branding-color\"></span> Don't waste time. Reach\n out to prospects at exactly the right moment.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Let us tell you the most\n efficient way to engage in conversation with your prospect.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Maximize the chances to\n convert the prospect into a paying customer.\n </li>\n </ul>\n </div>\n <div class=\"col-lg-6 col-md-12 service-image\">\n <figure>\n <img src=\"/assets/img/products/smart-crm/crm-machine-learning.png\"\n alt=\"Machine Learning\"\n class=\"img-fluid\" />\n </figure>\n </div>\n </div>\n </div>\n\n <div class=\"register-right-wrapper\">\n <div class=\"register-right\">\n <ul class=\"nav nav-tabs nav-justified\"\n role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\"\n id=\"login-tab\"\n data-bs-toggle=\"tab\"\n href=\"#login\"\n role=\"tab\"\n aria-controls=\"login\"\n aria-selected=\"true\">Login</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\"\n id=\"join-tab\"\n data-bs-toggle=\"tab\"\n href=\"#join\"\n role=\"tab\"\n aria-controls=\"join\"\n aria-selected=\"false\">Interested?</a>\n </li>\n </ul>\n\n <div class=\"tab-content social-inline\">\n <div class=\"tab-pane fade show\"\n id=\"join\"\n role=\"tabpanel\"\n aria-labelledby=\"join-tab\">\n <h3>\n Contact us for a demo.<br />\n It's worth more than a 1000 words.\n </h3>\n <pw-contact-us [masterProductId]=\"masterProductId\"\n [productKey]=\"productKey\"\n [subject]=\"subject\"></pw-contact-us>\n </div>\n\n <div class=\"tab-pane fade show active\"\n id=\"login\"\n role=\"tabpanel\"\n aria-labelledby=\"login-tab\">\n <h3>Welcome back</h3>\n <pw-login></pw-login>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { CrmNewsletterConfirmationComponent } from './components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nimport { CrmNewsletterUnsubscribeComponent } from './components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nimport { CrmSignupComponent } from './components/smart-crm-signup/smart-crm-signup.component';\n\n// These are the public routes. The public routes and modules needs to be defined in public.routes.ts\nconst routes: Routes = [\n {\n path: '',\n component: CrmSignupComponent,\n data: {\n title: 'Not just a CRM. We provide you with qualified leads.'\n }\n },\n {\n path: 'crm-newsletter-unsubscribe',\n component: CrmNewsletterUnsubscribeComponent,\n data: {\n title: 'CRM Unsubscribe Newsletter'\n }\n },\n {\n path: 'crm-newsletter-confirmation',\n component: CrmNewsletterConfirmationComponent,\n data: {\n title: 'CRM Newsletter Confirmation'\n }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class CrmPublicRoutingModule {}\n","import { NgModule } from '@angular/core';\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@ngneat/transloco';\nimport { CrmNewsletterConfirmationComponent } from './components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nimport { CrmNewsletterUnsubscribeComponent } from './components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nimport { CrmSignupComponent } from './components/smart-crm-signup/smart-crm-signup.component';\nimport { CrmPublicRoutingModule } from './smart-crm-public.routing.module';\n\nimport { ProductsShared } from '@posiwise/shared-product-components';\nimport { LayoutsModule } from '@posiwise/layouts';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CrmPublicRoutingModule, ProductsShared, LayoutsModule, TranslocoModule, CommonModule],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {\n scope: 'smart-crm',\n alias: 'Crm'\n }\n }\n ],\n\n declarations: [\n CrmSignupComponent,\n CrmNewsletterUnsubscribeComponent,\n CrmNewsletterConfirmationComponent\n ]\n})\nexport class CRMPublicModule {}\n","// Private components\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-accounts.component';\nexport * from './lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-configuration.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contacts.component';\nexport * from './lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nexport * from './lib/private/components/smart-crm-insight/smart-crm-insight.component';\nexport * from './lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component';\nexport * from './lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nexport * from './lib/private/components/smart-crm-leads/smart-crm-leads.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary.component';\nexport * from './lib/private/components/smart-crm-tabs/smart-crm-tabs.component';\nexport * from './lib/private/smart-crm-private.routing.module';\nexport * from './lib/private/smart-crm-private.module';\n\n// Public\nexport * from './lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nexport * from './lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nexport * from './lib/public/components/smart-crm-signup/smart-crm-signup.component';\nexport * from './lib/public/smart-crm-public.routing.module';\nexport * from './lib/public/smart-crm-public.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6","i7","i8","i9","i12","i14","i10","i11","i13","i15","i16","i18.SmartCrmCompanyFilesComponent","i19","i20","i17","i4.SmartCrmCompanySourceComponent","i5.SmartCrmWidgetsComponent","i6.SmartCrmActionsComponent","i7.SmartCrmStagesComponent","i8.SmartCrmOpportunityCategoriesComponent","i14.SmartCrmCompanyFilesComponent","i3.SmartCrmOverviewComponent","i2.SmartCrmCommunicationViewDetailsComponent","i3.SmartCrmMarketingUsersListComponent","i13.SmartCrmCompanyFilesComponent","i2.SmartCrmBoardComponent","i3.SmartCrmOpportunitiesListComponent","i3.SmartCrmSummaryActionsComponent","i4.SmartCrmSummaryOthersComponent","routes"],"mappings":"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"}
1
+ {"version":3,"file":"posiwise-smart-crm.mjs","sources":["../../../../libs/smart-crm/src/lib/shared/models/smart-crm.model.ts","../../../../libs/smart-crm/src/lib/shared/routers/routers.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-insight.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-insight/smart-crm-insight.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-leads/smart-crm-leads.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary.component.ts","../../../../libs/smart-crm/src/lib/private/components/smart-crm-summary/smart-crm-summary.component.html","../../../../libs/smart-crm/src/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.ts","../../../../libs/smart-crm/src/lib/private/smart-crm-private.routing.module.ts","../../../../libs/smart-crm/src/lib/private/smart-crm-private.module.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.html","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.html","../../../../libs/smart-crm/src/lib/public/components/smart-crm-signup/smart-crm-signup.component.ts","../../../../libs/smart-crm/src/lib/public/components/smart-crm-signup/smart-crm-signup.component.html","../../../../libs/smart-crm/src/lib/public/smart-crm-public.routing.module.ts","../../../../libs/smart-crm/src/lib/public/smart-crm-public.module.ts","../../../../libs/smart-crm/src/index.ts","../../../../libs/smart-crm/src/posiwise-smart-crm.ts"],"sourcesContent":["import { UntypedFormBuilder, Validators } from '@angular/forms';\n\nexport class AppSmartCrm {\n static getAccountsForm() {\n return new UntypedFormBuilder().group({\n name: ['', Validators.required],\n owner_id: ['', Validators.required],\n location: ['', Validators.required],\n subscription_id: ['', Validators.required],\n tel: ['', Validators.minLength(9)],\n description: [''],\n organization_size_id: [''],\n organization_type_id: [''],\n organization_industry_id: [''],\n country: [null, Validators.required],\n company_url: [''],\n status: ['', [Validators.required]],\n priority: ['', [Validators.required]],\n crm_source_id: ['']\n });\n }\n\n static getContactsForm() {\n return new UntypedFormBuilder().group({\n first_name: ['', Validators.required],\n last_name: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n dob: [null],\n headline: ['', Validators.required],\n tel: ['', Validators.minLength(9)],\n department_id: [''],\n crm_account_id: [{}, Validators.required],\n linkedin_url: [''],\n potential: [''],\n labels: [''],\n crm_source_id: [''],\n email_verified: ['']\n });\n }\n\n static getLeadsForm() {\n return new UntypedFormBuilder().group({\n first_name: [''],\n last_name: [''],\n email: ['', [Validators.required, Validators.email]],\n dob: [null],\n headline: [''],\n tel: ['', Validators.minLength(9)],\n crm_account_id: [''],\n linkedin_url: [''],\n crm_source_id: ['', Validators.required],\n subscription_id: ['', Validators.required],\n potential: [''],\n labels: [''],\n email_verified: ['']\n });\n }\n\n static getMarketingForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n owner_id: ['', [Validators.required]],\n title: ['', [Validators.required]],\n body: ['', Validators.required],\n feature_keys: [''],\n location: [''],\n send_until: ['', [Validators.required]],\n send_at: ['', [Validators.required]],\n is_pushed: [false, [Validators.required]],\n days_to_wait_from_previous_newsletter: [''],\n product_ids: [null],\n previous_newsletter_id: [''],\n contact_potential: [''],\n account_size: [''],\n account_status: [''],\n account_priority: [''],\n account_source: [''],\n contact_label: [''],\n can_reply: [''],\n contact_source: [''],\n only_new_contacts: ['']\n });\n }\n\n static getOpportunitiesForm(descriptionRequired = false) {\n return new UntypedFormBuilder().group({\n title: ['', Validators.required],\n crm_contact_id: [{}],\n crm_account_id: ['', Validators.required],\n description: ['', descriptionRequired ? Validators.required : ''],\n feature_keys: [''],\n one_time_amount: [null, Validators.required],\n win_chances: [null, Validators.required],\n starting_at: [Date, Validators.required],\n monthly_amount: [null, Validators.required],\n lost_reason: [''],\n trial_start_at: [''],\n won_reason: [''],\n crm_opportunity_stage_id: ['', Validators.required],\n won: [null],\n crm_opportunity_category_ids: ['', Validators.required]\n });\n }\n\n static getOpportunitiesInfoForm() {\n return this.getOpportunitiesForm(true);\n }\n\n static getOpportunityCategoriesForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n previous_category_id: [''],\n is_visible: [false],\n is_default: [false]\n });\n }\n\n static getSettingsForm() {\n return new UntypedFormBuilder().group({\n name: ['', Validators.required],\n target_week: ['', Validators.required],\n target_week_min: ['', Validators.required],\n subscription_id: [''],\n previous_action_id: [''],\n visible: [true]\n });\n }\n\n static getSourceForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n is_default: ['']\n });\n }\n\n static getStageForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n name: ['', Validators.required],\n previous_stage_id: [''],\n visible: [false],\n is_default: [false],\n color_code: '',\n crm_opportunity_category_ids: ['', Validators.required]\n });\n }\n\n static getWidgetForm() {\n return new UntypedFormBuilder().group({\n subscription_id: ['', [Validators.required]],\n position: ['', Validators.required],\n owner_id: ['', Validators.required],\n crm_widget_id: [''],\n visible: [false]\n });\n }\n\n static getAccountActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n owner_id: ['', Validators.required],\n crm_account_id: [null],\n comment: ['', [Validators.required]],\n crm_contact_id: [null],\n crm_action_id: ['', [Validators.required]],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null]\n });\n }\n\n static getContactActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n comment: ['', Validators.required],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null],\n crm_account_id: ['', Validators.required],\n crm_contact_id: ['', Validators.required],\n crm_action_id: ['', Validators.required],\n owner_id: ['']\n });\n }\n\n static getOpportunityActionsForm(isDisabled) {\n return new UntypedFormBuilder().group({\n comment: ['', Validators.required],\n when: [null, Validators.required],\n completed: [{ value: false, disabled: isDisabled }],\n cancelled: [null],\n crm_account_id: ['', Validators.required],\n crm_contact_id: [''],\n crm_action_id: ['', Validators.required],\n crm_opportunity_id: ['', Validators.required],\n owner_id: ['']\n });\n }\n}\n","const baseUrl = '/crm/';\n\nexport const ROUTERS = {\n accounts: `${baseUrl}accounts/`,\n contacts: `${baseUrl}contacts`,\n accountInfo: `${baseUrl}accounts/info/`,\n addAccount: `${baseUrl}accounts/add`,\n contactInfo: `${baseUrl}contacts/info/`,\n contactAdd: `${baseUrl}contacts/add`,\n contactDetails: `${baseUrl}contacts/detail/`,\n opportunityAdd: `${baseUrl}opportunities/add`,\n opportunities: `${baseUrl}opportunities/`,\n opportunityInfo: `${baseUrl}opportunities/info/`,\n configurationDetails: `${baseUrl}configuration/detail/`,\n configurations: `${baseUrl}configuration/`,\n leadsDetails: `${baseUrl}leads/details/`,\n marketingDetails: `${baseUrl}marketing/details/`,\n marketing: `${baseUrl}marketing`,\n categoryDetails: `${baseUrl}/configuration/category-details/`,\n sourceDetails: `${baseUrl}/configuration/source-details/`,\n stageDetails: `${baseUrl}/configuration/stage-details/`,\n widgetsDetails: `${baseUrl}/configuration/widget-details/`\n};\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { PAGE_SIZE, User, Subscription } from '@posiwise/common-utilities';\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, GeoService, SubscriptionService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-company-details',\n templateUrl: './smart-crm-account-details.component.html'\n})\nexport class SmartCrmCompanyDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n user: User;\n\n id: number;\n\n submitted = false;\n\n data: CrmAccount;\n\n onEdit = false;\n\n subscriptionMembers: [] = [];\n\n organizationSizes$: Observable<any>;\n\n organizationTypes$: Observable<any>;\n\n organizationIndustries$: Observable<any>;\n\n private countries$: Observable<any>;\n\n allSubscriptionMembers: any;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n filteredOwners: any;\n\n subscription: Subscription;\n\n status = [];\n\n priority = [];\n\n source = [];\n\n private countryNames = [];\n\n filteredCountries: any;\n\n constructor(\n injector: Injector,\n private subscriptionService: SubscriptionService,\n private crmService: CrmService,\n private commonService: CommonService,\n private geoService: GeoService\n ) {\n super(injector);\n this.form = AppSmartCrm.getAccountsForm();\n }\n\n onSearchOwner(event) {\n let values = [];\n if (event.query) {\n values = this.allSubscriptionMembers.filter((x: any) => {\n return x.first_name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allSubscriptionMembers.forEach(item => {\n values.push(item);\n });\n }\n this.filteredOwners = values;\n }\n\n ngOnInit() {\n this.organizationTypes$ = this.commonService.getOrganizationTypes();\n this.organizationSizes$ = this.commonService.getOrganizationSizes();\n this.organizationIndustries$ = this.commonService.getOrganizationIndustries();\n this.countries$ = this.geoService.getCountries();\n this.countries$.subscribe(res => {\n this.countryNames = res;\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getUserInfo(this.subscription?.id, this.hasAccess);\n this.accountDefaultValues(this.subscription?.id);\n this.form.get('subscription_id').setValue(this.subscription?.id);\n }\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.status = response.status;\n this.priority = response.priority;\n this.source = response.source;\n });\n }\n\n /** Function to get subscription members */\n private getAllSubscriptionMembers(id: number) {\n this.subscriptionService\n .getEnrolledSubscription(id, { page_size: PAGE_SIZE })\n .subscribe(response => {\n this.allSubscriptionMembers = response.members;\n if (this.id) {\n this.onEdit = true;\n this.getAccountDetail();\n } else {\n this.onEdit = false;\n }\n if (this.id === 0) {\n const currentUser = this.allSubscriptionMembers.find(\n x => x.id === this.user.id\n );\n this.form.get('owner_id').setValue(currentUser);\n }\n });\n }\n\n // /** Function to get user info */\n private getUserInfo(subscriptionId: number, hasAccess: boolean) {\n this.userStore().subscribe(user => {\n this.user = user;\n if (hasAccess) {\n this.form.get('owner_id').setValue(user);\n this.getAllSubscriptionMembers(subscriptionId);\n } else {\n this.form.get('owner_id').setValue(user);\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to execute on form submit */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n this.form.get('owner_id').setValue(this.form.get('owner_id').value.id);\n this.form.get('country').setValue(this.form.get('country').value.code);\n const sub$ = this.id\n ? this.crmService.updateAccount(this.subscription?.id, this.id, this.form.value)\n : this.crmService.postAccount(this.form.value, this.subscription?.id);\n sub$.subscribe(response => {\n this.toast.success(this.translation.translate('Crm.AccountMessage.UpdatedMessage'));\n this.router.navigate([\n `/${this.subscription?.slug}${ROUTERS.accountInfo}${response.id}`\n ]);\n });\n }\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('location').setValue(event.formatted_address);\n }\n\n /** Function to get account detail on edit form */\n private getAccountDetail() {\n this.crmService.getAccountDetail(this.subscription?.id, this.id).subscribe(res => {\n this.form.patchValue(res);\n this.data = res;\n this.allSubscriptionMembers.forEach(member => {\n if (this.data.owner_id === member.id) {\n this.form.get('owner_id').patchValue(member);\n }\n });\n this.countryNames.forEach(x => {\n if (x['code'] === res['country']) {\n this.form.get('country').patchValue(x);\n }\n });\n this.subscriptionService\n .getEnrolledSubscription(this.subscription?.id, { page_size: PAGE_SIZE })\n .subscribe({\n next: response => {\n this.subscriptionMembers = response.members;\n },\n error: error => this.toast.showToast(error)\n });\n });\n }\n\n onSearchCountry(event) {\n let values = [];\n if (event.query) {\n values = this.countryNames.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n }\n\n this.countryNames.forEach(item => {\n values.push(item);\n });\n this.filteredCountries = values;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.AccountMessage.Country' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"first_name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport {\n DOCUMENT_TYPE_EXT,\n PAGE_SIZE,\n TOKEN_HEADER_KEY,\n Paging,\n User,\n Subscription\n} from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-company-files',\n templateUrl: './smart-crm-account-files.component.html'\n})\nexport class SmartCrmCompanyFilesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n @Input() accountId: number;\n\n @Input() contactId: number;\n\n @Input() opportunityId: number;\n\n isLoaded = false;\n\n allFiles: any[];\n\n searchText = '';\n\n totalRecordsUnFiltered = 0;\n\n totalRecords: number;\n\n loading = true;\n\n hasAccess: boolean;\n\n user: User;\n\n userId: number;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n Done: boolean;\n\n page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private modalService: NgbModal,\n private authService: AuthService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n }\n\n ngOnInit() {\n this.getUserInfo();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n }\n });\n }\n\n /** Function to get all account files */\n private getAllFiles(paging: Paging) {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getAllAccountFiles(\n this.subscription?.id,\n this.accountId || null,\n this.contactId || null,\n this.opportunityId || null,\n paging\n )\n .subscribe(filesResponse => {\n this.allFiles = filesResponse?.crm_account_files || [];\n this.totalRecords = filesResponse.object_count;\n this.totalRecordsUnFiltered = filesResponse.unfiltered_count;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete file */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteAccountFiles(this.subscription?.id, id).subscribe(() => {\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountFilesMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: String(this.userId),\n crm_account_id: String(this.accountId),\n crm_contact_id: String(this.contactId) || '',\n crm_opportunity_id: String(this.opportunityId) || ''\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n this.getAllFiles({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row d-none\">\n <div class=\"col-12 mb-3\">\n <h2>Account Files</h2>\n </div>\n</div>\n<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-file\"\n (click)=\"openModal(content)\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add File' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table #dt\n [value]=\"allFiles\"\n [paginator]=\"true\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search Files...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.AccountFilesMessage.Owner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_account_id\">\n {{ 'Crm.AccountFilesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_contact_id\">\n {{ 'Crm.AccountFilesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_opportunity_id\">\n {{ 'Crm.AccountFilesMessage.Opportunity' | transloco }}\n <p-sortIcon field=\"crm_opportunity_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"file\">\n {{ 'Crm.AccountFilesMessage.File' | transloco }}\n <p-sortIcon field=\"file\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-file>\n <tr>\n <td data-head=\"Owner\">{{ file.owner?.first_name }} {{ file.owner?.last_name }}</td>\n <td data-head=\"Account\">\n <a *ngIf=\"file.crm_account_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n file.crm_account_id\n ]\">{{ file.crm_account?.name }}</a>\n </td>\n <td data-head=\"Contact\">\n <a *ngIf=\"file.crm_contact_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n file.crm_contact_id\n ]\">{{ file.crm_contact | ifNameNullShowEmail }}</a>\n </td>\n <td data-head=\"Opportunities\">{{ file?.crm_opportunity?.title }}</td>\n <td data-head=\"Files\">\n <a href=\"{{ file.file?.url }}\"\n target=\"blank\">{{\n file.file.url.split('?')[0].split('/')[\n file.file.url.split('?')[0].split('/').length - 1\n ]\n }}</a>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess || file.owner_id === userId\">\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(file.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountFilesMessage.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LogoCacheService } from '@posiwise/common-services';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport { LazyLoadEvent } from 'primeng/api';\nimport { Observable } from 'rxjs';\nimport swal from 'sweetalert2';\n\nimport {\n DOCUMENT_TYPE_EXT,\n PAGE_SIZE,\n TOKEN_HEADER_KEY,\n Paging,\n Subscription,\n User\n} from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport {\n AuthService,\n CommonService,\n FormHelperService,\n GeoService,\n SubscriptionService\n} from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-company-info',\n templateUrl: './smart-crm-account-info.component.html',\n styleUrls: ['./smart-crm-account-info.component.scss']\n})\nexport class SmartCrmCompanyInfoComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscription: Subscription;\n\n actionControls: UntypedFormGroup;\n\n aboutControls: UntypedFormGroup;\n\n accountId: number;\n\n userId: number;\n\n isFormEdit = true;\n\n user: User;\n\n allSubscriptionMembers: any;\n\n filteredOwner: any;\n\n data: any;\n\n submitted = false;\n\n accountComments = [];\n\n hasAccess = false;\n\n body: string;\n\n editComment = false;\n\n filteredContact: any;\n\n private isContactValid = true;\n\n filteredContactComment: any;\n\n contactId: number;\n\n isLoaded = false;\n\n totalRecords: number;\n\n totalRecordsUnFiltered = 0;\n\n loading = true;\n\n searchText = '';\n\n potential = ['low', 'medium', 'high'];\n\n filterByPotentials: string;\n\n showFullComment = false;\n\n commentId: number;\n\n status: any[];\n\n priority: any[];\n\n source: any[];\n\n organizationSizes$: Observable<any>;\n\n organizationIndustries$: Observable<any>;\n\n countries$: Observable<any>;\n\n organizationTypes$: Observable<any>;\n\n owner: any;\n\n actions: any;\n\n buttonDisable: boolean;\n\n isDisabled = false;\n\n dangerColor: boolean;\n\n updating = false;\n\n actionId: number;\n\n accountVersioning: any[];\n\n contacts: any[];\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n Done: boolean;\n\n direction = '';\n\n private page = 1;\n\n currentPage = 1;\n\n private totalContacts = 0;\n\n selector = '.timeline-container';\n\n submitAction = false;\n\n subscriptionId: number;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private subscriptionService: SubscriptionService,\n private geoService: GeoService,\n private commonService: CommonService,\n private modalService: NgbModal,\n private authService: AuthService,\n private cdr: ChangeDetectorRef,\n private logoCacheService: LogoCacheService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getAccountActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getAccountsForm();\n }\n\n ngOnInit() {\n this.countries$ = this.geoService.getCountries();\n this.organizationIndustries$ = this.commonService.getOrganizationIndustries();\n this.organizationTypes$ = this.commonService.getOrganizationTypes();\n this.organizationSizes$ = this.commonService.getOrganizationSizes();\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getActions();\n this.accountDefaultValues(this.subscription.id);\n }\n this.route.params.subscribe(data => {\n this.accountId = Number(data['id']);\n if (this.accountId) {\n this.getAccountDetails();\n this.getContactVersion();\n }\n });\n });\n this.getAllComments();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.status = response.status;\n this.priority = response.priority;\n this.source = response.source;\n });\n }\n\n /** Function to call account by ID */\n getAccountDetails() {\n this.crmService\n .getAccountDetail(this.subscription?.id, this.accountId)\n .subscribe(response => {\n this.data = response;\n this.aboutControls.patchValue(response);\n this.aboutControls.get('owner_id').setValue(response.owner);\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n updateAccountInfo() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n this.aboutControls\n .get('owner_id')\n .setValue(this.aboutControls.get('owner_id').value.id);\n this.crmService\n .updateAccount(this.subscription?.id, this.accountId, this.aboutControls.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getAccountDetails();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n onScrollTimeline() {\n this.currentPage++;\n const totalPages = Math.ceil(this.totalContacts / 5);\n // Prevent API call if all messages have been fetched\n if (this.currentPage <= totalPages) {\n this.getAllComments();\n }\n }\n\n /** Function to save comment */\n onSave() {\n this.submitAction = true;\n const form = this.actionControls.value;\n form.owner_id = this.data?.owner_id;\n form.crm_account_id = this.accountId;\n form.crm_contact_id = form?.crm_contact_id?.id;\n form.when = HelperService.dateFormat(form.when);\n if (this.actionControls.invalid) {\n FormHelperService.validateAllFormFields(this.actionControls);\n } else {\n this.crmService\n .postAccountComment(this.subscription?.id, form)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getAllComments();\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n /** Function to get comments */\n private getAllComments() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAccountComments(this.accountId, this.subscriptionId, {\n page: this.currentPage,\n page_size: 5\n })\n .subscribe(resp => {\n this.totalContacts = resp.object_count;\n if (resp?.crm_account_actions?.length) {\n this.accountComments = [\n ...this.accountComments,\n ...resp.crm_account_actions\n ];\n\n this.accountComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(\n moment(new Date()),\n 'days'\n );\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.accountComments.sort((a, b) => {\n return (\n <any>new Date(a.when).getTime() -\n <any>new Date(b.when).getTime()\n );\n });\n this.accountComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.accountComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.accountComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.accountComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n });\n }\n\n /** Function to update comment */\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id,\n crm_contact_id: this.contactId\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined, '');\n this.getAllComments();\n });\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.aboutControls.get('location').setValue(event.formatted_address);\n }\n\n /** Function to get subscription members */\n getAllSubscriptionMembers() {\n this.subscriptionService\n .getEnrolledSubscription(this.subscription?.id)\n .subscribe(member => {\n this.allSubscriptionMembers = member.members;\n });\n }\n\n /** Function to show edit comment section */\n showEditControls(event, action) {\n if (action && action.crm_contact) {\n this.contactId = action.crm_contact.id;\n }\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n /** Function to get and show all the actions */\n getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp?.crm_actions?.length) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id: number, action, completedOrUncompleted: boolean) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getAllComments();\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id: number, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getAllComments();\n });\n }\n });\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getAllComments();\n this.updating = false;\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to get the contacts related to account */\n private getAccountContacts(paging: Paging) {\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAccountContacts(\n this.accountId,\n this.subscriptionId,\n this.filterByPotentials || '',\n paging\n )\n .subscribe(response => {\n if (response.contacts) {\n this.contacts = response.contacts;\n this.totalRecords = response.object_count;\n this.totalRecordsUnFiltered = response.unfiltered_count;\n this.contacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${\n member.last_name || ''\n } - ${member.email}`.trim();\n });\n }\n })\n .add(() => {\n this.loading = false;\n });\n }\n });\n }\n\n /** Function when auto-complete dropdown selected */\n onDropdownClick() {\n if (this.contacts.length === 0) {\n this.filteredContact = [{ displayName: 'No contact to choose' }];\n this.filteredContactComment = [{ first_name: 'No contact to choose' }];\n }\n }\n\n /** search owner */\n search(event) {\n const values = [];\n if (event.query) {\n this.filteredOwner = this.allSubscriptionMembers.filter((x: any) => {\n return x.first_name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allSubscriptionMembers.forEach(element => {\n values.push(element);\n });\n }\n this.filteredOwner = values;\n }\n\n searchContact(event) {\n this.isContactValid = false;\n let values = [];\n if (event.query) {\n values = this.contacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.contacts.forEach(element => {\n values.push(element);\n });\n }\n this.filteredContact = values;\n }\n\n selectContact(event) {\n this.isContactValid = this.contacts.some(x => x.id === event.id);\n }\n\n OnContactBlur() {\n if (!this.isContactValid) {\n this.actionControls.get('crm_contact_id').setValue('');\n }\n }\n\n searchContactInComment(event) {\n let values = [];\n if (event.query) {\n values = this.contacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.contacts.forEach(element => {\n values.push(element);\n });\n }\n this.filteredContactComment = values;\n }\n\n selectCommentContact(event) {\n this.contactId = event.id;\n }\n\n /** Function to delete contact */\n onDeleteContact(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.DeletedMessage')\n );\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to get contact versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.accountId, 'CrmAccount')\n .subscribe(response => {\n this.accountVersioning = response.versions;\n });\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_account_id: `${this.accountId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n getAccountLogo(url: string) {\n if (url) {\n return this.logoCacheService.getLogo(\n `https://logo.clearbit.com/${url?.split('.')[1]}.${\n url?.split('.')[2]?.split('/')[0]\n }`\n );\n }\n\n return '';\n }\n\n navigateToAddOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { account_id: this.accountId }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Account Info\n </h2>\n </div>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToAddOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img alt=\"Profile Image\"\n width=\"100\"\n height=\"100\"\n [src]=\"getAccountLogo(data?.company_url)\"\n class=\"img-fluid company-logo\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.name }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"isFormEdit = !isFormEdit; this.getAllSubscriptionMembers()\">{{ 'Button.Edit' | transloco }}</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.AccountMessage.Name' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.AccountMessage.Location' | transloco\n }}</label>\n <input ngx-gp-autocomplete\n class=\"form-control rounded-0 ps-1 user-value\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"countries$ | async as countries\">\n <label>{{ 'Crm.AccountMessage.Country' | transloco\n }}<span class=\"text-danger\">*</span>\n </label>\n <select class=\"form-select\"\n formControlName=\"country\"\n [ngClass]=\"{ 'is-invalid': submitted && f['country'].errors }\">\n <option *ngFor=\"let country of countries\"\n [value]=\"country.code\">\n {{ country.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{ 'Crm.AccountMessage.Owner' | transloco }}</label>\n <p class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.owner_id\">\n {{ data?.owner?.first_name }} {{ data?.owner?.last_name }}\n </p>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.owner_id\"\n [suggestions]=\"filteredOwner\"\n formControlName=\"owner_id\"\n dataKey=\"id\"\n field=\"first_name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search owner\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.AccountMessage.CompanyUrl' | transloco\n }}</label>\n <a [href]=\"data?.company_url\"\n target=\"blank\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.company_url\">{{ data?.company_url }}</a>\n <input *ngIf=\"!isFormEdit || !data?.company_url\"\n type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"data?.tel\">\n <label class=\"label mb-0\">{{ 'Crm.AccountMessage.Tel' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"tel\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationTypes$ | async as types\">\n <label>{{ 'Organization.OrganizationType' | transloco }}</label>\n <div class=\"mb-3\">\n <select formControlName=\"organization_type_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <label>{{ 'Organization.OrganizationIndustry' | transloco }}</label>\n <select formControlName=\"organization_industry_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <label>{{ 'Crm.AccountMessage.Size' | transloco }}</label>\n <select formControlName=\"organization_size_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Status' | transloco }}</label>\n <select formControlName=\"status\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Priority' | transloco }}</label>\n <select formControlName=\"priority\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Crm.AccountMessage.Source' | transloco }}</label>\n <select formControlName=\"crm_source_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getAccountDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateAccountInfo()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionControls.get('crm_action_id').invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4 ps-0\">\n <p-autoComplete [suggestions]=\"filteredContact\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"searchContact($event)\"\n (onSelect)=\"selectContact($event)\"\n (onBlur)=\"OnContactBlur()\"\n styleClass=\"w-100\"\n placeholder=\"Search contact\"\n [multiple]=\"false\"\n (onDropdownClick)=\"onDropdownClick()\">\n </p-autoComplete>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <a class=\"btn btn-outline-primary me-0 me-sm-2\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2\"\n value=\"Submit Note\" />\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [withImage]=\"true\" [message]=\"\n 'Crm.AccountMessage.NoActionsInAccountInfoMessage' | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!accountComments?.length && isLoaded\"\n class=\"no-actions pt-2\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"accountComments?.length\">\n <div id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper timeline-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"selector\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScrollTimeline()\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd || last }\"\n *ngFor=\"\n let item of accountComments;\n index as i;\n let odd = odd;\n let even = even;\n let last = last;\n let first = first\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span></span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <div class=\"auto-complete mb-3 ui-fluid skills-modal\">\n <p-autoComplete [(ngModel)]=\"item.crm_contact\"\n [suggestions]=\"filteredContactComment\"\n dataKey=\" id \"\n field=\"first_name\"\n dropdown=\" true \"\n (completeMethod)=\"\n searchContactInComment($event)\n \"\n (onSelect)=\"selectCommentContact($event)\"\n (onBlur)=\"OnContactBlur()\"\n styleClass=\" w-100 \"\n placeholder=\" Search contact \"\n [multiple]=\"false\"\n (onDropdownClick)=\"onDropdownClick()\">\n </p-autoComplete>\n </div>\n <p class=\"float-start mb-0\"\n *ngIf=\"\n !showFullComment || item.id !== commentId\n \">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true;\n commentId = item.id\n \">...show more\n </a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 &&\n showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event, item)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <a class=\"text-secondary action-owner\"\n *ngIf=\"item.crm_contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n item.crm_contact.id\n ]\">{{ item.crm_contact.first_name }}\n {{ item.crm_contact.last_name || '' }}</a>\n <p>\n By\n {{\n item.owner.first_name +\n ' ' +\n item.owner.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i\n class=\"fa fa-tasks completed\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i\n class=\"far fa-window-close\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <div class=\"control-btns mt-3 text-end form-action-buttons\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined, '')\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Contacts</a>\n <ng-template ngbNavContent>\n <div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactAdd,\n accountId\n ]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n </div>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table class=\"table\"\n #dt\n [value]=\"contacts\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [lazy]=\"true\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Label.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.ContactMessage.ContactOwner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"headline\">\n {{ 'Crm.ContactMessage.Headline' | transloco }}\n <p-sortIcon field=\"headline\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-contact>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n contact.id\n ]\">{{\n contact.first_name + ' ' + contact.last_name\n | textTruncate: 20\n }}</a>\n </td>\n <td data-head=\"OwnerName\">\n {{ contact.owner | ifNameNullShowEmail }}\n </td>\n <td data-head=\"Headline\"\n class=\"headline-content\">\n {{ contact?.headline | textTruncate: 20 }}\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n contact.id\n ]\">\n <i\n class=\"fa fa-eye see-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Add opportunity\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.opportunityAdd\n ]\"\n [queryParams]=\"{ contact_id: contact.id }\">\n <i\n class=\"fa fa-plus-circle add-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.contactDetails,\n contact.id\n ]\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDeleteContact(contact.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"totalRecords === 0 && totalRecordsUnFiltered !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n </div>\n <div *ngIf=\"totalRecordsUnFiltered === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.ContactsAdminMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let versioning of accountVersioning\">\n <p>\n <strong>Event: </strong>{{ versioning.event }} |\n <strong>Author: </strong><a *ngIf=\"versioning?.author\"\n [routerLink]=\"['/members', versioning?.author?.slug]\">{{ versioning?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ versioning.created_at | dateFormat: 'datetime' }}<br />\n <strong>Object: </strong>{{ versioning.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"accountVersioning?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"4\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [accountId]=\"accountId\"></pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Plotly, Subscription } from '@posiwise/common-utilities';\nimport { CrmAccountResponse } from '../../../shared/interface/crm-account.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CommonService, LogoCacheService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-companies',\n templateUrl: './smart-crm-accounts.component.html',\n styleUrls: ['./smart-crm-accounts.component.scss']\n})\nexport class SmartCrmCompaniesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmAccountResponse = {\n accounts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n subscriptionId: number;\n\n organizationSizes = [];\n\n userId: number;\n\n hasAccess = false;\n\n isLoaded = false;\n\n private allIndustries: any;\n\n searchOptions: any = [];\n\n filterByIndustries = [];\n\n status = [];\n\n priority = [];\n\n source = [];\n\n filterBySource = [];\n\n filterByStatus = [];\n\n filterByPriority = [];\n\n filterBySizeId = [];\n\n searchLocationText: string;\n\n private filterByLocation: string;\n\n accountGeography: Plotly.Figure;\n\n accountActivities: any;\n\n accountLastInvoices: any;\n\n accountInsight: any;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n private commonService: CommonService,\n private logoCacheService: LogoCacheService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.accountDefaultValues(this.subscription.id);\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getUserInfo();\n }\n });\n this.getIndustries();\n this.getAllOrganizationSize();\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user?.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getAccountGeography();\n this.getAccountActivities();\n this.getAccountLastInvoices();\n this.getAccountInsight();\n }\n }\n });\n }\n\n /** Function to call account default values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n const { status } = response;\n status.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.status.push(data);\n });\n const { priority } = response;\n priority.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.priority.push(data);\n });\n const { source } = response;\n source.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.source.push(data);\n });\n });\n }\n\n /** Function to get the accounts list */\n private getAllAccounts(paging: Paging) {\n this.data.accounts = [];\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllAccounts(\n this.subscriptionId,\n paging,\n this.filterByIndustries.join() || '',\n this.filterBySizeId.join() || '',\n this.filterByStatus.join() || '',\n this.filterByPriority.join() || '',\n this.filterBySource.join() || '',\n this.filterByLocation || ''\n )\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to call accounts size */\n private getAllOrganizationSize() {\n this.commonService.getOrganizationSizes().subscribe(response => {\n const organizationSizes = response.organization_sizes;\n organizationSizes.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.organizationSizes.push(data);\n });\n });\n }\n\n /** Function to get organization industries */\n private getIndustries() {\n this.commonService.getOrganizationIndustries().subscribe(response => {\n this.allIndustries = response.organization_industries;\n this.allIndustries.forEach(val => {\n const industries = {\n label: val.name,\n value: val.id\n };\n this.searchOptions.push(industries);\n });\n });\n }\n\n /** Function to execute on delete button click */\n onDelete(id: number, subscription_id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteAccount(id, subscription_id).subscribe(() => {\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** filtering accounts */\n onSearchOptionChange(event, filterBy: string) {\n if (filterBy === 'industry') {\n this.filterByIndustries = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'size') {\n this.filterBySizeId = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'status') {\n this.filterByStatus = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'priority') {\n this.filterByPriority = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'source') {\n this.filterBySource = event.value;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.filterByLocation = event.formatted_address;\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n /** Location filter while keyup */\n locationSearch(event) {\n if (event.target.value.length === 0) {\n this.filterByLocation = '';\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to clear all filters */\n clearFilters() {\n this.filterBySizeId = [];\n this.filterByIndustries = [];\n this.filterByPriority = [];\n this.filterBySource = [];\n this.filterByStatus = [];\n this.searchText = '';\n this.filterByLocation = '';\n this.searchLocationText = '';\n this.getAllAccounts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n /** Function to call account geography */\n private getAccountGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_geography')\n .subscribe(response => {\n this.accountGeography = response;\n });\n }\n\n getUserAccountInfo(account: any): { message: string; iconClass: string } {\n if (account.signed_up_at !== null) {\n if (account.unsubscribed_at === null) {\n return { message: 'Paid Customer', iconClass: 'fas fa-dollar-sign money-icon' };\n } else {\n return {\n message: 'Old Customer',\n iconClass: 'fas fa-exclamation-triangle text-danger'\n };\n }\n } else if (account.child_subscription_id !== null) {\n return {\n message: 'Account with existing subscription',\n iconClass: 'fas fa-link account-link-icon'\n };\n }\n return { message: null, iconClass: null };\n }\n\n formatMRR(mrrInCents: number) {\n const mrrInDollars = (mrrInCents / 100).toFixed(2);\n return '$' + mrrInDollars.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n /** Function to call account activities */\n private getAccountActivities() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_last_activities')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountActivities = [];\n } else this.accountActivities = response;\n });\n }\n\n /** Function to call last invoice */\n private getAccountLastInvoices() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_last_invoices')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountLastInvoices = [];\n } else this.accountLastInvoices = response;\n });\n }\n\n /** Function to call account insight */\n private getAccountInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountInsight = [];\n } else this.accountInsight = response;\n });\n }\n\n getAccountLogo(url: string) {\n if (url) {\n return this.logoCacheService.getLogo(\n `https://logo.clearbit.com/${url?.split('.')[1]}.${\n url?.split('.')[2]?.split('/')[0]\n }`\n );\n }\n\n return '';\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Accounts</h2>\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.addAccount]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.AccountMessage.AddAccount' | transloco }} </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.accounts\" [paginator]=\"data.object_count !== 0\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\" [loading]=\"loading\" [filterDelay]=\"1000\" (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row m-0\">\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Industry\" [options]=\"searchOptions\" [(ngModel)]=\"filterByIndustries\"\n (onChange)=\"onSearchOptionChange($event, 'industry')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Size\" [options]=\"organizationSizes\" [(ngModel)]=\"filterBySizeId\"\n (onChange)=\"onSearchOptionChange($event, 'size')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Status\" [options]=\"status\" [(ngModel)]=\"filterByStatus\"\n (onChange)=\"onSearchOptionChange($event, 'status')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Priority\" [options]=\"priority\" [(ngModel)]=\"filterByPriority\"\n (onChange)=\"onSearchOptionChange($event, 'priority')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4\">\n <p-multiSelect placeholder=\"Select Source\" [options]=\"source\" [(ngModel)]=\"filterBySource\"\n (onChange)=\"onSearchOptionChange($event, 'source')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-4 mb-2\">\n <input ngx-gp-autocomplete class=\"form-control location\" #places=\"ngx-places\" [(ngModel)]=\"searchLocationText\"\n placeholder=\"Search location...\" (keyup)=\"locationSearch($event)\"\n (onAddressChange)=\"handleAddressChange($event)\" />\n </div>\n </div>\n <div class=\"search-filter\">\n <a class=\"mt-3 ms-3 text-start text-primary\" (click)=\"clearFilters()\">Clear all filters</a>\n <div class=\"text-end mt-0 mt-sm-3\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search accounts...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"name\"> {{ 'Crm.AccountMessage.Name' | transloco }} <p-sortIcon field=\"name\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"location\"> {{ 'Crm.AccountMessage.Location' | transloco }} <p-sortIcon\n field=\"location\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"owner_id\"> {{ 'Crm.AccountMessage.Owner' | transloco }} <p-sortIcon\n field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"organization_size_id\"> {{ 'Crm.AccountMessage.Size' | transloco }} <p-sortIcon\n field=\"organization_size_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"expected_mrr\"> {{ 'Crm.AccountMessage.MRR' | transloco }} <p-sortIcon field=\"expected_mrr\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"signed_up_at\"> {{ 'Crm.AccountMessage.SignUp' | transloco }} <p-sortIcon field=\"signed_up_at\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"sessions_last_quarter\"> {{ 'Crm.AccountMessage.Quarter' | transloco }} <p-sortIcon field=\"sessions_last_quarter\">\n </p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"sessions_last_month\"> {{ 'Crm.AccountMessage.Month' | transloco }} <p-sortIcon field=\"sessions_last_month\">\n </p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-account>\n <tr>\n <td data-head=\"Name\" class=\"name-column\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.accountInfo, account.id]\" class=\"name-link\">\n <img alt=\"company image\" [src]=\"getAccountLogo(account.company_url)\" class=\"img-fluid company-logo me-2\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n <span class=\"account-name\">{{ account.name }}</span>\n <i [ngClass]=\"getUserAccountInfo(account).iconClass\" [ngbTooltip]=\"getUserAccountInfo(account).message\"\n class=\"info-icon\"></i>\n </a>\n </td>\n <td data-head=\"Location\">{{ account.location }}</td>\n <td data-head=\"Owner\">\n <a [routerLink]=\"['/members', account?.owner?.slug]\"> {{ account.owner | ifNameNullShowEmail }}</a>\n </td>\n <td data-head=\"Size\">{{ account?.organisation_size?.name !== 'Not available' ? account?.organisation_size?.name : '' }}\n</td>\n <td data-head=\"MRR\">{{ account?.expected_mrr !== null && account?.expected_mrr !== 0 ? formatMRR(account?.expected_mrr) : '' }}\n</td>\n <td data-head=\"Signed Up\">{{ account.signed_up_at | date: 'dd/MMM/yyyy' }}</td>\n <td data-head=\"Quarter\">{{ account.sessions_last_quarter }}</td>\n <td data-head=\"Month\">{{ account.sessions_last_month }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"See contacts\" class=\"me-2 me-sm-3 see-icon\"\n [routerLink]=\"['/' + subscription?.slug + routers.contacts, account.id]\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </li>\n <ng-container *ngIf=\"hasAccess || account.owner_id === userId\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.accounts,\n account.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(account.id, subscription.id)\"\n aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n<div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoAccounMessage' | transloco\"> </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\" *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"accountInsight\" [paginator]=\"accountInsight?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Value' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Reason' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Title\">{{ insight.title }}</td>\n <td data-head=\"Value\">{{ insight.value }}</td>\n <td data-head=\"Reason\">{{ insight.reason }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"accountInsight?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ accountInsight.length }}</span>\n </div>\n <div *ngIf=\"accountInsight?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"accountGeography\">\n <plotly-plot [data]=\"accountGeography?.data\" [layout]=\"accountGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!accountGeography\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Last Activities -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Last Activities</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountActivities?.length\">\n <p-table class=\"table\" #dt [value]=\"accountActivities\" [paginator]=\"accountInsight?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountActivities.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Contact' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Action' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Comment' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-activities>\n <tr>\n <td data-head=\"Owner\"> {{ activities.owner?.first_name }} {{ activities.owner?.last_name }} </td>\n <td data-head=\"Account\">{{ activities.crm_account?.name }}</td>\n <td data-head=\"Contact\"> {{ activities.crm_contact?.first_name }} {{ activities.crm_contact?.last_name }}\n </td>\n <td data-head=\"Action\">{{ activities.crm_action?.name }}</td>\n <td data-head=\"Comment\">{{ activities.comment }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"accountInsight?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ accountActivities.length }}</span>\n </div>\n <div *ngIf=\"accountActivities?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Last Invoices -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Last Invoices</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"accountLastInvoices?.length\">\n <p-table class=\"table\" #dt [value]=\"accountLastInvoices\" [paginator]=\"accountLastInvoices?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"accountLastInvoices.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.Contact' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.AccountMessage.File' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-invoice>\n <tr>\n <td data-head=\"Owner\"> {{ invoice.owner?.first_name }} {{ invoice.owner?.last_name }} </td>\n <td data-head=\"Organization\"> {{ invoice.subscription?.organization }} </td>\n <td data-head=\"Contact\">{{ invoice.subscription?.contact_name }}</td>\n <td data-head=\"File\">\n <a target=\"blank\" href=\"{{ invoice.file }}\">{{ invoice.file.split('/')[invoice.file.split('/').length -\n 1] }}</a>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"accountLastInvoices?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ accountLastInvoices.length }}</span>\n </div>\n <div *ngIf=\"accountLastInvoices?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-competition',\n templateUrl: './smart-crm-competition.component.html'\n})\nexport class SmartCrmCompetitionComponent {}\n","<pw-coming-soon message=\"Competition\"></pw-coming-soon>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAction } from '../../../../../shared/interface/crm-action.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-settings-details',\n templateUrl: './smart-crm-actions-details.component.html',\n styleUrls: ['./smart-crm-actions-details.component.scss']\n})\nexport class SmartCrmSettingsDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n id: number;\n\n submitted = false;\n\n user: User;\n\n data: CrmAction;\n\n targetWeek = [];\n\n targetWeekMin = [];\n\n subscriptionId: number;\n\n actions$: Observable<any>;\n\n subscription: Subscription;\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n this.form = AppSmartCrm.getSettingsForm();\n }\n\n ngOnInit() {\n this.targetWeek = HelperService.getNumbersRange(100);\n this.targetWeekMin = HelperService.getNumbersRange(100);\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.form.get('subscription_id').setValue(this.subscription?.id);\n this.actions$ = this.crmService.getAllActions(this.subscription?.id);\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n });\n if (this.id) {\n this.getActionDetails();\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to get action details on edit form */\n private getActionDetails() {\n this.crmService.getAction(this.subscription?.id, this.id).subscribe({\n next: resp => {\n this.data = resp;\n this.form.patchValue(resp);\n },\n error: error => this.toast.showToast(error)\n });\n }\n\n /** Function to update existing action */\n onSave() {\n this.form.value['previous_action_id'] = this.form.value['previous_action_id']\n ? this.form.value['previous_action_id'].id\n : null;\n Number(this.form.get('target_week').value);\n Number(this.form.get('target_week_min').value);\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.updateActionCon(this.subscription?.id, this.form.value, this.id)\n : this.crmService.postNewAction(this.subscription?.id, this.form.value);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.Settings.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n onChange(event) {\n if (event === true) {\n this.form.get('visible').setValue(true);\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\" (click)=\"back()\" class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\"\n aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Action: {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-3\">\n <pw-input-container [label]=\"'Crm.Settings.Name' | transloco\" name=\"name\"\n [errorMsg]=\"'Crm.Settings.NameFieldErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"name\" id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Settings.TargetWeek' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.Settings.Tooltip.TargetWeek' | transloco }}</span>\n </label>\n <select formControlName=\"target_week\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['target_week'].errors }\">\n <option *ngFor=\"let option of targetWeek\" [value]=\"option\">{{ option }}</option>\n </select>\n <div class=\"danger\" *ngIf=\"\n form.get('target_week').touched && form.get('target_week')?.errors?.required\n \">\n <span> {{ 'Crm.Settings.TargetWeekErrorMessage' | transloco }} </span>\n </div>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Settings.TargetWeekMin' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.Settings.Tooltip.TargetWeekMin' | transloco }}</span>\n </label>\n <select formControlName=\"target_week_min\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['target_week_min'].errors }\">\n <option *ngFor=\"let option of targetWeekMin\" [value]=\"option\"> {{ option }} </option>\n </select>\n <div class=\"danger\" *ngIf=\"\n form.get('target_week_min').touched &&\n form.get('target_week_min')?.errors?.required\n \">\n <span> {{ 'Crm.Settings.TargetWeekMinErrorMessage' | transloco }} </span>\n </div>\n </div>\n <div class=\"col-12 col-sm-4 col-md-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Crm.Settings.Tooltip.PreviousAction' | transloco\"\n [label]=\"'Crm.Settings.PreviousAction' | transloco\" name=\"previous_action_id\"\n *ngIf=\"actions$ | async as actions\">\n <p-dropdown [options]=\"actions['crm_actions']\" formControlName=\"previous_action_id\" optionLabel=\"name\"\n [showClear]=\"true\" placeholder=\"Select a PreviousAction\"></p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-md-2 col-lg-2 pe-0 mx-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Settings.Visible' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.Settings.Tooltip.Visible' | transloco }}</span>\n </label>\n <ui-switch checked class=\"d-block\" (change)=\"onChange($event)\" name=\"visible\" formControlName=\"visible\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" (click)=\"back()\"> {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\"> {{ 'Button.Submit' | transloco }} </button>\n </div>\n </div>\n </form>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmActionResponse } from '../../../../shared/interface/crm-action.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\nimport { Table } from 'primeng/table';\n\n@Component({\n selector: 'pw-smart-crm-actions',\n templateUrl: './smart-crm-actions.component.html',\n styleUrls: ['./smart-crm-actions.component.scss']\n})\nexport class SmartCrmActionsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmActionResponse = {\n crm_actions: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n subscriptionId: number;\n\n searchText = '';\n\n loading = true;\n\n userId: number;\n\n hasAccess = false;\n\n isLoaded = false;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getActions({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n shouldShowTableContent(): boolean {\n return this.data.unfiltered_count !== 0;\n }\n\n /** Function to get and show all the actions */\n private getActions(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllActions(this.subscriptionId, paging)\n .subscribe(resp => {\n this.data = resp;\n })\n .add(() => {\n this.loading = false;\n this.isLoaded = true;\n });\n }\n });\n }\n\n buildDefaultActions() {\n this.crmService.buildDefaultActions(this.subscription?.id).subscribe(() => {\n this.getActions({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(this.translation.translate('Crm.CommonMessage.AddedMessage'));\n });\n }\n\n /** Function to delete existing setting */\n onDelete(id: number) {\n HelperService.raiseDeletePopup()\n .then(resp => {\n if (resp.value) {\n this.crmService.deleteAction(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.DeletedMessage')\n );\n this.getActions({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n })\n .catch(error => this.toast.showToast(error));\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>\n Please define the actions you want to associate with your contacts. For example you\n could choose Phone Call, or Meeting, or Email Sent, etc.\n </p>\n <a *ngIf=\"data.object_count === 0 && data.unfiltered_count === 0 && isLoaded\"\n class=\"btn btn-sm btn-outline-primary float-end build-default-action-button\"\n (click)=\"buildDefaultActions()\"\n data-cy=\"add-action\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Settings.BuildDefaultAction' | transloco }}\n </a>\n <a *ngIf=\"hasAccess\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n [routerLink]=\"['/' + subscription?.slug + routers.configurationDetails + 'add']\"\n data-cy=\"add-action\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Settings.AddAction' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_actions\"\n [paginator]=\"data.object_count!==0\"\n [lazy]=\"true\"\n [rows]=\"100\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search action...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\" >\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.Settings.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"target_week\">\n {{ 'Crm.Settings.TargetWeek' | transloco }}\n <p-sortIcon field=\"target_week\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"target_week_min\">\n {{ 'Crm.Settings.TargetWeekMin' | transloco }}\n <p-sortIcon field=\"target_week_min\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Settings.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n *ngIf=\"hasAccess\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-action>\n <tr>\n <td data-head=\"Name\">{{ action.name }}</td>\n <td data-head=\"TargetWeek\">{{ action.target_week }}</td>\n <td data-head=\"TargetWeekMin\">{{ action.target_week_min }}</td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: action?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!action?.visible }}</span>\n </td>\n <td data-head=\"Action\"\n *ngIf=\"hasAccess\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.configurationDetails,\n action.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(action.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count!==0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n <div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Settings.NoActionMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmSourceResponse } from '../../../../shared/interface/crm-source.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-source',\n templateUrl: './smart-crm-source.component.html',\n styleUrls: ['./smart-crm-source.component.scss']\n})\nexport class SmartCrmCompanySourceComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n hasAccess = false;\n\n isLoaded = false;\n\n data: CrmSourceResponse = {\n crm_sources: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n subscriptionId: number;\n\n page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllSource({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to all account source */\n private getAllSource(paging: Paging) {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getAllAccountSource(subscription?.id, paging)\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n buildAccountSource() {\n this.crmService.buildAccountSources(this.subscription?.id).subscribe(() => {\n this.getAllSource({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(this.translation.translate('Crm.CommonMessage.AddedMessage'));\n });\n }\n\n /** Function to delete account source */\n onDelete(id) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteSource(this.subscription?.id, id).subscribe(() => {\n this.getAllSource({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.AccountSourceMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>Please define the sources that you want to associate with your prospect accounts.</p>\n <a class=\"btn btn-sm btn-outline-primary float-end build-action-button\"\n *ngIf=\"data.object_count === 0 && data.unfiltered_count === 0 && isLoaded\"\n data-cy=\"build-contact\"\n (click)=\"buildAccountSource()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.AccountSourceMessage.BuildAccountSource' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.sourceDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.AccountSourceMessage.AddAccountSource' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_sources\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.AccountSourceMessage.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-source>\n <tr>\n <td data-head=\"Name\">{{ source.name }}</td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.sourceDetails,\n source.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(source.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.AccountSourceMessage.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmWidgetResponse } from '../../../../shared/interface/crm-widget.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-widgets',\n templateUrl: './smart-crm-widgets.component.html'\n})\nexport class SmartCrmWidgetsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n data: CrmWidgetResponse = {\n crm_widget_relationships: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n allWidgets: any[];\n\n positions = [];\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllSubscriptionWidgets({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n this.getWidgetPositions();\n }\n\n /** Function to get all widgets */\n private getAllSubscriptionWidgets(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (response) {\n this.crmService\n .getAllSubscriptionWidgets(this.subscriptionId, paging)\n .subscribe(res => {\n this.getAllWidgets();\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get all widgets */\n private getAllWidgets() {\n this.crmService.getAllWidgets(this.subscriptionId).subscribe(widgets => {\n this.allWidgets = widgets.crm_widgets || [];\n this.data.crm_widget_relationships?.forEach(subscriptionWidget => {\n this.allWidgets?.forEach(widget => {\n if (subscriptionWidget.crm_widget_id === widget.id) {\n subscriptionWidget['crm_widget'] = widget.name;\n }\n });\n });\n });\n }\n\n /** Function to delete widget */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService\n .deleteSubscriptionWidget(id, this.subscription?.id)\n .subscribe(() => {\n this.getAllSubscriptionWidgets({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.Widgets.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get positions */\n private getWidgetPositions() {\n this.crmService.getWidgetPositions(this.subscriptionId).subscribe(response => {\n this.positions = response;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <p>Please define the widgets you want to use.</p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.widgetsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.Widgets.AddWidgets' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_widget_relationships\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search source...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"crm_widget_id\">\n {{ 'Crm.Widgets.CrmWidget' | transloco }}\n <p-sortIcon field=\"crm_widget_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"position\">\n {{ 'Crm.Widgets.Position' | transloco }}\n <p-sortIcon field=\"position\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.Widgets.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-widget>\n <tr>\n <td data-head=\"Crm Widget\">{{ widget.crm_widget }}</td>\n <td data-head=\"Position\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: positions,\n item: widget?.position\n }\"\n color=\"default\">{{ widget.position }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: widget?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!widget?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.widgetsDetails,\n widget.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(widget.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\"*ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Widgets.NoDataMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmStageResponse } from '../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-stages',\n templateUrl: './smart-crm-stages.component.html',\n styleUrls: ['./smart-crm-stages.component.scss']\n})\nexport class SmartCrmStagesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n searchText = '';\n\n loading = true;\n\n data: CrmStageResponse = {\n crm_opportunity_stages: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n private page = 1;\n\n subscription: Subscription;\n\n stageNames = [];\n\n categories = [];\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getAllOpportunityCategories();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllStages({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get all stages */\n private getAllStages(paging: Paging) {\n this.getUserSubscriptionId().subscribe(res => {\n if (res) {\n this.subscriptionId = res;\n this.crmService\n .getAllStages(this.subscriptionId, paging)\n .subscribe(response => {\n this.data = response;\n this.sortByPreviousStageId();\n this.stageNames = response?.crm_opportunity_stages?.map(stage => {\n return stage.name;\n });\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n private sortByPreviousStageId() {\n // eslint-disable-next-line consistent-return\n this.data.crm_opportunity_stages.sort((a, b) => {\n if (a.previous_stage_id === null || b.previous_stage_id === a.id) {\n return -1;\n }\n if (b.previous_stage_id === null || a.previous_stage_id === b.id) {\n return 1;\n }\n\n return 0;\n });\n }\n\n buildDefaultStages() {\n this.crmService.buildDefaultStages(this.subscription?.id).subscribe(() => {\n this.getAllStages({\n page: this.page\n });\n this.toast.success(this.translation.translate('Crm.CommonMessage.AddedMessage'));\n });\n }\n\n /** Function to delete stage */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteStage(this.subscription?.id, id).subscribe(() => {\n this.getAllStages({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.StageMessages.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories?.map(category => {\n return category?.name;\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'Crm.StageMessages.StageTitle' | transloco }}</p>\n <a *ngIf=\"data.object_count === 0 && data.unfiltered_count === 0 && isLoaded\"\n class=\"btn btn-sm btn-outline-primary float-end build-default-stage-button\"\n (click)=\"buildDefaultStages()\"\n data-cy=\"add-contact\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.StageMessages.BuildDefaultStage' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.stageDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.StageMessages.AddStage' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_opportunity_stages\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search stages...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.StageMessages.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"previous_stage_id\">\n {{ 'Crm.StageMessages.PreviousStage' | transloco }}\n <p-sortIcon field=\"previous_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_opportunity_category_ids\">\n {{ 'Crm.StageMessages.OpportunityCategory' | transloco }}\n <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"visible\">\n {{ 'Crm.StageMessages.Visible' | transloco }}\n <p-sortIcon field=\"visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-stage>\n <tr>\n <td data-head=\"Name\">{{ stage?.name }}</td>\n <td data-head=\"Previous Stage\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: stageNames,\n item: stage?.crm_previous_stage?.name\n }\"\n color=\"warning\">{{ stage?.crm_previous_stage?.name }}</span>\n </td>\n <td data-head=\"Opportunity Category\">\n <span *ngFor=\"let category of stage?.crm_opportunity_categories\"\n class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\"\n color=\"blue-grey\">{{ category?.name }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: stage?.visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!stage?.visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.stageDetails,\n stage.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(stage.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.StageMessages.NoStageMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmOpportunityCategoryResponse } from '../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-opportunity-categories',\n templateUrl: './smart-crm-opportunity-categories.component.html',\n styleUrls: ['./smart-crm-opportunity-categories.component.scss']\n})\nexport class SmartCrmOpportunityCategoriesComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmOpportunityCategoryResponse = {\n crm_opportunity_categories: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n hasAccess = false;\n\n isLoaded = false;\n\n subscriptionId: number;\n\n user: User;\n\n private page = 1;\n\n subscription: Subscription;\n\n categoryNames = [];\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllOpportunityCategories({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.crmService\n .getAllOpportunityCategories(this.subscriptionId, paging)\n .subscribe(res => {\n this.data = res;\n this.categoryNames = res?.crm_opportunity_categories?.map(category => {\n return category?.name;\n });\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete categories */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService\n .deleteOpportunityCategory(this.subscription?.id, id)\n .subscribe(() => {\n this.getAllOpportunityCategories({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.CommonMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n buildCategories() {\n this.crmService.buildDefaultSettings(this.subscription?.id).subscribe(() => {\n this.getAllOpportunityCategories({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(this.translation.translate('Crm.CommonMessage.AddedMessage'));\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <p>{{ 'Crm.CategoriesMessages.CategoriesTitle' | transloco }}</p>\n <div class=\"col-12\" *ngIf=\"data.object_count === 0 && data.unfiltered_count === 0 && isLoaded\">\n <a class=\"btn btn-sm btn-outline-primary float-end build-category-button\"\n data-cy=\"add-category\"\n (click)=\"buildCategories()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.CategoriesMessages.BuildCategory' | transloco }}\n </a>\n </div>\n <div class=\"col-12\">\n <a class=\"btn btn-sm btn-outline-primary float-end mr-2\"\n data-cy=\"add-category\"\n [routerLink]=\"['/' + subscription?.slug + routers.categoryDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.CategoriesMessages.AddCategory' | transloco }}\n </a>\n </div>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_opportunity_categories\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search stages...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"name\">\n {{ 'Crm.CategoriesMessages.Name' | transloco }}\n <p-sortIcon field=\"name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"previous_category_id\">\n {{ 'Crm.CategoriesMessages.PreviousCategory' | transloco }}\n <p-sortIcon field=\"previous_category_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_visible\">\n {{ 'Crm.CategoriesMessages.Visible' | transloco }}\n <p-sortIcon field=\"is_visible\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-stage>\n <tr>\n <td data-head=\"Name\">{{ stage?.name }}</td>\n <td data-head=\"Previous Stage\">\n <span class=\"badge\"\n [appDynamicBadge]=\"{\n itemsArray: categoryNames,\n item: stage?.previous_category?.name\n }\"\n color=\"blue-grey\">{{ stage?.previous_category?.name }}</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: stage?.is_visible\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ stage?.is_visible }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess\">\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.categoryDetails,\n stage.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(stage.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CategoriesMessages.NoCategoriesMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-configuration',\n templateUrl: './smart-crm-configuration.component.html',\n styleUrls: ['./smart-crm-configuration.component.scss']\n})\nexport class SmartCrmConfigurationComponent extends AppBaseComponent implements OnInit {\n activeTab = 'actions';\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.activeTab = data['tabId'] || 'actions';\n });\n }\n\n onTabChange(event) {\n this.getUserSubscription().subscribe(subscription => {\n this.router.navigate([`${subscription.slug}${ROUTERS.configurations}${event.nextId}`]);\n });\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>CRM Configuration</h2>\n </div>\n</div>\n<ul ngbNav\n #nav=\"ngbNav\"\n [(activeId)]=\"activeTab\"\n (navChange)=\"onTabChange($event)\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"'actions'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Actions</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-actions></pw-smart-crm-actions>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'categories'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Categories</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-opportunity-categories></pw-smart-crm-opportunity-categories>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'stage'\"\n *rbacAllow=\"'SubscriptionAdmin'\">\n <a ngbNavLink>Stages</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-stages></pw-smart-crm-stages>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'source'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'Pages.Beta'\">\n <a ngbNavLink>Sources</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-source></pw-smart-crm-source>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'widget'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'SuperAdmin'\">\n <a ngbNavLink>Widgets</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-widgets></pw-smart-crm-widgets>\n </ng-template>\n </li>\n\n <li [ngbNavItem]=\"'admin'\"\n *rbacAllow=\"'SubscriptionAdmin' && 'SuperAdmin'\">\n <a ngbNavLink>Admin</a>\n <ng-template ngbNavContent>\n <pw-coming-soon message=\"Admin\"></pw-coming-soon>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmOpportunityCategory } from '../../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-opportunity-categories-details',\n templateUrl: './smart-crm-opportunity-categories-details.component.html'\n})\nexport class SmartCrmOpportunityCategoriesDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n data: CrmOpportunityCategory;\n\n subscriptionId: number;\n\n submitted: boolean;\n\n id: number;\n\n categories$: Observable<any>;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getOpportunityCategoriesForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.categories$ = this.crmService.getAllOpportunityCategories(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n if (this.id) {\n this.getOpportunityDetails(this.id);\n }\n });\n }\n\n /** Function to get opportunity Details */\n private getOpportunityDetails(id: number) {\n this.crmService\n .getOpportunityCategoryDetails(this.subscriptionId, id)\n .subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** on submit the form */\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.editOpportunityCategory(this.subscriptionId, this.id, this.form.value)\n : this.crmService.postOpportunityCategory(this.subscriptionId, this.form.value);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CommonMessage.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.CategoriesMessages.Category' | transloco }}:\n {{ data?.name || ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.CategoriesMessages.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'Crm.CategoriesMessages.NameRequired' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Crm.CategoriesMessages.Tooltip.PreviousCategory' | transloco\n \"\n [label]=\"'Crm.CategoriesMessages.PreviousCategory' | transloco\"\n name=\"previous_category_id\"\n [errorMsg]=\"'Crm.CategoriesMessages.PreviousCategoryRequired' | transloco\"\n *ngIf=\"categories$ | async as categories\">\n <select formControlName=\"previous_category_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['previous_category_id'].errors }\">\n <option value=\"\">select previous category</option>\n <option *ngFor=\"let option of categories['crm_opportunity_categories']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col col-md-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CategoriesMessages.Tooltip.Visible' | transloco\"\n [label]=\"'Crm.CategoriesMessages.Visible' | transloco\"\n name=\"is_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_visible\"\n name=\"is_visible\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col col-md-2\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [label]=\"'Crm.CategoriesMessages.Default' | transloco\"\n [tooltipText]=\"'Crm.CategoriesMessages.Tooltip.Default' | transloco\"\n name=\"is_default\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_default\"\n name=\"is_default\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmSource } from '../../../../../shared/interface/crm-source.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-source-details',\n templateUrl: './smart-crm-source-details.component.html'\n})\nexport class SmartCrmSourceDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n subscriptionId: number;\n\n submitted = false;\n\n sourceForm: UntypedFormGroup;\n\n data: CrmSource;\n\n sourceId: number;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.sourceForm = AppSmartCrm.getSourceForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.sourceForm.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.route.params.subscribe(data => {\n this.sourceId = Number(data['id']);\n if (this.sourceId) {\n this.getSourceDetails(this.sourceId);\n }\n });\n }\n\n /** Function to get source details */\n private getSourceDetails(id) {\n this.crmService.getAccountSourceDetails(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n this.sourceForm.patchValue(response);\n });\n }\n\n onSave() {\n this.submitted = true;\n if (this.sourceForm.valid) {\n const data = this.sourceForm.value;\n const sub$ = this.sourceId\n ? this.crmService.updateAccountSource(this.subscriptionId, this.sourceId, data)\n : this.crmService.saveAccountSource(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.AccountSourceMessage.UpdatedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.sourceForm.controls;\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountSourceMessage.AccountSource' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"sourceForm\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountSourceMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'name is required' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-3 col-lg-2 pe-0 cancel-button\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <label class=\"d-sm-block vertical-bottom mb-2\">{{\n 'Crm.AccountSourceMessage.IsDefault' | transloco\n }}</label>\n <ui-switch class=\"ms-3 ms-sm-0\"\n name=\"is_default\"\n formControlName=\"is_default\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmStage } from '../../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-stage-details',\n templateUrl: './smart-crm-stage-details.component.html',\n styleUrls: ['./smart-crm-stage-details.component.scss']\n})\nexport class SmartCrmStageDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmStage;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n submitted: boolean;\n\n id: number;\n\n stages$: Observable<any>;\n\n categories = [];\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getStageForm();\n }\n\n ngOnInit(): void {\n this.getUserSubscriptionId().subscribe(response => {\n if (response) {\n this.subscriptionId = response;\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n this.stages$ = this.crmService.getAllStages(this.subscriptionId);\n this.getAllOpportunityCategories();\n }\n });\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n if (this.id) {\n this.getStageDetails(this.id);\n }\n });\n }\n\n /** Function to get stage tDetails */\n private getStageDetails(id) {\n this.crmService.getStageDetails(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n onSave() {\n if (this.form.valid) {\n const data = this.form.value;\n this.submitted = true;\n const sub$ = this.id\n ? this.crmService.editStage(this.subscriptionId, this.id, data)\n : this.crmService.postStage(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.StageMessages.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscriptionId).subscribe(response => {\n const categories = response?.crm_opportunity_categories || [];\n categories.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.categories.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.StageMessages.Stage' | transloco }}:\n {{ data?.name || ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [label]=\"'Crm.StageMessages.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'Crm.StageMessages.NameRequired' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [label]=\"'Crm.StageMessages.ColorCode' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.ColorCode' | transloco\"\n name=\"color_code\">\n <input type=\"color\"\n class=\"form-control color-code-stage account-color-code\"\n formControlName=\"color_code\"\n [ngClass]=\"{ 'is-invalid': submitted && f['color_code'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.PreviousStage' | transloco\"\n [label]=\"'Crm.StageMessages.PreviousStage' | transloco\"\n name=\"previous_stage_id\"\n [errorMsg]=\"'Crm.StageMessages.PreviousStageRequired' | transloco\"\n *ngIf=\"stages$ | async as stages\">\n <select formControlName=\"previous_stage_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['previous_stage_id'].errors }\">\n <option value=\"\">select previous stage</option>\n <option *ngFor=\"let option of stages['crm_opportunity_stages']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-md-3\" *ngIf=\"categories.length > 0\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.StageMessages.Tooltip.OpportunityCategory' | transloco\"\n [label]=\"'Crm.StageMessages.OpportunityCategory' | transloco\"\n name=\"crm_opportunity_category_ids\"\n errorMsg=\"category is required\">\n <p-multiSelect [options]=\"categories\"\n formControlName=\"crm_opportunity_category_ids\"\n appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-2 col-md-1\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.StageMessages.Visible' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.StageMessages.Tooltip.Visible' | transloco\n }}</span></label><br />\n <ui-switch formControlName=\"visible\"\n name=\"visible\"></ui-switch>\n </div>\n </div>\n <div class=\"col-12 col-sm-2 col-md-1\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.StageMessages.Default' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.StageMessages.Tooltip.Default' | transloco\n }}</span></label><br />\n <ui-switch formControlName=\"is_default\"\n name=\"is_default\"> </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmWidget } from '../../../../../shared/interface/crm-widget.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\n\n@Component({\n selector: 'pw-smart-crm-widgets-details',\n templateUrl: './smart-crm-widgets-details.component.html',\n styleUrls: ['./smart-crm-widgets-details.component.scss']\n})\nexport class SmartCrmWidgetsDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmWidget;\n\n subscriptionId: number;\n\n hasAccess: boolean;\n\n user: User;\n\n submitted: boolean;\n\n positions$: Observable<any>;\n\n allWidgets$: Observable<any>;\n\n private widgetId: number;\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getWidgetForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.widgetId = Number(data['id']);\n if (this.widgetId) {\n this.getWidgetDetails(this.widgetId);\n }\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.allWidgets$ = this.crmService.getAllWidgets(this.subscriptionId);\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n }\n });\n this.getUserInfo();\n this.positions$ = this.crmService.getWidgetPositions(this.subscriptionId);\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.form.get('owner_id').setValue(user.id);\n }\n });\n }\n\n /** Function to get widgetDetails */\n private getWidgetDetails(id) {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n if (subscriptionId) {\n this.crmService\n .getSubscriptionWidgetDetails(id, subscriptionId)\n .subscribe(response => {\n this.data = response;\n this.form.patchValue(response);\n });\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function on submit the form */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n const data = this.form.value;\n const sub$ = this.widgetId\n ? this.crmService.updateSubscriptionWidget(this.subscriptionId, this.widgetId, data)\n : this.crmService.postSubscriptionWidget(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(this.translation.translate('Crm.Widgets.UpdatedMessage'));\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"col-12 d-flex ps-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <div class=\"me-auto col-xs-6\">\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.Widgets.Widget' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n </div>\n</div>\n<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3 widget-tooltip\">\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"allWidgets$ | async as widgets\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Widgets.CrmWidget' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Name' | transloco\n }} </span>\n </label>\n <pw-input-container\n name=\"crm_widget_id\"\n [errorMsg]=\"'Crm Widget is required' | transloco\">\n <select formControlName=\"crm_widget_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_widget_id'].errors }\">\n <option *ngFor=\"let option of widgets['crm_widgets']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.Widgets.Position' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Position' | transloco\n }} </span>\n </label>\n <pw-input-container\n name=\"position\"\n [errorMsg]=\"'Position is required' | transloco\"\n *ngIf=\"positions$ | async as positions\">\n <select formControlName=\"position\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['position'].errors }\">\n <option *ngFor=\"let option of positions\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-md-3 col-lg-2 pe-0 cancel-button\">\n <div class=\"mb-3\">\n <label class=\"d-sm-block vertical-bottom info-circle mb-2 visible-tooltip\">{{\n 'Crm.Widgets.Visible' | transloco\n }}<span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.Widgets.Tooltip.Visible'| transloco\n }} </span></label>\n <ui-switch class=\"ms-3 ms-sm-0\"\n name=\"visible\"\n formControlName=\"visible\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { CrmContact } from '../../../../shared/interface/crm-contact.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User } from '@posiwise/common-utilities';\nimport { CommonService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-contact-details',\n templateUrl: './smart-crm-contact-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SmartCrmContactDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmContact;\n\n id: number;\n\n user: User;\n\n submitted = false;\n\n departments$: Observable<any>;\n\n accounts: CrmAccount[];\n\n subscriptionId: number;\n\n accountId: number;\n\n filteredAccounts: any = [];\n\n potentials = [];\n\n labels = [];\n\n crmSources$: Observable<any>;\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n constructor(\n private commonService: CommonService,\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n this.form = AppSmartCrm.getContactsForm();\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n this.accountId = Number(data['accountId']);\n });\n this.departments$ = this.commonService.getOrganizationDepartments();\n this.form.get('crm_account_id').setValue(null);\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.crmSources$ = this.crmService.getAllAccountSource(this.subscriptionId);\n this.getDefaultValues(this.subscriptionId);\n if (this.subscriptionId) {\n this.getAccountsBySubscription();\n }\n });\n }\n\n /** Function to get the list of accounts by subscriptionId */\n private getAccountsBySubscription() {\n this.crmService.getAccountsBySubscription(this.subscriptionId).subscribe(res => {\n this.accounts = res.accounts;\n if (this.id) {\n this.getContactDetails(this.id);\n } else if (this.accountId) {\n const accountyData = this.accounts.find(x => x.id === this.accountId);\n this.form.get('crm_account_id').patchValue(accountyData);\n }\n });\n }\n\n /** Function to execute on form submission */\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n this.form.get('crm_account_id').setValue(this.form.get('crm_account_id').value.id);\n this.form.value.crm_account_id = Number(this.form.value.crm_account_id);\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n const sub$ = this.id\n ? this.crmService.updateContact(this.subscriptionId, this.id, data)\n : this.crmService.postNewContact(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.back();\n this.toast.success(this.translation.translate('Crm.ContactMessage.UpdatedMessage'));\n }).add(() => {\n this.submitted = true;\n });\n }\n\n /** Function to get the specific contact details on edit form */\n private getContactDetails(id) {\n this.crmService.getContactById(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n let dobObject: NgbDateStruct;\n if (response.dob) {\n dobObject = {\n year: Number(response.dob.substring(0, 4)),\n month: Number(response.dob.substring(5, 7)),\n day: Number(response.dob.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ dob: dobObject });\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.form.get('crm_account_id').patchValue(account);\n }\n });\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredAccounts = data;\n }\n\n getDefaultValues(id) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potentials = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.ContactMessage.Contact' | transloco }}:\n {{\n data?.first_name\n ? data?.first_name + ' ' + data.last_name\n : ('Label.AddNew' | transloco)\n }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\"\n name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"first_name\"\n id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\"\n name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"last_name\"\n id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\"\n name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"headline\"\n id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Email' | transloco\"\n name=\"email\"\n errorMsg=\"{{\n f['email']?.errors?.required ? 'Please enter email' : 'Please Enter valid email'\n }}\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"email\"\n id=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerified' | transloco\"\n class=\"nowrap\"\n name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\"\n name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\"\n name=\"linkedin_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"linkedin_url\"\n id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.ContactMessage.Account' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\"\n autocomplete=\"off\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Department' | transloco\"\n name=\"department_id\"\n *ngIf=\"departments$ | async as departments\">\n <select class=\"form-select\"\n formControlName=\"department_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['department_id'].errors }\">\n <option *ngFor=\"let option of departments['organization_departments']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label>{{ 'Crm.ContactMessage.Potential' | transloco }}</label>\n <select formControlName=\"potential\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <label>{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-sm-4 col-lg-4\"\n *ngIf=\"crmSources$ | async as source\">\n <label>{{ 'Crm.ContactMessage.Source' | transloco }}</label>\n <select formControlName=\"crm_source_id\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option value=\"\">select crm source</option>\n <option *ngFor=\"let option of source['crm_sources']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\"\n name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"dob\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbCalendar, NgbDateStruct, NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport swal from 'sweetalert2';\n\nimport { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY, Subscription } from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService, FormHelperService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-contact-info',\n templateUrl: './smart-crm-contact-info.component.html',\n styleUrls: ['./smart-crm-contact-info.component.scss']\n})\nexport class SmartCrmContactInfoComponent extends AppBaseComponent implements OnInit, OnDestroy {\n actionControls: UntypedFormGroup;\n\n aboutControls: UntypedFormGroup;\n\n contactId: number;\n\n data: any = [];\n\n isDisabled = false;\n\n actions: any = [];\n\n model: NgbDateStruct;\n\n date: { year: number; month: number };\n\n subscriptionId: number;\n\n isFormEdit = true;\n\n accounts = [];\n\n submitted = false;\n\n contactComments = [];\n\n userId: number;\n\n hasAccess = false;\n\n contactVersioning: any = [];\n\n updating = false;\n\n actionId: number;\n\n dangerColor: boolean;\n\n potentials = ['low', 'medium', 'high'];\n\n labels = [];\n\n buttonDisable: boolean;\n\n filteredAccounts: any = [];\n\n showFullComment = false;\n\n commentId: number;\n\n accountId: number;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n isLoaded = false;\n\n submitAction = false;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private calendar: NgbCalendar,\n private modalService: NgbModal,\n private authService: AuthService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getContactActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getContactsForm();\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.contactId = Number(data['id']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getDefaultValues(this.subscription?.id);\n this.getActions();\n this.getContactComments();\n }\n });\n this.actionControls.get('crm_contact_id').setValue(this.contactId);\n this.model = this.calendar.getToday();\n this.actionControls.get('when').setValue(this.model);\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n this.onDateSelected();\n this.getContactVersion();\n }\n\n getDefaultValues(id) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n /** Function to get contact versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.contactId, 'CrmContact')\n .subscribe(response => {\n this.contactVersioning = response.versions;\n });\n }\n\n showEditControls(event) {\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined);\n this.getContactComments();\n });\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n /**\n * Function to get the list of accounts by subscriptionId\n */\n private getAccountsBySubscription() {\n this.crmService\n .getAccountsBySubscription(this.subscription?.id, { page_size: this.PAGE_SIZE })\n .subscribe(res => {\n this.getUserInfo();\n this.accounts = res.accounts;\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n get actionFormControls() {\n return this.actionControls.controls;\n }\n\n updateContactInfo() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n this.aboutControls\n .get('crm_account_id')\n .setValue(this.aboutControls.get('crm_account_id').value.id);\n this.crmService\n .updateContactById(this.subscription?.id, this.contactId, this.aboutControls.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getUserInfo();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n private getContactComments() {\n this.crmService\n .getContactComments(this.contactId, this.subscription?.id)\n .subscribe(resp => {\n if (resp?.crm_account_actions?.length) {\n this.contactComments = resp.crm_account_actions;\n\n this.contactComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(moment(new Date()), 'days');\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.contactComments.sort((a, b) => {\n return <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime();\n });\n this.contactComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.contactComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.contactComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.contactComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n\n onSave() {\n this.submitAction = true;\n if (this.actionControls.invalid) {\n FormHelperService.validateAllFormFields(this.actionControls);\n } else {\n const data = this.actionControls.value;\n data.when = HelperService.dateFormat(data?.when);\n this.crmService\n .postAccountComment(this.subscription?.id, data)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getContactComments();\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n }\n\n onDateSelected() {\n this.actionControls.get('when').valueChanges.subscribe(() => {\n const selectedDate = this.document.getElementById('when')?.['value'];\n const todayDate = moment(new Date()).format('YYYY-MM-DD');\n if (todayDate < selectedDate) {\n this.isDisabled = true;\n this.actionControls.get('completed').disable({ onlySelf: true });\n this.actionControls.get('completed').setValue(false);\n } else {\n this.actionControls.get('completed').enable({ onlySelf: true });\n this.isDisabled = false;\n }\n });\n }\n\n /** Function to get and show all the actions */\n getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp && resp.crm_actions && resp.crm_actions.length > 0) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getAccountsBySubscription();\n }\n\n /** Function to get the contact details by Id */\n getUserInfo() {\n this.crmService\n .getContactById(this.subscription?.id, this.contactId)\n .subscribe(response => {\n this.data = response;\n this.aboutControls.patchValue(response);\n this.actionControls.get('crm_account_id').patchValue(response.crm_account_id);\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.aboutControls.get('crm_account_id').patchValue(account);\n this.accountId = response.crm_account_id;\n }\n });\n });\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id, action, completedOrUncompleted) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getContactComments();\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getContactComments();\n });\n }\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_accounts_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getContactComments();\n this.updating = false;\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredAccounts = data;\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_accounts_id: `${this.accountId}`,\n crm_contact_id: `${this.contactId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n navigateToOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { contact_id: this.contactId }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Contact Info\n </h2>\n </div>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data | ifNameNullShowEmail }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"isFormEdit = !isFormEdit\">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.FirstName' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.LastName' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{ 'Crm.ContactMessage.Account' | transloco }}\n </label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n [class.is-invalid]=\"\n (f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\n \"\n *ngIf=\"isFormEdit\"\n [class.disableFormControl]=\"!data?.crm_account_id\">{{ f['crm_account_id'].value?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n [inputStyleClass]=\"\n (f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\n ? 'invalid-field'\n : ''\n \"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n <span *ngIf=\"(f['crm_account_id'].touched || submitted) && f['crm_account_id'].errors\"\n class=\"text-danger\">account is required</span>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Email' | transloco }}</label>\n <a href=\"mailTo:{{ data.email }}\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data.email\">{{ data.email }}</a>\n <input type=\"text\"\n *ngIf=\"!isFormEdit || !data.email\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.LinkedInUrl' | transloco\n }}</label>\n <a [href]=\"data.linkedin_url\"\n target=\"blank\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data.linkedin_url\">{{ data.linkedin_url }}</a>\n <input *ngIf=\"!isFormEdit || !data.linkedin_url\"\n type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"linkedin_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['linkedin_url'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.Headline' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </div>\n <div class=\"mb-3\"\n *ngIf=\"data.tel\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Tel' | transloco }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"tel\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.ContactMessage.Potential' | transloco\n }}</label>\n <select formControlName=\"potential\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{ 'Crm.ContactMessage.Labels' | transloco }} </label>\n <p-multiSelect [options]=\"labels\"\n [class.disableFormControl]=\"isFormEdit\"\n formControlName=\"labels\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getUserInfo()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateContactInfo()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls['crm_action_id'].invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n value=\"Submit Note\" />\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [withImage]=\"true\" [message]=\"\n 'Crm.ContactMessage.NoActionsInContactInfoMessage' | transloco\n \">\n <span><a [routerLink]=\"[\n '/' +\n subscription?.slug +\n routers.configurations +\n 'actions'\n ]\">Take me to the actions configuration section.</a></span>\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!contactComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"contactComments.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of contactComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span></span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <!-- <a>{{item.comment}}</a> -->\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n [value]=\"item.when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{ item.owner.first_name + ' ' + item.owner.last_name }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of contactVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at | dateFormat: 'datetime' }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"contactVersioning?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NavigationEnd } from '@angular/router';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { PAGE_SIZE, Paging, Plotly, User, Subscription } from '@posiwise/common-utilities';\nimport { CrmContactResponse } from '../../../shared/interface/crm-contact.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-crm-contacts',\n templateUrl: './smart-crm-contacts.component.html',\n styleUrls: ['./smart-crm-contacts.component.scss']\n})\nexport class SmartCrmContactComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n data: CrmContactResponse = {\n contacts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n loading = true;\n\n contactId: number;\n\n accountData: any = [];\n\n accountId: number;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n userId: number;\n\n isLoaded = false;\n\n filterByPotentials: string;\n\n potential = [];\n\n labels = [];\n\n filterByStatus: string;\n\n user: User;\n\n contactInsight: any;\n\n contactGeography: Plotly.Figure;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n selectedLabels = [];\n selectedAccount = [];\n accountDropDown = [];\n crmAccountIds: string;\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.contactId = Number(data['accountId']);\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getDefaultValues(this.subscription?.id);\n this.getTableState();\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.getUserInfo();\n this.getAccountsDropdown();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n /**get accounts dropdown */\n public getAccountsDropdown() {\n this.crmService.getAllAccounts(this.subscription?.id).subscribe({\n next: res => {\n this.accountDropDown = res?.accounts.map(x => {\n return {\n id: x?.id,\n name: x?.name\n };\n });\n }\n });\n }\n /**select option from account dropdown */\n onSelectAccount() {\n this.crmAccountIds = this.selectedAccount.map(y => y.id).join();\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n private getTableState() {\n this.searchText =\n JSON.parse(this.localStorage.getItem('smart-crm-contacts'))?.filters?.global.value ||\n '';\n const data = JSON.parse(this.localStorage.getItem('crmContactsState'));\n this.filterByStatus = data?.label;\n this.filterByPotentials = data?.potential;\n this.selectedLabels = data?.label ? data?.label.split(',') : [];\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getData({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private getData(paging: Paging) {\n if (this.contactId > 0) {\n this.getAccountContacts(paging);\n this.getAccountDetail();\n } else {\n this.getAllContacts(paging);\n }\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getContactInsight();\n this.getContactGeography();\n }\n }\n });\n }\n\n /** Function to get all contacts */\n private getAllContacts(paging: Paging) {\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAllContacts(\n this.subscriptionId,\n this.filterByPotentials || '',\n paging,\n this.filterByStatus || '',\n this.crmAccountIds || ''\n )\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get the contacts related to accounts */\n private getAccountContacts(paging: Paging) {\n this.data.contacts = [];\n this.isLoaded = true;\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAccountContacts(\n this.contactId,\n this.subscriptionId,\n this.filterByPotentials || '',\n paging,\n this.filterByStatus || ''\n )\n .subscribe(response => {\n this.data = response;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to get the account name */\n private getAccountDetail() {\n this.crmService\n .getAccountDetail(this.subscription?.id, this.contactId)\n .subscribe(response => {\n this.accountData = response;\n this.accountId = response.id;\n });\n }\n\n /** Function to delete contact */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.ContactMessage.DeletedMessage')\n );\n this.data.contacts = [];\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to filter by potential */\n filterByPotential(event) {\n this.filterByPotentials = event.target.value;\n this.localStorage.setItem$(\n 'crmContactsState',\n JSON.stringify({ label: this.filterByStatus, potential: this.filterByPotentials })\n );\n if (this.contactId > 0) {\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.getAccountDetail();\n } else {\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n /** Function to call contact insight */\n private getContactInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'contacts_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.contactInsight = [];\n } else this.contactInsight = response;\n });\n }\n\n /** Function to call contact geography */\n getContactGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'contacts_geography')\n .subscribe(response => {\n this.contactGeography = response;\n });\n }\n\n navigateToOpportunities() {\n this.router.navigate([`/${this.subscription?.slug}${this.routers.opportunityAdd}`], {\n queryParams: { account_id: this.accountId }\n });\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potential = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n this.getTableState();\n });\n }\n\n onLabelChange(event) {\n this.filterByStatus = event.value.join();\n this.localStorage.setItem$(\n 'crmContactsState',\n JSON.stringify({ label: this.filterByStatus, potential: this.filterByPotentials })\n );\n if (this.contactId > 0) {\n this.getAccountContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.getAccountDetail();\n } else {\n this.getAllContacts({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n override ngOnDestroy() {\n const notifier = new Subject();\n this.router.events.pipe(takeUntil(notifier)).subscribe(event => {\n if (event instanceof NavigationEnd) {\n if (!event.urlAfterRedirects.includes('/contacts')) {\n this.localStorage.removeItem$('smart-crm-contacts');\n this.localStorage.removeItem$('crmContactsState');\n notifier.complete();\n }\n }\n });\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2 *ngIf=\"!accountData?.name\">Contacts</h2>\n <h3 *ngIf=\"accountData?.name\"\n class=\"mb-2\">\n {{ accountData.name }}\n <span [routerLink]=\"[routers.accounts, accountData.id]\"><i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i></span>\n </h3>\n <h4 *ngIf=\"accountData?.location\"\n class=\"mb-1\">Location: {{ accountData.location }}</h4>\n <h4 *ngIf=\"accountData?.tel\">Tel: {{ accountData.tel }}</h4>\n <h4 *ngIf=\"accountData?.company_url\">\n URL:\n <a href=\"{{ accountData.company_url }}\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {{ accountData.company_url }}\n </a>\n </h4>\n <a class=\"btn btn-sm btn-outline-primary float-end mb-3 ms-2\"\n data-cy=\"add-opportunities\"\n (click)=\"navigateToOpportunities()\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactAdd, accountId]\"\n *ngIf=\"accountData?.name\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactAdd, accountId]\"\n *ngIf=\"!accountData?.name\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary me-3 float-end\"\n data-cy=\"list-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.contacts]\"\n *ngIf=\"accountData?.name\">\n <i class=\"fa fa-plus-list\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.ShowAllContacts' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table class=\"table\"\n #dt\n [value]=\"data.contacts\"\n [paginator]=\"data.object_count !== 0\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n [lazy]=\"true\"\n [filterDelay]=\"1000\"\n stateStorage=\"local\"\n stateKey=\"smart-crm-contacts\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div class=\"col-sm-3 col-6 mb-2 mb-sm-0\">\n <select class=\"form-select\" (change)=\"filterByPotential($event)\">\n <option value=\"\">Select Priority</option>\n <option *ngFor=\"let option of potential\" [selected]=\"filterByPotentials === option\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect [(ngModel)]=\"selectedLabels\" placeholder=\"Select Label\" [options]=\"labels\" [filter]=\"false\"\n [showHeader]=\"true\" [showToggleAll]=\"true\" (onChange)=\"onLabelChange($event)\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <!-- multiple select account drop down -->\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect [(ngModel)]=\"selectedAccount\" placeholder=\"Select Account\" [options]=\"accountDropDown\" [filter]=\"false\"\n [showHeader]=\"true\" [showToggleAll]=\"true\" optionLabel=\"name\" (onChange)=\"onSelectAccount()\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-3 col-md-4 col-lg-3\">\n <div class=\"d-flex\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"form-control\" />\n </div>\n </div>\n\n </div>\n\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.ContactMessage.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"owner_id\">\n {{ 'Crm.ContactMessage.ContactOwner' | transloco }}\n <p-sortIcon field=\"owner_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_account_id\">\n {{ 'Crm.ContactMessage.AccountOwner' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"labels\">\n {{ 'Crm.ContactMessage.Labels' | transloco }}\n <p-sortIcon field=\"labels\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"potential\">\n {{ 'Crm.ContactMessage.Potential' | transloco }}\n <p-sortIcon field=\"potential\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-contact>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a ngbTooltip=\"{{contact.headline ? contact.headline : 'No headline for this contact'}}\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, contact.id]\">{{ (contact?.first_name || '') + ' ' + (contact?.last_name || '') | textTruncate: 20 }}\n </a>\n </td>\n <td data-head=\"OwnerName\">{{ contact.owner | ifNameNullShowEmail }}</td>\n <td data-head=\"Account Name\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n contact.crm_account.id\n ]\" ngbTooltip=\"{{contact?.crm_account.name}}\">{{ contact?.crm_account.name | textTruncate: 20 }}</a>\n </td>\n <td data-head=\"Labels\">\n <span class=\"badge bg-info m-1\"\n *ngFor=\"let item of contact.labels\">{{\n item\n }}</span>\n </td>\n <td data-head=\"Potential\">\n <span [appDynamicBadge]=\"{ itemsArray: potential, item: contact.potential }\"\n color=\"warning\"\n class=\"badge\">{{ contact.potential }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + '/crm/contacts/info',\n contact.id\n ]\">\n <i class=\"fa fa-eye see-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Add opportunity\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{ contact_id: contact.id }\">\n <i class=\"fa fa-plus-circle add-icon\" aria-hidden=\"true\"></i>\n </li>\n <!-- <ng-container *ngIf=\"contact\"> -->\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactDetails,\n contact.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n contact.owner_id === userId ||\n contact.crm_account.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(contact.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.ContactsAdminMessage' | transloco\"> </pw-no-data>\n</div>\n\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\"\n *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"contactInsight?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"contactInsight\"\n [paginator]=\"contactInsight?.length !== 0\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"contactInsight.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Value' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.ContactMessage.Reason' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-insight>\n <tr>\n <td data-head=\"Title\">\n {{ insight.title }}\n </td>\n <td data-head=\"Value\">\n {{ insight.value }}\n </td>\n <td data-head=\"Reason\">\n {{ insight.reason }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"contactInsight?.length !== 0\">Total: {{ contactInsight.length }}</span>\n </div>\n <div *ngIf=\"contactInsight?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"contactGeography\">\n <plotly-plot [data]=\"contactGeography?.data\"\n [layout]=\"contactGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!contactGeography\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.ContactMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-customer-success',\n templateUrl: './smart-crm-customer-success.component.html'\n})\nexport class SmartCrmCustomerSuccessComponent {}\n","<pw-coming-soon message=\"Customer Success\"></pw-coming-soon>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Plotly } from '@posiwise/common-utilities';\n\n@Component({\n selector: 'pw-smart-crm-overview',\n templateUrl: './smart-crm-overview.component.html'\n})\nexport class SmartCrmOverviewComponent extends AppBaseComponent implements OnInit, OnDestroy {\n graph: Plotly.Figure;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n userId: number;\n\n isLoaded = false;\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.userStore().subscribe(user => {\n if (user) {\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getChartData();\n }\n }\n });\n }\n\n /** Function to get the data for the graph */\n private getChartData() {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n this.subscriptionId = subscriptionId;\n if (this.subscriptionId) {\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.crmService\n .getChartData(this.subscriptionId)\n .subscribe(response => {\n this.graph = response;\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <div *ngIf=\"hasAccess\">\n <div class=\"row\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <!-- Activities -->\n <div class=\"col-12 col-lg-8 my-3 px-2\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <!-- Opportunities funnel -->\n <div class=\"col-12 col-lg-4 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <div class=\"col-12 col-lg-4 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n <!-- Opportunities timeline -->\n <div class=\"col-12 col-lg-8 my-3 px-2\"\n *rbacAllow=\"'Pages.Beta'\">\n <ng-template [ngIf]=\"graph\">\n <plotly-plot [data]=\"graph?.data\"\n [layout]=\"graph?.layout\"></plotly-plot>\n </ng-template>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hasAccess && isLoaded\"\n class=\"w-100\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Insight.NoDataMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-insight',\n templateUrl: './smart-crm-insight.component.html'\n})\nexport class SmartCrmInsightComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>Insight</h2>\n <p>\n You'll find below some insights for your CRM. <br />\n Please note that the graphs are refreshed every few hours.\n </p>\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Overview</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-overview></pw-smart-crm-overview>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Analysis</a>\n <ng-template ngbNavContent>\n <pw-coming-soon message=\"Analysis\"></pw-coming-soon>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { Observable } from 'rxjs';\n\nimport { CrmAccount } from '../../../../shared/interface/crm-account.interface';\nimport { CrmLead } from '../../../../shared/interface/crm-lead.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-leads-details',\n templateUrl: './smart-crm-leads-details.component.html'\n})\nexport class SmartCrmLeadsDetailsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n form: UntypedFormGroup;\n\n data: CrmLead;\n\n submitted = false;\n\n id: number;\n\n subscriptionId: number;\n\n accounts: CrmAccount[];\n\n filteredAccounts: any = [];\n\n source$: Observable<any>;\n\n potentials = [];\n\n labels = [];\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getLeadsForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getDefaultValues(this.subscriptionId);\n this.form.get('subscription_id').setValue(this.subscriptionId);\n this.getAccountsBySubscription();\n this.source$ = this.crmService.getAllAccountSource(this.subscriptionId);\n }\n });\n }\n\n /** Function to get the specific contact details on edit form */\n private getLeadDetails() {\n this.crmService.getContactById(this.subscriptionId, this.id).subscribe(response => {\n this.data = response;\n let dobObject: NgbDateStruct;\n if (response.dob) {\n dobObject = {\n year: Number(response.dob.substring(0, 4)),\n month: Number(response.dob.substring(5, 7)),\n day: Number(response.dob.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ dob: dobObject });\n this.accounts.forEach(account => {\n if (this.data.crm_account_id === account.id) {\n this.form.get('crm_account_id').patchValue(account);\n }\n });\n });\n }\n\n /** Function to execute on form submission */\n onSave() {\n this.submitted = true;\n if (this.form.valid) {\n const { form } = this;\n if (form.value.crm_account_id) {\n form.get('crm_account_id').setValue(form.get('crm_account_id').value.id);\n form.value.crm_account_id = Number(form.value.crm_account_id);\n }\n if (this.id) {\n this.onUpdateLead();\n } else {\n this.onPostLead();\n }\n }\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n /** Function to post the new lead */\n private onPostLead() {\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n data.is_manual = true;\n this.crmService\n .postCrmLead(this.subscriptionId, data)\n .subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CrmLeads.AddedMessage'));\n this.back();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to update the leads */\n private onUpdateLead() {\n const data = { ...this.form.value };\n data.dob = HelperService.dateFormat(this.form.get('dob').value);\n this.crmService.updateContact(this.subscriptionId, this.id, data).subscribe(() => {\n this.back();\n this.toast.success(this.translation.translate('Crm.CrmLeads.UpdatedMessage'));\n });\n }\n\n /** Function to get the list of accounts by subscriptionId */\n private getAccountsBySubscription() {\n this.crmService\n .getAccountsBySubscription(this.subscriptionId)\n .subscribe(res => {\n this.accounts = res.accounts;\n if (this.id) {\n this.getLeadDetails();\n }\n })\n .add(() => {\n this.submitted = false;\n });\n }\n\n /** search accounts */\n search(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n\n this.filteredAccounts = data;\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n this.potentials = res['potential'];\n const label = res['labels'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\" (click)=\"back()\" class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\"\n aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.LeadCrmLeads.' | transloco }}: {{ data?.first_name || data?.last_name ? data?.first_name ||\n data?.last_name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\" (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.FirstName' | transloco\" name=\"first_name\"\n [errorMsg]=\"'Crm.ContactMessage.FirstNameErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"first_name\" id=\"first_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['first_name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LastName' | transloco\" name=\"last_name\"\n [errorMsg]=\"'Crm.ContactMessage.LastNameErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"last_name\" id=\"last_name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['last_name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Headline' | transloco\" name=\"headline\"\n [errorMsg]=\"'Crm.ContactMessage.HeadlineErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"headline\" id=\"headline\"\n [ngClass]=\"{ 'is-invalid': submitted && f['headline'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.Tel' | transloco\" name=\"tel\"\n [errorMsg]=\"'Crm.ContactMessage.TelErrorMessage' | transloco\">\n <input type=\"text\" class=\"form-control\" formControlName=\"tel\" id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <label>{{ 'Crm.ContactMessage.Email' | transloco }} <span class=\"text-danger\">*</span>\n <span *ngIf=\"data && data.email_verified\" class=\"text-success fw-bold\">Verified</span>\n </label>\n <input type=\"text\" class=\"form-control\" formControlName=\"email\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email'].errors }\" />\n <pw-field-error-display [displayError]=\"(submitted || f['email'].touched) && f['email'].errors\" [errorMsg]=\"\n f['email']?.errors?.required\n ? 'Please enter email'\n : 'Please Enter valid email'\n \">\n </pw-field-error-display>\n </div>\n </div>\n <div class=\"col-12 col-sm-4\">\n <div class=\"mb-3\">\n <!-- <pw-input-container [label]=\"'Crm.ContactMessage.EmailVerfied' | transloco\" class=\"nowrap\"\n <pw-input-containername=\"email_verified\"> -->\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.EmailVerified' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{'Crm.ContactMessage.Tooltip.EmailVerified'| transloco\n }} </span>\n </label>\n <pw-input-container class=\"nowrap\" name=\"email_verified\">\n <ui-switch formControlName=\"email_verified\" name=\"email_verified\"\n [ngClass]=\"{ 'is-invalid': submitted && f['email_verified'].errors }\">\n </ui-switch>\n </pw-input-container>\n <!-- </pw-input-container> -->\n </div>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.LinkedInUrl' | transloco\" name=\"linkedin_url\">\n <input type=\"text\" class=\"form-control\" formControlName=\"linkedin_url\" id=\"linkedin_url\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Account' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\">After assigning a company the contact will be visible in the\n Contacts tabs</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\" formControlName=\"crm_account_id\" dataKey=\"id\"\n autocomplete=\"off\" field=\"name\" [dropdown]=\"true\" (completeMethod)=\"search($event)\" styleClass=\"w-100\"\n [inputStyle]=\"\n submitted && f['crm_account_id'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \" placeholder=\"Search accounts\" [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.CrmLeads.Source' | transloco }} <span class=\"text-danger\">*</span><span\n class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.CrmLeads.Tooltip.Source' | transloco }}</span>\n </label>\n <pw-input-container name=\"crm_source_id\" errorMsg=\"source is required\" *ngIf=\"source$ | async as source\">\n <select class=\"form-select\" formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source['crm_sources']\" [value]=\"option.id\"> {{ option.name }} </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.ContactMessage.DateOfBirth' | transloco\" name=\"dob\">\n <div class=\"input-group\">\n <input class=\"form-control\" placeholder=\"yyyy-mm-dd\" formControlName=\"dob\" ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\" (click)=\"d.toggle()\" type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Potential' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{ 'Crm.ContactMessage.Tooltip.Potential' | transloco\n }}</span>\n </label>\n <select formControlName=\"potential\" class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['potential'].errors }\">\n <option *ngFor=\"let option of potentials\" [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-4\">\n <label class=\"info-circle mb-2\">{{ 'Crm.ContactMessage.Labels' | transloco }} <span\n class=\"tooltiptext gradient-custom-branding\"> {{ 'Crm.ContactMessage.Tooltip.Labels' | transloco }}\n </span>\n </label>\n <p-multiSelect [options]=\"labels\" formControlName=\"labels\" appendTo=\"body\"></p-multiSelect>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" (click)=\"back()\"> {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\"> {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { CrmLeadResponse } from '../../../shared/interface/crm-lead.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-leads',\n templateUrl: './smart-crm-leads.component.html'\n})\nexport class SmartCrmLeadsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n hasAccess: boolean;\n\n data: CrmLeadResponse = {\n crm_leads: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n searchText = '';\n\n isLoaded = false;\n\n loading = true;\n\n userId: number;\n\n page = 1;\n\n subscription: Subscription;\n\n allSource = [];\n\n routers = ROUTERS;\n\n filterBySource: string;\n\n crmSources = [];\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n this.getAllSource(this.subscription?.id);\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.userId = user?.id;\n }\n });\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n private getAllCrmLeads(paging: Paging) {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n this.crmService\n .getCrmLeads(this.subscription?.id, this.filterBySource || '', paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete Lead */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteContact(this.subscription?.id, id).subscribe(() => {\n this.toast.success(this.translation.translate('Crm.CrmLeads.DeletedMessage'));\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE\n });\n });\n }\n });\n }\n\n /** Function to all account source */\n private getAllSource(id: number) {\n this.crmService.getAllAccountSource(id).subscribe(response => {\n if (response?.crm_sources?.length) {\n this.crmSources = response?.crm_sources.map(val => {\n return {\n label: val.name,\n value: val.id\n };\n });\n this.allSource = response?.crm_sources?.map(source => {\n return source?.name;\n });\n }\n });\n }\n\n onSourceChange(event) {\n this.filterBySource = event.value.join();\n this.getAllCrmLeads({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <h2>Leads</h2>\n <p>\n In this section you'll find a list of prospects we found for you - based on your domain\n of activity - and we think you should reach out to.\n </p>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-leads\"\n [routerLink]=\"['/' + subscription?.slug + routers.leadsDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.CrmLeads.AddLead' | transloco }}\n </a>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"primeng-datatable-container table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_leads\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"d-flex\">\n <div class=\"col-sm-3\">\n <p-multiSelect placeholder=\"Select Source\"\n [options]=\"crmSources\"\n [filter]=\"false\"\n (onChange)=\"onSourceChange($event)\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end ms-auto\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search leads...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.ContactMessage.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Crm.CrmLeads.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Crm.CrmLeads.EmailVerified' | transloco }}\n </th>\n <th scope=\"true\"\n pSortableColumn=\"created_at\">\n {{ 'Crm.CrmLeads.CreatedAt' | transloco }}\n <p-sortIcon field=\"created_at\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"crm_source_id\">\n {{ 'Crm.CrmLeads.Source' | transloco }}\n <p-sortIcon field=\"crm_source_id\"></p-sortIcon>\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-lead>\n <tr>\n <td data-head=\"Name\"\n class=\"contactname\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, lead?.id]\">\n {{\n lead?.first_name === null || lead.last_name === null\n ? 'N/A'\n : (lead?.first_name + ' ' + lead.last_name | textTruncate: 20)\n }}\n </a>\n </td>\n <td data-head=\"Email\">\n <a href=\"mailto:{{ lead?.email }}\">{{ lead?.email }}</a>\n <span *ngIf=\"lead?.enquiry\"\n class=\"ms-2\"\n [pTooltip]=\"lead?.enquiry\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </td>\n <td data-head=\"Email Verified\">\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: lead?.email_verified\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ lead?.email_verified ? 'true' : 'false' }}</span>\n <span class=\"ms-2 cursor-pointer\"\n [pTooltip]=\"'Crm.CrmLeads.Tooltip.NewsLetterUnsubscribed' | transloco\"\n tooltipPosition=\"top\"\n *ngIf=\"!lead?.newsletter_subscribed\"><i class=\"fas fa-exclamation-triangle text-danger\"></i></span>\n </td>\n <td data-head=\"Created At\">\n {{ lead?.created_at | dateFormat }}\n </td>\n <td>\n <span class=\"badge\"\n [appDynamicBadge]=\"{ itemsArray: allSource, item: lead?.crm_source?.name }\"\n color=\"default\">{{ lead?.crm_source?.name }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Show\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n lead?.id\n ]\">\n <i class=\"fa fa-eye see-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n lead?.owner_id === userId ||\n lead?.crm_account?.owner_id === userId\n \"\n ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.leadsDetails,\n lead?.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n <li *ngIf=\"\n hasAccess ||\n lead?.owner_id === userId ||\n lead?.crm_account?.owner_id === userId\n \"\n ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(lead.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n<div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CrmLeads.NoCrmLeadMessage' | transloco\"> </pw-no-data>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE, Paging, Subscription } from '@posiwise/common-utilities';\nimport { NewsLetterContactResponse } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-marketing-users-list',\n templateUrl: './smart-crm-marketing-contacts.component.html'\n})\nexport class SmartCrmMarketingUsersListComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n searchText = '';\n\n data: NewsLetterContactResponse = {\n newsletter_contacts: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n isLoaded = false;\n\n loading = true;\n\n id: number;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getNewsletterInsight(this.id, {\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to call users list for newsletter */\n private getNewsletterInsight(id: number, paging: Paging) {\n this.crmService\n .getCrmNewsletterInsight(this.subscription?.id, id, paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <p>This is a summary of the contacts that received your marketing email.</p>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-3 table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.newsletter_contacts\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search contact...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"first_name\">\n {{ 'Crm.MarketingInsight.Name' | transloco }}\n <p-sortIcon field=\"first_name\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"email\">\n {{ 'Crm.MarketingInsight.Email' | transloco }}\n <p-sortIcon field=\"email\"></p-sortIcon>\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.SentAt' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.LastOpened' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.OpenCount' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.ClickedAt' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.MarketingInsight.ClickedCount' | transloco }}\n </th>\n <th scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-user>\n <tr>\n <td data-head=\"Name\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.contactInfo, user.id]\">{{\n user | ifNameNullShowEmail\n }}</a>\n </td>\n <td data-head=\"Email\">\n <a href=\"mailto:{{ user?.email }}\">{{ user?.email }}</a>\n </td>\n <td data-head=\"Sent At\">{{ user?.message_insight?.sent_at | dateFormat }}</td>\n <td data-head=\"Last Opened\">{{ user?.message_insight?.opened_at }}</td>\n <td data-head=\"Open Count\">{{ user?.message_insight?.open_count }}</td>\n <td data-head=\"Clicked At\">{{ user?.message_insight?.clicked_at }}</td>\n <td data-head=\"Clicked Count\">{{ user?.message_insight?.click_count }}</td>\n <td data-head=\"Actions\"></td>\n </tr>\n </ng-template>\n </p-table>\n<div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.MarketingInsight.NoUserListMessage' | transloco\"> </pw-no-data>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmNewsLetter } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { User, Product } from '@posiwise/common-utilities';\nimport { CommonService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\n\n@Component({\n selector: 'pw-smart-crm-communications-details',\n templateUrl: './smart-crm-marketing-details.component.html'\n})\nexport class SmartCrmCommunicationsDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n subscriptionId: number;\n\n hasAccess: boolean;\n\n form: UntypedFormGroup;\n\n user: User;\n\n data: CrmNewsLetter;\n\n submitted = false;\n\n crmProduct: Product;\n\n status = [];\n\n priority = [];\n\n source = [];\n\n organizationSizes = [];\n\n featureKeys = [];\n\n labels = [];\n\n contactSource = [];\n\n potentials = [\n { label: 'low', value: 'low' },\n { label: 'medium', value: 'medium' },\n { label: 'high', value: 'high' }\n ];\n\n allCommunications = [];\n\n id: number;\n\n daysToNewsletterField: boolean;\n\n userNameSyntax = '{{ @user.share_name }}';\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private commonService: CommonService\n ) {\n super(injector);\n this.form = AppSmartCrm.getMarketingForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n });\n\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n this.getDefaultValues(this.subscriptionId);\n\n if (this.subscriptionId) {\n this.getAllCrmProducts();\n this.accountDefaultValues(this.subscriptionId);\n this.hasAccess = this.hasAdminAccess(this.subscriptionId);\n this.form.get('subscription_id').setValue(response);\n this.getAllCrmNewsletters(this.subscriptionId);\n }\n });\n this.getUserInfo();\n }\n\n private getAllCrmNewsletters(id: number) {\n this.crmService.getAllCrmNewsletters(id).subscribe(res => {\n if (res.crm_newsletters?.length) {\n const data = res['crm_newsletters'];\n this.allCommunications = data.filter(x => x.id !== this.id);\n }\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.form.get('owner_id').setValue(user.id);\n this.user = user;\n }\n });\n }\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n @ValidateForm('form')\n onSave() {\n this.submitted = true;\n const data = { ...this.form.value };\n data.send_until = HelperService.dateFormat(this.form.get('send_until').value);\n data.send_at = HelperService.dateFormat(this.form.get('send_at').value);\n this.submitted = true;\n const sub$ = this.data?.id\n ? this.crmService.updateCrmNewsLetter(this.subscriptionId, this.data?.id, data)\n : this.crmService.saveCrmNewsletter(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.CommunicationsMessage.AddedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to get edit communication details */\n private getCommunicationDetails(id: number) {\n this.crmService.getCrmNewsletter(this.subscriptionId, id).subscribe(response => {\n this.data = response;\n let sendUntilObj: NgbDateStruct;\n if (response.send_until) {\n sendUntilObj = {\n year: Number(response.send_until.substring(0, 4)),\n month: Number(response.send_until.substring(5, 7)),\n day: Number(response.send_until.substring(8, 10))\n };\n }\n let sendAtlObj: NgbDateStruct;\n if (response.send_at) {\n sendAtlObj = {\n year: Number(response.send_at.substring(0, 4)),\n month: Number(response.send_at.substring(5, 7)),\n day: Number(response.send_at.substring(8, 10))\n };\n }\n this.form.patchValue(response);\n this.form.patchValue({ send_until: sendUntilObj });\n this.form.patchValue({ send_at: sendAtlObj });\n if (response.days_to_wait_from_previous_newsletter) {\n this.daysToNewsletterField = true;\n } else {\n this.daysToNewsletterField = false;\n }\n });\n }\n\n /** Function to execute on location select */\n handleAddressChange(event) {\n this.form.get('location').setValue(event.formatted_address);\n }\n\n /** Function for toggle */\n onChange(event: boolean, formControlName: string) {\n if (event === false) {\n this.form.get(formControlName).setValue(false);\n } else {\n this.form.get(formControlName).setValue(true);\n }\n }\n\n /** Function to call Crm products */\n private getAllCrmProducts() {\n this.crmService.getCrmProducts(this.subscriptionId).subscribe(response => {\n const data = response.available_crm_subscription_products;\n if (data?.length) {\n this.crmProduct = response.available_crm_subscription_products.map(item => {\n return {\n label: item.name,\n value: item.id\n };\n });\n const featureKeys = Array.from(new Set(data.map(item => item.feature_key)));\n this.featureKeys = featureKeys.map(item => {\n return {\n label: item,\n value: item\n };\n });\n }\n });\n }\n\n /** Function to call account Default Values */\n private accountDefaultValues(id: number) {\n this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {\n this.getAccountSize();\n const { status } = response;\n status.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.status.push(data);\n });\n const { priority } = response;\n priority.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.priority.push(data);\n });\n const { source } = response;\n source.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.source.push(data);\n });\n });\n }\n\n /** Function to call account size */\n private getAccountSize() {\n this.commonService.getOrganizationSizes().subscribe(res => {\n if (this.id) {\n this.getCommunicationDetails(this.id);\n }\n const organizationSizes = res.organization_sizes;\n organizationSizes.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.organizationSizes.push(data);\n });\n });\n }\n\n getDefaultValues(id: number) {\n this.crmService.getCrmContactDefaultValues(id).subscribe(res => {\n const label = res['labels'];\n const contactSource = res['source'];\n label.forEach(val => {\n const data = {\n label: val,\n value: val\n };\n this.labels.push(data);\n });\n contactSource.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.contactSource.push(data);\n });\n });\n }\n\n /** Function on select previous newsletter */\n onNewsletterSelect(event) {\n if (event.target.value) {\n const newsletterId = Number(event.target.value);\n if (newsletterId > 0) {\n this.daysToNewsletterField = true;\n }\n } else {\n this.daysToNewsletterField = false;\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ data?.id ? 'Edit' : 'Create new' }} marketing email</span>\n </h3>\n </div>\n</div>\n<ng-container>\n <div class=\"container-fluid pw-tab\">\n <div class=\"p-2 mt-3\">\n <p class=\"my-3\">\n You can insert the user name by adding the following syntax in the body or title:\n {{ userNameSyntax }}\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-12\">\n <pw-input-container [label]=\"'Crm.CommunicationsMessage.Title' | transloco\"\n name=\"title\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CommunicationsMessage.Tooltip.Title' | transloco\"\n errorMsg=\"Please enter subject\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-12\">\n <pw-input-container [label]=\"'Crm.CommunicationsMessage.Body' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.CommunicationsMessage.Tooltip.Body' | transloco\"\n name=\"body\"\n errorMsg=\"Please enter body\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"body\"\n [ngClass]=\"{ 'is-invalid': submitted && f['body'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.SendAt' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.SendAt' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"send_at\"\n ngbDatepicker\n #c=\"ngbDatepicker\"\n [ngClass]=\"{ 'is-invalid': submitted && f['send_at'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.SendUntil' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.SendUntil' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"send_until\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [ngClass]=\"{ 'is-invalid': submitted && f['send_until'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-md-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.PreviousNewsletter' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.PreviousNewsletter' | transloco\n }}</span></label>\n <select class=\"form-select\"\n formControlName=\"previous_newsletter_id\"\n (change)=\"onNewsletterSelect($event)\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['previous_newsletter_id'].errors\n }\">\n <option value=\"\">select previous newsletter</option>\n <option *ngFor=\"let option of allCommunications\"\n [value]=\"option.id\">\n {{ option.title }}\n </option>\n </select>\n </div>\n\n <div class=\"col-12 col-sm-2\"\n *ngIf=\"daysToNewsletterField\">\n <pw-input-container [label]=\"\n 'Crm.CommunicationsMessage.DaysToWaitFromPreviousNewsletter'\n | transloco\n \"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Crm.CommunicationsMessage.Tooltip.DaysToWaitFromPreviousNewsletter'\n | transloco\n \"\n name=\"days_to_wait_from_previous_newsletter\"\n errorMsg=\"Please enter days to wait from previous newsletter\">\n <input type=\"number\"\n class=\"form-control\"\n formControlName=\"days_to_wait_from_previous_newsletter\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && f['days_to_wait_from_previous_newsletter'].errors\n }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-1\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ShouldDeliver' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.IsPushed' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"is_pushed\"\n (change)=\"onChange($event, 'is_pushed')\"\n name=\"is_pushed\">\n </ui-switch>\n </div>\n </div>\n\n <div class=\"col-12 col-md-2\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.CanReply' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.CanReply' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"can_reply\"\n name=\"can_reply\">\n </ui-switch>\n </div>\n </div>\n </div>\n\n <h3>Decide who will receive the email</h3>\n\n <div class=\"row mb-3\">\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Location' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Location' | transloco\n }}</span></label>\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </div>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Products' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Products' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"crmProduct\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"product_ids\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.Features' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.Features' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"featureKeys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactPotential' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactPotential' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"potentials\"\n formControlName=\"contact_potential\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactLabel' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactLabel' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"labels\"\n formControlName=\"contact_label\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.ContactSource' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.ContactSource' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"contactSource\"\n formControlName=\"contact_source\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountPriority' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountPriority' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"priority\"\n formControlName=\"account_priority\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountStatus' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountStatus' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"status\"\n formControlName=\"account_status\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountSource' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountSource' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"source\"\n formControlName=\"account_source\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.CommunicationsMessage.AccountSize' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.AccountSize' | transloco\n }}</span></label>\n <p-multiSelect [options]=\"organizationSizes\"\n formControlName=\"account_size\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <!-- Only new contacts -->\n <div class=\"col-md-3\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.CommunicationsMessage.OnlyNewContacts' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.CommunicationsMessage.Tooltip.OnlyNewContacts' | transloco\n }}</span>\n </label>\n <ui-switch class=\"d-block\"\n formControlName=\"only_new_contacts\"\n name=\"only_new_contacts\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['only_new_contacts'].errors\n }\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"!form.valid\"\n >\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n</ng-container>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\nimport swal from 'sweetalert2';\n\nimport { PAGE_SIZE } from '@posiwise/common-utilities';\nimport {\n CrmNewsLetter,\n CrmNewsLetterResponse\n} from '../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging } from '@posiwise/common-utilities';\nimport { Plotly } from '@posiwise/common-utilities';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-communications',\n templateUrl: './smart-crm-marketing-list.component.html',\n styleUrls: ['./smart-crm-marketing-list.component.scss']\n})\nexport class SmartCrmCommunicationsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscriptionId: number;\n\n searchText = '';\n\n data: CrmNewsLetterResponse = {\n crm_newsletters: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n isLoaded = false;\n\n loading = true;\n\n user: User;\n\n communicationsInsight: any;\n\n communicationEngagement: Plotly.Figure;\n\n private page = 1;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private cdr: ChangeDetectorRef\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllCommunications({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getCommunicationInsight();\n this.getCommunicationEngagement();\n }\n }\n });\n }\n\n /** Function to call all communications */\n private getAllCommunications(paging: Paging) {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.crmService\n .getAllCrmNewsletters(this.subscriptionId, paging)\n .subscribe(res => {\n this.data = res;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n /** Function to delete communication */\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(res => {\n if (res.value) {\n this.crmService.deleteCrmNewsletter(this.subscription?.id, id).subscribe(() => {\n this.getAllCommunications({\n page: this.page,\n page_size: PAGE_SIZE\n });\n this.toast.success(\n this.translation.translate('Crm.CommunicationsMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to send mail */\n sendTestEmail(item: CrmNewsLetter) {\n swal.fire({\n title: 'Send Email',\n text: `A test email will be sent to \"${this.user.email}\". Do you want to continue?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n }).then(sendOk => {\n if (sendOk.value === true) {\n this.crmService.sendTestMail(this.subscription?.id, item.id).subscribe({\n next: response => {\n if (response) {\n this.toast.success(\n this.translation.translate('Newsletter test email sent correctly')\n );\n }\n }\n });\n }\n });\n }\n\n /** Function to call communication insight */\n private getCommunicationInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'communications_insights')\n .subscribe(response => {\n this.communicationsInsight = response;\n });\n }\n\n /** Function to call communication engagement */\n private getCommunicationEngagement() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'communications_engagement')\n .subscribe(response => {\n this.communicationEngagement = response;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12\">\n <h2>Email Marketing</h2>\n <p>In this section you can create and manage your email marketing strategy.</p>\n </div>\n <div class=\"col-12 col-md-12 text-end\">\n <button class=\"btn btn-sm btn-outline-primary\"\n [routerLink]=\"['/' + subscription?.slug + routers.marketingDetails + 'add']\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Add New Email' }}\n </button>\n </div>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"primeng-datatable-container mt-3 table-responsive\"\n [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt\n [value]=\"data.crm_newsletters\"\n [paginator]=\"data.object_count !== 0\"\n [lazy]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"data.object_count\"\n [loading]=\"loading\"\n filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search communication emails...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\"\n pSortableColumn=\"title\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n <p-sortIcon field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"body\">\n {{ 'Crm.CommunicationsMessage.Body' | transloco }}\n <p-sortIcon field=\"body\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"location\">\n {{ 'Crm.CommunicationsMessage.Location' | transloco }}\n <p-sortIcon field=\"location'\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"send_until\">\n {{ 'Crm.CommunicationsMessage.SendUntil' | transloco }}\n <p-sortIcon field=\"send_until\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_pushed\">\n {{ 'Crm.CommunicationsMessage.Pushed' | transloco }}\n <p-sortIcon field=\"is_pushed\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n pSortableColumn=\"is_sent\">\n {{ 'Crm.CommunicationsMessage.Sent' | transloco }}\n <p-sortIcon field=\"is_sent\"></p-sortIcon>\n </th>\n <th scope=\"true\"\n class=\"actions-column\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr class=\"table-row\">\n <td data-head=\"Title\">\n <a [routerLink]=\"['/' + subscription?.slug + routers.marketing, item.id]\">{{\n item.title\n }}</a>\n </td>\n <td data-head=\"Body\"\n [innerHtml]=\"item.body | removeHtml | textTruncate: 200\"></td>\n <td data-head=\"Location\">{{ item.location }}</td>\n <td data-head=\"Send Until\">{{ item.send_until | dateFormat }}</td>\n <td data-head=\"Pushed?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_pushed }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_pushed }}</span>\n </td>\n <td data-head=\"Sent?\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_sent }\"\n color=\"success-danger\"\n class=\"badge\">{{ !!item?.is_sent }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Send test email\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-comment-alt cta1-icon\"\n (click)=\"sendTestEmail(item)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Edit\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-edit edit-icon\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketingDetails,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(item.id)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Newsletter recipients\"\n class=\"me-2 me-sm-3\">\n <i\n class=\"fa fa-fw fa-list\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.marketing,\n item.id\n ]\"\n aria-hidden=\"true\"\n ></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n<div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n</div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoCommunicationMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\"\n *ngIf=\"isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"communicationsInsight?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"communicationsInsight\"\n [paginator]=\"communicationsInsight.length !== 0\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"communicationsInsight.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Title' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Value' | transloco }}\n </th>\n <th scope=\"true\">\n {{ 'Crm.CommunicationsMessage.Reason' | transloco }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-insight>\n <tr>\n <td data-head=\"Title\">{{ insight.title }}</td>\n <td data-head=\"Value\">{{ insight.value }}</td>\n <td data-head=\"Reason\">{{ insight.reason }}</td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"communicationsInsight.length !== 0\">{{ 'Label.Total' | transloco }}: {{ communicationsInsight.length }}</span>\n </div>\n <div *ngIf=\"!communicationsInsight?.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Engagement</h5>\n <div>\n <ng-template [ngIf]=\"communicationEngagement\">\n <plotly-plot [data]=\"communicationEngagement?.data\"\n [layout]=\"communicationEngagement?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!communicationEngagement\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.CommunicationsMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmNewsLetter } from '../../../../../shared/interface/crm-newsletter.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-communication-view-details',\n templateUrl: './smart-crm-marketing-view-details.component.html',\n styleUrls: ['./smart-crm-marketing-view-details.component.scss']\n})\nexport class SmartCrmCommunicationViewDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n id: number;\n\n isLoaded = false;\n\n communicationDetails: CrmNewsLetter;\n subscriptionId: number;\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.id = Number(data['Id']);\n if (this.id) {\n this.getSubscription();\n }\n });\n }\n /**subscriptionId */\n getSubscription() {\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getCommunicationDetails(this.id);\n }\n });\n }\n\n /** Function to get edit communication details */\n private getCommunicationDetails(id: number) {\n this.crmService\n .getCrmNewsletter(this.subscriptionId, id)\n .subscribe(response => {\n this.communicationDetails = response;\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <p>This is a summary of your marketing email.</p>\n</div>\n\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n\n<div class=\"container-fluid pw-tab overflow-hidden\"\n *ngIf=\"communicationDetails\">\n <div class=\"card pb-0\">\n <div class=\"card-body p-4\">\n <div class=\"row\"\n *ngIf=\"communicationDetails\">\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Subject' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.title }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Body' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p [innerHTML]=\"communicationDetails?.body\"></p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Location' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p [innerHTML]=\"communicationDetails?.location\"></p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.SendUntil' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.send_until | dateFormat: 'datetime' }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.SendAt' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10\">\n <p>{{ communicationDetails?.send_at | dateFormat: 'datetime' }}</p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>{{ 'Crm.CommunicationsMessage.Pushed' | transloco }}:</h4>\n </div>\n <div class=\"col-12 col-sm-10 d-flex\">\n <p>\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: communicationDetails?.is_pushed\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ communicationDetails?.is_pushed ? 'Yes' : 'No' }}</span>\n </p>\n </div>\n <div class=\"col-12 col-sm-2\">\n <h4>Sent:</h4>\n </div>\n <div class=\"col-12 col-sm-10 d-flex\">\n <p>\n <span [appDynamicBadge]=\"{\n itemsArray: [true, false],\n item: communicationDetails?.is_sent\n }\"\n color=\"success-danger\"\n class=\"badge\">{{ communicationDetails?.is_sent ? 'Yes' : 'No' }}</span>\n </p>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Injector } from '@angular/core';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\n\n@Component({\n selector: 'pw-smart-crm-marketing-view',\n templateUrl: './smart-crm-marketing.component.html'\n})\nexport class SmartCrmMarketingViewComponent extends AppBaseComponent {\n constructor(injector: Injector) {\n super(injector);\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 d-flex\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h2 class=\"mt-3\">Your Marketing Email at a Glance</h2>\n </div>\n</div>\n\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>View</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-communication-view-details></pw-smart-crm-communication-view-details>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Recipients</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-marketing-users-list></pw-smart-crm-marketing-users-list>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { CrmOpportunity } from '../../../../shared/interface/crm-opportunity.interface';\nimport { CrmStage } from '../../../../shared/interface/crm-stages.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-board',\n templateUrl: './smart-crm-board.component.html',\n styleUrls: ['./smart-crm-board.component.scss']\n})\nexport class SmartCrmBoardComponent extends AppBaseComponent implements OnInit, OnDestroy {\n private draggedOpportunity: any;\n\n stages: CrmStage[];\n\n allOpportunities: CrmOpportunity[];\n\n opportunitiesGroup = [];\n\n private changedStage: any;\n\n isLoaded = false;\n\n categories = [];\n\n private availableOpportunities = [];\n\n subscription: Subscription;\n\n totalCount: number;\n\n routers = ROUTERS;\n\n masterStages: CrmStage[] = [];\n\n selectedCategoryId = 0;\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit() {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getAllOpportunityCategories();\n this.getStages();\n }\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories || [];\n if (this.categories.length > 0) {\n this.selectedCategoryId = this.categories[0].id;\n }\n });\n }\n\n /** Function ot get opportunity stages */\n private getStages() {\n this.crmService.getAvailableOpportunityStages(this.subscription?.id).subscribe(response => {\n this.stages = response.available_crm_opportunity_stages;\n this.masterStages = response.available_crm_opportunity_stages;\n this.getAllOpportunities();\n });\n }\n\n /** Function to get all opportunities */\n private getAllOpportunities() {\n this.crmService\n .getAllOpportunities(this.subscription?.id)\n .subscribe(response => {\n this.allOpportunities = response?.crm_opportunities || [];\n this.availableOpportunities = response?.crm_opportunities || [];\n this.totalCount = this.allOpportunities?.length;\n\n if (this.selectedCategoryId) {\n this.allOpportunities = this.availableOpportunities.filter(opportunity =>\n opportunity?.crm_opportunity_category_ids?.includes(this.selectedCategoryId)\n );\n this.totalCount = this.allOpportunities?.length;\n }\n\n this.opportunitiesGroups(this.selectedCategoryId || null);\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n private treefy(list) {\n const idAttr = 'id';\n const parentAttr = 'previous_stage_id';\n const childrenAttr = 'children';\n\n const treeList = [];\n const lookup = {};\n list.forEach(obj => {\n lookup[obj[idAttr]] = obj;\n obj[childrenAttr] = [];\n });\n list.forEach(obj => {\n if (obj[parentAttr] !== null) {\n if (lookup[obj[parentAttr]] !== undefined) {\n lookup[obj[parentAttr]][childrenAttr].push(obj);\n } else {\n treeList.push(obj);\n }\n } else {\n treeList.push(obj);\n }\n });\n\n return treeList;\n }\n\n private flatten(arr) {\n return arr.reduce((result, current) => {\n if (current.children) {\n const children = this.flatten(current.children);\n delete current.children;\n result.push(current);\n result.push(...children);\n } else {\n result.push(current);\n }\n\n return result;\n }, []);\n }\n\n /** Function to opportunities group by stages */\n private opportunitiesGroups(val?: any) {\n this.opportunitiesGroup = [];\n this.stages = this.masterStages;\n if (val !== undefined && val !== 0) {\n this.stages = this.stages.filter(x => x.crm_opportunity_category_ids.includes(val));\n }\n this.stages = this.stages.sort((a, b) =>\n // eslint-disable-next-line no-nested-ternary\n a.id > b.id ? 1 : b.id > a.id ? -1 : 0\n );\n const temp = this.treefy(this.stages);\n this.stages = this.flatten(temp);\n\n this.stages.forEach(stage => {\n const opportunities = {\n stage: null,\n opportunities: [],\n totals: { oneTime: 0, mrr: 0, count: 0 }\n };\n const data = this.allOpportunities.filter(\n opportunity => opportunity.crm_opportunity_stage_id === stage.id\n );\n opportunities.opportunities = data.sort((a, b) => b.monthly_amount - a.monthly_amount);\n opportunities.stage = stage;\n opportunities.totals.oneTime = data.reduce((sum, opp) => sum + opp.one_time_amount, 0);\n opportunities.totals.mrr = data.reduce((sum, opp) => sum + opp.monthly_amount, 0);\n opportunities.totals.count = data.length;\n this.opportunitiesGroup.push(opportunities);\n });\n }\n\n /** Function to filter opportunities by categories */\n onChangeCategory(event) {\n const categories = Number(event);\n this.selectedCategoryId = categories;\n if (categories) {\n this.allOpportunities = this.availableOpportunities.filter(opportunity =>\n opportunity?.crm_opportunity_category_ids?.includes(categories)\n );\n this.totalCount = this.allOpportunities?.length;\n this.opportunitiesGroups(categories);\n } else {\n this.allOpportunities = this.availableOpportunities;\n this.totalCount = this.allOpportunities?.length;\n this.opportunitiesGroups();\n }\n }\n\n dropItem(event: CdkDragDrop<string[]>) {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(\n event.previousContainer.data,\n event.container.data,\n event.previousIndex,\n event.currentIndex\n );\n this.draggedOpportunity = event?.item?.data;\n this.changedStage = this.stages.find(stage => stage.name === event?.container?.id)?.id;\n if (this.draggedOpportunity) {\n const opportunitiesDetails = { ...this.draggedOpportunity };\n opportunitiesDetails['crm_opportunity_stage_id'] = this.changedStage;\n HelperService.deleteProps(opportunitiesDetails, [\n 'crm_account',\n 'crm_opportunity_stage',\n 'crm_opportunity_categories',\n 'crm_contact',\n 'owner'\n ]);\n this.crmService\n .updateOpportunities(\n this.subscription?.id,\n opportunitiesDetails.id,\n opportunitiesDetails\n )\n .subscribe({\n next: () => {\n this.getAllOpportunities();\n this.toast.success(\n this.translation.translate(\n 'Crm.OpportunitiesMessage.UpdatedMessage'\n )\n );\n },\n error: () => {\n this.getAllOpportunities();\n }\n });\n this.draggedOpportunity = null;\n this.changedStage = '';\n }\n }\n }\n\n getConnectedList(): any[] {\n return this.opportunitiesGroup.map(x => `${x.stage.name}`);\n }\n\n dropGroup(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.opportunitiesGroup, event.previousIndex, event.currentIndex);\n }\n\n toggleColumn(event, group) {\n $(event.target).toggleClass('fa-angle-right fa-angle-down');\n $(event.target).closest('.main-div').toggleClass('dynamic-columns-wrapper');\n this.crmService\n .editStage(this.subscription?.id, group.stage?.id, {\n collapsed: !group.stage?.collapsed\n })\n .subscribe(() => {\n this.getStages();\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"row mb-4\"\n *ngIf=\"isLoaded\">\n <div class=\"col-12 col-sm-4\">\n <select class=\"form-select\"\n (change)=\"onChangeCategory($event.target.value)\">\n <option *ngFor=\"let option of categories\"\n [value]=\"option.id\">{{ option.name }}</option>\n </select>\n </div>\n <div class=\"col-12 col-sm-8 mt-2 mt-sm-0 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n</div>\n<div *ngIf=\"isLoaded\"\n class=\"list-container d-flex\"\n cdkDropList\n [cdkDropListData]=\"opportunitiesGroup\"\n (cdkDropListDropped)=\"dropGroup($event)\">\n <div cdkDropListGroup\n class=\"opportunities-container main-div crm-board-primary\"\n [class.dynamic-columns-wrapper]=\"group.stage.collapsed\"\n [style.--border-color]=\"group.stage.color_code\"\n *ngFor=\"let group of opportunitiesGroup\"\n cdkDrag\n [cdkDragData]=\"group\">\n <div class=\"opportunities-board-title d-flex align-items-center py-1\">\n <span class=\"collapse-column-toggle\">\n <i class=\"fas\"\n [ngClass]=\"{\n 'fa-angle-right': !group.stage.collapsed,\n 'fa-angle-down': group.stage.collapsed\n }\" (click)=\"toggleColumn($event, group)\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"stage-name mb-0 py-2 ps-4\">\n <span class=\"badge rounded-pill text-white px-3\" [style.--background-color]=\"group.stage.color_code\">{{ group.stage.name }}</span>\n </p>\n <span class=\"ms-auto me-4 add-opportunity-icon\">\n <a class=\"text-secondary\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\"\n [queryParams]=\"{\n stage_id: group?.stage?.id,\n category: group.stage.crm_opportunity_category_ids\n }\"><i class=\"fa fa-plus-square\" aria-hidden=\"true\"></i></a>\n </span>\n </div>\n <div cdkDropList\n class=\"opportunities-list items-container\"\n [id]=\"group.stage.name\"\n [cdkDropListData]=\"group.opportunities\"\n (cdkDropListDropped)=\"dropItem($event)\"\n [cdkDropListConnectedTo]=\"getConnectedList()\">\n\n <div class=\"opportunities-box mb-3\"\n *ngFor=\"let item of group.opportunities\"\n cdkDrag\n [cdkDragData]=\"item\">\n <span ngbTooltip=\"Edit\"\n class=\"float-end edit-button\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunities, item.id]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </span>\n <p class=\"fw-bold mb-1\">{{ item.title }}</p>\n <a class=\"mb-1\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n item?.crm_account_id\n ]\">{{ item?.crm_account?.name }}</a>\n <p class=\"mb-1\">\n {{ (item?.one_time_amount / 100 | currency) }} One-time / {{ (item?.monthly_amount / 100 | currency) }} MRR\n </p>\n <a *ngIf=\"item?.owner[0]?.user_avatar\"\n [routerLink]=\"['/members', item?.owner[0]?.slug]\"><img alt=\"member image\"\n [src]=\"item?.owner[0]?.user_avatar[0]?.url\"\n [width]=\"'30'\"\n class=\"squared_logo float-end\"\n [height]=\"'30'\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/male.png';\" /></a>\n <p class=\"mb-1\">{{ item.starting_at | dateFormat }}</p>\n <p class=\"mb-1 badge bg-warning\">{{ item?.crm_opportunity_stage?.name }}</p>\n </div>\n </div>\n <div class=\"footer footer-list\">\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total One-Time:</span>\n <span class=\"footer-value\">{{ group.totals.oneTime / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total MRR:</span>\n <span class=\"footer-value\">{{ group.totals.mrr / 100 | currency }}</span>\n </div>\n <div class=\"footer-item\">\n <span class=\"footer-label\">Total Count:</span>\n <span class=\"footer-value\">{{ group.totals.count }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"!masterStages?.length && isLoaded\">\n <pw-no-data [withImage]=\"false\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStages' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'categories']\">Take me to the configuration page.</a>\n </pw-no-data>\n</div>\n\n<div *ngIf=\"totalCount === 0 && !masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoDataMessage' | transloco\">\n </pw-no-data>\n</div>\n\n<div *ngIf=\"!opportunitiesGroup.length && isLoaded && masterStages.length && categories.length\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesBoardMessages.NoStageAssociated' | transloco\">\n <a #content [routerLink]=\"['/' + subscription?.slug + routers.configurations, 'stage']\">Please add some in the configuration section.</a>\n </pw-no-data>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { User } from '@posiwise/common-utilities';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-details',\n templateUrl: './smart-crm-opportunities-details.component.html',\n styleUrls: ['./smart-crm-opportunities-details.component.scss']\n})\nexport class SmartCrmOpportunitiesDetailsComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n form: UntypedFormGroup;\n\n user: User;\n\n id: number;\n\n onEdit = false;\n\n data: any;\n\n submitted = false;\n\n searchText = '';\n\n subscriptionId: number;\n\n allContacts: any = [];\n\n contactId: number;\n\n private opportunityData: any;\n\n filteredUsers: any = [];\n\n cancelledTrue: any;\n\n winChance = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];\n\n opportunities = [];\n\n WonField = false;\n\n LostField = false;\n\n TrialStartField = false;\n\n accounts = [];\n\n filteredAccounts: any[];\n\n account_id: number;\n\n masterStages = [];\n\n stages = [];\n\n categories = [];\n accountValueCount = 0;\n currentAccountId;\n\n featureKeys = [];\n\n /** Function to get form controls */\n get f() {\n return this.form.controls;\n }\n\n constructor(\n injector: Injector,\n private crmService: CrmService\n ) {\n super(injector);\n this.form = AppSmartCrm.getOpportunitiesInfoForm();\n }\n\n ngOnInit() {\n this.toggleStageField();\n this.route.params.subscribe(data => {\n this.id = Number(data['id']);\n if (Number(data['id'])) {\n this.getAccountContacts(true);\n\n this.form.get('crm_account_id').valueChanges.subscribe(value => {\n if (this.accountValueCount > 2) {\n this.form.get('crm_contact_id').disable();\n this.form.get('crm_contact_id').reset();\n } else {\n this.accountValueCount += 1;\n }\n if (value) {\n this.getAccountContacts(false);\n }\n });\n } else {\n this.form.get('crm_contact_id').disable();\n this.form.get('crm_account_id').disable();\n\n this.form.get('crm_account_id').valueChanges.subscribe(value => {\n if (value) {\n this.getAccountContacts(false);\n }\n this.form.get('crm_contact_id').disable();\n this.form.get('crm_contact_id').reset();\n });\n }\n });\n this.getUserSubscriptionId().subscribe(response => {\n this.subscriptionId = response;\n if (this.subscriptionId) {\n this.getAvailableOpportunityStages(this.subscriptionId);\n this.getAllOpportunityCategories();\n }\n });\n this.form.get('crm_contact_id').setValue(null);\n this.contactId = Number(this.route.snapshot.queryParamMap.get('contact_id'));\n this.account_id = Number(this.route.snapshot.queryParamMap.get('account_id'));\n this.getUserInfo();\n this.getAllAccounts();\n }\n\n private getAvailableOpportunityStages(id) {\n this.crmService.getAvailableOpportunityStages(id).subscribe(res => {\n this.masterStages = res?.available_crm_opportunity_stages || [];\n this.stages = res?.available_crm_opportunity_stages || [];\n });\n }\n\n // /** Function to get user info */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n this.user = user;\n });\n }\n\n /** Function to call accounts */\n private getAllAccounts() {\n this.crmService.getAllAccounts(this.subscriptionId).subscribe(response => {\n this.accounts = response.accounts;\n this.form.get('crm_account_id').enable();\n if (this.account_id) {\n const accountData = this.accounts.find(x => x.id === this.account_id);\n this.form.get('crm_account_id').setValue(accountData);\n }\n });\n }\n\n /** Function to call contacts */\n\n private getAccountContacts(isChange = false) {\n this.getUserSubscriptionId().subscribe(id => {\n this.subscriptionId = id;\n if (this.subscriptionId) {\n this.crmService\n .getAccountContacts(\n this.form.get('crm_account_id').value.id,\n this.subscriptionId,\n ''\n )\n .subscribe(response => {\n this.form.get('crm_contact_id').enable();\n this.allContacts = response.contacts;\n this.allContacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${\n member.last_name || ''\n } - ${member.email}`.trim();\n });\n if (this.id) {\n this.onEdit = true;\n isChange && this.getOpportunityDetails(this.id);\n } else {\n this.onEdit = false;\n }\n if (this.contactId) {\n const contactData = this.allContacts.find(x => x.id === this.contactId);\n this.form.get('crm_contact_id').setValue(contactData);\n this.form.get('crm_account_id').setValue(contactData.crm_account);\n }\n if (this.account_id) {\n this.allContacts = this.allContacts.filter(\n x => x.crm_account_id === this.account_id\n );\n }\n });\n }\n });\n }\n\n /** Function to get opportunities data */\n private getOpportunityDetails(id: number) {\n this.crmService.getOpportunityDetails(this.subscriptionId, id).subscribe(response => {\n this.opportunityData = response;\n let startingAtObj: NgbDateStruct;\n let trialStartAtObj: NgbDateStruct;\n if (response.starting_at) {\n startingAtObj = {\n year: Number(response.starting_at.substring(0, 4)),\n month: Number(response.starting_at.substring(5, 7)),\n day: Number(response.starting_at.substring(8, 10))\n };\n }\n if (response.trial_start_at) {\n trialStartAtObj = {\n year: Number(response.trial_start_at.substring(0, 4)),\n month: Number(response.trial_start_at.substring(5, 7)),\n day: Number(response.trial_start_at.substring(8, 10))\n };\n }\n if (response.stage === 'Trailing') {\n this.TrialStartField = true;\n } else {\n this.WonField = false;\n }\n if (response.stage === 'Won') {\n this.LostField = true;\n } else {\n this.LostField = false;\n }\n if (response.stage === 'Lost') {\n this.WonField = true;\n } else {\n this.WonField = false;\n }\n this.form.patchValue(this.opportunityData);\n this.form.patchValue({\n starting_at: startingAtObj,\n trial_start_at: trialStartAtObj,\n one_time_amount: response.one_time_amount / 100,\n monthly_amount: response.monthly_amount / 100\n });\n\n this.allContacts.forEach(contact => {\n if (this.opportunityData.crm_contact_id === contact.id) {\n this.form.get('crm_contact_id').setValue(contact);\n }\n });\n this.accounts.forEach(account => {\n if (this.opportunityData.crm_account_id === account.id) {\n this.form.get('crm_account_id').setValue(account);\n }\n });\n });\n }\n\n /** Function to execute on submit opportunities form */\n onSave() {\n this.submitted = true;\n const data = { ...this.form.value };\n data.one_time_amount *= 100;\n data.monthly_amount *= 100;\n if (data.crm_contact_id) {\n data.crm_contact_id = data.crm_contact_id.id;\n }\n data.crm_account_id = data.crm_account_id.id;\n data.starting_at = HelperService.dateFormat(this.form.get('starting_at').value);\n data.trial_start_at = HelperService.dateFormat(this.form.get('trial_start_at').value);\n const sub$ = this.id\n ? this.crmService.updateOpportunities(this.subscriptionId, this.id, data)\n : this.crmService.postOpportunities(this.subscriptionId, data);\n sub$.subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.UpdatedMessage')\n );\n this.back();\n }).add(() => {\n this.submitted = false;\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscriptionId).subscribe(response => {\n const categories = response?.crm_opportunity_categories || [];\n categories.forEach(val => {\n const data = {\n label: val.name,\n value: val.id\n };\n this.categories.push(data);\n });\n this.getValues();\n });\n }\n\n private getValues() {\n if (!this.id) {\n this.route.queryParams.subscribe(res => {\n if ('stage_id' in res) {\n const stageId = Number(res['stage_id']);\n let category;\n if (typeof res['category'] === 'string') {\n category = res['category'].split(',').map(x => Number(x));\n } else {\n category = res['category']?.map(x => Number(x));\n }\n this.form.patchValue({\n crm_opportunity_stage_id: stageId || '',\n crm_opportunity_category_ids: category?.length ? category : ''\n });\n }\n });\n }\n }\n\n search(event) {\n let data = [];\n if (event.query) {\n data = this.allContacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allContacts.forEach(item => {\n data.push(item);\n });\n }\n this.filteredUsers = data;\n }\n\n searchAccount(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(item => {\n data.push(item);\n });\n }\n this.filteredAccounts = data;\n }\n\n onCategoryChange(event) {\n this.stages = [...this.masterStages];\n if (event.value?.length) {\n this.stages = this.stages.filter(x =>\n x.crm_opportunity_category_ids?.some(item => event.value.includes(item))\n );\n }\n }\n\n private toggleStageField() {\n this.form.get('crm_opportunity_stage_id').disable();\n this.form.get('crm_opportunity_category_ids').valueChanges.subscribe(() => {\n const val = this.form.get('crm_opportunity_category_ids').value;\n if (!val?.length) {\n this.form.get('crm_opportunity_stage_id').disable();\n } else {\n this.form.get('crm_opportunity_stage_id').enable();\n }\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"me-auto col-xs-6\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.OpportunitiesMessage.CrmOpportunity' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-8\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Title' | transloco\"\n name=\"title\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TitleErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\">{{ 'Crm.OpportunitiesMessage.Account' | transloco\n }}<span class=\"text-danger\">*</span></label>\n <p-autoComplete [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"searchAccount($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [inputStyle]=\"\n submitted && f['crm_account_id'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label>{{ 'Crm.OpportunitiesMessage.Contact' | transloco }}</label>\n <p-autoComplete [suggestions]=\"filteredUsers\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"search($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contact\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.OneTimeAmount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.MonthlyAmount' | transloco\n }}</span></label>\n <input type=\"number\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n </div>\n\n <!-- Features -->\n <div class=\"mb-3 col-12 col-md-4\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.Features' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding feature-tooltip\">{{ 'Crm.OpportunitiesMessage.Tooltip.Feature' | transloco }}</span>\n </label>\n <p-multiSelect [options]=\"featureKeys\"\n placeholder=\"Select feature keys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <span class=\"text-danger\">*</span>\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.WinChance' | transloco }}\n </span>\n </label>\n <select formControlName=\"win_chances\"\n class=\"form-control form-select\"\n [ngClass]=\"{ 'is-invalid': submitted && f['win_chances'].errors }\">\n <option *ngFor=\"let option of winChance\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle\">{{ 'Crm.OpportunitiesMessage.Won' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{ 'Crm.OpportunitiesMessage.Tooltip.Won' | transloco }}\n </span>\n </label>\n <input type=\"number\"\n NumberDirective\n class=\"form-control\"\n formControlName=\"won\"\n id=\"won\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won'].errors }\" />\n </div>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <label class=\"info-circle mb-2\">{{ 'Crm.OpportunitiesMessage.StartingAt' | transloco\n }}<span class=\"text-danger\">*</span><span class=\"tooltiptext gradient-custom-branding\">{{\n 'Crm.OpportunitiesMessage.Tooltip.StartingAt' | transloco\n }}</span></label>\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"starting_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['starting_at'].errors }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.Category' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Categories' | transloco\"\n name=\"crm_opportunity_category_ids\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.CategoryErrorMessage' | transloco\">\n <p-multiSelect [options]=\"categories\"\n (onChange)=\"onCategoryChange($event)\"\n formControlName=\"crm_opportunity_category_ids\"\n appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"TrialStartField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\"\n name=\"trial_start_at\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.TrialStartAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"trial_start_at\"\n ngbDatepicker\n #c=\"ngbDatepicker\"\n [minDate]=\"{ day: 1, month: 1, year: 1950 }\"\n [maxDate]=\"{ day: 31, month: 12, year: 2050 }\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"LostField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\"\n name=\"lost_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.LostReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"lost_reason\"\n id=\"lost_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['lost_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-4\"\n *ngIf=\"WonField\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\"\n name=\"won_reason\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.WonReason' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"won_reason\"\n id=\"won_reason\"\n [ngClass]=\"{ 'is-invalid': submitted && f['won_reason'].errors }\" />\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Crm.OpportunitiesMessage.Tooltip.StageOpportunity' | transloco\"\n [label]=\"'Crm.OpportunitiesMessage.Stage' | transloco\"\n name=\"crm_opportunity_stage_id\"\n errorMsg=\"Please select stage\">\n <select class=\"form-select\"\n formControlName=\"crm_opportunity_stage_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_opportunity_stage_id'].errors }\">\n <option value=\"\">Select Stage</option>\n <option *ngFor=\"let option of stages\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n\n <div class=\"col-12 col-sm-12\">\n <pw-input-container [label]=\"'Crm.OpportunitiesMessage.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Crm.OpportunitiesMessage.DescriptionErrorMessage' | transloco\">\n <textarea rows=\"10\"\n type=\"text\"\n class=\"form-control description-field\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, EventEmitter, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormGroup, Validators } from '@angular/forms';\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\nimport { CRM_ACCOUNT_FILES_PATH } from '@posiwise/smart-crm-shared';\nimport { AppSmartCrm } from '../../../../../shared/models/smart-crm.model';\nimport { ROUTERS } from '../../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { UploadFile, UploadInput, UploadOutput, UploadStatus, UploaderOptions } from 'ngx-uploader';\nimport swal from 'sweetalert2';\n\nimport { DOCUMENT_TYPE_EXT, TOKEN_HEADER_KEY } from '@posiwise/common-utilities';\nimport { CrmAccount } from '../../../../../shared/interface/crm-account.interface';\nimport { CrmAction } from '../../../../../shared/interface/crm-action.interface';\nimport { CrmVersion } from '../../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { AuthService } from '@posiwise/common-services';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ValidateForm } from '@posiwise/utils';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-info',\n templateUrl: './smart-crm-opportunities-info.component.html',\n styleUrls: ['./smart-crm-opportunities-info.component.scss']\n})\nexport class SmartCrmOpportunitiesInfoComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy\n{\n isLoaded = false;\n\n isFormEdit = true;\n\n opportunitiesId: number;\n\n data: any;\n\n aboutControls: UntypedFormGroup;\n\n submitted = false;\n\n accounts: CrmAccount[];\n\n filteredAccounts: CrmAccount[] = [];\n\n subscriptionId: number;\n\n actions: CrmAction[];\n\n buttonDisable: boolean;\n\n hasAccess: boolean;\n\n options: UploaderOptions;\n\n uploadInput: EventEmitter<UploadInput>;\n\n files: UploadFile[];\n\n token: string;\n\n dragOver: boolean;\n\n contactId: number;\n\n accountId: number;\n\n userId: number;\n\n actionControls: UntypedFormGroup;\n\n isDisabled = false;\n\n updating = false;\n\n actionId: number;\n\n showFullComment = false;\n\n commentId: number;\n\n opportunitiesComments: any[];\n\n dangerColor: boolean;\n\n allContacts: any[];\n\n filteredContacts: any[];\n\n opportunitiesVersioning: CrmVersion[];\n\n submitAction = false;\n\n subscription: Subscription;\n\n routers = ROUTERS;\n\n constructor(\n injector: Injector,\n private crmService: CrmService,\n private modalService: NgbModal,\n private authService: AuthService,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n this.options = { concurrency: 1, maxUploads: 3 };\n this.uploadInput = new EventEmitter<UploadInput>();\n this.token = btoa(this.authService.getToken());\n this.files = [];\n this.actionControls = AppSmartCrm.getOpportunityActionsForm(this.isDisabled);\n this.aboutControls = AppSmartCrm.getOpportunitiesForm();\n }\n\n ngOnInit(): void {\n this.route.params.subscribe(data => {\n this.opportunitiesId = Number(data['id']);\n if (this.opportunitiesId) {\n this.getOpportunityDetails();\n this.actionControls.get('crm_opportunity_id').setValue(this.opportunitiesId);\n }\n });\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getActions();\n this.getOpportunitiesComments();\n }\n });\n this.onDateSelected();\n this.getContactVersion();\n this.userInfo();\n }\n\n /** Function to call user info */\n private userInfo() {\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n this.actionControls.get('owner_id').setValue(res.id);\n }\n });\n }\n\n /** Function to get opportunities details */\n getOpportunityDetails() {\n this.crmService\n .getOpportunityDetails(this.subscriptionId, this.opportunitiesId)\n .subscribe(response => {\n if (response) {\n if (response.crm_contact_id) {\n response.crm_contact.displayName = `${response.crm_contact.first_name} ${response.crm_contact.last_name}`;\n }\n this.data = response;\n // eslint-disable-next-line operator-assignment\n this.data.monthly_amount = this.data.monthly_amount / 100;\n // eslint-disable-next-line operator-assignment\n this.data.one_time_amount = this.data.one_time_amount / 100;\n this.contactId = response.crm_contact_id;\n this.accountId = response.crm_account_id;\n this.aboutControls.patchValue(response);\n this.aboutControls.get('crm_contact_id').patchValue(response.crm_contact);\n this.aboutControls.get('crm_account_id').patchValue(response.crm_account);\n this.actionControls.get('crm_contact_id').setValue(this.contactId);\n this.actionControls.get('crm_account_id').setValue(this.accountId);\n }\n });\n }\n\n /** Function to update opportunities */\n updateOpportunities() {\n if (this.aboutControls.invalid) {\n this.submitted = true;\n } else {\n const formData = this.aboutControls;\n formData.get('crm_account_id').setValue(formData.get('crm_account_id').value?.id);\n formData.get('crm_contact_id').setValue(formData.get('crm_contact_id').value?.id);\n formData.get('one_time_amount').setValue(formData.get('one_time_amount').value * 100);\n formData.get('monthly_amount').setValue(formData.get('monthly_amount').value * 100);\n this.crmService\n .updateOpportunities(this.subscription?.id, this.opportunitiesId, formData.value)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.UpdatedMessage')\n );\n this.isFormEdit = true;\n this.getOpportunityDetails();\n })\n .add(() => {\n this.submitted = false;\n });\n }\n }\n\n /** Function to save comment */\n @ValidateForm('actionControls')\n onCommentSave() {\n const data = this.actionControls.value;\n data.when = HelperService.dateFormat(data?.when);\n this.crmService\n .postAccountComment(this.subscription?.id, data)\n .subscribe(() => {\n this.actionControls.get('comment').reset();\n this.getOpportunitiesComments();\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.CommentSubmittedMessage')\n );\n })\n .add(() => {\n this.submitAction = false;\n });\n }\n\n showDatePicker(event, id) {\n this.actionControls.get('when').setValidators([Validators.required]);\n const actionButtons = this.document.getElementsByClassName('action-btn');\n for (let i = 0; i < actionButtons.length; i++) {\n actionButtons[i].classList.remove('active');\n }\n event.target.classList.add('active');\n this.actionControls.get('crm_action_id').setValue(id);\n }\n\n onDateSelected() {\n this.actionControls.get('when').valueChanges.subscribe(() => {\n const selectedDate = this.document.getElementById('when')?.['value'];\n const todayDate = moment(new Date()).format('YYYY-MM-DD');\n if (todayDate < selectedDate) {\n this.isDisabled = true;\n this.actionControls.get('completed').disable({ onlySelf: true });\n this.actionControls.get('completed').setValue(false);\n } else {\n this.actionControls.get('completed').enable({ onlySelf: true });\n this.isDisabled = false;\n }\n });\n }\n\n /** Function to get all comments */\n private getOpportunitiesComments() {\n this.crmService\n .getOpportunitiesComments(this.opportunitiesId, this.subscription?.id)\n .subscribe(resp => {\n if (resp?.crm_account_actions?.length) {\n this.opportunitiesComments = resp.crm_account_actions;\n\n this.opportunitiesComments.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(moment(new Date()), 'days');\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n\n this.opportunitiesComments.sort((a, b) => {\n return <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime();\n });\n this.opportunitiesComments.forEach(item => {\n item['when'] = moment(item['when']).format('YYYY-MM-DD');\n item['year'] = moment(item['when']).format('YYYY');\n item['month'] = moment(item['when']).format('MM');\n });\n const completedCancelledActions: any[] = this.opportunitiesComments.filter(\n action => action.completed === true || action.cancelled === true\n );\n completedCancelledActions.reverse();\n const notCompletedCancelledActions: any[] = this.opportunitiesComments.filter(\n action => action.completed === false && action.cancelled === false\n );\n this.opportunitiesComments =\n notCompletedCancelledActions.concat(completedCancelledActions);\n this.isLoaded = true;\n } else {\n this.isLoaded = true;\n }\n });\n }\n\n get f() {\n return this.aboutControls.controls;\n }\n\n get actionFormControls() {\n return this.actionControls.controls;\n }\n\n /** Function to get the list of accounts by subscriptionId */\n getAccountsBySubscription() {\n this.crmService.getAccountsBySubscription(this.subscription?.id).subscribe(res => {\n this.accounts = res.accounts;\n });\n }\n\n /** Function to get and show all the actions */\n private getActions() {\n this.crmService.getActionsBySubscriptionId(this.subscription?.id).subscribe(resp => {\n if (resp && resp.crm_actions && resp.crm_actions.length > 0) {\n this.actions = resp.crm_actions;\n this.buttonDisable = this.actions.every(\n x => x.visible === false || x.visible === null\n );\n } else {\n this.buttonDisable = true;\n }\n });\n this.hasAccess = this.hasAdminAccess(this.subscription?.id);\n }\n\n showEditControls(event) {\n const comments = this.document.getElementsByClassName('card-header');\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n if (event && event !== undefined) {\n event.target.closest('.card-header').classList.add('show-controls');\n }\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getOpportunitiesComments();\n this.updating = false;\n });\n }\n\n /** Function to show DatePicker */\n showDatePickerUpdate(actionId) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to set the action as completed */\n setAsCompletedOrUncompleted(id, action, completedOrUncompleted) {\n const alertTitle = completedOrUncompleted ? 'InCompleted' : 'Completed';\n\n return swal\n .fire({\n title: alertTitle,\n html: `Are you sure you want to set as ${alertTitle}?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: !completedOrUncompleted,\n cancelled: action.cancelled,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getOpportunitiesComments();\n });\n }\n });\n }\n\n /** Function to update comment */\n updateComment(item) {\n const commentObj = {\n comment: item.comment,\n completed: item.completed,\n cancelled: item.cancelled,\n crm_account_id: item.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, item.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.showEditControls(undefined);\n this.getOpportunitiesComments();\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id, action) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true,\n crm_account_id: action.crm_account_id\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.actions.splice(action, 1);\n this.getActions();\n this.getOpportunityDetails();\n });\n }\n });\n }\n\n /** Function to call contacts */\n getAllContacts() {\n this.crmService.getAllContacts(this.subscription?.id, '').subscribe(response => {\n this.allContacts = response.contacts;\n this.allContacts.forEach(member => {\n member.displayName = `${member.first_name || ''} ${member.last_name || ''} - ${\n member.email\n }`.trim();\n });\n });\n }\n\n /** search accounts */\n accountSearch(event) {\n let data = [];\n if (event.query) {\n data = this.accounts.filter((x: any) => {\n return x.name.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.accounts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredContacts = data;\n }\n\n onContactSearch(event) {\n let data = [];\n if (event.query) {\n data = this.allContacts.filter((x: any) => {\n return x.displayName.toLowerCase().includes(event.query.toLowerCase());\n });\n } else {\n this.allContacts.forEach(element => {\n data.push(element);\n });\n }\n this.filteredContacts = data;\n }\n\n openModal(content) {\n this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });\n }\n\n onClose() {\n this.modalService.dismissAll();\n }\n\n /** Function to get opportunities versions */\n private getContactVersion() {\n this.crmService\n .getContactVersion(this.subscription?.id, this.opportunitiesId, 'CrmOpportunity')\n .subscribe(response => {\n this.opportunitiesVersioning = response.versions;\n });\n }\n\n onUploadOutput(output: UploadOutput): void {\n switch (output.type) {\n case 'allAddedToQueue':\n if (this.files.length > 0) {\n const event: UploadInput = {\n type: 'uploadAll',\n url: CRM_ACCOUNT_FILES_PATH,\n method: 'POST',\n data: {\n owner_id: `${this.userId}`,\n crm_account_id: `${this.accountId}`,\n crm_contact_id: `${this.contactId}`,\n crm_opportunity_id: `${this.opportunitiesId}`\n },\n headers: {\n [TOKEN_HEADER_KEY]: this.token\n }\n };\n this.uploadInput.emit(event);\n }\n\n break;\n case 'addedToQueue':\n if (typeof output.file !== 'undefined') {\n const ext = output.file.name.split('.').pop();\n if (DOCUMENT_TYPE_EXT.includes(ext)) {\n this.files.push(output.file);\n } else {\n this.toast.error('file formats is not supported.');\n }\n }\n break;\n case 'uploading':\n if (typeof output.file !== 'undefined') {\n const index = this.files.findIndex(\n file => typeof output.file !== 'undefined' && file.id === output.file.id\n );\n this.files[index] = output.file;\n }\n break;\n case 'removed':\n this.files = this.files.filter((file: UploadFile) => file !== output.file);\n break;\n case 'dragOver':\n this.dragOver = true;\n break;\n case 'dragOut':\n case 'drop':\n this.dragOver = false;\n break;\n case 'done':\n break;\n default:\n }\n\n this.files.forEach(file => {\n if (file.progress.status === UploadStatus.Done) {\n file['uploaded'] = true;\n }\n });\n // wait for 500ms before filter files\n setTimeout(() => {\n this.files = this.files.filter(file => file.progress.status !== UploadStatus.Done);\n }, 500);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <div class=\"me-auto mb-0\">\n <h2 class=\"mb-0\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n Opportunity Info\n </h2>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"user-info p-3 card pb-0 h-auto\">\n <div class=\"mb-2 text-center\">\n <a class=\"profile-image\">\n <img width=\"100\"\n height=\"100\"\n class=\"rounded-circle img-border width-100\"\n alt=\"user\"\n src=\"assets/img/icons/male.png\" />\n </a>\n </div>\n <div class=\"mb-4 d-flex justify-content-between align-items-center\">\n <h4 class=\"d-inline-block\">\n About <span *ngIf=\"data?.id\">{{ data.title }}</span>\n </h4>\n <a href=\"javascript:void(0);\"\n *ngIf=\"isFormEdit\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n (click)=\"\n isFormEdit = !isFormEdit; getAccountsBySubscription(); getAllContacts()\n \">Edit</a>\n </div>\n <form [formGroup]=\"aboutControls\"\n [class.isDisabled]=\"isFormEdit\">\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.Title' | transloco\n }}</label>\n <input type=\"text\"\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\"\n *ngIf=\"data?.crm_contact_id\">\n <label class=\"label mb-2\">{{\n 'Crm.OpportunitiesMessage.Contact' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n data.crm_contact_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_contact_id\">{{ data?.crm_contact?.first_name }} {{ data?.crm_contact?.last_name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_contact_id\"\n [suggestions]=\"filteredContacts\"\n formControlName=\"crm_contact_id\"\n dataKey=\"id\"\n field=\"displayName\"\n [dropdown]=\"true\"\n (completeMethod)=\"onContactSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search contacts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3 ui-fluid skills-modal\">\n <label class=\"label mb-2\">{{\n 'Crm.OpportunitiesMessage.Account' | transloco\n }}</label>\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n data.crm_account_id\n ]\"\n class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.crm_account_id\">{{ data?.crm_accounty?.name }}</a>\n <p-autoComplete *ngIf=\"!isFormEdit || !data?.crm_account_id\"\n [suggestions]=\"filteredAccounts\"\n formControlName=\"crm_account_id\"\n dataKey=\"id\"\n field=\"name\"\n [dropdown]=\"true\"\n (completeMethod)=\"accountSearch($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search accounts\"\n [multiple]=\"false\">\n </p-autoComplete>\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }}</label>\n <a class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.one_time_amount\">{{ data?.one_time_amount | currency }}</a>\n <input *ngIf=\"!isFormEdit || !data?.one_time_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"one_time_amount\"\n id=\"one_time_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['one_time_amount'].errors }\" />\n </div>\n <div class=\"mb-3\">\n <label class=\"label mb-0\">{{\n 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }}</label>\n <a class=\"form-control d-block pb-2 ps-1 user-value\"\n *ngIf=\"isFormEdit && data?.monthly_amount\">{{ data?.monthly_amount | currency }}</a>\n <input *ngIf=\"!isFormEdit || !data?.monthly_amount\"\n type=\"number\"\n numbersOnly\n class=\"form-control rounded-0 ps-1 user-value\"\n formControlName=\"monthly_amount\"\n id=\"monthly_amount\"\n [ngClass]=\"{ 'is-invalid': submitted && f['monthly_amount'].errors }\" />\n </div>\n <div *ngIf=\"!isFormEdit\"\n class=\"text-end form-action-buttons\">\n <input type=\"button\"\n class=\"btn btn-outline-primary\"\n (click)=\"isFormEdit = !isFormEdit; getOpportunityDetails()\"\n value=\"Cancel\" />\n <input type=\"button\"\n class=\"btn btn-primary ms-3\"\n value=\"Submit\"\n (click)=\"updateOpportunities()\" />\n </div>\n </form>\n </div>\n </div>\n <div class=\"col-12 col-md-8\">\n <ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Notes</a>\n <ng-template ngbNavContent>\n <form [formGroup]=\"actionControls\"\n (ngSubmit)=\"onCommentSave()\">\n <textarea class=\"form-control\"\n formControlName=\"comment\"\n rows=\"6\"></textarea>\n <p class=\"text-danger\"\n *ngIf=\"\n actionControls.get('comment').touched &&\n actionControls.get('comment').invalid\n \">\n Note Required\n </p>\n <div *ngIf=\"actions?.length\"\n class=\"d-block clear-both pt-3\">\n <ng-container *ngFor=\"let action of actions; index as i\">\n <button *ngIf=\"action.visible\"\n type=\"button\"\n [class.active]=\"\"\n class=\"btn btn-sm me-2 btn-outline-primary mb-2 action-btn\"\n (click)=\"showDatePicker($event, action.id); d.toggle()\">\n {{ action.name }}\n </button>\n </ng-container>\n <div class=\"text-danger\"\n *ngIf=\"submitAction && actionFormControls.crm_action_id.invalid\">\n Please select an action\n </div>\n <div class=\"row mt-3\">\n <div class=\"col-12 col-sm-4\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n placeholder=\"yyyy-mm-dd\"\n formControlName=\"when\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (click)=\"d.toggle()\" />\n </div>\n </div>\n <div class=\"col-sm-4 pe-0 completed-toggle\">\n <div class=\"mb-3\">\n <ui-switch checkedLabel=\"completed\"\n uncheckedLabel=\"open\"\n formControlName=\"completed\"\n name=\"completed\">\n </ui-switch>\n </div>\n </div>\n </div>\n </div>\n <div class=\"float-end\">\n <input type=\"submit\"\n [disabled]=\"buttonDisable\"\n class=\"btn btn-primary mt-2 mb-2 float-end\"\n value=\"Submit Note\" />\n <a class=\"btn btn-outline-primary mt-2 mb-2 me-0 me-sm-2 float-end\"\n (click)=\"openModal(content)\">{{ 'Upload file' | transloco }}</a>\n </div>\n <div *ngIf=\"buttonDisable\"\n class=\"no-actions pt-4\">\n <pw-no-data [withImage]=\"true\" [message]=\"\n 'Crm.OpportunitiesMessage.NoActionsInOpportunitiesInfoMessage'\n | transloco\n \">\n </pw-no-data>\n </div>\n </form>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"!opportunitiesComments?.length && isLoaded\"\n class=\"no-actions pt-3\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoActionsMessage' | transloco\">\n </pw-no-data>\n </div>\n <div *ngIf=\"opportunitiesComments?.length\"\n id=\"timeline\"\n class=\"pt-3 clear-both timeline-center timeline-wrapper\">\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n </ul>\n <ul class=\"timeline\">\n <li class=\"timeline-line\"></li>\n <li class=\"timeline-item\"\n [ngClass]=\"{ 'mt-5': odd }\"\n *ngFor=\"\n let item of opportunitiesComments;\n index as i;\n let odd = odd;\n let even = even\n \">\n <div class=\"timeline-badge\">\n <span class=\"bg-red bg-lighten-1\">\n <span class=\"timeline-year\">\n <span class=\"d-block date-year\">{{\n item.when | date: 'medium' | slice: 0:3\n }}</span>\n <span>{{ item.year }}</span>\n </span>\n </span>\n </div>\n <div class=\"timeline-card shadow card pb-0 rounded border-grey border-lighten-2 position-static\">\n <div class=\"card-header py-4\">\n <div class=\"mb-0 clearfix\">\n <textarea type=\"text\"\n name=\"comment\"\n class=\"comment-field form-control p-0\"\n [(ngModel)]=\"item.comment\">{{ item.comment }}</textarea>\n <p class=\"float-start mb-0\"\n *ngIf=\"!showFullComment || item.id !== commentId\">\n {{ item.comment | slice: 0:170\n }}<a *ngIf=\"item.comment.length > 170\"\n class=\"text-secondary\"\n (click)=\"\n showFullComment = true; commentId = item.id\n \">...show more</a>\n </p>\n <p class=\"float-start mb-0\"\n *ngIf=\"showFullComment && item.id === commentId\">\n {{ item.comment }}\n <a *ngIf=\"\n item.comment.length > 170 && showFullComment\n \"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn float-end py-0\"\n (click)=\"showEditControls($event)\"\n *ngIf=\"userId === item.owner_id || hasAccess\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"card-subtitle text-muted my-0 clearfix\">\n <div class=\"float-start\">\n <span *ngIf=\"!updating || actionId !== item.id\"\n class=\"font-small-3\">\n {{ item.when }}</span>\n <input *ngIf=\"updating && actionId === item.id\"\n placeholder=\"yyyy-mm-dd\"\n value=\"{{ item.when }}\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, item)\" />\n </div>\n <button type=\" button\"\n class=\"btn btn-sm float-end when-btn py-0\"\n *ngIf=\"userId === item.owner_id || hasAccess\"\n (click)=\"showDatePickerUpdate(item.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <p [class.text-danger]=\"!item.color\"\n *ngIf=\"!item.cancelled && !item.completed\"\n class=\"mb-0\">\n {{ item.due }}\n </p>\n <p>\n {{\n item?.owner?.first_name +\n ' ' +\n item?.owner?.last_name\n }}\n </p>\n <span class=\"badge bg-primary\">{{\n item?.crm_action?.name\n }}</span>\n <span *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n class=\"badge bg-success ms-2\">Open</span>\n <a *ngIf=\"\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as completed\"\n class=\"me-3 ms-3\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \">\n <i class=\"fa fa-tasks completed\" aria-hidden=\"true\"></i>\n </a>\n <a *ngIf=\"\n !item.cancelled &&\n !item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(item.id, item)\">\n <i\n class=\"fa fa-times delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n <a *ngIf=\"\n item.completed &&\n (userId === item.owner_id || hasAccess)\n \"\n ngbTooltip=\"Set as UnCompleted\"\n href=\"javascript:void(0);\"\n (click)=\"\n setAsCompletedOrUncompleted(\n item.id,\n item,\n item.completed\n )\n \"\n class=\"ms-2\">\n <i class=\"far fa-window-close\" aria-hidden=\"true\"></i>\n </a>\n <div class=\"control-btns mt-3 text-end\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"showEditControls(undefined)\">\n Cancel\n </button>\n <button class=\"btn btn-sm btn-primary\"\n type=\"button\"\n (click)=\"updateComment(item)\">\n Submit\n </button>\n </div>\n </div>\n </div>\n </li>\n </ul>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Versioning</a>\n <ng-template ngbNavContent>\n <div *ngFor=\"let version of opportunitiesVersioning\">\n <p>\n <strong>Event: </strong>{{ version.event }} | <strong>Author: </strong><a *ngIf=\"version?.author\"\n [routerLink]=\"['/members', version?.author?.slug]\">{{ version?.author | ifNameNullShowEmail }}</a>\n | <strong>Created at: </strong>{{ version.created_at }}<br />\n <strong>Object: </strong>{{ version.object | json }}\n </p>\n <hr />\n </div>\n <div *ngIf=\"opportunitiesVersioning?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoVersionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"3\">\n <a ngbNavLink>Files</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-company-files [contactId]=\"contactId\"\n [accountId]=\"accountId\"\n [opportunityId]=\"opportunitiesId\">\n </pw-smart-crm-company-files>\n </ng-template>\n </li>\n </ul>\n\n <div [ngbNavOutlet]=\"nav\"></div>\n </div>\n</div>\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'Upload File' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <div class=\"row p-2\">\n <div class=\"col-12\">\n <div class=\"upload-box\">\n <div class=\"upload-box-content\">\n <div class=\"drop-container\"\n ngFileDrop\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\">\n <p>\n Drag files here or\n <label class=\"upload-button\">\n <input type=\"file\"\n ngFileSelect\n [options]=\"options\"\n (uploadOutput)=\"onUploadOutput($event)\"\n [uploadInput]=\"uploadInput\"\n multiple />\n browse\n </label>\n to upload.\n </p>\n </div>\n <div class=\"upload-item\"\n *ngFor=\"let f of files; let i = index\">\n <div class=\"upload-item-content\">\n <div class=\"filename\">\n <div class=\"filename-left\">\n <i class=\"ionicon ion-ios-copy\" aria-hidden=\"true\"></i>\n <span>{{ f.name }}</span>\n </div>\n </div>\n <div class=\"progress-content\">\n <div class=\"progress\">\n <span class=\"bar\"\n [style.width]=\"f?.progress?.data?.percentage + '%'\"\n [class.is-done]=\"f['uploaded']\"></span>\n </div>\n </div>\n <div class=\"progress-text-content\">\n <span class=\"progress-text\"\n [class.is-done]=\"f['uploaded']\">\n <span *ngIf=\"!f['uploaded']\">{{ f.progress?.data?.percentage - 1 }}%\n </span>\n <span *ngIf=\"f['uploaded']\">100 %</span>\n <span *ngIf=\"!f['uploaded']\">Uploading...</span>\n <span *ngIf=\"f['uploaded']\">Done</span>\n </span>\n <span class=\"speed-and-eta-text\"\n *ngIf=\"f.progress?.data?.percentage !== 0 && !f['uploaded']\">\n <span>{{ f.progress?.data?.speedHuman }} </span>\n <span>ETA {{ f.progress?.data?.etaHuman }}</span>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n Injector,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { LazyLoadEvent } from 'primeng/api';\n\nimport { PAGE_SIZE } from '@posiwise/common-utilities';\nimport { CrmOpportunityResponse } from '../../../../shared/interface/crm-opportunity.interface';\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Paging, Plotly, Subscription, User } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport { ProductService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-smart-crm-opportunities-list',\n templateUrl: './smart-crm-opportunities-list.component.html',\n styleUrls: ['./smart-crm-opportunities-list.component.scss']\n})\nexport class SmartCrmOpportunitiesListComponent\n extends AppBaseComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n subscription: Subscription;\n\n subscriptionId: number;\n\n hasAccess = false;\n\n searchText = '';\n\n data: CrmOpportunityResponse = {\n crm_opportunities: [],\n object_count: 0,\n unfiltered_count: 0\n };\n\n id = '';\n\n isLoaded = false;\n\n loading = true;\n\n opportunitiesInsight: any;\n\n opportunitiesGeography: Plotly.Figure;\n\n user: User;\n\n userId: number;\n\n searchStages: any = [];\n featureKeysList: any = [];\n filterByStages: any = [];\n filterByCategories = [];\n searchCategories: any = [];\n\n page = 1;\n\n stages = [];\n\n categories = [];\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n private cdr: ChangeDetectorRef,\n private productService: ProductService\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getAllStages();\n this.getUserSubscription().subscribe(subscription => {\n this.subscription = subscription;\n if (this.subscription?.id) {\n this.hasAccess = this.hasAdminAccess(this.subscription.id);\n this.getUserInfo();\n this.getAvailableOpportunityStages();\n this.getAllOpportunityCategories();\n }\n });\n }\n\n ngAfterViewChecked() {\n this.cdr.detectChanges();\n }\n\n onLazyLoad(event: LazyLoadEvent) {\n const pageDetails = HelperService.onTableLazyLoad(event);\n this.page = pageDetails.page;\n this.getAllOpportunities({\n page: this.page,\n page_size: PAGE_SIZE,\n order_by: pageDetails.sortField,\n order_direction: pageDetails.sortOrder,\n search: this.searchText\n });\n }\n\n /** Function to get user details */\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n this.userId = user.id;\n if (this.permissionService.isGranted('Pages.Beta')) {\n this.getOpportunitiesInsight();\n this.getContactGeography();\n }\n }\n });\n }\n\n private getAllStages(paging: Paging = {}) {\n this.getUserSubscriptionId().subscribe(res => {\n if (res) {\n this.subscriptionId = res;\n this.crmService\n .getAllStages(this.subscriptionId, paging)\n .subscribe(response => {\n console.log(response?.crm_opportunity_stages);\n this.searchStages = response?.crm_opportunity_stages?.map(element => {\n return {\n value: element.id,\n label: element.name\n };\n });\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n onSearchOptionChange(event, filterBy: string) {\n if (filterBy === 'stage') {\n this.filterByStages = event.value;\n this.getAllOpportunities({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n if (filterBy === 'category') {\n this.filterByCategories = event.value;\n this.getAllOpportunities({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n }\n\n clearFilters() {\n this.filterByCategories = [];\n this.filterByStages = [];\n this.searchText = '';\n this.getAllOpportunities({\n page: this.page,\n page_size: PAGE_SIZE\n });\n }\n\n private getAllOpportunities(paging?: Paging) {\n this.getUserSubscriptionId().subscribe(subscriptionId => {\n this.subscriptionId = subscriptionId;\n if (this.subscriptionId) {\n this.crmService\n .getAllOpportunities(\n this.subscriptionId,\n paging,\n this.filterByCategories.join() || '',\n this.filterByStages.join() || ''\n )\n .subscribe(response => {\n this.data = response;\n })\n .add(() => {\n this.isLoaded = true;\n this.loading = false;\n });\n }\n });\n }\n\n onDelete(id: number) {\n HelperService.raiseDeletePopup().then(resp => {\n if (resp.value) {\n this.crmService.deleteOpportunities(this.subscription?.id, id).subscribe(() => {\n this.getAllOpportunities({ page: this.page, page_size: PAGE_SIZE });\n this.toast.success(\n this.translation.translate('Crm.OpportunitiesMessage.DeletedMessage')\n );\n });\n }\n });\n }\n\n /** Function to get available opportunities */\n private getAvailableOpportunityStages() {\n this.crmService.getAvailableOpportunityStages(this.subscription?.id).subscribe(response => {\n this.stages = response?.available_crm_opportunity_stages?.map(stage => {\n return stage?.name;\n });\n });\n }\n\n /** Function to get all categories */\n private getAllOpportunityCategories() {\n this.crmService.getAllOpportunityCategories(this.subscription?.id).subscribe(response => {\n this.categories = response?.crm_opportunity_categories?.map(category => {\n return {\n value: category.id,\n label: category.name\n };\n });\n });\n }\n\n /** Function to call opportunities insight */\n private getOpportunitiesInsight() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'opportunities_insights')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.opportunitiesInsight = [];\n } else this.opportunitiesInsight = response;\n });\n }\n\n /** Function to call contact geography */\n private getContactGeography() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'opportunities_geography')\n .subscribe(response => {\n this.opportunitiesGeography = response;\n });\n }\n\n checkPermission(permission: string) {\n return this.permissionService.evaluatePermissions(permission);\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <a class=\"btn btn-sm btn-outline-primary float-end\" data-cy=\"add-opportunities\"\n [routerLink]=\"['/' + subscription?.slug + routers.opportunityAdd]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Crm.OpportunitiesMessage.AddOpportunity' | transloco }}\n </a>\n </div>\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"col-12\">\n <div class=\"primeng-datatable-container table-responsive\" [class.hideTable]=\"data.unfiltered_count === 0\">\n <p-table #dt [value]=\"data.crm_opportunities\" [paginator]=\"data.object_count !== 0\" [lazy]=\"true\" [rows]=\"PAGE_SIZE\"\n class=\"contact-table\" [totalRecords]=\"data.object_count\" [loading]=\"loading\" filterDelay=\"1000\"\n (onLazyLoad)=\"onLazyLoad($event)\" [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"row\">\n <div class=\"col-sm-3 col-6 mb-2 mb-sm-0\">\n <p-multiSelect placeholder=\"Select Stage\" [options]=\"searchStages\" [(ngModel)]=\"filterByStages\"\n (onChange)=\"onSearchOptionChange($event, 'stage')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-sm-3 col-6\">\n <p-multiSelect placeholder=\"Select Category\" [options]=\"categories\" [(ngModel)]=\"filterByCategories\"\n (onChange)=\"onSearchOptionChange($event, 'category')\" [filter]=\"false\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <!-- Empty column occupying the same space -->\n <div class=\"col-sm-3 col-6\"></div>\n <div class=\"col-sm-3 col-md-4 col-lg-3 d-flex justify-content-end\">\n <div class=\"d-flex w-100\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText placeholder=\"Search opportunities..\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\" class=\"form-control search-opportunities-search-input\" />\n </div>\n </div>\n </div>\n <div class=\"search-filter\">\n <a class=\"mt-3 ms-3 text-start text-primary\" (click)=\"clearFilters()\">Clear all filters</a>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\" pSortableColumn=\"title\"> {{ 'Crm.OpportunitiesMessage.Title' | transloco }} <p-sortIcon\n field=\"title\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_contact_id\"> {{ 'Crm.OpportunitiesMessage.Contact' | transloco }}\n <p-sortIcon field=\"crm_contact_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_account_id\"> {{ 'Crm.OpportunitiesMessage.Account' | transloco }}\n <p-sortIcon field=\"crm_account_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"one_time_amount\"> {{ 'Crm.OpportunitiesMessage.OneTimeAmount' | transloco\n }} <p-sortIcon field=\"one_time_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"win_chances\"> {{ 'Crm.OpportunitiesMessage.WinChance' | transloco }}\n <p-sortIcon field=\"win_chances\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"monthly_amount\"> {{ 'Crm.OpportunitiesMessage.MonthlyAmount' | transloco\n }} <p-sortIcon field=\"monthly_amount\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_stage_id\"> {{ 'Crm.OpportunitiesMessage.Stage' | transloco\n }} <p-sortIcon field=\"crm_opportunity_stage_id\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"crm_opportunity_category_ids\"> {{ 'Crm.OpportunitiesMessage.Categories' |\n transloco }} <p-sortIcon field=\"crm_opportunity_category_ids\"></p-sortIcon>\n </th>\n <th scope=\"true\" pSortableColumn=\"starting_at\"> {{ 'Crm.OpportunitiesMessage.StartingAt' | transloco }}\n <p-sortIcon field=\"starting_at\"></p-sortIcon>\n </th>\n <th class=\"actions-list-two\" scope=\"true\"> {{ 'Label.Actions' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-opportunities>\n <tr>\n <td data-head=\"Title\">\n <a *ngIf=\"\n hasAccess ||\n opportunities?.owner_id === userId ||\n checkPermission('Pages.Product.CRM.Role.Admin')\n \" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunityInfo,\n opportunities.id\n ]\">\n <span>{{ opportunities?.title | textTruncate: 15 }} </span>\n </a>\n <a *ngIf=\"\n !hasAccess &&\n opportunities?.owner_id !== userId &&\n checkPermission('Pages.Product.CRM.Role.Admin')\n \"> {{ opportunities?.title | textTruncate: 15 }} </a>\n </td>\n <td class=\"contactname\" data-head=\"Crm Contact\">\n <a *ngIf=\"opportunities?.crm_contact_id\" [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n opportunities.crm_contact_id.id\n ]\">{{ opportunities.crm_contact?.first_name + ' ' +\n opportunities.crm_contact?.last_name }}</a>\n </td>\n <td data-head=\"Account\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n opportunities.crm_account.id\n ]\">{{ opportunities.crm_account.name }}</a>\n </td>\n <td data-head=\"Amount\"> {{ opportunities.one_time_amount / 100 | currency }} </td>\n <td data-head=\"WinChance\"> {{ opportunities.win_chances / 100 | percent }} <span class=\"text-danger\"\n *ngIf=\"opportunities.cancelled\">!Cancelled!</span>\n </td>\n <td data-head=\"Monthly Amount\"> {{ opportunities.monthly_amount / 100 | currency }} </td>\n <td data-head=\"Stage\">\n <span class=\"badge\" [appDynamicBadge]=\"{\n itemsArray: stages,\n item: opportunities?.crm_opportunity_stage?.name\n }\" color=\"cyan\">{{ opportunities?.crm_opportunity_stage?.name }}</span>\n </td>\n <td data-head=\"Categories\">\n <span *ngFor=\"let category of opportunities?.crm_opportunity_categories\" class=\"badge ms-1\"\n [appDynamicBadge]=\"{ itemsArray: categories, item: category?.name }\" color=\"blue-grey\">{{ category?.name\n }}</span>\n </td>\n <td data-head=\"Starting At\"> {{ opportunities.starting_at | dateFormat }} </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <ng-container *ngIf=\"hasAccess || opportunities?.owner_id === userId\">\n <ng-container *rbacAllow=\"'Pages.Product.CRM.Role.Admin'\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-3\" [routerLink]=\"[\n '/' + subscription?.slug + routers.opportunities,\n opportunities.id\n ]\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-3\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(opportunities.id)\" aria-hidden=\"true\"></i>\n </li>\n </ng-container>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"data.object_count === 0 && data.unfiltered_count !== 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage'| transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n <span class=\"total-records-count\" *ngIf=\"data.object_count !== 0\">{{ 'Label.Total' | transloco }}: {{ data.object_count }}</span>\n </div>\n </div>\n</div>\n<div *ngIf=\"data.unfiltered_count === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoOpportunitiesMessage' | transloco\">\n </pw-no-data>\n</div>\n<ng-container *rbacAllow=\"'Pages.Beta'\">\n <div class=\"row mt-5\" *ngIf=\"data.unfiltered_count !== 0 && isLoaded\">\n <!-- Drill Down -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Drill Down</h5>\n <div class=\"primeng-datatable-container table-responsive\" *ngIf=\"opportunitiesInsight?.length\">\n <p-table class=\"table\" #dt [value]=\"opportunitiesInsight\" [paginator]=\"opportunitiesInsight?.length !== 0\" [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"opportunitiesInsight.length\" [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.OpportunitiesMessage.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.OpportunitiesMessage.Value' | transloco }}</th>\n <th scope=\"true\"> {{ 'Crm.OpportunitiesMessage.Reason' | transloco }} </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-insight>\n <tr>\n <td data-head=\"Title\"> {{ insight.title }} </td>\n <td data-head=\"Value\"> {{ insight.value }} </td>\n <td data-head=\"Reason\"> {{ insight.reason }} </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"opportunitiesInsight?.length !== 0\">{{ 'Label.Total' | transloco }}: {{ opportunitiesInsight.length }}</span>\n </div>\n <div *ngIf=\"opportunitiesInsight?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n <!-- Geography -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Geography</h5>\n <div>\n <ng-template [ngIf]=\"opportunitiesGeography\">\n <plotly-plot [data]=\"opportunitiesGeography?.data\" [layout]=\"opportunitiesGeography?.layout\">\n </plotly-plot>\n </ng-template>\n </div>\n <div *ngIf=\"!opportunitiesGeography\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.OpportunitiesMessage.NoInsightMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n </div>\n</ng-container>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-opportunities',\n templateUrl: './smart-crm-opportunities.component.html',\n styleUrls: ['./smart-crm-opportunities.component.scss']\n})\nexport class SmartCrmOpportunitiesComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>Opportunities</h2>\n <p>In this section you can track your business opportunities.</p>\n </div>\n</div>\n\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>List</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-opportunities-list></pw-smart-crm-opportunities-list>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\">\n <a ngbNavLink>Board view</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-board></pw-smart-crm-board>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { DOCUMENT } from '@angular/common';\nimport { Component, Inject, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { ROUTERS } from '../../../../shared/routers/routers';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport uniqBy from 'lodash/uniqBy';\nimport swal from 'sweetalert2';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription } from '@posiwise/common-utilities';\nimport { HelperService } from '@posiwise/helper-service';\nimport moment from 'moment';\n\n@Component({\n selector: 'pw-smart-crm-summary-actions',\n templateUrl: './smart-crm-summary-actions.component.html',\n styleUrls: ['./smart-crm-summary-actions.component.scss']\n})\nexport class SmartCrmSummaryActionsComponent extends AppBaseComponent implements OnInit, OnDestroy {\n contactActions = [];\n\n isLoaded = false;\n\n contactId: number;\n\n p: number;\n\n p1: number;\n\n accountActionSuggested = [];\n\n updating = false;\n\n actionId: number;\n\n dangerColor: boolean;\n\n isLoadedSuggested = false;\n\n userId: number;\n\n showFullComment = false;\n\n commentId: number;\n\n allSubscriptionMembers: any;\n\n contactActionsAll = [];\n\n showFilter = false;\n\n subscription: Subscription;\n\n selector = '.pending-actions-wrapper';\n\n private totalPendingActions = 0;\n\n currentPage = 1;\n\n routers = ROUTERS;\n\n constructor(\n private crmService: CrmService,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getAccountActions();\n this.getAccountActionSuggested(this.subscription?.id);\n }\n });\n this.userStore().subscribe(res => {\n if (res) {\n this.userId = res.id;\n }\n });\n }\n\n onScrollPendingActions() {\n this.currentPage++;\n const totalPages = Math.ceil(this.totalPendingActions / 5);\n // Prevent API call if all records have been fetched\n if (this.currentPage <= totalPages) {\n this.getAccountActions();\n }\n }\n\n /** Function to get all actions */\n private getAccountActions() {\n this.crmService\n .getAccountActions(this.subscription?.id, { page: this.currentPage, page_size: 5 })\n .subscribe({\n next: response => {\n if (response?.crm_account_actions?.length) {\n this.totalPendingActions = response?.object_count;\n this.contactActionsAll = [\n ...this.contactActionsAll,\n ...response.crm_account_actions\n ];\n // unique values\n this.contactActionsAll = [\n ...uniqBy(this.contactActionsAll.reverse(), 'id').reverse()\n ];\n this.contactActionsAll.forEach(data => {\n data.when_short_date = moment(data.when).format('DD-MM-YYYY');\n const diff = moment(new Date(data.when)).diff(\n moment(new Date()),\n 'days'\n );\n if (moment(new Date(data.when)) < moment(new Date())) {\n data['due'] = `Overdue by ${Math.abs(diff)} days`;\n data['color'] = this.dangerColor;\n } else {\n data['due'] = `In ${diff} days`;\n data['color'] = !this.dangerColor;\n }\n });\n this.contactActionsAll.sort((a, b) => {\n return (\n <any>new Date(a.when).getTime() - <any>new Date(b.when).getTime()\n );\n });\n this.contactActions = [...this.contactActionsAll];\n this.allSubscriptionMembers = [];\n const ownerObject = {};\n this.contactActionsAll.forEach(data => {\n const { id } = data.owner;\n ownerObject[id] = data.owner;\n });\n // eslint-disable-next-line no-restricted-syntax\n for (const i of Object.keys(ownerObject)) {\n this.allSubscriptionMembers.push(ownerObject[i]);\n }\n this.showFilter = false;\n if (this.allSubscriptionMembers.length > 1) {\n this.showFilter = true;\n }\n }\n }\n })\n .add(() => {\n this.isLoaded = true;\n });\n }\n\n /** Function to get account action suggested */\n private getAccountActionSuggested(subscription_id: number) {\n this.crmService\n .getAccountActionSuggested(subscription_id)\n .subscribe(response => {\n this.accountActionSuggested = response?.crm_account_actions || [];\n })\n .add(() => {\n this.isLoadedSuggested = true;\n });\n }\n\n editComment(event) {\n const comments = this.document.getElementsByClassName('comment-section');\n if (event !== undefined) {\n if (event.target.closest('.comment-section').classList.contains('show-controls')) {\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n } else {\n event.target.closest('.comment-section').classList.add('show-controls');\n }\n } else {\n for (let i = 0; i < comments.length; i++) {\n comments[i].classList.remove('show-controls');\n }\n }\n\n // if(event.target.closest('.comment-section').classList.find())\n }\n\n updateComment(action) {\n const commentObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('comment updated successfully');\n this.editComment(undefined);\n this.getAccountActions();\n });\n }\n\n /** Function to set the action as completed */\n setAsCompleted(id: number, action, index: number) {\n return swal\n .fire({\n title: 'Completed',\n html: `Are you sure you want to set as Completed?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: true,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.contactActions.splice(index, 1);\n });\n }\n });\n }\n\n /** Function to set the action as cancelled */\n setAsCancelled(id: number, action, index: number) {\n return swal\n .fire({\n title: 'Cancel',\n html: `Are you sure you want to set as cancelled?`,\n showCancelButton: true,\n reverseButtons: true,\n icon: 'warning'\n })\n .then(res => {\n if (res.value) {\n const actionObj = {\n comment: action.comment,\n completed: action.completed,\n cancelled: true\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, id, actionObj)\n .subscribe(() => {\n this.toast.success(\n this.translation.translate('Crm.Settings.UpdatedMessage')\n );\n this.contactActions.splice(index, 1);\n });\n }\n });\n }\n\n /** Function to show DatePicker */\n showDatePicker(actionId: number) {\n this.updating = !this.updating;\n this.actionId = actionId;\n }\n\n /** Function to update the date */\n onDateSelect(event, action) {\n const commentObj = {\n when: HelperService.dateFormat(event),\n comment: action.comment,\n completed: action.completed,\n cancelled: action.cancelled\n };\n this.crmService\n .updateAccountComment(this.subscription?.id, action.id, commentObj)\n .subscribe(() => {\n this.toast.success('date updated successfully');\n this.getAccountActions();\n this.updating = false;\n });\n }\n\n /** Function to filter the data by user */\n filterByUser(event) {\n const userId = event.target.value;\n if (userId !== '0') {\n const filteredData = this.contactActionsAll.filter(\n action => action.owner_id === Number(userId)\n );\n this.contactActions = filteredData;\n } else {\n this.contactActions = this.contactActionsAll;\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <div class=\"col-12 mb-3\">\n <div class=\"col-12 col-sm-3 float-start mb-2\"\n *ngIf=\"showFilter\">\n <select class=\"form-select\"\n (change)=\"filterByUser($event)\">\n <option value=\"0\">Filter by user</option>\n <option *ngFor=\"let member of allSubscriptionMembers\"\n [value]=\"member.id\">\n {{ member.first_name }} {{ member.last_name }}\n </option>\n </select>\n </div>\n <div>\n <a class=\"btn btn-sm btn-outline-primary float-end\"\n data-cy=\"add-contact\"\n [routerLink]=\"['/' + subscription?.slug + routers.addAccount]\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.AccountMessage.AddAccount' | transloco }}\n </a>\n <a class=\"btn btn-sm btn-outline-primary float-end me-3\"\n [routerLink]=\"['/' + subscription?.slug + routers.contactDetails, 0]\"\n data-cy=\"add-action\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Crm.ContactMessage.AddContact' | transloco }}\n </a>\n </div>\n </div>\n <!-- Pending Actions -->\n <div class=\"col-12 col-md-6 mb-3\">\n <h5 class=\"accordion-heading\">Pending Actions</h5>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div *ngIf=\"contactActions?.length === 0 && isLoaded\"\n class=\"px-2\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.SummaryMessage' | transloco\"> </pw-no-data>\n </div>\n <!-- wrapper for infinite scroll -->\n <div class=\"pending-actions-wrapper\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n [infiniteScrollContainer]=\"selector\"\n [fromRoot]=\"true\"\n (scrolled)=\"onScrollPendingActions()\">\n <div class=\"mb-4 action-card bg-white\"\n *ngFor=\"let action of contactActions; let i = index\">\n <div class=\"p-2\">\n <ul class=\"list-inline\">\n <li class=\"list-inline-item me-2\">\n <h6 *ngIf=\"!updating || actionId !== action.id\">\n {{ action.when_short_date }}\n </h6>\n <input *ngIf=\"updating && actionId === action.id\"\n placeholder=\"yyyy-mm-dd\"\n [value]=\"action.when_short_date\"\n ngbDatepicker\n #d=\"ngbDatepicker\"\n (focus)=\"d.toggle()\"\n (dateSelect)=\"onDateSelect($event, action)\" />\n </li>\n <li>\n <button type=\"button\"\n class=\"btn btn-sm when-btn\"\n (click)=\"showDatePicker(action?.id)\">\n <i\n class=\"fa fa-edit edit-icon\"\n ngbTooltip=\"Click to Edit\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </li>\n <li class=\"list-inline-item\">\n <span class=\"badge bg-primary\">{{ action.crm_action?.name }}</span>\n </li>\n <li class=\"list-inline-item float-end\">\n <a *ngIf=\"action?.crm_contact\"\n ngbTooltip=\"See this contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n action?.crm_contact?.id\n ]\">\n <i class=\"fa fa-eye me-3 see-icon\" aria-hidden=\"true\"></i>\n </a>\n <a ngbTooltip=\"Set as completed\"\n class=\"me-3\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCompleted(action.id, action, i)\">\n <i class=\"fa fa-tasks cta1-icon\" aria-hidden=\"true\"></i>\n </a>\n <a ngbTooltip=\"Set as cancelled\"\n href=\"javascript:void(0);\"\n (click)=\"setAsCancelled(action.id, action, i)\">\n <i\n class=\"fa fa-times text-danger delete-icon\"\n aria-hidden=\"true\"\n ></i>\n </a>\n </li>\n </ul>\n <p [class.text-danger]=\"!action.color\"\n class=\"mb-0\"\n *ngIf=\"action.due\">\n {{ action.due }}\n </p>\n <p *ngIf=\"action.owner?.id !== userId\"\n class=\"m-0 mt-1\">\n <a class=\"font-italic grey\"\n [routerLink]=\"['/members', action?.owner?.slug]\">Added by\n {{ action.owner?.first_name + ' ' + action.owner?.last_name }}</a>\n </p>\n <p class=\"mt-1 mb-1 fw-bold\">\n <a class=\"text-secondary\"\n *ngIf=\"action?.crm_contact\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.contactInfo,\n action?.crm_contact?.id\n ]\">\n {{\n action?.crm_contact?.first_name +\n ' ' +\n action?.crm_contact?.last_name\n }}\n </a>\n <a *ngIf=\"!action.crm_contact_id\">N/A</a> at\n <a *ngIf=\"action.crm_account_id\"\n [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n action?.crm_account?.id\n ]\">\n {{ action?.crm_account?.name }}\n </a>\n </p>\n <div class=\"comment-section\">\n <textarea class=\"mt-1 textarea form-control mb-2\"\n [(ngModel)]=\"action.comment\">{{ action.comment }}</textarea>\n <div class=\"d-flex\">\n <p class=\"my-1 comment\"\n *ngIf=\"!showFullComment || action.id !== commentId\">\n {{ action.comment | slice: 0:230\n }}<a *ngIf=\"action.comment.length > 230\"\n class=\"text-secondary\"\n (click)=\"showFullComment = true; commentId = action.id\">...show more\n </a>\n </p>\n <p class=\"my-1 comment\"\n *ngIf=\"showFullComment && action.id === commentId\">\n {{ action.comment }}\n <a *ngIf=\"action.comment.length > 230 && showFullComment\"\n (click)=\"showFullComment = false\"\n class=\"text-secondary\">...show less</a>\n </p>\n <button class=\"btn btn-md edit-btn\"\n (click)=\"editComment($event)\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"control-btns edit-control-btns\">\n <button type=\"button\"\n class=\"btn btn-sm btn-outline-default me-2\"\n (click)=\"editComment(undefined)\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-sm btn-primary\"\n (click)=\"updateComment(action)\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Suggested Actions -->\n <div class=\"col-12 col-md-6 mb-3\">\n <h5 class=\"accordion-heading\">Suggested Actions</h5>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"mb-4 action-card bg-white\"\n *ngFor=\"\n let suggestedAction of accountActionSuggested\n | paginate: { id: 'suggestedAction', itemsPerPage: 10, currentPage: p1 };\n let i = index\n \">\n <div class=\"p-2\">\n <p class=\"mt-1 mb-1 fw-bold\">\n <a [routerLink]=\"[\n '/' + subscription?.slug + routers.accountInfo,\n suggestedAction?.crm_account?.id\n ]\">{{ suggestedAction?.crm_account?.name }}</a>\n </p>\n <p class=\"fw-bold mb-1\">{{ suggestedAction.crm_action }}</p>\n <p class=\"mb-0\">{{ suggestedAction.reason }}</p>\n </div>\n </div>\n <div class=\"text-center pagination-controls w-100 mt-3\"\n *ngIf=\"accountActionSuggested?.length > 10\">\n <pagination-controls id=\"suggestedAction\"\n (pageChange)=\"p1 = $event\">\n </pagination-controls>\n </div>\n <div *ngIf=\"accountActionSuggested.length === 0 && isLoadedSuggested\"\n class=\"px-2\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.SummarySuggestionsMessage' | transloco\">\n </pw-no-data>\n </div>\n </div>\n</div>\n","import { Component, Injector, OnDestroy, OnInit } from '@angular/core';\nimport { CrmService } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { Subscription, User,activeOpportunities,signedUpLastThirtyDays} from '@posiwise/common-utilities';\n@Component({\n selector: 'pw-smart-crm-summary-others',\n templateUrl: './smart-crm-summary-others.component.html'\n})\nexport class SmartCrmSummaryOthersComponent extends AppBaseComponent implements OnInit, OnDestroy {\n signedUpLastThirtyDays:signedUpLastThirtyDays[];\n\n activeOpportunities:activeOpportunities[];\n\n accountAtRisk:[];\n\n ContractRenewal:[];\n\n creditCardExpiring:[];\n\n magicMoment:[];\n\n user: User;\n\n signUpLastThirtyDaysLoaded = false;\n\n activeOpportunitiesLoaded = false;\n\n accountAtRiskDetailsLoaded = false;\n\n contactRenewalLoaded = false;\n\n creditCardExpiringDetailsLoaded = false;\n\n magicMomentLoaded = false;\n\n subscription: Subscription;\n\n constructor(\n private crmService: CrmService,\n injector: Injector\n ) {\n super(injector);\n }\n\n ngOnInit(): void {\n this.getUserSubscription().subscribe(response => {\n this.subscription = response;\n if (this.subscription?.id) {\n this.getUserInfo();\n }\n });\n }\n\n private getUserInfo() {\n this.userStore().subscribe(user => {\n if (user) {\n this.user = user;\n if (\n this.permissionService.isGranted('Pages.Beta') ||\n this.permissionService.isSuperAdmin()\n ) {\n this.getSignedUpLastThirtyDays();\n this.getActiveOpportunities();\n this.getAccountAtRiskDetails();\n this.getContactRenewal();\n this.getCreditCardExpiringDetails();\n this.getMagicMoment();\n }\n }\n });\n }\n\n /** Function to call signed up last 30 days details */\n private getSignedUpLastThirtyDays() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_signed_up_last_30_days')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.signedUpLastThirtyDays = [];\n } else this.signedUpLastThirtyDays = response;\n })\n .add(() => {\n this.signUpLastThirtyDaysLoaded = true;\n });\n }\n\n /** Function to call Active Opportunities details */\n private getActiveOpportunities() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_active_opportunities')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.activeOpportunities = [];\n } else this.activeOpportunities = response;\n })\n .add(() => {\n this.activeOpportunitiesLoaded = true;\n });\n }\n\n /** Function to call Account At Risk details */\n private getAccountAtRiskDetails() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_accounts_at_risk')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.accountAtRisk = [];\n } else this.accountAtRisk = response;\n\n })\n .add(() => {\n this.accountAtRiskDetailsLoaded = true;\n });\n }\n\n /** Function to call Contract renewal details */\n private getContactRenewal() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'accounts_contract_renewal')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.ContractRenewal = [];\n } else this.ContractRenewal = response;\n })\n .add(() => {\n this.contactRenewalLoaded = true;\n });\n }\n\n /** Function to call Credit Card Expiring details */\n private getCreditCardExpiringDetails() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'credit_card_expiring')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.creditCardExpiring = [];\n } else this.creditCardExpiring = response;\n })\n .add(() => {\n this.creditCardExpiringDetailsLoaded = true;\n });\n }\n /** Function to call magic moment */\n private getMagicMoment() {\n this.crmService\n .getCrmAnalytics(this.subscription?.id, 'magic_moment')\n .subscribe(response => {\n if (typeof response === 'object' && Object.keys(response).length === 0) {\n this.magicMoment = [];\n } else this.magicMoment = response;\n })\n .add(() => {\n this.magicMomentLoaded = true;\n });\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n}\n","<div class=\"row\">\n <ng-container class=\"mt-5\"\n *rbacAllow=\"'Pages.Beta'\">\n <!-- Signed up last 30 days -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Signed up Last 30 Days</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!signUpLastThirtyDaysLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"signedUpLastThirtyDays?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"signedUpLastThirtyDays\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n [totalRecords]=\"signedUpLastThirtyDays.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-signUp>\n <tr>\n <td data-head=\"Owner\">\n {{ signUp.owner?.first_name }} {{ signUp.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ signUp.contact_name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ signUp.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ signedUpLastThirtyDays.length }}</span>\n </div>\n <div *ngIf=\"signedUpLastThirtyDays?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Active Opportunities -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Active Opportunities</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!activeOpportunitiesLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"activeOpportunities?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"activeOpportunities\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"activeOpportunities.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Title' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Account' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.OneTimeAmount' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.WinChance' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.MonthlyAmount' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-opportunities>\n <tr>\n <td data-head=\"Title\">\n {{ opportunities.title }}\n </td>\n <td data-head=\"Contact Name\">\n {{ opportunities.crm_contact?.first_name }}\n {{ opportunities.crm_contact?.last_name }}\n </td>\n <td data-head=\"Account\">\n {{ opportunities.crm_account?.name }}\n </td>\n <td data-head=\"One Time Amount\">\n {{ opportunities.one_time_amount / 100 | currency }}\n </td>\n <td data-head=\"Monthly Amount\">\n {{ opportunities.monthly_amount / 100 | currency }}\n </td>\n <td data-head=\"Win Chance\">\n {{ opportunities.win_chances | percent }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ activeOpportunities.length }}</span>\n </div>\n <div *ngIf=\"activeOpportunities?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Accounts at risk -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Accounts at Risk</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!accountAtRiskDetailsLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"accountAtRisk?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"accountAtRisk\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"accountAtRisk.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ accountAtRisk.length }}</span>\n </div>\n <div *ngIf=\"accountAtRisk?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Contract renewal -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Contract Renewal</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!contactRenewalLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"ContractRenewal?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"ContractRenewal\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"ContractRenewal.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ ContractRenewal.length }}</span>\n </div>\n <div *ngIf=\"ContractRenewal?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Credit Card Expiring -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Credit Card Expiring</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!creditCardExpiringDetailsLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"creditCardExpiring?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"creditCardExpiring\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"creditCardExpiring.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ creditCardExpiring.length }}</span>\n </div>\n <div *ngIf=\"creditCardExpiring?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n <!-- Magic Moment -->\n <div class=\"col-12 col-md-6 mb-3 analytics\">\n <h5 class=\"accordion-heading\">Magic Moment</h5>\n <div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!magicMomentLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </ng-template>\n </div>\n <div class=\"primeng-datatable-container table-responsive\"\n *ngIf=\"magicMoment?.length\">\n <p-table class=\"table\"\n #dt\n [value]=\"magicMoment\"\n [paginator]=\"true\"\n [rows]=\"PAGE_SIZE\"\n\n [totalRecords]=\"magicMoment.length\"\n [lazy]=\"true\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Crm.Summary.Owner' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactName' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.Organisation' | transloco }}</th>\n <th scope=\"true\">{{ 'Crm.Summary.ContactEmail' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-account>\n <tr>\n <td data-head=\"Owner\">\n {{ account.owner?.first_name }} {{ account.owner?.last_name }}\n </td>\n <td data-head=\"Contact Name\">\n {{ account.contact_name }}\n </td>\n <td data-head=\"Organisation\">\n {{ account.name }}\n </td>\n <td data-head=\"Contact Email\">\n {{ account.contact_email }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\">{{ 'Label.Total' | transloco }}: {{ magicMoment.length }}</span>\n </div>\n <div *ngIf=\"magicMoment?.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Crm.Summary.NoInsightMessage' | transloco\"> </pw-no-data>\n </div>\n </div>\n </ng-container>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'pw-smart-crm-summary',\n templateUrl: './smart-crm-summary.component.html',\n styleUrls: ['./smart-crm-summary.component.scss']\n})\nexport class SmartCrmSummaryComponent {}\n","<div class=\"row\">\n <div class=\"col-12 mb-0\">\n <h2>{{ 'Crm.SmartCrmSummary' | transloco }}</h2>\n <p>In this section you can see your CRM at a glance.</p>\n </div>\n</div>\n<ul ngbNav\n #nav=\"ngbNav\"\n class=\"nav-tabs\">\n <li [ngbNavItem]=\"1\">\n <a ngbNavLink>Actions</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-summary-actions></pw-smart-crm-summary-actions>\n </ng-template>\n </li>\n <li [ngbNavItem]=\"2\"\n *rbacAllow=\"'Pages.Beta'\">\n <a ngbNavLink>Other</a>\n <ng-template ngbNavContent>\n <pw-smart-crm-summary-others></pw-smart-crm-summary-others>\n </ng-template>\n </li>\n</ul>\n\n<div [ngbNavOutlet]=\"nav\"></div>\n","import { Component, Injector } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { CRM_PERMISSIONS } from '@posiwise/smart-crm-shared';\n\n@Component({\n selector: 'pw-smart-crm-private-tabs',\n template: `<pw-tabs [items]=\"items\" [withSubscription]=\"true\"></pw-tabs>`\n})\nexport class SmartCrmTabsComponent extends AppBaseComponent {\n items: MenuItem[];\n\n constructor(injector: Injector) {\n super(injector);\n this.items = [\n {\n id: 'summary_tab',\n label: 'Summary',\n icon: 'fa fa-fw fa-list',\n routerLink: ['/crm/summary'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Summary}`)\n },\n {\n id: 'accounts_tab',\n label: 'Accounts',\n icon: 'fas fa-user-friends',\n routerLink: ['/crm/accounts'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Accounts}`)\n },\n {\n id: 'contacts_tab',\n label: 'Contacts',\n icon: 'fa fa-fw fa-users',\n routerLink: ['/crm/contacts'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Contacts}`)\n },\n {\n id: 'leads_tab',\n label: 'Leads',\n icon: 'fa fa-fw fa-cog',\n routerLink: ['/crm/leads'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Leads}`)\n },\n {\n id: 'opportunities_tab',\n label: 'Opportunities',\n icon: 'fa fa-handshake',\n routerLink: ['/crm/opportunities'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Opportunities}`\n )\n },\n {\n id: 'marketing_tab',\n label: 'Marketing',\n icon: 'fas fa-bullhorn',\n routerLink: ['/crm/marketing'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Marketing}`)\n },\n {\n id: 'customer-success',\n label: 'Customer Success',\n icon: 'fa fa-check-circle',\n routerLink: ['/crm/customer-success'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.CustomerSuccess}`\n )\n },\n {\n id: 'competition',\n label: 'Competition',\n icon: 'fa fa-trophy',\n routerLink: ['/crm/competition'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Competition}`\n )\n },\n {\n id: 'insight_tab',\n label: 'Insight',\n icon: 'fa fa-fw fa-signature',\n routerLink: ['/crm/insight'],\n visible: this.permissionService.evaluatePermissions(`${CRM_PERMISSIONS.Insight}`)\n },\n {\n id: 'configuration_tab',\n label: 'Configuration',\n icon: 'fa fa-fw fa-cog',\n routerLink: ['/crm/configuration'],\n visible: this.permissionService.evaluatePermissions(\n `${CRM_PERMISSIONS.Configuration}`\n )\n }\n ];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { SmartCrmCompanyDetailsComponent } from './components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nimport { SmartCrmCompanyInfoComponent } from './components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nimport { SmartCrmCompaniesComponent } from './components/smart-crm-accounts/smart-crm-accounts.component';\nimport { SmartCrmCompetitionComponent } from './components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nimport { SmartCrmSettingsDetailsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nimport { SmartCrmConfigurationComponent } from './components/smart-crm-configuration/smart-crm-configuration.component';\nimport { SmartCrmOpportunityCategoriesDetailsComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nimport { SmartCrmSourceDetailsComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nimport { SmartCrmStageDetailsComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nimport { SmartCrmWidgetsDetailsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nimport { SmartCrmContactDetailsComponent } from './components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nimport { SmartCrmContactInfoComponent } from './components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nimport { SmartCrmContactComponent } from './components/smart-crm-contacts/smart-crm-contacts.component';\nimport { SmartCrmCustomerSuccessComponent } from './components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nimport { SmartCrmInsightComponent } from './components/smart-crm-insight/smart-crm-insight.component';\nimport { SmartCrmLeadsDetailsComponent } from './components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nimport { SmartCrmLeadsComponent } from './components/smart-crm-leads/smart-crm-leads.component';\nimport { SmartCrmCommunicationsDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nimport { SmartCrmCommunicationsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nimport { SmartCrmMarketingViewComponent } from './components/smart-crm-marketing/smart-crm-marketing.component';\nimport { SmartCrmOpportunitiesDetailsComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nimport { SmartCrmOpportunitiesInfoComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nimport { SmartCrmOpportunitiesComponent } from './components/smart-crm-opportunities/smart-crm-opportunities.component';\nimport { SmartCrmSummaryComponent } from './components/smart-crm-summary/smart-crm-summary.component';\nimport { SmartCrmTabsComponent } from './components/smart-crm-tabs/smart-crm-tabs.component';\n\nimport { PageAccessGuard } from '@posiwise/core-guards';\nimport { CRM_PERMISSIONS } from '@posiwise/smart-crm-shared';\n\n// These are the private routes. The public routes and modules needs to be defined in public.routes.ts\nconst routes: Routes = [\n {\n path: '',\n component: SmartCrmTabsComponent,\n data: {\n title: 'Smart CRM Modules',\n permission: `${CRM_PERMISSIONS.SmartCrmModules}`\n },\n canActivate: [PageAccessGuard], // Gets called for the current route\n canActivateChild: [PageAccessGuard], // Gets called for the children route\n children: [\n {\n path: '',\n redirectTo: '/home',\n pathMatch: 'full'\n },\n {\n path: 'summary',\n component: SmartCrmSummaryComponent\n },\n //////////////////////\n // Accounts view\n //////////////////////\n {\n path: 'accounts',\n component: SmartCrmCompaniesComponent\n },\n {\n path: 'accounts/:id',\n component: SmartCrmCompanyDetailsComponent\n },\n {\n path: 'accounts/add',\n component: SmartCrmCompanyDetailsComponent\n },\n {\n path: 'accounts/info/:id',\n component: SmartCrmCompanyInfoComponent\n },\n //////////////////////\n // Contacts view\n //////////////////////\n {\n path: 'contacts',\n component: SmartCrmContactComponent\n },\n {\n path: 'contacts/:accountId',\n component: SmartCrmContactComponent\n },\n {\n path: 'contacts/detail/:id',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/add/:accountId',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/add',\n component: SmartCrmContactDetailsComponent\n },\n {\n path: 'contacts/info/:id',\n component: SmartCrmContactInfoComponent\n },\n //////////////////////\n // Opportunities view\n //////////////////////\n {\n path: 'opportunities',\n component: SmartCrmOpportunitiesComponent\n },\n {\n path: 'opportunities/:id',\n component: SmartCrmOpportunitiesDetailsComponent\n },\n {\n path: 'opportunities/add',\n component: SmartCrmOpportunitiesDetailsComponent\n },\n {\n path: 'opportunities/info/:id',\n component: SmartCrmOpportunitiesInfoComponent\n },\n //////////////////////\n // Leads view\n //////////////////////\n {\n path: 'leads',\n component: SmartCrmLeadsComponent\n },\n {\n path: 'leads/details/add',\n component: SmartCrmLeadsDetailsComponent\n },\n {\n path: 'leads/details/:Id',\n component: SmartCrmLeadsDetailsComponent\n },\n //////////////////////\n // Marketing view\n //////////////////////\n {\n path: 'marketing',\n component: SmartCrmCommunicationsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/details/add',\n component: SmartCrmCommunicationsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/details/:Id',\n component: SmartCrmCommunicationsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n {\n path: 'marketing/:Id',\n component: SmartCrmMarketingViewComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Marketing}`\n }\n },\n //////////////////////\n // Customer Success view\n //////////////////////\n {\n path: 'customer-success',\n component: SmartCrmCustomerSuccessComponent,\n data: {\n permission: `${CRM_PERMISSIONS.CustomerSuccess}`\n }\n },\n //////////////////////\n // Competition view\n //////////////////////\n {\n path: 'competition',\n component: SmartCrmCompetitionComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Competition}`\n }\n },\n //////////////////////\n // Insight view\n //////////////////////\n {\n path: 'insight',\n component: SmartCrmInsightComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Insight}`\n }\n },\n //////////////////////\n // Configuration view\n //////////////////////\n {\n path: 'configuration',\n component: SmartCrmConfigurationComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/:tabId',\n component: SmartCrmConfigurationComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/detail/add',\n component: SmartCrmSettingsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/detail/:id',\n component: SmartCrmSettingsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/source-details/:id',\n component: SmartCrmSourceDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/source-details/add',\n component: SmartCrmSourceDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/stage-details/:id',\n component: SmartCrmStageDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/stage-details/add',\n component: SmartCrmStageDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/category-details/:id',\n component: SmartCrmOpportunityCategoriesDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/category-details/add',\n component: SmartCrmOpportunityCategoriesDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget-details/:id',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/widget-details/add',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n },\n {\n path: 'configuration/admin',\n component: SmartCrmWidgetsDetailsComponent,\n data: {\n permission: `${CRM_PERMISSIONS.Configuration}`\n }\n }\n ]\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class SmartCrmPrivateRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { TRANSLOCO_SCOPE } from '@ngneat/transloco';\nimport { SmartCrmCompanyDetailsComponent } from './components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nimport { SmartCrmCompanyFilesComponent } from './components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component';\nimport { SmartCrmCompanyInfoComponent } from './components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nimport { SmartCrmCompaniesComponent } from './components/smart-crm-accounts/smart-crm-accounts.component';\nimport { SmartCrmCompetitionComponent } from './components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nimport { SmartCrmSettingsDetailsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nimport { SmartCrmActionsComponent } from './components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component';\nimport { SmartCrmConfigurationComponent } from './components/smart-crm-configuration/smart-crm-configuration.component';\nimport { SmartCrmOpportunityCategoriesDetailsComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nimport { SmartCrmOpportunityCategoriesComponent } from './components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component';\nimport { SmartCrmSourceDetailsComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nimport { SmartCrmCompanySourceComponent } from './components/smart-crm-configuration/smart-crm-source/smart-crm-source.component';\nimport { SmartCrmStageDetailsComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nimport { SmartCrmStagesComponent } from './components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component';\nimport { SmartCrmWidgetsDetailsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nimport { SmartCrmWidgetsComponent } from './components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component';\nimport { SmartCrmContactDetailsComponent } from './components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nimport { SmartCrmContactInfoComponent } from './components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nimport { SmartCrmContactComponent } from './components/smart-crm-contacts/smart-crm-contacts.component';\nimport { SmartCrmCustomerSuccessComponent } from './components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nimport { SmartCrmInsightComponent } from './components/smart-crm-insight/smart-crm-insight.component';\nimport { SmartCrmOverviewComponent } from './components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component';\nimport { SmartCrmLeadsDetailsComponent } from './components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nimport { SmartCrmLeadsComponent } from './components/smart-crm-leads/smart-crm-leads.component';\nimport { SmartCrmMarketingUsersListComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component';\nimport { SmartCrmCommunicationsDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nimport { SmartCrmCommunicationsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nimport { SmartCrmCommunicationViewDetailsComponent } from './components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component';\nimport { SmartCrmMarketingViewComponent } from './components/smart-crm-marketing/smart-crm-marketing.component';\nimport { SmartCrmBoardComponent } from './components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component';\nimport { SmartCrmOpportunitiesDetailsComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nimport { SmartCrmOpportunitiesInfoComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nimport { SmartCrmOpportunitiesListComponent } from './components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';\nimport { SmartCrmOpportunitiesComponent } from './components/smart-crm-opportunities/smart-crm-opportunities.component';\nimport { SmartCrmSummaryActionsComponent } from './components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component';\nimport { SmartCrmSummaryOthersComponent } from './components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component';\nimport { SmartCrmSummaryComponent } from './components/smart-crm-summary/smart-crm-summary.component';\nimport { SmartCrmTabsComponent } from './components/smart-crm-tabs/smart-crm-tabs.component';\nimport { SmartCrmPrivateRoutingModule } from './smart-crm-private.routing.module';\nimport { NgxGpAutocompleteModule } from '@angular-magic/ngx-gp-autocomplete';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { QuillModule } from 'ngx-quill';\nimport { NgxUploaderModule } from 'ngx-uploader';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { SharedComponentsModule } from '@posiwise/shared-components';\nimport { CoreTranslocoModule } from '@posiwise/core-transloco';\nimport { DirectivesModule } from '@posiwise/directives';\nimport { PipesModule } from '@posiwise/pipes';\nimport { PlotlyViaCDNModule } from 'angular-plotly.js';\nimport { UiSwitchModule } from 'ngx-ui-switch';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { Loader } from '@googlemaps/js-api-loader';\nimport { AppConfigService } from '@posiwise/app-config-service';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { DropdownModule } from 'primeng/dropdown';\nPlotlyViaCDNModule.setPlotlyVersion('1.55.2');\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgxPaginationModule,\n PipesModule,\n InputTextModule,\n UiSwitchModule,\n DirectivesModule,\n ReactiveFormsModule,\n NgbModule,\n PlotlyViaCDNModule,\n NgxGpAutocompleteModule,\n SmartCrmPrivateRoutingModule,\n SharedComponentsModule,\n CoreTranslocoModule,\n DragDropModule,\n // SharedModule,\n QuillModule.forRoot(),\n NgxUploaderModule,\n InfiniteScrollModule,\n DropdownModule\n // LazyLoadModules\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {\n scope: 'smart-crm',\n alias: 'Crm'\n }\n },\n {\n provide: Loader,\n useFactory: (appConfigService: AppConfigService) => {\n return new Loader({\n apiKey: appConfigService.getGoogleApiKey(),\n libraries: ['places']\n });\n },\n deps: [AppConfigService]\n }\n ],\n declarations: [\n SmartCrmTabsComponent,\n SmartCrmSummaryComponent,\n SmartCrmCompaniesComponent,\n SmartCrmContactComponent,\n SmartCrmConfigurationComponent,\n SmartCrmSettingsDetailsComponent,\n SmartCrmContactDetailsComponent,\n SmartCrmCompanyDetailsComponent,\n SmartCrmInsightComponent,\n SmartCrmContactInfoComponent,\n SmartCrmLeadsComponent,\n SmartCrmOpportunitiesComponent,\n SmartCrmOpportunitiesDetailsComponent,\n SmartCrmBoardComponent,\n SmartCrmCommunicationsComponent,\n SmartCrmCompanyInfoComponent,\n SmartCrmCompanySourceComponent,\n SmartCrmCompanyFilesComponent,\n SmartCrmWidgetsComponent,\n SmartCrmCustomerSuccessComponent,\n SmartCrmCompetitionComponent,\n SmartCrmOpportunitiesInfoComponent,\n SmartCrmSourceDetailsComponent,\n SmartCrmWidgetsDetailsComponent,\n SmartCrmActionsComponent,\n SmartCrmOpportunitiesListComponent,\n SmartCrmOverviewComponent,\n SmartCrmSummaryActionsComponent,\n SmartCrmSummaryOthersComponent,\n SmartCrmCommunicationsDetailsComponent,\n SmartCrmCommunicationViewDetailsComponent,\n SmartCrmLeadsDetailsComponent,\n SmartCrmMarketingUsersListComponent,\n SmartCrmStagesComponent,\n SmartCrmStageDetailsComponent,\n SmartCrmMarketingViewComponent,\n SmartCrmOpportunityCategoriesComponent,\n SmartCrmOpportunityCategoriesDetailsComponent\n ],\n exports: [\n SmartCrmTabsComponent,\n SmartCrmSummaryComponent,\n SmartCrmCompaniesComponent,\n SmartCrmContactComponent,\n SmartCrmConfigurationComponent,\n SmartCrmSettingsDetailsComponent,\n SmartCrmContactDetailsComponent,\n SmartCrmCompanyDetailsComponent,\n SmartCrmInsightComponent,\n SmartCrmContactInfoComponent,\n SmartCrmLeadsComponent,\n SmartCrmOpportunitiesComponent,\n SmartCrmOpportunitiesDetailsComponent,\n SmartCrmBoardComponent,\n SmartCrmCommunicationsComponent,\n SmartCrmCompanyInfoComponent,\n SmartCrmCompanySourceComponent,\n SmartCrmCompanyFilesComponent,\n SmartCrmWidgetsComponent,\n SmartCrmCustomerSuccessComponent,\n SmartCrmCompetitionComponent,\n SmartCrmOpportunitiesInfoComponent,\n SmartCrmSourceDetailsComponent,\n SmartCrmWidgetsDetailsComponent,\n SmartCrmActionsComponent,\n SmartCrmOpportunitiesListComponent,\n SmartCrmOverviewComponent,\n SmartCrmSummaryActionsComponent,\n SmartCrmSummaryOthersComponent,\n SmartCrmCommunicationsDetailsComponent,\n SmartCrmCommunicationViewDetailsComponent,\n SmartCrmLeadsDetailsComponent,\n SmartCrmMarketingUsersListComponent,\n SmartCrmStagesComponent,\n SmartCrmStageDetailsComponent,\n SmartCrmMarketingViewComponent,\n SmartCrmOpportunityCategoriesComponent,\n SmartCrmOpportunityCategoriesDetailsComponent\n ]\n})\nexport class SmartCrmPrivateModule {}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { StatusCodes } from 'http-status-codes';\n\n@Component({\n selector: 'pw-crm-newsletter-confirmation',\n templateUrl: './smart-crm-newsletter-confirmation.component.html',\n styleUrls: ['./smart-crm-newsletter-confirmation.component.scss']\n})\nexport class CrmNewsletterConfirmationComponent implements OnInit {\n token = '';\n\n email = '';\n\n message = '';\n\n errorMsg = '';\n\n error = false;\n\n // TODO: Move to en.json\n // success = 'Congratulations. You are successfully subscribed to our newsletter.';\n // failure =\n // \"We couldn't verify your subscription to our newsletter. If the problem persists, please contact our support team. \";\n\n constructor(\n private route: ActivatedRoute,\n private crmService: CrmService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.subscribe(params => {\n this.token = params['verification_token'] || '';\n this.email = params['email'] || '';\n if (this.token && this.email) {\n this.getNewsletterConfirmation();\n } else {\n this.message = 'You need to pass a valid token to be able to subscribe';\n }\n });\n }\n\n getNewsletterConfirmation() {\n this.crmService.crmLeadsConfirmEmail(this.email, this.token).subscribe({\n next: (response: any) => {\n if (response.status === StatusCodes.OK) {\n this.message = response.message;\n }\n },\n error: (err: HttpErrorResponse) => {\n this.message = err.error.message.error;\n }\n });\n }\n}\n","<pw-public-layout title=\"Newsletter Confirmation\">\n <div class=\"login-inner\">\n <div class=\"card-block public-inner\">\n <div class=\"message\">\n {{ message }}\n </div>\n <ng-container *ngIf=\"!message\">\n <div class=\"page-loading\">\n <img src=\"/assets/img/logos/oval.svg\"\n alt=\"\"\n class=\"loading-icon\" />\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mb-2\">\n <br /><br />\n <strong>\n <a class=\"footer-links me-4\"\n routerLink=\"/\">{{ 'Button.Home' | transloco }}</a>\n <a class=\"footer-links\"\n routerLink=\"/register\">{{\n 'User.Account.CreateAccount' | transloco\n }}</a>\n </strong>\n </div>\n</pw-public-layout>\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrmService } from '@posiwise/smart-crm-shared';\nimport { StatusCodes } from 'http-status-codes';\n\nimport { HelperService } from '@posiwise/helper-service';\n\n@Component({\n selector: 'pw-crm-newsletter-unsubscribe',\n templateUrl: './smart-crm-newsletter-unsubscribe.component.html'\n})\nexport class CrmNewsletterUnsubscribeComponent {\n token = '';\n\n message = '';\n\n errorMsg = '';\n\n error = false;\n\n success = \"You've successfully been removed from our newsletter.\";\n\n failure =\n 'Something went wrong and we were not able to unsubscribe you. If the problem persists, please contact us.';\n\n constructor(\n private route: ActivatedRoute,\n private crmService: CrmService\n ) {\n this.route.queryParams.subscribe(params => {\n this.token = params['crm_newsletter_token'] || '';\n if (this.token) {\n this.getNewsletterConfirmation();\n } else {\n this.error = true;\n this.errorMsg = this.failure;\n }\n });\n }\n\n getNewsletterConfirmation() {\n this.crmService.unsubscribeCrmContact(this.token).subscribe({\n next: (response: any) => {\n if (response.status === StatusCodes.OK) {\n this.message = this.success;\n } else {\n this.error = true;\n this.errorMsg = this.failure;\n }\n },\n error: error => {\n this.errorMsg = HelperService.getErrorMessage(error);\n this.error = true;\n }\n });\n }\n}\n","<pw-public-layout title=\"Newsletter Unsubscribe\">\n <div class=\"login-inner\">\n <div class=\"card-block public-inner\">\n <div class=\"alert alert-danger\"\n *ngIf=\"error\">\n <ng-container *ngIf=\"error\">\n {{ errorMsg }}\n </ng-container>\n </div>\n\n <div class=\"message\">\n {{ message }}\n </div>\n\n <ng-container *ngIf=\"!message && !error\">\n <div class=\"page-loading\">\n <img src=\"/assets/img/logos/oval.svg\"\n alt=\"\"\n class=\"loading-icon\" />\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"mb-2\">\n <br /><br /><br />\n <strong>\n <a class=\"footer-links me-4\"\n routerLink=\"/\">{{ 'Button.Home' | transloco }}</a>\n <a class=\"footer-links\"\n routerLink=\"/register\">{{\n 'User.Account.CreateAccount' | transloco\n }}</a>\n </strong>\n </div>\n</pw-public-layout>\n","import { Component, Injector, OnInit } from '@angular/core';\nimport { CRM_KEYS } from '@posiwise/smart-crm-shared';\n\nimport { AppBaseComponent } from '@posiwise/app-base-component';\nimport { AuthService } from '@posiwise/common-services';\n\n@Component({\n selector: 'pw-crm-signup',\n templateUrl: './smart-crm-signup.component.html',\n styleUrls: ['./smart-crm-signup.component.scss']\n})\nexport class CrmSignupComponent extends AppBaseComponent implements OnInit {\n subject: string;\n\n productKey = CRM_KEYS.CRM_Yearly;\n\n masterProductId = this.appConfig.master_subscription.product_id;\n\n constructor(\n private authService: AuthService,\n injector: Injector\n ) {\n super(injector);\n this.subject = 'SmartCRM Product Contact Request';\n }\n\n ngOnInit() {\n // Redirect user to the home if its already logged in\n this.authService.getToken$().subscribe(tok => {\n if (tok && typeof tok === 'string') {\n this.router.navigate(['home']);\n }\n });\n\n this.scrollableLeft();\n }\n\n private scrollableLeft() {\n $('.register').css('opacity', 1);\n }\n}\n","<div class=\"container-fluid register\">\n <div class=\"register-container row h-100\">\n <div class=\"col-8 col-xl-9 col-md-7 col-lg-8 register-outer\">\n <h1 class=\"my-5\">\n Not just a CRM <br />\n but\n <span data-period=\"3000\"\n class=\"txt-rotate\"\n [attr.data-rotate]=\"[\n 'Qualified Leads',\n 'New Prospects',\n 'New Business Opportunities'\n ]\"></span>\n <span class=\"blinking-cursor\">|</span>\n <br />regularly delivered to you\n </h1>\n\n <h3 class=\"my-5\">\n We use growth hacking tools - mainly crawlers and machine learning - to automate the\n sourcing of new prospect lists.\n </h3>\n\n <div class=\"row services\">\n <div class=\"col-lg-6 col-md-12 service-desc service-image\">\n <figure>\n <img src=\"/assets/img/products/smart-crm/crm-effective-solution.png\"\n alt=\"Effective Solution\"\n class=\"img-fluid\" />\n </figure>\n </div>\n <div class=\"col-lg-6 col-md-12 service-desc product-features text-start\">\n <h2><span>A More Effective</span> solution to increase your sales funnel.</h2>\n <p>Our proprietary technology automates the sourcing of new leads.</p>\n\n <ul class=\"list-unstyled\">\n <li>\n <span class=\"icon-check branding-color\"></span> Stop wasting time\n searching for new prospects. Let us automate the process instead.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> We provide all you need\n to contact prospects effectively.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Focus on what's really\n important - talking to your clients.\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"row services\">\n <div class=\"col-lg-6 col-md-12 service-desc product-features text-start\">\n <h2>The full power of <span>Machine Learning</span>.</h2>\n <p>\n We have built a system that is able to understand when a prospect is most\n likely to be looking for new vendors.\n </p>\n <ul class=\"list-unstyled\">\n <li>\n <span class=\"icon-check branding-color\"></span> Don't waste time. Reach\n out to prospects at exactly the right moment.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Let us tell you the most\n efficient way to engage in conversation with your prospect.\n </li>\n <li>\n <span class=\"icon-check branding-color\"></span> Maximize the chances to\n convert the prospect into a paying customer.\n </li>\n </ul>\n </div>\n <div class=\"col-lg-6 col-md-12 service-image\">\n <figure>\n <img src=\"/assets/img/products/smart-crm/crm-machine-learning.png\"\n alt=\"Machine Learning\"\n class=\"img-fluid\" />\n </figure>\n </div>\n </div>\n </div>\n\n <div class=\"register-right-wrapper\">\n <div class=\"register-right\">\n <ul class=\"nav nav-tabs nav-justified\"\n role=\"tablist\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\"\n id=\"login-tab\"\n data-bs-toggle=\"tab\"\n href=\"#login\"\n role=\"tab\"\n aria-controls=\"login\"\n aria-selected=\"true\">Login</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\"\n id=\"join-tab\"\n data-bs-toggle=\"tab\"\n href=\"#join\"\n role=\"tab\"\n aria-controls=\"join\"\n aria-selected=\"false\">Interested?</a>\n </li>\n </ul>\n\n <div class=\"tab-content social-inline\">\n <div class=\"tab-pane fade show\"\n id=\"join\"\n role=\"tabpanel\"\n aria-labelledby=\"join-tab\">\n <h3>\n Contact us for a demo.<br />\n It's worth more than a 1000 words.\n </h3>\n <pw-contact-us [masterProductId]=\"masterProductId\"\n [productKey]=\"productKey\"\n [subject]=\"subject\"></pw-contact-us>\n </div>\n\n <div class=\"tab-pane fade show active\"\n id=\"login\"\n role=\"tabpanel\"\n aria-labelledby=\"login-tab\">\n <h3>Welcome back</h3>\n <pw-login></pw-login>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { CrmNewsletterConfirmationComponent } from './components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nimport { CrmNewsletterUnsubscribeComponent } from './components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nimport { CrmSignupComponent } from './components/smart-crm-signup/smart-crm-signup.component';\n\n// These are the public routes. The public routes and modules needs to be defined in public.routes.ts\nconst routes: Routes = [\n {\n path: '',\n component: CrmSignupComponent,\n data: {\n title: 'Not just a CRM. We provide you with qualified leads.'\n }\n },\n {\n path: 'crm-newsletter-unsubscribe',\n component: CrmNewsletterUnsubscribeComponent,\n data: {\n title: 'CRM Unsubscribe Newsletter'\n }\n },\n {\n path: 'crm-newsletter-confirmation',\n component: CrmNewsletterConfirmationComponent,\n data: {\n title: 'CRM Newsletter Confirmation'\n }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class CrmPublicRoutingModule {}\n","import { NgModule } from '@angular/core';\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@ngneat/transloco';\nimport { CrmNewsletterConfirmationComponent } from './components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nimport { CrmNewsletterUnsubscribeComponent } from './components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nimport { CrmSignupComponent } from './components/smart-crm-signup/smart-crm-signup.component';\nimport { CrmPublicRoutingModule } from './smart-crm-public.routing.module';\n\nimport { ProductsShared } from '@posiwise/shared-product-components';\nimport { LayoutsModule } from '@posiwise/layouts';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n imports: [CrmPublicRoutingModule, ProductsShared, LayoutsModule, TranslocoModule, CommonModule],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {\n scope: 'smart-crm',\n alias: 'Crm'\n }\n }\n ],\n\n declarations: [\n CrmSignupComponent,\n CrmNewsletterUnsubscribeComponent,\n CrmNewsletterConfirmationComponent\n ]\n})\nexport class CRMPublicModule {}\n","// Private components\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';\nexport * from './lib/private/components/smart-crm-accounts/smart-crm-accounts.component';\nexport * from './lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-configuration.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';\nexport * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';\nexport * from './lib/private/components/smart-crm-contacts/smart-crm-contacts.component';\nexport * from './lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';\nexport * from './lib/private/components/smart-crm-insight/smart-crm-insight.component';\nexport * from './lib/private/components/smart-crm-insight/smart-crm-overview/smart-crm-overview.component';\nexport * from './lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';\nexport * from './lib/private/components/smart-crm-leads/smart-crm-leads.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component';\nexport * from './lib/private/components/smart-crm-marketing/smart-crm-marketing.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';\nexport * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary-others/smart-crm-summary-others.component';\nexport * from './lib/private/components/smart-crm-summary/smart-crm-summary.component';\nexport * from './lib/private/components/smart-crm-tabs/smart-crm-tabs.component';\nexport * from './lib/private/smart-crm-private.routing.module';\nexport * from './lib/private/smart-crm-private.module';\n\n// Public\nexport * from './lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';\nexport * from './lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';\nexport * from './lib/public/components/smart-crm-signup/smart-crm-signup.component';\nexport * from './lib/public/smart-crm-public.routing.module';\nexport * from './lib/public/smart-crm-public.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i6","i7","i8","i9","i12","i13","i14","i10","i11","i15","i16","i18.SmartCrmCompanyFilesComponent","i19","i20","i17","i4.SmartCrmCompanySourceComponent","i5.SmartCrmWidgetsComponent","i6.SmartCrmActionsComponent","i7.SmartCrmStagesComponent","i8.SmartCrmOpportunityCategoriesComponent","i14.SmartCrmCompanyFilesComponent","i3.SmartCrmOverviewComponent","i2.SmartCrmCommunicationViewDetailsComponent","i3.SmartCrmMarketingUsersListComponent","i13.SmartCrmCompanyFilesComponent","i2.SmartCrmBoardComponent","i3.SmartCrmOpportunitiesListComponent","i3.SmartCrmSummaryActionsComponent","i4.SmartCrmSummaryOthersComponent","routes"],"mappings":"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"}