src/Controller/DatabaseController.php line 447

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Config;
  4. use App\Entity\MafoId\MafoAdvertisers;
  5. use App\Entity\MafoId\MafoAdvertisersMapping;
  6. use App\Entity\MafoId\MafoAffiliateRating;
  7. use App\Entity\MafoId\MafoAffiliates;
  8. use App\Entity\MafoId\MafoAffiliatesMapping;
  9. use App\Entity\MafoId\MafoAffiliateMmpPartnerMapping;
  10. use App\Services\Common;
  11. use App\Services\UsersComponents;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use PhpOffice\PhpSpreadsheet\IOFactory;
  18. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  19. /**
  20.  *
  21.  * Offer related routes with endpoint /api/offers/{route}
  22.  *
  23.  * @Route("/api/database", name="database_tools_")
  24.  */
  25. class DatabaseController extends AbstractController
  26. {
  27.     private $commonCalls;
  28.     private $doctrine;
  29.     private $projectDir;
  30.     private $userComponents;
  31.     private $parentUsersByUser;
  32.     private $usersByRoles;
  33.     public function __construct(Common $commonCallsManagerRegistry $doctrinestring $projectDirUsersComponents $userComponents)
  34.     {
  35.         $this->commonCalls $commonCalls;
  36.         $this->doctrine $doctrine;
  37.         $this->projectDir $projectDir;
  38.         $this->userComponents $userComponents;
  39.     }
  40.     /**
  41.      * @Route("/advertisers", methods={"GET"})
  42.      */
  43.     public function getAdvertisersAction(Request $request)
  44.     {
  45.         $limit $request->query->get('limit') ? $request->query->get('limit') : Config::REPORTS_PAGINATION_DEFAULT_PAGE_SIZE;
  46.         $page $request->query->get('page') ? $request->query->get('page') : Config::REPORTS_PAGINATION_DEFAULT_PAGE_NUMBER;
  47.         $sortBy $request->query->get('sortBy') ?? Config::REPORTS_PAGINATION_DEFAULT_SORT_BY;
  48.         $sortType $request->query->get('sortType') ?? Config::REPORTS_PAGINATION_DEFAULT_SORT_TYPE;
  49.         $queryParams $request->query->all();
  50.         $mafoAdvertiserIds $queryParams['mafoAdvertiserIds'] ?? [];
  51.         $accountManagerEmailIds $queryParams['accountManagerEmailIds'] ?? [];
  52.         $salesManagerEmailIds $queryParams['salesManagerEmailIds'] ?? [];
  53.         $tuneMobileAdvertiserIds $queryParams['tuneMobileAdvertiserIds'] ?? [];
  54.         $tuneWebAdvertiserIds $queryParams['tuneWebAdvertiserIds'] ?? [];
  55.         $hyperClientIds $queryParams['hyperClientIds'] ?? [];
  56.         $downloadDataAsCSV $request->query->get('downloadCSV') == true false;
  57.         if ($downloadDataAsCSV) {
  58.             $limit =  Config::REPORTS_PAGINATION_DEFAULT_CSV_PAGE_SIZE;
  59.             $page Config::REPORTS_PAGINATION_DEFAULT_PAGE_NUMBER;
  60.         }
  61.         $filters = [
  62.             'id' => $mafoAdvertiserIds,
  63.             'accountManagerEmail' => $accountManagerEmailIds,
  64.             'salesManagerEmail' => $salesManagerEmailIds
  65.         ];
  66.         $advertiserMappingFilters = [
  67.             [
  68.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE,
  69.                 'systemIdentifierId' => $tuneMobileAdvertiserIds
  70.             ],
  71.             [
  72.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB,
  73.                 'systemIdentifierId' => $tuneWebAdvertiserIds
  74.             ],
  75.             [
  76.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_HYPER,
  77.                 'systemIdentifierId' => $hyperClientIds
  78.             ]
  79.         ];
  80.         $advertisers $this->doctrine->getRepository(MafoAdvertisers::class)->getAdvertisers($filters$advertiserMappingFilters$limit$page$sortBy$sortType);
  81.         $advertisersTotalCount $this->doctrine->getRepository(MafoAdvertisers::class)->getAdvertisers($filters$advertiserMappingFilters$limit$page$sortBy$sortTypetrue);
  82.         $finalArr = [];
  83.         foreach ($advertisers as $advertiser) {
  84.             // if (!isset($finalArr[$advertiser['id']])) {
  85.             $mappings = [
  86.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => [],
  87.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => [],
  88.                 Config::MAFO_SYSTEM_IDENTIFIER_HYPER => null,
  89.                 Config::MAFO_SYSTEM_IDENTIFIER_COPPER => []
  90.             ];
  91.             $mappedIdsBySystemIdentifier explode('|'$advertiser['systemIdentifiers']);
  92.             foreach ($mappedIdsBySystemIdentifier as $mappedIdBySystemIdentifier) {
  93.                 $mappedIdBySystemIdentifier explode(':'$mappedIdBySystemIdentifier);
  94.                 foreach ($mappings as $key => $value) {
  95.                     if (
  96.                         $key == $mappedIdBySystemIdentifier[0] &&
  97.                         isset($mappedIdBySystemIdentifier[2]) &&
  98.                         isset($mappedIdBySystemIdentifier[1])
  99.                     ) {
  100.                         $name $mappedIdBySystemIdentifier[2] != '' $mappedIdBySystemIdentifier[2] : '';
  101.                         $mappings[$key][] = [
  102.                             'id' => $mappedIdBySystemIdentifier[1],
  103.                             'name' => $name,
  104.                             'label' => $mappedIdBySystemIdentifier[1] . ($name != "" " - " "") . $name
  105.                         ];
  106.                     }
  107.                 }
  108.             }
  109.             $finalArr[$advertiser['id']] = [
  110.                 'id' => $advertiser['id'],
  111.                 'name' => $advertiser['name'],
  112.                 'accountManagerEmail' => $advertiser['accountManagerEmail'],
  113.                 'accountManagerName' => $advertiser['accountManagerName'],
  114.                 'salesManagerEmail' => $advertiser['salesManagerEmail'],
  115.                 'salesManagerName' => $advertiser['salesManagerName'],
  116.                 'mappings' => $mappings,
  117.                 'canEdit' => $this->canUserEditAdvertiserOrPublisher($this->getUser()->getEmail(), $advertiser['accountManagerEmail']),
  118.             ];
  119.         }
  120.         if ($downloadDataAsCSV) {
  121.             $rows = [['Advertiser Id''Company''Account Manager Email''Sales Manager Email''Tune Mobile Advertiser Ids''Tune Mobile Advertisers''Tune Web Advertiser Ids''Tune Web Advertisers''Hyper Client Id']];
  122.             foreach ($finalArr as $key => $value) {
  123.                 $rows[] = [
  124.                     $value['id'],
  125.                     $value['name'],
  126.                     $value['accountManagerEmail'],
  127.                     $value['salesManagerEmail'],
  128.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE], 'id')) : '',
  129.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE], 'label')) : '',
  130.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB], 'id')) : '',
  131.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB], 'label')) : '',
  132.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_HYPER] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_HYPER], 'id')) : '',
  133.                 ];
  134.             }
  135.             $spreadsheet = new Spreadsheet();
  136.             $spreadsheet->getProperties()->setCreator('MAFO')
  137.                 ->setLastModifiedBy('MAFO')
  138.                 ->setTitle('Advertisers')
  139.                 ->setSubject('Advertisers')
  140.                 ->setDescription('Searched Advertisers');
  141.             $i 0;
  142.             $spreadsheet->getActiveSheet()
  143.                 ->fromArray(
  144.                     $rows,
  145.                     NULL,
  146.                     'A1'
  147.                 );
  148.             header('Content-Type: application/vnd.ms-excel');
  149.             header('Content-Disposition: attachment;filename="advertisers.xls"');
  150.             header('Cache-Control: max-age=0');
  151.             $writer IOFactory::createWriter($spreadsheet'Xls');
  152.             $writer->save('php://output');
  153.             exit;
  154.         }
  155.         $totalRecordCount $advertisersTotalCount ?? null;
  156.         $noOfPages ceil($totalRecordCount $limit);
  157.         return new JsonResponse([
  158.             'response' => [
  159.                 'status' => 'success',
  160.                 'data' => array_values($finalArr),
  161.                 'metadata' => [
  162.                     "total" => $totalRecordCount,
  163.                     "limit" => $limit,
  164.                     "page" => $page,
  165.                     "pages" => $noOfPages
  166.                 ]
  167.             ]
  168.         ]);
  169.     }
  170.     /**
  171.      * @Route("/advertisers/{id}", methods={"GET"})
  172.      */
  173.     public function getAdvertisersByIdAction(Request $request$id)
  174.     {
  175.         $advertiserInfo $this->doctrine->getManager()->getRepository(MafoAdvertisers::class)->getAdvertiserById($id);
  176.         $finalArr = [];
  177.         foreach ($advertiserInfo as $advertiser) {
  178.             if (!isset($finalArr[$advertiser['id']])) {
  179.                 $finalArr[$advertiser['id']] = [
  180.                     'id' => $advertiser['id'],
  181.                     'name' => $advertiser['name'],
  182.                     'accountManagerEmail' => $advertiser['accountManagerEmail'],
  183.                     'accountManagerName' => $advertiser['accountManagerName'],
  184.                     'salesManagerEmail' => $advertiser['salesManagerEmail'],
  185.                     'salesManagerName' => $advertiser['salesManagerName'],
  186.                     'discountType' => $advertiser['discountType'],
  187.                     'discountValue' => $advertiser['discountValue'],
  188.                     'singularOrganizationKey' => $advertiser['singularOrganizationKey'],
  189.                     'canEdit' => $this->canUserEditAdvertiserOrPublisher($this->getUser()->getEmail(), $advertiser['accountManagerEmail']),
  190.                     'mappings' => [
  191.                         Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => [],
  192.                         Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => [],
  193.                         Config::MAFO_SYSTEM_IDENTIFIER_HYPER => [],
  194.                         Config::MAFO_SYSTEM_IDENTIFIER_COPPER => []
  195.                     ]
  196.                 ];
  197.             }
  198.             foreach ($finalArr[$advertiser['id']]['mappings'] as $k => $v) {
  199.                 if (isset($advertiser['systemIdentifier']) && $advertiser['systemIdentifier'] == $k) {
  200.                     if (is_array($v)) {
  201.                         if ($k === Config::MAFO_SYSTEM_IDENTIFIER_HYPER) {
  202.                             $finalArr[$advertiser['id']]['mappings'][$k] = [
  203.                                 'value' => $advertiser['systemIdentifierId'],
  204.                                 'label' => $advertiser['systemIdentifierId'] . " - " $advertiser['systemIdentifierId'],
  205.                             ];
  206.                         } else if ($k === Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE) {
  207.                             $finalArr[$advertiser['id']]['mappings'][$k][] = [
  208.                                 'value' => $advertiser['systemIdentifierId'],
  209.                                 'label' => $advertiser['systemIdentifierId'] . " - " $advertiser['tuneAdvertiserCompany'],
  210.                             ];
  211.                         } else if ($k === Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB) {
  212.                             $finalArr[$advertiser['id']]['mappings'][$k][] = [
  213.                                 'value' => $advertiser['systemIdentifierId'],
  214.                                 'label' => $advertiser['tuneAdvertiserCompany'] ? $advertiser['systemIdentifierId'] . " - " $advertiser['tuneAdvertiserCompany'] : $advertiser['systemIdentifierId'],
  215.                             ];
  216.                         } else {
  217.                             $finalArr[$advertiser['id']]['mappings'][$k][] = [
  218.                                 'value' => $advertiser['systemIdentifierId'],
  219.                                 'label' => $advertiser['systemIdentifierId'],
  220.                             ];
  221.                         }
  222.                     }
  223.                 }
  224.             }
  225.         }
  226.         return new JsonResponse([
  227.             'response' => [
  228.                 'status' => 'success',
  229.                 'data' => $finalArr[$id],
  230.                 'metadata' => [
  231.                     "total" => 1,
  232.                     "limit" => 1,
  233.                     "page" => 1,
  234.                     "pages" => 1
  235.                 ]
  236.             ]
  237.         ]);
  238.     }
  239.     /**
  240.      * @Route("/advertisers", methods={"POST"})
  241.      */
  242.     public function postAdvertisersAction(Request $request)
  243.     {
  244.         $payload json_decode($request->getContent(), true);
  245.         $advertiserName $payload['advertiserName'];
  246.         $mobileAdvertiserIds $payload['mobileAdvertiserIds'];
  247.         $webAdvertiserIds $payload['webAdvertiserIds'];
  248.         $hyperClientId $payload['hyperClientId'];
  249.         $copperIds $payload['copperIds'];
  250.         $accountManagerEmail $payload['accountManagerEmail'];
  251.         $salesManagerEmail $payload['salesManagerEmail'];
  252.         $discountType $payload['discountType'];
  253.         $discountValue $payload['discountValue'];
  254.         $singularOrganizationKey $payload['singularOrganizationKey'] ?? null;
  255.         $error = [];
  256.         $arr = [
  257.             Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => $mobileAdvertiserIds,
  258.             Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => $webAdvertiserIds,
  259.             Config::MAFO_SYSTEM_IDENTIFIER_COPPER => $copperIds
  260.         ];
  261.         if ($hyperClientId) {
  262.             $arr[Config::MAFO_SYSTEM_IDENTIFIER_HYPER] = [$hyperClientId];
  263.         }
  264.         foreach ($arr as $key => $ids) {
  265.             foreach ($ids as $id) {
  266.                 $entityExists $this->doctrine->getRepository(MafoAdvertisersMapping::class)->findOneBy([
  267.                     'systemIdentifier' => $key,
  268.                     'systemIdentifierId' => $id,
  269.                     'deletedAt' => null
  270.                 ]);
  271.                 if ($entityExists) {
  272.                     $error[] = "ID: $id already exists for " . (Config::MAFO_SYSTEM_IDENTIFIER_MAPPING[$key]['pretty'] ?? $key) . " advertiser for MAFO ID: " $entityExists->getMafoAdvertiserId()->getId();
  273.                 }
  274.             }
  275.         }
  276.         if (!$advertiserName) {
  277.             $error[] = "Advertiser name is required";
  278.         }
  279.         if (!$discountType) {
  280.             $error[] = "Discount type is required";
  281.             if (!$discountValue) {
  282.                 $error[] = "Discount value is required";
  283.             } else if ($discountValue || $discountValue 100) {
  284.                 $error[] = "Discount value must be between 0 and 100";
  285.             }
  286.         }
  287.         // Validate unique Singular Organization Key
  288.         if ($singularOrganizationKey) {
  289.             $existingAdvertiser $this->doctrine->getRepository(MafoAdvertisers::class)->findOneBy([
  290.                 'singularOrganizationKey' => $singularOrganizationKey
  291.             ]);
  292.             if ($existingAdvertiser) {
  293.                 $error[] = "Singular Organization Key '$singularOrganizationKey' is already used by Advertiser ID: " $existingAdvertiser->getId() . " (" $existingAdvertiser->getName() . ")";
  294.             }
  295.         }
  296.         if ($error) {
  297.             return new JsonResponse(['status' => 'error''message' => $error], 400);
  298.         }
  299.         //        var_dump($advertiserName, $accountManagerEmail, $salesManagerEmail, );
  300.         $mafoAdvertiserEntity $this->doctrine->getRepository(MafoAdvertisers::class)->insertToMafoAdvertisers($advertiserName$accountManagerEmail$salesManagerEmail$this->getUser()->getEmail(), Config::ACTIVE_STATUS$discountType$discountValue$singularOrganizationKey);
  301.         foreach ($arr as $key => $ids) {
  302.             foreach ($ids as $id) {
  303.                 $this->doctrine->getRepository(MafoAdvertisersMapping::class)->insertToMafoAdvertisersMapping($mafoAdvertiserEntity$key$id$this->getUser()->getEmail());
  304.             }
  305.         }
  306.         $scriptString "--mafoAdvertiserId=" $mafoAdvertiserEntity->getId();
  307.         $execCommand "php -d memory_limit=512M " $this->projectDir "/bin/console app:mafoIdAdvertiserMappingChange $scriptString --env=prod > /dev/null &";
  308.         exec($execCommand);
  309.         return new JsonResponse(['status' => 'success']);
  310.     }
  311.     /**
  312.      * @Route("/advertisers/{id}", methods={"PATCH"})
  313.      */
  314.     public function patchAdvertisersAction(Request $request$id)
  315.     {
  316.         $payload json_decode($request->getContent(), true);
  317.         $advertiserName $payload['advertiserName'];
  318.         $mobileAdvertiserIds $payload['mobileAdvertiserIds'];
  319.         $webAdvertiserIds $payload['webAdvertiserIds'];
  320.         $copperIds $payload['copperIds'];
  321.         $accountManagerEmail $payload['accountManagerEmail'];
  322.         $salesManagerEmail $payload['salesManagerEmail'];
  323.         $hyperClientId $payload['hyperClientId'] ?? null;
  324.         $discountType $payload['discountType'];
  325.         $discountValue $payload['discountValue'];
  326.         $singularOrganizationKey $payload['singularOrganizationKey'] ?? null;
  327.         $error = [];
  328.         // Validate unique Singular Organization Key (exclude current advertiser)
  329.         if ($singularOrganizationKey) {
  330.             $existingAdvertiser $this->doctrine->getRepository(MafoAdvertisers::class)->findOneBy([
  331.                 'singularOrganizationKey' => $singularOrganizationKey
  332.             ]);
  333.             if ($existingAdvertiser && $existingAdvertiser->getId() != $id) {
  334.                 $error[] = "Singular Organization Key '$singularOrganizationKey' is already used by Advertiser ID: " $existingAdvertiser->getId() . " (" $existingAdvertiser->getName() . ")";
  335.             }
  336.         }
  337.         if ($error) {
  338.             return new JsonResponse(['status' => 'error''message' => $error], 400);
  339.         }
  340.         $mafoAdvertiserEntity $this->doctrine->getRepository(MafoAdvertisers::class)->updateMafoAdvertisersById($id, [
  341.             'name' => $advertiserName,
  342.             'accountManagerEmail' => $accountManagerEmail,
  343.             'salesManagerEmail' => $salesManagerEmail,
  344.             'discountType' => $discountType,
  345.             'discountValue' => $discountValue,
  346.             'singularOrganizationKey' => $singularOrganizationKey,
  347.             'updatedByEmail' => $this->getUser()->getEmail()
  348.         ]);
  349.         if ($mafoAdvertiserEntity) {
  350.             $arr = [
  351.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => $mobileAdvertiserIds,
  352.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => $webAdvertiserIds,
  353.                 Config::MAFO_SYSTEM_IDENTIFIER_HYPER => [],
  354.                 Config::MAFO_SYSTEM_IDENTIFIER_COPPER => $copperIds
  355.             ];
  356.             if ($hyperClientId) {
  357.                 $arr[Config::MAFO_SYSTEM_IDENTIFIER_HYPER] = [$hyperClientId];
  358.             }
  359.             foreach ($arr as $key => $value) {
  360.                 $existingCombinations $this->doctrine->getRepository(MafoAdvertisersMapping::class)->findBy([
  361.                     'mafoAdvertiserId' => $mafoAdvertiserEntity,
  362.                     'systemIdentifier' => $key
  363.                 ]);
  364.                 $existingIds array_map(function ($item) {
  365.                     return $item->getSystemIdentifierId();
  366.                 }, $existingCombinations);
  367.                 $newIds array_diff($value$existingIds);
  368.                 foreach ($newIds as $newId) {
  369.                     $entityExists $this->doctrine->getRepository(MafoAdvertisersMapping::class)->findOneBy([
  370.                         'systemIdentifier' => $key,
  371.                         'systemIdentifierId' => $newId,
  372.                     ]);
  373.                     if ($entityExists) {
  374.                         $error[] = "ID: $newId already exists for $key system for MAFO ID: " $entityExists->getMafoAdvertiserId()->getId();
  375.                     }
  376.                 }
  377.                 if ($error) {
  378.                     return new JsonResponse(['status' => 'error''message' => $error], 400);
  379.                 }
  380.                 foreach ($newIds as $newId) {
  381.                     $this->doctrine->getRepository(MafoAdvertisersMapping::class)->insertToMafoAdvertisersMapping($mafoAdvertiserEntity$key$newId$this->getUser()->getEmail());
  382.                 }
  383.                 $idsToBeDeleted array_diff($existingIds$value);
  384.                 foreach ($idsToBeDeleted as $idToBeDeleted) {
  385.                     $existingCombinations $this->doctrine->getRepository(MafoAdvertisersMapping::class)->findOneBy([
  386.                         'mafoAdvertiserId' => $mafoAdvertiserEntity,
  387.                         'systemIdentifier' => $key,
  388.                         'systemIdentifierId' => $idToBeDeleted
  389.                     ]);
  390.                     $this->doctrine->getRepository(MafoAdvertisersMapping::class)->remove($existingCombinationstrue);
  391.                     // $this->doctrine->getRepository(MafoAdvertisersMapping::class)->updateMafoAdvertisersMappingById($existingCombinations->getId(), [
  392.                     //     'deletedAt' => new \Datetime('now'),
  393.                     //     'updatedByEmail' => $this->getUser()->getEmail()
  394.                     // ]);
  395.                 }
  396.                 $checkIfIdsDeletedOrNot array_intersect($existingIds$value);
  397.                 if (!empty($checkIfIdsDeletedOrNot)) {
  398.                     foreach ($checkIfIdsDeletedOrNot as $checkIfIdDeletedOrNot) {
  399.                         $isCombinationDeleted $this->doctrine->getRepository(MafoAdvertisersMapping::class)->findOneBy([
  400.                             'mafoAdvertiserId' => $mafoAdvertiserEntity,
  401.                             'systemIdentifier' => $key,
  402.                             'systemIdentifierId' => $checkIfIdDeletedOrNot,
  403.                         ]);
  404.                         if ($isCombinationDeleted->getDeletedAt() !== null) {
  405.                             $this->doctrine->getRepository(MafoAdvertisersMapping::class)->updateMafoAdvertisersMappingById($isCombinationDeleted->getId(), [
  406.                                 'deletedAt' => null,
  407.                                 'updatedByEmail' => $this->getUser()->getEmail()
  408.                             ]);
  409.                         }
  410.                     }
  411.                 }
  412.             }
  413.             $scriptString "--mafoAdvertiserId=" $mafoAdvertiserEntity->getId();
  414.             $execCommand "php -d memory_limit=512M " $this->projectDir "/bin/console app:mafoIdAdvertiserMappingChange $scriptString --env=prod > /dev/null &";
  415.             exec($execCommand);
  416.         }
  417.         return new JsonResponse(['status' => 'success']);
  418.     }
  419.     /**
  420.      * @Route("/affiliates", methods={"GET"})
  421.      */
  422.     public function getAffiliatesAction(Request $request)
  423.     {
  424.         $limit $request->query->get('limit') ? $request->query->get('limit') : Config::REPORTS_PAGINATION_DEFAULT_PAGE_SIZE;
  425.         $page $request->query->get('page') ? $request->query->get('page') : Config::REPORTS_PAGINATION_DEFAULT_PAGE_NUMBER;
  426.         $sortBy $request->query->get('sortBy') ?? Config::REPORTS_PAGINATION_DEFAULT_SORT_BY;
  427.         $sortType $request->query->get('sortType') ?? Config::REPORTS_PAGINATION_DEFAULT_SORT_TYPE;
  428.         $queryParams $request->query->all();
  429.         $mafoAffiliateIds $queryParams['mafoAffiliateIds'] ?? [];
  430.         $accountManagerEmailIds $queryParams['accountManagerEmailIds'] ?? [];
  431.         $salesManagerEmailIds $queryParams['salesManagerEmailIds'] ?? [];
  432.         $mobileTuneAffiliateIds $queryParams['mobileTuneAffiliateIds'] ?? [];
  433.         $webTuneAffiliateIds $queryParams['webTuneAffiliateIds'] ?? [];
  434.         $hyperPublisherIds $queryParams['hyperPublisherIds'] ?? [];
  435.         $mmpPartnerIds $queryParams['mmpPartnerIds'] ?? [];
  436.         $downloadDataAsCSV $request->query->get('downloadCSV') == true false;
  437.         if ($downloadDataAsCSV) {
  438.             $limit =  Config::REPORTS_PAGINATION_DEFAULT_CSV_PAGE_SIZE;
  439.             $page Config::REPORTS_PAGINATION_DEFAULT_PAGE_NUMBER;
  440.         }
  441.         $filters = [
  442.             'id' => $mafoAffiliateIds,
  443.             'accountManagerEmail' => $accountManagerEmailIds,
  444.             'salesManagerEmail' => $salesManagerEmailIds
  445.         ];
  446.         $affiliateMappingFilters = [
  447.             [
  448.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE,
  449.                 'systemIdentifierId' => $mobileTuneAffiliateIds
  450.             ],
  451.             [
  452.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB,
  453.                 'systemIdentifierId' => $webTuneAffiliateIds
  454.             ],
  455.             [
  456.                 'systemIdentifier' => Config::MAFO_SYSTEM_IDENTIFIER_HYPER,
  457.                 'systemIdentifierId' => $hyperPublisherIds
  458.             ]
  459.         ];
  460.         // Filter by MMP Partner IDs if provided
  461.         if (is_array($mmpPartnerIds) && count($mmpPartnerIds) > 0) {
  462.             $mmpMappedAffiliates $this->doctrine->getRepository(MafoAffiliateMmpPartnerMapping::class)->getMappingByMmpPartnerIds($mmpPartnerIds);
  463.             $mmpMappedAffiliateIds array_unique(array_column($mmpMappedAffiliates'mafoAffiliateId'));
  464.             if (is_array($mafoAffiliateIds) && count($mafoAffiliateIds) > 0) {
  465.                 $filters['id'] = array_values(array_intersect($mafoAffiliateIds$mmpMappedAffiliateIds));
  466.             } else {
  467.                 $filters['id'] = $mmpMappedAffiliateIds;
  468.             }
  469.         }
  470.         $affiliates $this->doctrine->getRepository(MafoAffiliates::class)->getAffiliates($filters$affiliateMappingFilters$limit$page$sortBy$sortType);
  471.         $affiliatesTotalCount $this->doctrine->getRepository(MafoAffiliates::class)->getAffiliates($filters$affiliateMappingFilters$limit$page$sortBy$sortTypetrue);
  472.         // Get all MMP partner mappings for the affiliates
  473.         $affiliateIds array_column($affiliates'id');
  474.         $allMmpMappings = [];
  475.         if (count($affiliateIds) > 0) {
  476.             $mmpMappingData $this->doctrine->getRepository(MafoAffiliateMmpPartnerMapping::class)->getMappingByMafoAffiliateIds($affiliateIdsfalse);
  477.             foreach ($mmpMappingData as $mapping) {
  478.                 if (!isset($allMmpMappings[$mapping['mafoAffiliateId']])) {
  479.                     $allMmpMappings[$mapping['mafoAffiliateId']] = [];
  480.                 }
  481.                 $allMmpMappings[$mapping['mafoAffiliateId']][] = [
  482.                     'mmpPartnerId' => $mapping['mmpPartnerId'],
  483.                     'mmpSource' => $mapping['mmpPartnerSource']
  484.                 ];
  485.             }
  486.         }
  487.         $finalArr = [];
  488.         foreach ($affiliates as $affiliate) {
  489.             $mappings = [
  490.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => [],
  491.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => [],
  492.                 Config::MAFO_SYSTEM_IDENTIFIER_HYPER => [],
  493.                 Config::MAFO_SYSTEM_IDENTIFIER_COPPER => []
  494.             ];
  495.             $mappedIdsBySystemIdentifier explode('|'$affiliate['systemIdentifiers']);
  496.             foreach ($mappedIdsBySystemIdentifier as $mappedIdBySystemIdentifier) {
  497.                 $mappedIdBySystemIdentifier explode(':'$mappedIdBySystemIdentifier);
  498.                 foreach ($mappings as $key => $value) {
  499.                     if ($key == $mappedIdBySystemIdentifier[0]) {
  500.                         $name $mappedIdBySystemIdentifier[2] != '' $mappedIdBySystemIdentifier[2] : '';
  501.                         $mappings[$key][] = [
  502.                             'id' => $mappedIdBySystemIdentifier[1],
  503.                             'name' => $name,
  504.                             'label' => $mappedIdBySystemIdentifier[1] . ($name != "" " - " "") . $name
  505.                         ];
  506.                     }
  507.                 }
  508.             }
  509.             // if (!isset($finalArr[$affiliate['id']])) {
  510.             $finalArr[$affiliate['id']] = [
  511.                 'id' => $affiliate['id'],
  512.                 'name' => $affiliate['name'],
  513.                 'accountManagerEmail' => $affiliate['accountManagerEmail'],
  514.                 'accountManagerName' => $affiliate['accountManagerName'],
  515.                 'salesManagerEmail' => $affiliate['salesManagerEmail'],
  516.                 'salesManagerName' => $affiliate['salesManagerName'],
  517.                 'mappings' => $mappings,
  518.                 'mmpMappedData' => $allMmpMappings[$affiliate['id']] ?? [],
  519.                 'canEdit' => $this->canUserEditAdvertiserOrPublisher($this->getUser()->getEmail(), $affiliate['accountManagerEmail']),
  520.             ];
  521.             // }
  522.             // foreach ($finalArr[$affiliate['id']]['mappings'] as $k => $v) {
  523.             //     if (isset($affiliate['systemIdentifier']) && $affiliate['systemIdentifier'] == $k) {
  524.             //         if (is_array($v)) {
  525.             //             $finalArr[$affiliate['id']]['mappings'][$k][] = $affiliate['systemIdentifierId'];
  526.             //         } else {
  527.             //             $finalArr[$affiliate['id']]['mappings'][$k] = $affiliate['systemIdentifierId'];
  528.             //         }
  529.             //     }
  530.             // }
  531.         }
  532.         if ($downloadDataAsCSV) {
  533.             $rows = [['Affiliate Id''Company''Account Manager Email''Sales Manager Email''Tune Mobile Affiliate Ids''Tune Mobile Affiliates''Tune Web Affiliate Ids''Tune Web Affiliates''Hyper Publisher Id''MMP Mapped Partners']];
  534.             foreach ($finalArr as $key => $value) {
  535.                 $rows[] = [
  536.                     $value['id'],
  537.                     $value['name'],
  538.                     $value['accountManagerEmail'],
  539.                     $value['salesManagerEmail'],
  540.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE], 'id')) : '',
  541.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE], 'label')) : '',
  542.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB], 'id')) : '',
  543.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB], 'label')) : '',
  544.                     $value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_HYPER] ? implode(','array_column($value['mappings'][Config::MAFO_SYSTEM_IDENTIFIER_HYPER], 'id')) : '',
  545.                     $value['mmpMappedData'] ? implode(','array_column($value['mmpMappedData'], 'mmpPartnerId')) : '',
  546.                 ];
  547.             }
  548.             $spreadsheet = new Spreadsheet();
  549.             $spreadsheet->getProperties()->setCreator('MAFO')
  550.                 ->setLastModifiedBy('MAFO')
  551.                 ->setTitle('Affiliates')
  552.                 ->setSubject('Affiliates')
  553.                 ->setDescription('Searched Affiliates');
  554.             $i 0;
  555.             $spreadsheet->getActiveSheet()
  556.                 ->fromArray(
  557.                     $rows,
  558.                     NULL,
  559.                     'A1'
  560.                 );
  561.             header('Content-Type: application/vnd.ms-excel');
  562.             header('Content-Disposition: attachment;filename="affiliates.xls"');
  563.             header('Cache-Control: max-age=0');
  564.             $writer IOFactory::createWriter($spreadsheet'Xls');
  565.             $writer->save('php://output');
  566.             exit;
  567.         }
  568.         $totalRecordCount $affiliatesTotalCount ?? null;
  569.         $noOfPages ceil($totalRecordCount $limit);
  570.         return new JsonResponse([
  571.             'response' => [
  572.                 'status' => 'success',
  573.                 'data' => array_values($finalArr),
  574.                 'metadata' => [
  575.                     "total" => $totalRecordCount,
  576.                     "limit" => $limit,
  577.                     "page" => $page,
  578.                     "pages" => $noOfPages
  579.                 ]
  580.             ]
  581.         ]);
  582.     }
  583.     /**
  584.      * @Route("/affiliates/{id}", methods={"GET"})
  585.      */
  586.     public function getAffiliatesByIdAction(Request $request$id)
  587.     {
  588.         $affiliateInfo $this->doctrine->getManager()->getRepository(MafoAffiliates::class)->getAffiliateById($id);
  589.         $hyperPublisherData $this->commonCalls->getHyperPublisherCachedListByKeys();
  590.         $finalArr = [];
  591.         foreach ($affiliateInfo as $affiliate) {
  592.             if (!isset($finalArr[$affiliate['id']])) {
  593.                 $finalArr[$affiliate['id']] = [
  594.                     'id' => $affiliate['id'],
  595.                     'name' => $affiliate['name'],
  596.                     'accountManagerEmail' => $affiliate['accountManagerEmail'],
  597.                     'accountManagerName' => $affiliate['accountManagerName'],
  598.                     'salesManagerEmail' => $affiliate['salesManagerEmail'],
  599.                     'salesManagerName' => $affiliate['salesManagerName'],
  600.                     'partnerPaymentDueDate' => $affiliate['partnerPaymentDueDate'],
  601.                     'canEdit' => $this->canUserEditAdvertiserOrPublisher($this->getUser()->getEmail(), $affiliate['accountManagerEmail']),
  602.                     'mappings' => [
  603.                         Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => [],
  604.                         Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => [],
  605.                         Config::MAFO_SYSTEM_IDENTIFIER_HYPER => [],
  606.                         Config::MAFO_SYSTEM_IDENTIFIER_COPPER => []
  607.                     ]
  608.                 ];
  609.             }
  610.             foreach ($finalArr[$affiliate['id']]['mappings'] as $k => $v) {
  611.                 if (isset($affiliate['systemIdentifier']) && $affiliate['systemIdentifier'] == $k) {
  612.                     if (is_array($v)) {
  613.                         if ($k === Config::MAFO_SYSTEM_IDENTIFIER_HYPER) {
  614.                             $hyperPublisherName array_key_exists($affiliate['systemIdentifierId'], $hyperPublisherData) ? $hyperPublisherData[$affiliate['systemIdentifierId']]['SupplierFullName'] : $affiliate['systemIdentifierId'];
  615.                             $finalArr[$affiliate['id']]['mappings'][$k] = [
  616.                                 'value' => $affiliate['systemIdentifierId'],
  617.                                 'label' => $affiliate['systemIdentifierId'] . ' - ' $hyperPublisherName,
  618.                             ];
  619.                         } else if ($k === Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE) {
  620.                             $finalArr[$affiliate['id']]['mappings'][$k][] = [
  621.                                 'value' => $affiliate['systemIdentifierId'],
  622.                                 'label' => $affiliate['systemIdentifierId'] . " - " $affiliate['tuneAffiliateCompany'],
  623.                             ];
  624.                         } else if ($k === Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB) {
  625.                             $finalArr[$affiliate['id']]['mappings'][$k][] = [
  626.                                 'value' => $affiliate['systemIdentifierId'],
  627.                                 'label' => $affiliate['tuneAffiliateCompany'] ? $affiliate['systemIdentifierId'] . " - " $affiliate['tuneAffiliateCompany'] : $affiliate['systemIdentifierId'],
  628.                             ];
  629.                         } else {
  630.                             $finalArr[$affiliate['id']]['mappings'][$k][] = [
  631.                                 'value' => $affiliate['systemIdentifierId'],
  632.                                 'label' => $affiliate['systemIdentifierId'],
  633.                             ];
  634.                         }
  635.                     }
  636.                 }
  637.             }
  638.         }
  639.         return new JsonResponse([
  640.             'response' => [
  641.                 'status' => 'success',
  642.                 'data' => $finalArr[$id],
  643.                 'metadata' => [
  644.                     "total" => 1,
  645.                     "limit" => 1,
  646.                     "page" => 1,
  647.                     "pages" => 1
  648.                 ]
  649.             ]
  650.         ]);
  651.     }
  652.     /**
  653.      * @Route("/affiliates", methods={"POST"})
  654.      */
  655.     public function postAffiliatesAction(Request $request)
  656.     {
  657.         $payload json_decode($request->getContent(), true);
  658.         $affiliateName $payload['affiliateName'];
  659.         $mobileAffiliateIds $payload['mobileAffiliateIds'];
  660.         $webAffiliateIds $payload['webAffiliateIds'];
  661.         $hyperClientId $payload['hyperClientId'] ?? null;
  662.         $copperIds $payload['copperIds'];
  663.         $accountManagerEmail $payload['accountManagerEmail'];
  664.         $salesManagerEmail $payload['salesManagerEmail'];
  665.         $partnerPaymentDueDate = isset($payload['partnerPaymentDueDate']) && $payload['partnerPaymentDueDate'] !== '' ? (int) $payload['partnerPaymentDueDate'] : null;
  666.         $error = [];
  667.         $arr = [
  668.             Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => $mobileAffiliateIds,
  669.             Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => $webAffiliateIds,
  670.             Config::MAFO_SYSTEM_IDENTIFIER_COPPER => $copperIds
  671.         ];
  672.         if ($hyperClientId) {
  673.             $arr[Config::MAFO_SYSTEM_IDENTIFIER_HYPER] = [$hyperClientId];
  674.         }
  675.         foreach ($arr as $key => $ids) {
  676.             foreach ($ids as $id) {
  677.                 $entityExists $this->doctrine->getRepository(MafoAffiliatesMapping::class)->findOneBy([
  678.                     'systemIdentifier' => $key,
  679.                     'systemIdentifierId' => $id,
  680.                     'deletedAt' => null
  681.                 ]);
  682.                 if ($entityExists) {
  683.                     $error[] = "ID: $id already exists for " . (Config::MAFO_SYSTEM_IDENTIFIER_MAPPING[$key]['pretty'] ?? $key) . " affiliate for MAFO ID: " $entityExists->getMafoAffiliateId()->getId();
  684.                 }
  685.             }
  686.         }
  687.         if (!$affiliateName) {
  688.             $error[] = "Affiliate name is required";
  689.         }
  690.         if ($error) {
  691.             return new JsonResponse(['status' => 'error''message' => $error], 400);
  692.         }
  693.         $mafoAffiliateEntity $this->doctrine->getRepository(MafoAffiliates::class)->insertToMafoAffiliates($affiliateName$accountManagerEmail$salesManagerEmail$this->getUser()->getEmail(), $partnerPaymentDueDate);
  694.         foreach ($arr as $key => $ids) {
  695.             foreach ($ids as $id) {
  696.                 $this->doctrine->getRepository(MafoAffiliatesMapping::class)->insertToMafoAffiliatesMapping($mafoAffiliateEntity$key$id$this->getUser()->getEmail());
  697.             }
  698.         }
  699.         return new JsonResponse(['status' => 'success']);
  700.     }
  701.     /**
  702.      * @Route("/affiliates/{id}", methods={"PATCH"})
  703.      */
  704.     public function patchAffiliatesAction(Request $request$id)
  705.     {
  706.         $payload json_decode($request->getContent(), true);
  707.         $affiliateName $payload['affiliateName'];
  708.         $mobileAffiliateIds $payload['mobileAffiliateIds'];
  709.         $webAffiliateIds $payload['webAffiliateIds'];
  710.         $copperIds $payload['copperIds'];
  711.         $accountManagerEmail $payload['accountManagerEmail'];
  712.         $salesManagerEmail $payload['salesManagerEmail'];
  713.         $hyperClientId $payload['hyperClientId'] ?? null;
  714.         $partnerPaymentDueDate = isset($payload['partnerPaymentDueDate']) && $payload['partnerPaymentDueDate'] !== '' ? (int) $payload['partnerPaymentDueDate'] : null;
  715.         $error = [];
  716.         $mafoAffiliateEntity $this->doctrine->getRepository(MafoAffiliates::class)->updateMafoAffiliatesById($id, [
  717.             'name' => $affiliateName,
  718.             'accountManagerEmail' => $accountManagerEmail,
  719.             'salesManagerEmail' => $salesManagerEmail,
  720.             'partnerPaymentDueDate' => $partnerPaymentDueDate,
  721.             'updatedByEmail' => $this->getUser()->getEmail()
  722.         ]);
  723.         if ($mafoAffiliateEntity) {
  724.             $arr = [
  725.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_MOBILE => $mobileAffiliateIds,
  726.                 Config::MAFO_SYSTEM_IDENTIFIER_TUNE_WEB => $webAffiliateIds,
  727.                 Config::MAFO_SYSTEM_IDENTIFIER_HYPER => [],
  728.                 Config::MAFO_SYSTEM_IDENTIFIER_COPPER => $copperIds
  729.             ];
  730.             if ($hyperClientId) {
  731.                 $arr[Config::MAFO_SYSTEM_IDENTIFIER_HYPER] = [$hyperClientId];
  732.             }
  733.             foreach ($arr as $key => $value) {
  734.                 $existingCombinations $this->doctrine->getRepository(MafoAffiliatesMapping::class)->findBy([
  735.                     'mafoAffiliateId' => $mafoAffiliateEntity,
  736.                     'systemIdentifier' => $key
  737.                 ]);
  738.                 $existingIds array_map(function ($item) {
  739.                     return $item->getSystemIdentifierId();
  740.                 }, $existingCombinations);
  741.                 $newIds array_diff($value$existingIds);
  742.                 foreach ($newIds as $newId) {
  743.                     $entityExists $this->doctrine->getRepository(MafoAffiliatesMapping::class)->findOneBy([
  744.                         'systemIdentifier' => $key,
  745.                         'systemIdentifierId' => $newId,
  746.                     ]);
  747.                     if ($entityExists) {
  748.                         $error[] = "ID: $newId already exists for $key system for MAFO ID: " $entityExists->getMafoAffiliateId()->getId();
  749.                     }
  750.                 }
  751.                 if ($error) {
  752.                     return new JsonResponse(['status' => 'error''message' => $error], 400);
  753.                 }
  754.                 foreach ($newIds as $newId) {
  755.                     $this->doctrine->getRepository(MafoAffiliatesMapping::class)->insertToMafoAffiliatesMapping($mafoAffiliateEntity$key$newId$this->getUser()->getEmail());
  756.                 }
  757.                 $idsToBeDeleted array_diff($existingIds$value);
  758.                 foreach ($idsToBeDeleted as $idToBeDeleted) {
  759.                     $existingCombinations $this->doctrine->getRepository(MafoAffiliatesMapping::class)->findOneBy([
  760.                         'mafoAffiliateId' => $mafoAffiliateEntity,
  761.                         'systemIdentifier' => $key,
  762.                         'systemIdentifierId' => $idToBeDeleted,
  763.                     ]);
  764.                     // $this->doctrine->getRepository(MafoAffiliatesMapping::class)->updateMafoAffiliatesMappingById($existingCombinations->getId(), [
  765.                     //     'deletedAt' => new \Datetime('now'),
  766.                     //     'updatedByEmail' => $this->getUser()->getEmail()
  767.                     // ]);
  768.                     $this->doctrine->getRepository(MafoAffiliatesMapping::class)->remove($existingCombinationstrue);
  769.                 }
  770.                 $checkIfIdsDeletedOrNot array_intersect($existingIds$value);
  771.                 if (!empty($checkIfIdsDeletedOrNot)) {
  772.                     foreach ($checkIfIdsDeletedOrNot as $checkIfIdDeletedOrNot) {
  773.                         $isCombinationDeleted $this->doctrine->getRepository(MafoAffiliatesMapping::class)->findOneBy([
  774.                             'mafoAffiliateId' => $mafoAffiliateEntity,
  775.                             'systemIdentifier' => $key,
  776.                             'systemIdentifierId' => $checkIfIdDeletedOrNot,
  777.                         ]);
  778.                         if ($isCombinationDeleted->getDeletedAt() !== null) {
  779.                             $this->doctrine->getRepository(MafoAffiliatesMapping::class)->updateMafoAffiliatesMappingById($isCombinationDeleted->getId(), [
  780.                                 'deletedAt' => null,
  781.                                 'updatedByEmail' => $this->getUser()->getEmail()
  782.                             ]);
  783.                         }
  784.                     }
  785.                 }
  786.             }
  787.         }
  788.         return new JsonResponse(['status' => 'success']);
  789.     }
  790.     private function canUserEditAdvertiserOrPublisher($userEmail$accountManagerEmail)
  791.     {
  792.         if (!isset($this->parentUsersByUser)) {
  793.             $this->parentUsersByUser $this->userComponents->getParentUsersByUser();
  794.         }
  795.         if (!isset($this->usersByRoles)) {
  796.             $this->usersByRoles $this->userComponents->getUsersByRole();
  797.         }
  798.         if (
  799.             $userEmail === $accountManagerEmail ||
  800.             (
  801.                 array_key_exists($accountManagerEmail$this->parentUsersByUser) &&
  802.                 in_array($userEmail$this->parentUsersByUser[$accountManagerEmail])
  803.             ) ||
  804.             in_array($userEmail$this->usersByRoles[Config::ROLE_ADMIN])
  805.         ) {
  806.             return true;
  807.         }
  808.         return false;
  809.     }
  810.     /**
  811.      * @Route("/mafo-affiliate-rating", methods={"GET"})
  812.      */
  813.     public function affiliateRatingGetAction(Request $request)
  814.     {
  815.         $period date('Y-m-01'strtotime("-1 month"));
  816.         $affiliateRatingData $this->doctrine->getRepository(MafoAffiliateRating::class)->getAffiliateRatingDataByPeriod($request->query->get('mafoAffiliateId'), $period);
  817.         return new JsonResponse($affiliateRatingData);
  818.     }
  819.     /**
  820.      * @Route("/mafo-affiliate-rating", methods={"POST"})
  821.      */
  822.     public function affiliateRatingAction(Request $request)
  823.     {
  824.         $payload json_decode($request->getContent(), true);
  825.         extract($payload);
  826.         $period = new \Datetime(date('Y-m-01'strtotime("-1 month")));
  827.         $checkAffiliateExistForPeriod $this->doctrine->getRepository(MafoAffiliateRating::class)->findOneBy([
  828.             'mafoAffiliateId' => $mafoAffiliateId,
  829.             'period' => $period
  830.         ]);
  831.         if ($checkAffiliateExistForPeriod) {
  832.             $this->doctrine->getRepository(MafoAffiliateRating::class)->updateAdjustAppDetailsById($checkAffiliateExistForPeriod->getId(), [
  833.                 'qualityFeedback' => $qualityFeedback,
  834.                 'responsivenessFeedback' => $responsivenessFeedback,
  835.                 'clickControlFeedback' => $clickControlFeedback,
  836.                 'impressionControlFeedback' => $impressionControlFeedback,
  837.             ]);
  838.         } else {
  839.             $this->doctrine->getRepository(MafoAffiliateRating::class)->insertToAffiliateRating($affiliateId$period$qualityFeedback$clickControlFeedback$impressionControlFeedback$responsivenessFeedback, []);
  840.         }
  841.         return new JsonResponse(true);
  842.     }
  843. }