src/Controller/HomeController.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\HubspotWebClientService;
  4. use App\Utils\HubspotTool;
  5. use HubSpot\Client\Crm\Companies\ApiException;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Twig\Environment;
  8. use App\Service\HubspotService;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. class HomeController extends AbstractController
  14. {
  15.     private HubspotService $hubspotService;
  16.     private \Twig\Loader\LoaderInterface $loader;
  17.     private HubspotWebClientService $hubspotWebClientService;
  18.     private string $current_env;
  19.     public function __construct(Environment $twig, HubspotService $hubspotService, HubspotWebClientService $hubspotWebClientService)
  20.     {
  21.         $this->loader = $twig->getLoader();
  22.         $this->hubspotService = $hubspotService;
  23.         $this->hubspotWebClientService = $hubspotWebClientService;
  24.     }
  25.     #[Route('/', name: 'home')]
  26.     public function index(): Response
  27.     {
  28.         $this->denyAccessUnlessGranted('ROLE_USER');
  29.         return $this->render('index.html.twig');
  30.     }
  31.     #[Route(
  32.         '/ajax-search-companies',
  33.         name: 'ajax_search_companies',
  34.         options: [
  35.             'expose' => true
  36.         ]
  37.     )]
  38.     public function ajaxSearchCompanies(Request $request): JsonResponse
  39.     {
  40.         $this->denyAccessUnlessGranted('ROLE_USER');
  41.         $searchTerm = $request->request->get('q');
  42.         $res = $this->hubspotService->searchCompanies($searchTerm, $request->request->get('page') ?? 1);
  43.         $response = new JsonResponse();
  44.         $response->setData($res);
  45.         return $response;
  46.     }
  47.     #[Route(
  48.         '/ajax-create-dashboard',
  49.         name: 'ajax_create_dashboard',
  50.         options: [
  51.             'expose' => true
  52.         ]
  53.     )]
  54.     public function ajaxCreateDashboard(Request $request): JsonResponse
  55.     {
  56.         $this->denyAccessUnlessGranted('ROLE_USER');
  57.         $res['success'] = false;
  58.         $dashboard = [];
  59.         $companies_id = json_decode($request->request->get('companies_id'));
  60.         if (empty($companies_id)) {
  61.             $res['success'] = false;
  62.             $res['error_msg'] = 'Please select at least one company';
  63.         } else {
  64.             $res['selected_compagnies'] = $companies_id;
  65.             $response = $this->hubspotWebClientService->getDashboard();
  66.             if ($response['success'] == false) {
  67.                 $res['success'] = false;
  68.                 $res['error_msg'] = is_array($response['error']) ? implode(', ', $response['error']) : $response['error'];
  69.             } elseif (empty($response['data'])) {
  70.                 $res['success'] = false;
  71.                 $res['error_msg'] = 'Empty result';
  72.             } else {
  73.                 $res['success'] = true;
  74.                 $dashboard = $response['data'];
  75.             }
  76.         }
  77.         if (!$res['success'] || empty($dashboard)) {
  78.             return $this->returnAjaxResponse($res);
  79.         }
  80.         // echo dashboard modele
  81. //        echo (json_encode($dashboard));
  82. //        die;
  83. //        dd($dashboard);
  84.         //dump($dashboard);
  85.         // Retrieve all owners
  86.         //$owners = $this->hubspotService->getHsClient()->crm()->owners()->getAll();
  87.         $owners = [];
  88.         $tmp_owners = $this->hubspotService->getHsClientV1()->owners()->all()->getData();
  89.         foreach ($tmp_owners as $owner) {
  90.             $owners[$owner->ownerId] = $owner;
  91.         }
  92.         unset($tmp_owners);
  93.         // Create a new dashboard
  94.         $new_dashboard = new \stdClass();
  95.         $new_dashboard->type = $dashboard->type;
  96.         $widgets = $dashboard->widgets;
  97.         $new_widgets = [];
  98.         $companies = [];
  99.         $company_names = [];
  100.         $main_company = null;
  101.         foreach($companies_id as $key => $company_id) {
  102.             try {
  103.                 $companies[] = $company = $this->hubspotService->getHsClientV1()->companies()->getById((int)$company_id);
  104.                 //echo json_encode($company);die; // display company properties
  105.                 $company_names[] = $company->getData()->properties->name->value;
  106.                 if ($key == 0) {
  107.                     $main_company = $company;
  108.                 }
  109. //                $company = $this->hubspotService->getHsClient()->crm()->companies()->basicApi()->getById((int)$company_id);
  110. //                $company_names[] = $company->getProperties()['name'];
  111.             } catch (ApiException $e) {
  112.                 $res['success'] = false;
  113.                 $res['error_msg'] = 'Exception when trying to get company data using => ' .
  114.                 ' hubspotService->getHsClient()->crm()->companies()->basicApi()->getById()';
  115.                 return $this->returnAjaxResponse($res);
  116.             }
  117.         }
  118.         $new_dashboard->name = join(', ', $company_names) . ' - ' . $dashboard->name;
  119.         $new_dashboard->description = "This dashboard has been created by our internal software here (futur link). <br><br>Compagnies that have been selected : " . join(', ', $company_names);
  120.         $new_dashboard->showDescription = true;
  121.         $this->current_env = $this->getParameter('kernel.environment');
  122.         foreach($widgets as $widget_id => $widget) {
  123.             $new_widget = new \stdClass();
  124.             $new_widget->report = new \stdClass();
  125.             //$new_widget->report = $widget->report;
  126.             //unset($new_widget->report->id);
  127.             $new_widget->report->name = $widget->report->name;
  128.             $new_widget->report->chartType = $widget->report->chartType;
  129.             $new_widget->report->permissionLevel = $widget->report->permissionLevel;
  130.             $new_widget->report->legacyReport = $widget->report->legacyReport;
  131.             if (isset($widget->report->config)) {
  132.                 $new_widget->report->config = $widget->report->config;
  133.                 if (isset($widget->report->config->crossObject->reportId)) {
  134.                     //unset($new_widget->report->config->crossObject->reportId);
  135.                 }
  136.                 if (isset($widget->report->config->crossObject->dashboardReportId)) {
  137.                     //unset($new_widget->report->config->crossObject->dashboardReportId);
  138.                 }
  139.                 // Account management team
  140.                 //85598279 Overall Strategy
  141.                 //Text to generate
  142.                 //if ($widget->reportId == '85598279') {
  143.                 // 88476282 sandbox
  144.                 // 83467923 prod
  145.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_management_team', $this->current_env)) {
  146.                     $fields = [
  147.                         'widget_name' => '',
  148.                         'Account Existing Segment' => ['type' => 'text', 'field' => 'account_existing_segment'],
  149.                         'Account Target Segment' => ['type' => 'text', 'field' => 'account_target_segment'],
  150.                         'Account status' => ['type' => 'text', 'field' => 'account_status'],
  151.                         'Account size' => ['type' => 'text', 'field' => 'account_size'],
  152.                         'Account Priority Level' => ['type' => 'text', 'field' => 'account_priority_level'],
  153.                         'Sector' => ['type' => 'text', 'field' => 'sector'],
  154.                         'Master Account Owner' => ['type' => 'owner', 'field' => 'master_account_owner'],
  155.                         'Master Account Owner 2' => ['type' => 'owner', 'field' => 'master_account_owner_2'],
  156.                         'Master Account Owner 3' => ['type' => 'owner', 'field' => 'master_account_owner_3'],
  157.                         'Delegate 1' => ['type' => 'owner', 'field' => 'delegate_owner'],
  158.                         'Delegate 1 perimeter' => ['type' => 'text', 'field' => 'delegate_1___perimeter'],
  159.                         'Delegate 2' => ['type' => 'owner', 'field' => 'delegate_2'],
  160.                         'Delegate 2 perimeter' => ['type' => 'text', 'field' => 'delegate_2___perimeter'],
  161.                         'Delegate 3' => ['type' => 'owner', 'field' => 'delegate_3'],
  162.                         'Delegate 3 perimeter' => ['type' => 'text', 'field' => 'delegate_3___perimeter'],
  163.                         'Delegate 4' => ['type' => 'owner', 'field' => 'delegate_4'],
  164.                         'Delegate 4 perimeter' => ['type' => 'text', 'field' => 'delegate_4___perimeter'],
  165.                         'Delegate 5' => ['type' => 'owner', 'field' => 'delegate_5'],
  166.                         'Delegate 5 perimeter' => ['type' => 'text', 'field' => 'delegate_5___perimeter'],
  167.                         'Delegate 6' => ['type' => 'owner', 'field' => 'delegate_6'],
  168.                         'Delegate 6 perimeter' => ['type' => 'text', 'field' => 'delegate_6___perimeter'],
  169.                         'Delegate 7' => ['type' => 'owner', 'field' => 'delegate_7'],
  170.                         'Delegate 7 perimeter' => ['type' => 'text', 'field' => 'delegate_7___perimeter'],
  171.                         'Delegate 8' => ['type' => 'owner', 'field' => 'delegate_8'],
  172.                         'Delegate 8 perimeter' => ['type' => 'text', 'field' => 'delegate_8___perimeter'],
  173.                         'Delegate 9' => ['type' => 'owner', 'field' => 'delegate_9'],
  174.                         'Delegate 9 perimeter' => ['type' => 'text', 'field' => 'delegate_9___perimeter'],
  175.                         'Delegate 10' => ['type' => 'owner', 'field' => 'delegate_10'],
  176.                         'Delegate 10 perimeter' => ['type' => 'text', 'field' => 'delegate_10___perimeter'],
  177.                     ];
  178.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  179.                 }
  180.                 // Sectorand account context widget
  181.                 // 88476283 sandbox
  182.                 // 83737402 prod
  183.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('sectorand_account_context', $this->current_env)) {
  184.                     $fields = [
  185.                         'widget_name' => 'Sectorand account context',
  186.                         'Sector / industry context and trends' => ['type' => 'text', 'field' => 'sector___industry_context_and_trends_'],
  187.                         'Account\'s context, vision, objective, projects' => ['type' => 'text', 'field' => 'account_s_context__vision__objectives__projects_'],
  188.                     ];
  189.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  190.                 }
  191.                 // AccountManagement Team approach
  192.                 // 88476284 sandbox
  193.                 // 83737466 prod
  194.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_management_team_approach', $this->current_env)) {
  195.                     $fields = [
  196.                         'widget_name' => 'AccountManagement Team approach based on account\'s context',
  197.                         'Sia Partners inbound strategy' => ['type' => 'text', 'field' => 'sia_partners__inbound_strategy'],
  198.                         'Sia Partners outbound strategy' => ['type' => 'text', 'field' => 'sia_partners__outbound_strategy'],
  199.                     ];
  200.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  201.                 }
  202.                 //85599214 Deals won this year (VS previous year)
  203.                 //if ($widget->reportId == '85599214') {
  204.                 // 88476285 sandbox
  205.                 // 83467924 prod
  206.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deal_won_this_year_vs_previous_year', $this->current_env)) {
  207.                     $new_widget->report->config->filters->custom[1] = [
  208.                         'operator' => 'IN',
  209.                         'property' => 'associations.company',
  210.                         'values' => $companies_id
  211.                     ];
  212.                 }
  213.                 // Deals won this year by company / subsidiary
  214.                 // 88476286 sandbox
  215.                 // 85751594 prod
  216.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deals_won_this_year_by_company_subsidiary', $this->current_env)) {
  217.                     $new_widget->report->config->filters->custom[1] = [
  218.                         'operator' => 'IN',
  219.                         'property' => 'associations.company',
  220.                         'values' => $companies_id
  221.                     ];
  222.                 }
  223.                 // Amount in each company / subsidiary by type of opportunity (in â‚¬) V2
  224.                 // 88476287 sandbox
  225.                 // 85752156 prod
  226.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('amount_in_each_company_subsidiary_by_type_of_opportunity', $this->current_env)) {
  227.                     $new_widget->report->config->filters->custom[1] = [
  228.                         'operator' => 'IN',
  229.                         'property' => 'associations.company',
  230.                         'values' => $companies_id
  231.                     ];
  232.                 }
  233.                 // Amount in each company / subsidiary by extension
  234.                 // 88476288 sandbox
  235.                 // 85752222 prod
  236.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('amount_in_each_company_subsidiary_by_extension', $this->current_env)) {
  237.                     $new_widget->report->config->filters->custom[1] = [
  238.                         'operator' => 'IN',
  239.                         'property' => 'associations.company',
  240.                         'values' => $companies_id
  241.                     ];
  242.                 }
  243.                 // Last semester retrospective - Financials - Texte
  244.                 // 88476293 sandbox
  245.                 // 83741117 prod
  246.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_last_semester_retrospective', $this->current_env)) {
  247.                     $fields = [
  248.                         'widget_name' => 'Last semester retrospective - Financials',
  249.                         'Last semester produced' => ['type' => 'text', 'field' => 'financials___last_semester_produced_'],
  250.                         'Cross-sell by bu' => ['type' => 'text', 'field' => 'financials___cross_sell_by_bu_'],
  251.                         'Breakdown by geography' => ['type' => 'text', 'field' => 'financials___breakdown_by_geography_'],
  252.                         'AverageSow / work order value' => ['type' => 'text', 'field' => 'financials___average_sow___work_order_value_'],
  253.                         'Average daily rates' => ['type' => 'text', 'field' => 'financials___average_daily_rates_'],
  254.                     ];
  255.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  256.                 }
  257.                 // Last semester retrospective - People - texte
  258.                 // 88476294 sandbox
  259.                 // 83741258 prod
  260.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('people_last_semester_retrospective', $this->current_env)) {
  261.                     $fields = [
  262.                         'widget_name' => 'Last semester retrospective - People',
  263.                         'Total # of resources' => ['type' => 'text', 'field' => 'people___total___of_ressources'],
  264.                         'New adds or roll-offs' => ['type' => 'text', 'field' => 'people___new_adds_or_roll_offs'],
  265.                         'Notable highlights / lowlights' => ['type' => 'text', 'field' => 'people___notable_highlights___lowlights'],
  266.                         'Managing index' => ['type' => 'text', 'field' => 'people___managing_index'],
  267.                         'Specific talents needs' => ['type' => 'text', 'field' => 'people___specific_talents_needs'],
  268.                     ];
  269.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  270.                 }
  271.                 // Last semester retrospective - Key Wins and Updates
  272.                 // 88476296 sandbox
  273.                 // 83741454 prod
  274.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('last_semester_retrospective_key_wins_and_pdates', $this->current_env)) {
  275.                     $new_widget->report->config->filters->custom[0] = [
  276.                         'operator' => 'IN',
  277.                         'property' => 'associations.company',
  278.                         'values' => $companies_id
  279.                     ];
  280.                 }
  281.                 // Last semester retrospective - Key Losses and Key Learnings
  282.                 // 88476297 sandbox
  283.                 // 83741523 prod
  284.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('last_semester_retrospective_key_losses_and_key_learnings', $this->current_env)) {
  285.                     $new_widget->report->config->filters->custom[0] = [
  286.                         'operator' => 'IN',
  287.                         'property' => 'associations.company',
  288.                         'values' => $companies_id
  289.                     ];
  290.                 }
  291.                 // Next semester targets - Financial Goals
  292.                 // 88476298 sandbox
  293.                 // 83741641 prod
  294.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_goals_next_semester_targets', $this->current_env)) {
  295.                     $fields = [
  296.                         'widget_name' => 'Next semester targets - Financial Goals',
  297.                         'Next semester forecast' => ['type' => 'text', 'field' => 'financial_goals___next_semester_forecast_'],
  298.                         'Existing assigments / extension' => ['type' => 'text', 'field' => 'financial_goals___existing_assigments_extension_'],
  299.                         'New opportunities' => ['type' => 'text', 'field' => 'financial_goals___new_opportunities_'],
  300.                         'Next semester growth target' => ['type' => 'text', 'field' => 'financial_goals___next_semester_growth_target_'],
  301.                         'Corrective actions' => ['type' => 'text', 'field' => 'financial_goals___corrective_actions_'],
  302.                     ];
  303.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  304.                 }
  305.                 // Next semester targets - Cross-sell Objectives
  306.                 // 88476299 sandbox
  307.                 // 83741659 prod
  308.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('cross_sell_objectives_next_semester_targets', $this->current_env)) {
  309.                     $fields = [
  310.                         'widget_name' => 'Next semester targets - Financial Goals',
  311.                         'Cross-BU' => ['type' => 'text', 'field' => 'cross_sell_objectives___cross_bu'],
  312.                         'Cross-location' => ['type' => 'text', 'field' => 'cross_sell_objectives___cross_location_']
  313.                     ];
  314.                     $new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
  315.                 }
  316.                 // New opportunities - Deals in the pipe by company / subsidiary
  317.                 // 88476300 sandbox
  318.                 // 85752894 prod
  319.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('new_opportunities_deals_in_the_pipe_by_company_subsidiary', $this->current_env)) {
  320.                     $new_widget->report->config->filters->custom[1] = [
  321.                         'operator' => 'IN',
  322.                         'property' => 'associations.company',
  323.                         'values' => $companies_id
  324.                     ];
  325.                 }
  326.                 // Numbers of deals by company / subsidiary
  327.                 // 88476303 sandbox
  328.                 // 86486711 prod
  329.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('numbers_of_deals_by_company_subsidiary', $this->current_env)) {
  330.                     $new_widget->report->config->filters->custom[0] = [
  331.                         'operator' => 'IN',
  332.                         'property' => 'associations.company',
  333.                         'values' => $companies_id
  334.                     ];
  335.                 }
  336.                 // Deal amount / count of deals by team member
  337.                 // 88476304 sandbox
  338.                 // 83467930 prod
  339.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deal_amount_count_of_deals_by_team_member', $this->current_env)) {
  340.                     $new_widget->report->config->filters->custom[0] = [
  341.                         'operator' => 'IN',
  342.                         'property' => 'associations.company',
  343.                         'values' => $companies_id
  344.                     ];
  345.                 }
  346.             }
  347.             if (isset($widget->report->reportDefinition)) {
  348.                 $new_widget->report->reportDefinition = $widget->report->reportDefinition;
  349.                 // Account Relationship Level
  350.                 // 88476309 sandbox
  351.                 // 85755923 prod
  352.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_relationship_level', $this->current_env)) {
  353.                     $new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
  354.                 }
  355.                 // Monthly Activity Board - By company
  356.                 // 88476305 sandbox
  357.                 // 83467935 prod
  358.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('monthly_activity_board_by_company', $this->current_env)) {
  359.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  360.                 }
  361.                 // Email Activities this year - By company
  362.                 // 88476306 sandbox
  363.                 // 83467936 prod
  364.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('email_activities_this_year_by_company', $this->current_env)) {
  365.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  366.                 }
  367.                 // Call Activities this year
  368.                 // 88476308 sandbox
  369.                 // 83467937 prod
  370.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('call_activities_this_year', $this->current_env)) {
  371.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  372.                 }
  373.                 // Meeting Activities this year
  374.                 // 88476308 sandbox
  375.                 // 83467938 prod
  376.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('meeting_activities_this_year', $this->current_env)) {
  377.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  378.                 }
  379.                 // Financials - BU Revenue Composition
  380.                 // 88476289 sandbox
  381.                 // 85303044 prod
  382.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_bu_revenue_composition', $this->current_env)) {
  383.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  384.                 }
  385.                 // Financials - BU Cross-sell revenue Composition
  386.                 // 88476290 sandbox
  387.                 // 85344683 prod
  388.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_bu_cross_sell_revenue_composition', $this->current_env)) {
  389.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  390.                 }
  391.                 // Financials - Hub/BL revenue Composition
  392.                 // 88476291 sandbox
  393.                 // 85345707 prod
  394.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_hub_bl_revenue_composition', $this->current_env)) {
  395.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  396.                 }
  397.                 // Financials - Market Cross-sell revenue Composition
  398.                 // 88476292 sandbox
  399.                 // 85345038 prod
  400.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_market_cross_sell_revenue_composition', $this->current_env)) {
  401.                     $new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
  402.                 }
  403.                 // Last semester retrospective - Financials - Graph
  404.                 // 88476295 sandbox
  405.                 // 85302032 prod
  406.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_last_semester_retrospective_graph', $this->current_env)) {
  407.                     $new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
  408.                 }
  409.                 // Approach for farmed department / subsidiary 1 & 2
  410.                 // 88476301 sandbox
  411.                 // 83492168 prod
  412.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('approach_for_farmed_department_subsidiary_1_&_2', $this->current_env)) {
  413.                     $new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
  414.                 }
  415.                 // Approach for hunted department / subsidiary 1&2
  416.                 // 88476302 sandbox
  417.                 // 83742763 prod
  418.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('approach_for_hunted_department_subsidiary_1_&_2', $this->current_env)) {
  419.                     $new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
  420.                 }
  421.                 // Numbers of contacts by company / subsidiary
  422.                 // 88476310 sandbox
  423.                 // 86486896 prod
  424.                 if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('numbers_of_contacts_by_company_subsidiary', $this->current_env)) {
  425.                     $new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
  426.                 }
  427.                 //85699234 Opened or won deals with no attachment
  428. //                if ($widget->reportId == '85699234') {
  429. //                    $filters = [];
  430. //                    $id = 1000002;
  431. //                    foreach($companies_id as $company) {
  432. //                        $filters[] = [
  433. //                            'id' => $id++,
  434. //                            'field' => [
  435. //                                'name' => 'hs_object_id',
  436. //                                'table' => 'COMPANY',
  437. //                                'type' => 'number'
  438. //                            ],
  439. //                            'filter' => [
  440. //                                'filterId' => null,
  441. //                                'filterType' => 'PROPERTY',
  442. //                                'property' => 'hs_object_id',
  443. //                                'operation' => [
  444. //                                    "defaultValue" => null,
  445. //                                    "includeObjectsWithNoValueSet" => false,
  446. //                                    "operationType" => "number",
  447. //                                    "operator" => "IS_EQUAL_TO",
  448. //                                    "operatorName" => "IS_EQUAL_TO",
  449. //                                    "propertyType" => "number",
  450. //                                    "value" => $company
  451. //                                ]
  452. //                            ]
  453. //                        ];
  454. //                    }
  455. //                    $new_widget->report->reportDefinition->filtering->groups[2]->condition = 'OR';
  456. //                    $new_widget->report->reportDefinition->filtering->groups[2]->filters = $filters;
  457. //                    $new_widget->report->reportDefinition->filtering->groups[3]->filters[0]->id = $id;
  458. //                }
  459.             }
  460.             $new_widget->report->displayParams = $widget->report->displayParams;
  461.             $new_widget->report->active = $widget->report->active;
  462.             $new_widget->report->customized = $widget->report->customized;
  463.             $new_widget->layout = $widget->layout;
  464.             //unset($new_widget->report->displayParams->origin);
  465.             $new_widgets[] = $new_widget;
  466.         }
  467.         $new_dashboard->widgets = $new_widgets;
  468.         $new_dashboard->ownerId = $this->getParameter('app.hubspot.hs_dashboard_owner_id');
  469.         $new_dashboard->dashboardPermissionConfig = new \stdClass();
  470.         $new_dashboard->dashboardPermissionConfig->accessClassification = "EVERYONE";
  471.         $new_dashboard->dashboardPermissionConfig->permissionLevel = "EDIT";
  472.         $new_dashboard->dashboardPermissionConfig->permissionGrants = [["userSetType" => "API_ACCESS"]];
  473.         //echo(json_encode($new_dashboard));die;
  474.         $created_dashboard = $this->hubspotWebClientService->createNewDashboard(json_encode($new_dashboard));
  475.         //dd($created_dashboard);
  476.         if (!isset($created_dashboard['success']) || $created_dashboard['success'] != true) {
  477.             $res['success'] = false;
  478.             $res['error_msg'] = !empty($created_dashboard['error']) ? $created_dashboard['error'] : 'Insert new dashboard to hubspot failed';
  479.             return $this->returnAjaxResponse($res);
  480.         }
  481.         // MANAGE THE CASE IF IF WE REACHED THE MAXIMUM COUNT OF DASHBOARD
  482. //        do {
  483. //            $retry = false;
  484. //            $tooMany = false;
  485. //
  486. //            try {
  487. //                $response = $this->hubspotWebClientService->createNewDashboard($new_dashboard);
  488. //
  489. //
  490. //                // Keep new dashboard id in case we run out of available dashboard
  491. //                $fp = fopen(Storage::disk('local')->path('data/dashboards.json'), "c+");
  492. //                if (flock($fp, LOCK_EX)) {
  493. //                    $dashboardList = json_decode(stream_get_contents($fp), true);
  494. //                    if (!$dashboardList) {
  495. //                        $dashboardList = [];
  496. //                    }
  497. //                    array_push($dashboardList, $createdDashboard->id);
  498. //
  499. //                    rewind($fp);
  500. //                    ftruncate($fp, 0);
  501. //                    fwrite($fp, json_encode($dashboardList));
  502. //                    flock($fp, LOCK_UN);
  503. //                }
  504. //                fclose($fp);
  505. //            } catch(BadRequest $e) {
  506. //                $response = $e->getResponse();
  507. //
  508. //                // If status code is 402, we hit the maximum number of dashboard allowed in the account
  509. //                if ($response->getStatusCode() == '402') {
  510. //                    $tooMany = true;
  511. //                } else {
  512. //                    // Send an email to admin on creation error
  513. //                    mail(config('hubspot.admin_email'), 'Sia Partners - Error creating dashboard', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
  514. //                    return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 2 - ' . $newDashboard->name]);
  515. //                }
  516. //            }
  517. //
  518. //            // If we hit the too much dashboard error, we must delete some dashboards
  519. ////            if ($tooMany) {
  520. ////
  521. ////                // Retrieve list of previously created dashboard
  522. ////                $fp = fopen(Storage::disk('local')->path('data/dashboards.json'), "c+");
  523. ////                if (flock($fp, LOCK_EX)) {
  524. ////                    $dashboardList = json_decode(stream_get_contents($fp), true);
  525. ////
  526. ////                    // Delete oldest dashboard in list
  527. ////                    if ($dashboardList && count($dashboardList) > 0) {
  528. ////                        $dashboardId = array_shift($dashboardList);
  529. ////
  530. ////                        rewind($fp);
  531. ////                        ftruncate($fp, 0);
  532. ////                        fwrite($fp, json_encode($dashboardList));
  533. ////
  534. ////                        if (!empty($dashboardId)) {
  535. ////                            try {
  536. ////                                HubspotWebClient::request('DELETE', 'https://api.hubspot.com/dashboard/v2/dashboard/' . $dashboardId, [
  537. ////                                    'query' => [
  538. ////                                        'portalId' => config('hubspot.portal_id'),
  539. ////                                        'keepReport' => false
  540. ////                                    ]
  541. ////                                ]);
  542. ////                                $retry = true;
  543. ////                            } catch(BadRequest $e) {
  544. ////                                if ($e->getResponse()->getStatusCode() == '404') {
  545. ////                                    $retry = true;
  546. ////                                } else {
  547. ////                                    // Send an email to admin if we get an error deleting the dashboard
  548. ////                                    mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard ', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
  549. ////                                    return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 3']);
  550. ////                                }
  551. ////                            } catch(\GuzzleHttp\Exception\RequestException $e) {
  552. ////                                mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
  553. ////                                return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 4']);
  554. ////                            }
  555. ////
  556. ////                        }
  557. ////                    }
  558. ////
  559. ////                    flock($fp, LOCK_UN);
  560. ////
  561. ////                    if (!$retry) {
  562. ////                        fclose($fp);
  563. ////                        mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard', 'No more dashboard to delete' );
  564. ////                        return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 5']);
  565. ////                    }
  566. ////                }
  567. ////                fclose($fp);
  568. ////            }
  569. //            // We try to create the new dashboard after each delete
  570. //        } while($retry);
  571.         $res['success'] = true;
  572.         $res['msg'] = 'Dashboard created with success. Below the dashboard link =>';
  573.         $res['dashboard_url'] = 'https://app.hubspot.com/reports-dashboard/' . $this->getParameter('app.hubspot.hs_portal_id') . '/view/' . $created_dashboard['data']->id;
  574.         $res['data'] = $created_dashboard;
  575.         return $this->returnAjaxResponse($res);
  576.     }
  577.     private function returnAjaxResponse($data): JsonResponse
  578.     {
  579.         $response = new JsonResponse();
  580.         $response->setData($data);
  581.         return $response;
  582.     }
  583.     /**
  584.      * @param $fields
  585.      * @param $company
  586.      * @param $owners
  587.      * @return string
  588.      */
  589.     private function setTextWidget($fields, $company, $owners): string
  590.     {
  591.         $text = '';
  592.         if (empty($fields) || empty($company) || empty($owners)) {
  593.             return $text;
  594.         }
  595.         //foreach ($company as $company) {
  596. // echo company properties
  597. //            echo(json_encode($company));
  598. //            die;
  599.             $text = HubspotTool::setTextWidget($fields, $company, $owners);
  600.         //}
  601.         return $text;
  602.     }
  603. //    #[Route('/{path}')]
  604. //    public function root($path): Response
  605. //    {
  606. //        if ($this->loader->exists($path . '.html.twig')) {
  607. //             if ($path == '/' || $path == 'home') {
  608. //                 return $this->render('index.html.twig');
  609. //             }
  610. //            return $this->render($path . '.html.twig');
  611. //        }
  612. //        throw $this->createNotFoundException();
  613. //    }
  614. }