<?php
namespace App\Controller;
use App\Service\HubspotWebClientService;
use App\Utils\HubspotTool;
use HubSpot\Client\Crm\Companies\ApiException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Twig\Environment;
use App\Service\HubspotService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomeController extends AbstractController
{
private HubspotService $hubspotService;
private \Twig\Loader\LoaderInterface $loader;
private HubspotWebClientService $hubspotWebClientService;
private string $current_env;
public function __construct(Environment $twig, HubspotService $hubspotService, HubspotWebClientService $hubspotWebClientService)
{
$this->loader = $twig->getLoader();
$this->hubspotService = $hubspotService;
$this->hubspotWebClientService = $hubspotWebClientService;
}
#[Route('/', name: 'home')]
public function index(): Response
{
$this->denyAccessUnlessGranted('ROLE_USER');
return $this->render('index.html.twig');
}
#[Route(
'/ajax-search-companies',
name: 'ajax_search_companies',
options: [
'expose' => true
]
)]
public function ajaxSearchCompanies(Request $request): JsonResponse
{
$this->denyAccessUnlessGranted('ROLE_USER');
$searchTerm = $request->request->get('q');
$res = $this->hubspotService->searchCompanies($searchTerm, $request->request->get('page') ?? 1);
$response = new JsonResponse();
$response->setData($res);
return $response;
}
#[Route(
'/ajax-create-dashboard',
name: 'ajax_create_dashboard',
options: [
'expose' => true
]
)]
public function ajaxCreateDashboard(Request $request): JsonResponse
{
$this->denyAccessUnlessGranted('ROLE_USER');
$res['success'] = false;
$dashboard = [];
$companies_id = json_decode($request->request->get('companies_id'));
if (empty($companies_id)) {
$res['success'] = false;
$res['error_msg'] = 'Please select at least one company';
} else {
$res['selected_compagnies'] = $companies_id;
$response = $this->hubspotWebClientService->getDashboard();
if ($response['success'] == false) {
$res['success'] = false;
$res['error_msg'] = is_array($response['error']) ? implode(', ', $response['error']) : $response['error'];
} elseif (empty($response['data'])) {
$res['success'] = false;
$res['error_msg'] = 'Empty result';
} else {
$res['success'] = true;
$dashboard = $response['data'];
}
}
if (!$res['success'] || empty($dashboard)) {
return $this->returnAjaxResponse($res);
}
// echo dashboard modele
// echo (json_encode($dashboard));
// die;
// dd($dashboard);
//dump($dashboard);
// Retrieve all owners
//$owners = $this->hubspotService->getHsClient()->crm()->owners()->getAll();
$owners = [];
$tmp_owners = $this->hubspotService->getHsClientV1()->owners()->all()->getData();
foreach ($tmp_owners as $owner) {
$owners[$owner->ownerId] = $owner;
}
unset($tmp_owners);
// Create a new dashboard
$new_dashboard = new \stdClass();
$new_dashboard->type = $dashboard->type;
$widgets = $dashboard->widgets;
$new_widgets = [];
$companies = [];
$company_names = [];
$main_company = null;
foreach($companies_id as $key => $company_id) {
try {
$companies[] = $company = $this->hubspotService->getHsClientV1()->companies()->getById((int)$company_id);
//echo json_encode($company);die; // display company properties
$company_names[] = $company->getData()->properties->name->value;
if ($key == 0) {
$main_company = $company;
}
// $company = $this->hubspotService->getHsClient()->crm()->companies()->basicApi()->getById((int)$company_id);
// $company_names[] = $company->getProperties()['name'];
} catch (ApiException $e) {
$res['success'] = false;
$res['error_msg'] = 'Exception when trying to get company data using => ' .
' hubspotService->getHsClient()->crm()->companies()->basicApi()->getById()';
return $this->returnAjaxResponse($res);
}
}
$new_dashboard->name = join(', ', $company_names) . ' - ' . $dashboard->name;
$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);
$new_dashboard->showDescription = true;
$this->current_env = $this->getParameter('kernel.environment');
foreach($widgets as $widget_id => $widget) {
$new_widget = new \stdClass();
$new_widget->report = new \stdClass();
//$new_widget->report = $widget->report;
//unset($new_widget->report->id);
$new_widget->report->name = $widget->report->name;
$new_widget->report->chartType = $widget->report->chartType;
$new_widget->report->permissionLevel = $widget->report->permissionLevel;
$new_widget->report->legacyReport = $widget->report->legacyReport;
if (isset($widget->report->config)) {
$new_widget->report->config = $widget->report->config;
if (isset($widget->report->config->crossObject->reportId)) {
//unset($new_widget->report->config->crossObject->reportId);
}
if (isset($widget->report->config->crossObject->dashboardReportId)) {
//unset($new_widget->report->config->crossObject->dashboardReportId);
}
// Account management team
//85598279 Overall Strategy
//Text to generate
//if ($widget->reportId == '85598279') {
// 88476282 sandbox
// 83467923 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_management_team', $this->current_env)) {
$fields = [
'widget_name' => '',
'Account Existing Segment' => ['type' => 'text', 'field' => 'account_existing_segment'],
'Account Target Segment' => ['type' => 'text', 'field' => 'account_target_segment'],
'Account status' => ['type' => 'text', 'field' => 'account_status'],
'Account size' => ['type' => 'text', 'field' => 'account_size'],
'Account Priority Level' => ['type' => 'text', 'field' => 'account_priority_level'],
'Sector' => ['type' => 'text', 'field' => 'sector'],
'Master Account Owner' => ['type' => 'owner', 'field' => 'master_account_owner'],
'Master Account Owner 2' => ['type' => 'owner', 'field' => 'master_account_owner_2'],
'Master Account Owner 3' => ['type' => 'owner', 'field' => 'master_account_owner_3'],
'Delegate 1' => ['type' => 'owner', 'field' => 'delegate_owner'],
'Delegate 1 perimeter' => ['type' => 'text', 'field' => 'delegate_1___perimeter'],
'Delegate 2' => ['type' => 'owner', 'field' => 'delegate_2'],
'Delegate 2 perimeter' => ['type' => 'text', 'field' => 'delegate_2___perimeter'],
'Delegate 3' => ['type' => 'owner', 'field' => 'delegate_3'],
'Delegate 3 perimeter' => ['type' => 'text', 'field' => 'delegate_3___perimeter'],
'Delegate 4' => ['type' => 'owner', 'field' => 'delegate_4'],
'Delegate 4 perimeter' => ['type' => 'text', 'field' => 'delegate_4___perimeter'],
'Delegate 5' => ['type' => 'owner', 'field' => 'delegate_5'],
'Delegate 5 perimeter' => ['type' => 'text', 'field' => 'delegate_5___perimeter'],
'Delegate 6' => ['type' => 'owner', 'field' => 'delegate_6'],
'Delegate 6 perimeter' => ['type' => 'text', 'field' => 'delegate_6___perimeter'],
'Delegate 7' => ['type' => 'owner', 'field' => 'delegate_7'],
'Delegate 7 perimeter' => ['type' => 'text', 'field' => 'delegate_7___perimeter'],
'Delegate 8' => ['type' => 'owner', 'field' => 'delegate_8'],
'Delegate 8 perimeter' => ['type' => 'text', 'field' => 'delegate_8___perimeter'],
'Delegate 9' => ['type' => 'owner', 'field' => 'delegate_9'],
'Delegate 9 perimeter' => ['type' => 'text', 'field' => 'delegate_9___perimeter'],
'Delegate 10' => ['type' => 'owner', 'field' => 'delegate_10'],
'Delegate 10 perimeter' => ['type' => 'text', 'field' => 'delegate_10___perimeter'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// Sectorand account context widget
// 88476283 sandbox
// 83737402 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('sectorand_account_context', $this->current_env)) {
$fields = [
'widget_name' => 'Sectorand account context',
'Sector / industry context and trends' => ['type' => 'text', 'field' => 'sector___industry_context_and_trends_'],
'Account\'s context, vision, objective, projects' => ['type' => 'text', 'field' => 'account_s_context__vision__objectives__projects_'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// AccountManagement Team approach
// 88476284 sandbox
// 83737466 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_management_team_approach', $this->current_env)) {
$fields = [
'widget_name' => 'AccountManagement Team approach based on account\'s context',
'Sia Partners inbound strategy' => ['type' => 'text', 'field' => 'sia_partners__inbound_strategy'],
'Sia Partners outbound strategy' => ['type' => 'text', 'field' => 'sia_partners__outbound_strategy'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
//85599214 Deals won this year (VS previous year)
//if ($widget->reportId == '85599214') {
// 88476285 sandbox
// 83467924 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deal_won_this_year_vs_previous_year', $this->current_env)) {
$new_widget->report->config->filters->custom[1] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Deals won this year by company / subsidiary
// 88476286 sandbox
// 85751594 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deals_won_this_year_by_company_subsidiary', $this->current_env)) {
$new_widget->report->config->filters->custom[1] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Amount in each company / subsidiary by type of opportunity (in €) V2
// 88476287 sandbox
// 85752156 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('amount_in_each_company_subsidiary_by_type_of_opportunity', $this->current_env)) {
$new_widget->report->config->filters->custom[1] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Amount in each company / subsidiary by extension
// 88476288 sandbox
// 85752222 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('amount_in_each_company_subsidiary_by_extension', $this->current_env)) {
$new_widget->report->config->filters->custom[1] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Last semester retrospective - Financials - Texte
// 88476293 sandbox
// 83741117 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_last_semester_retrospective', $this->current_env)) {
$fields = [
'widget_name' => 'Last semester retrospective - Financials',
'Last semester produced' => ['type' => 'text', 'field' => 'financials___last_semester_produced_'],
'Cross-sell by bu' => ['type' => 'text', 'field' => 'financials___cross_sell_by_bu_'],
'Breakdown by geography' => ['type' => 'text', 'field' => 'financials___breakdown_by_geography_'],
'AverageSow / work order value' => ['type' => 'text', 'field' => 'financials___average_sow___work_order_value_'],
'Average daily rates' => ['type' => 'text', 'field' => 'financials___average_daily_rates_'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// Last semester retrospective - People - texte
// 88476294 sandbox
// 83741258 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('people_last_semester_retrospective', $this->current_env)) {
$fields = [
'widget_name' => 'Last semester retrospective - People',
'Total # of resources' => ['type' => 'text', 'field' => 'people___total___of_ressources'],
'New adds or roll-offs' => ['type' => 'text', 'field' => 'people___new_adds_or_roll_offs'],
'Notable highlights / lowlights' => ['type' => 'text', 'field' => 'people___notable_highlights___lowlights'],
'Managing index' => ['type' => 'text', 'field' => 'people___managing_index'],
'Specific talents needs' => ['type' => 'text', 'field' => 'people___specific_talents_needs'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// Last semester retrospective - Key Wins and Updates
// 88476296 sandbox
// 83741454 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('last_semester_retrospective_key_wins_and_pdates', $this->current_env)) {
$new_widget->report->config->filters->custom[0] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Last semester retrospective - Key Losses and Key Learnings
// 88476297 sandbox
// 83741523 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('last_semester_retrospective_key_losses_and_key_learnings', $this->current_env)) {
$new_widget->report->config->filters->custom[0] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Next semester targets - Financial Goals
// 88476298 sandbox
// 83741641 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_goals_next_semester_targets', $this->current_env)) {
$fields = [
'widget_name' => 'Next semester targets - Financial Goals',
'Next semester forecast' => ['type' => 'text', 'field' => 'financial_goals___next_semester_forecast_'],
'Existing assigments / extension' => ['type' => 'text', 'field' => 'financial_goals___existing_assigments_extension_'],
'New opportunities' => ['type' => 'text', 'field' => 'financial_goals___new_opportunities_'],
'Next semester growth target' => ['type' => 'text', 'field' => 'financial_goals___next_semester_growth_target_'],
'Corrective actions' => ['type' => 'text', 'field' => 'financial_goals___corrective_actions_'],
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// Next semester targets - Cross-sell Objectives
// 88476299 sandbox
// 83741659 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('cross_sell_objectives_next_semester_targets', $this->current_env)) {
$fields = [
'widget_name' => 'Next semester targets - Financial Goals',
'Cross-BU' => ['type' => 'text', 'field' => 'cross_sell_objectives___cross_bu'],
'Cross-location' => ['type' => 'text', 'field' => 'cross_sell_objectives___cross_location_']
];
$new_widget->report->config->noteText = $this->setTextWidget($fields, $main_company, $owners);
}
// New opportunities - Deals in the pipe by company / subsidiary
// 88476300 sandbox
// 85752894 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('new_opportunities_deals_in_the_pipe_by_company_subsidiary', $this->current_env)) {
$new_widget->report->config->filters->custom[1] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Numbers of deals by company / subsidiary
// 88476303 sandbox
// 86486711 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('numbers_of_deals_by_company_subsidiary', $this->current_env)) {
$new_widget->report->config->filters->custom[0] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
// Deal amount / count of deals by team member
// 88476304 sandbox
// 83467930 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('deal_amount_count_of_deals_by_team_member', $this->current_env)) {
$new_widget->report->config->filters->custom[0] = [
'operator' => 'IN',
'property' => 'associations.company',
'values' => $companies_id
];
}
}
if (isset($widget->report->reportDefinition)) {
$new_widget->report->reportDefinition = $widget->report->reportDefinition;
// Account Relationship Level
// 88476309 sandbox
// 85755923 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('account_relationship_level', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
}
// Monthly Activity Board - By company
// 88476305 sandbox
// 83467935 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('monthly_activity_board_by_company', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Email Activities this year - By company
// 88476306 sandbox
// 83467936 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('email_activities_this_year_by_company', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Call Activities this year
// 88476308 sandbox
// 83467937 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('call_activities_this_year', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Meeting Activities this year
// 88476308 sandbox
// 83467938 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('meeting_activities_this_year', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Financials - BU Revenue Composition
// 88476289 sandbox
// 85303044 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_bu_revenue_composition', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Financials - BU Cross-sell revenue Composition
// 88476290 sandbox
// 85344683 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_bu_cross_sell_revenue_composition', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Financials - Hub/BL revenue Composition
// 88476291 sandbox
// 85345707 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_hub_bl_revenue_composition', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Financials - Market Cross-sell revenue Composition
// 88476292 sandbox
// 85345038 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_market_cross_sell_revenue_composition', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[1]->filters[0]->filter->operation->values = $companies_id;
}
// Last semester retrospective - Financials - Graph
// 88476295 sandbox
// 85302032 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('financials_last_semester_retrospective_graph', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
}
// Approach for farmed department / subsidiary 1 & 2
// 88476301 sandbox
// 83492168 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('approach_for_farmed_department_subsidiary_1_&_2', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
}
// Approach for hunted department / subsidiary 1&2
// 88476302 sandbox
// 83742763 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('approach_for_hunted_department_subsidiary_1_&_2', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
}
// Numbers of contacts by company / subsidiary
// 88476310 sandbox
// 86486896 prod
if ((int)$widget->reportId === HubspotTool::getReportIdByNameAndEnv('numbers_of_contacts_by_company_subsidiary', $this->current_env)) {
$new_widget->report->reportDefinition->filtering->groups[0]->filters[0]->filter->operation->values = $companies_id;
}
//85699234 Opened or won deals with no attachment
// if ($widget->reportId == '85699234') {
// $filters = [];
// $id = 1000002;
// foreach($companies_id as $company) {
// $filters[] = [
// 'id' => $id++,
// 'field' => [
// 'name' => 'hs_object_id',
// 'table' => 'COMPANY',
// 'type' => 'number'
// ],
// 'filter' => [
// 'filterId' => null,
// 'filterType' => 'PROPERTY',
// 'property' => 'hs_object_id',
// 'operation' => [
// "defaultValue" => null,
// "includeObjectsWithNoValueSet" => false,
// "operationType" => "number",
// "operator" => "IS_EQUAL_TO",
// "operatorName" => "IS_EQUAL_TO",
// "propertyType" => "number",
// "value" => $company
// ]
// ]
// ];
// }
// $new_widget->report->reportDefinition->filtering->groups[2]->condition = 'OR';
// $new_widget->report->reportDefinition->filtering->groups[2]->filters = $filters;
// $new_widget->report->reportDefinition->filtering->groups[3]->filters[0]->id = $id;
// }
}
$new_widget->report->displayParams = $widget->report->displayParams;
$new_widget->report->active = $widget->report->active;
$new_widget->report->customized = $widget->report->customized;
$new_widget->layout = $widget->layout;
//unset($new_widget->report->displayParams->origin);
$new_widgets[] = $new_widget;
}
$new_dashboard->widgets = $new_widgets;
$new_dashboard->ownerId = $this->getParameter('app.hubspot.hs_dashboard_owner_id');
$new_dashboard->dashboardPermissionConfig = new \stdClass();
$new_dashboard->dashboardPermissionConfig->accessClassification = "EVERYONE";
$new_dashboard->dashboardPermissionConfig->permissionLevel = "EDIT";
$new_dashboard->dashboardPermissionConfig->permissionGrants = [["userSetType" => "API_ACCESS"]];
//echo(json_encode($new_dashboard));die;
$created_dashboard = $this->hubspotWebClientService->createNewDashboard(json_encode($new_dashboard));
//dd($created_dashboard);
if (!isset($created_dashboard['success']) || $created_dashboard['success'] != true) {
$res['success'] = false;
$res['error_msg'] = !empty($created_dashboard['error']) ? $created_dashboard['error'] : 'Insert new dashboard to hubspot failed';
return $this->returnAjaxResponse($res);
}
// MANAGE THE CASE IF IF WE REACHED THE MAXIMUM COUNT OF DASHBOARD
// do {
// $retry = false;
// $tooMany = false;
//
// try {
// $response = $this->hubspotWebClientService->createNewDashboard($new_dashboard);
//
//
// // Keep new dashboard id in case we run out of available dashboard
// $fp = fopen(Storage::disk('local')->path('data/dashboards.json'), "c+");
// if (flock($fp, LOCK_EX)) {
// $dashboardList = json_decode(stream_get_contents($fp), true);
// if (!$dashboardList) {
// $dashboardList = [];
// }
// array_push($dashboardList, $createdDashboard->id);
//
// rewind($fp);
// ftruncate($fp, 0);
// fwrite($fp, json_encode($dashboardList));
// flock($fp, LOCK_UN);
// }
// fclose($fp);
// } catch(BadRequest $e) {
// $response = $e->getResponse();
//
// // If status code is 402, we hit the maximum number of dashboard allowed in the account
// if ($response->getStatusCode() == '402') {
// $tooMany = true;
// } else {
// // Send an email to admin on creation error
// mail(config('hubspot.admin_email'), 'Sia Partners - Error creating dashboard', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
// return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 2 - ' . $newDashboard->name]);
// }
// }
//
// // If we hit the too much dashboard error, we must delete some dashboards
//// if ($tooMany) {
////
//// // Retrieve list of previously created dashboard
//// $fp = fopen(Storage::disk('local')->path('data/dashboards.json'), "c+");
//// if (flock($fp, LOCK_EX)) {
//// $dashboardList = json_decode(stream_get_contents($fp), true);
////
//// // Delete oldest dashboard in list
//// if ($dashboardList && count($dashboardList) > 0) {
//// $dashboardId = array_shift($dashboardList);
////
//// rewind($fp);
//// ftruncate($fp, 0);
//// fwrite($fp, json_encode($dashboardList));
////
//// if (!empty($dashboardId)) {
//// try {
//// HubspotWebClient::request('DELETE', 'https://api.hubspot.com/dashboard/v2/dashboard/' . $dashboardId, [
//// 'query' => [
//// 'portalId' => config('hubspot.portal_id'),
//// 'keepReport' => false
//// ]
//// ]);
//// $retry = true;
//// } catch(BadRequest $e) {
//// if ($e->getResponse()->getStatusCode() == '404') {
//// $retry = true;
//// } else {
//// // Send an email to admin if we get an error deleting the dashboard
//// mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard ', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
//// return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 3']);
//// }
//// } catch(\GuzzleHttp\Exception\RequestException $e) {
//// mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard', \GuzzleHttp\Psr7\Message::toString($e->getResponse()));
//// return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 4']);
//// }
////
//// }
//// }
////
//// flock($fp, LOCK_UN);
////
//// if (!$retry) {
//// fclose($fp);
//// mail(config('hubspot.admin_email'), 'Sia Partners - Error delete dashboard', 'No more dashboard to delete' );
//// return json_encode(['success' => '0', 'error' => 'Error creating dashboard - err: 5']);
//// }
//// }
//// fclose($fp);
//// }
// // We try to create the new dashboard after each delete
// } while($retry);
$res['success'] = true;
$res['msg'] = 'Dashboard created with success. Below the dashboard link =>';
$res['dashboard_url'] = 'https://app.hubspot.com/reports-dashboard/' . $this->getParameter('app.hubspot.hs_portal_id') . '/view/' . $created_dashboard['data']->id;
$res['data'] = $created_dashboard;
return $this->returnAjaxResponse($res);
}
private function returnAjaxResponse($data): JsonResponse
{
$response = new JsonResponse();
$response->setData($data);
return $response;
}
/**
* @param $fields
* @param $company
* @param $owners
* @return string
*/
private function setTextWidget($fields, $company, $owners): string
{
$text = '';
if (empty($fields) || empty($company) || empty($owners)) {
return $text;
}
//foreach ($company as $company) {
// echo company properties
// echo(json_encode($company));
// die;
$text = HubspotTool::setTextWidget($fields, $company, $owners);
//}
return $text;
}
// #[Route('/{path}')]
// public function root($path): Response
// {
// if ($this->loader->exists($path . '.html.twig')) {
// if ($path == '/' || $path == 'home') {
// return $this->render('index.html.twig');
// }
// return $this->render($path . '.html.twig');
// }
// throw $this->createNotFoundException();
// }
}