<?php
declare(strict_types=1);
namespace App\Controller\Customer;
use Symfony\Component\HttpFoundation\{
Request,
Response
};
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use App\Common\Controllers\CrmCrudAbstractController;
use App\Entity\{
Campaign,
CampaignContact
};
use App\Services\{
Customer\CustomerCampaignService,
Campaign\DatasetService
};
class CustomerCampaignDataset extends CrmCrudAbstractController
{
private const TEMPLATE_FOLDER = 'customer/dataset/';
/**
* @see CrmAbstractController
*/
protected function initModuleDetails(): array
{
return [
'entityClassName' => CampaignContact::class,
'moduleService' => CustomerCampaignService::class,
'modulePrefix' => 'customer_dataset',
'moduleTemplate' => self::TEMPLATE_FOLDER,
'hasPagin' => false,
'defaultSort' => ['field' => 'cs.rank', 'op' => 'DESC'],
'hasFilter' => true,
//'useIndexMode' => true,
];
}
#[IsGranted("ROLE_CUSTOMER")]
#[Route('/customer/campaign/{id}/dataset', name: 'customer_campaign_dataset')]
public function index(
Request $request,
CustomerCampaignService $customerCampaignService,
Campaign $campaign
): Response {
$filters = parent::setKeyword($request, $campaign);
$filters = array_merge($filters, parent::setSort($request, $campaign));
$contacts = $customerCampaignService->getCampaignDataset(
$campaign,
...$filters
);
$template = $request->isXmlHttpRequest() ? '_listing.html.twig' : 'index.html.twig';
return $this->render(
$this->moduleTemplate . $template, [
'contacts' => $contacts,
'campaign' => $campaign,
]
);
}
#[IsGranted("ROLE_CUSTOMER")]
#[Route('/customer/contact/{campaignContactId}/customer-comment', name: 'customer_campaign_dataset_comment')]
#[ParamConverter('campaignContact', class: CampaignContact::class, options: ['mapping' => ['campaignContactId' => 'id']])]
public function getCustomerComment(
DatasetService $datasetService,
CampaignContact $campaignContact
): Response {
return $this->render(
self::TEMPLATE_FOLDER . 'customer_comments.html.twig', [
'campaignContact' => $campaignContact,
'calls' => $datasetService->getCustomerComments($campaignContact),
]
);
}
}