src/Controller/Admin/OrganizationController.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Enum\OrganizationStatusEnum;
  4. use App\Service\SubscriptionUtils;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Evo\Infrastructure\MappingORM\Invoice;
  7. use Evo\Infrastructure\MappingORM\Organization;
  8. use Evo\Infrastructure\MappingORM\User;
  9. use Knp\Component\Pager\PaginatorInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. /**
  17.  * @Route("/organization")
  18.  */
  19. class OrganizationController extends AbstractController
  20. {
  21.     private EntityManagerInterface $em;
  22.     private TranslatorInterface $translator;
  23.     private ParameterBagInterface $params;
  24.     public function __construct(
  25.         EntityManagerInterface $em,
  26.         TranslatorInterface $translator,
  27.         ParameterBagInterface $params
  28.     ) {
  29.         $this->em $em;
  30.         $this->translator $translator;
  31.         $this->params $params;
  32.     }
  33.     /**
  34.      * @Route("/{id}/history", name="admin_organization_history", methods={"GET"})
  35.      */
  36.     public function organizationHistory($id)
  37.     {
  38.         $repository $this->em->getRepository(Organization::class);
  39.         /** @var Organization $organization */
  40.         $organization $repository->find($id);
  41.         return $this->render(
  42.             'organization/view_history.html.twig', [
  43.                 'organization' => $organization,
  44.                 'histories' => $organization->getHistory(),
  45.             ]
  46.         );
  47.     }
  48.     /**
  49.      * @Route("/{status}/validation/document", name="app_kyc_organization", methods={"GET", "POST"})
  50.      */
  51.     public function validationKYC(Request $request$statusPaginatorInterface $paginator): Response
  52.     {
  53.         $searchQuery $request->request->get('organization_search_query');
  54.         $repository $this->em->getRepository(Organization::class);
  55.         $organizations $repository->getOrgaToKYC($statusfalse$searchQuery);
  56.         $organizationPag $paginator->paginate(
  57.             $organizations,
  58.             $request->query->getInt('page'1),
  59.             10
  60.         );
  61.         return $this->render('organization/list_new_payment.html.twig', [
  62.             'organizations' => $organizationPag,
  63.             'status' => $status,
  64.             'route' => $searchQuery 'app_kyc_organization_unpaid' 'app_kyc_organization_new_payment',
  65.         ]);
  66.     }
  67.     /**
  68.      * @Route("/{id}/impersonation", name="admin_organization_impersonation", methods={"GET"})
  69.      */
  70.     public function impersonation($idRequest $request, ?bool $redirect true)
  71.     {
  72.         $repository $this->em->getRepository(Organization::class);
  73.         /** @var Organization $organization */
  74.         $organization $repository->find($id);
  75.         $params $request->get('edit');
  76.         $reset $request->get('reset');
  77.         $to $request->get('to');
  78.         $returnLink $request->get('return_link');
  79.         if ($organization) {
  80.             $users $organization->getUsers();
  81.             if (!empty($users)) {
  82.                 /** @var User $user */
  83.                 $user $users[0];
  84.                 $uri_tunnel $this->params->get('uri_bv');
  85.                 $url $uri_tunnel.'/?switch_user='.urlencode($user->getEmail()).'&org='.$organization->getId();
  86.                 if ('true' === $reset && OrganizationStatusEnum::LOST === $organization->getStatus()) {
  87.                     $organization->setStatus(OrganizationStatusEnum::NEW);
  88.                     $this->em->persist($organization);
  89.                     $this->em->flush();
  90.                 }
  91.                 if ($params) {
  92.                     $url $url.'&edit='.$params;
  93.                 }
  94.                 if ($to) {
  95.                     $url $url.'&to='.$to;
  96.                 }
  97.                 if ($returnLink) {
  98.                     $url $url.'&return_link='.$returnLink;
  99.                 }
  100.                 return $redirect $this->redirect($url) : $this->json($url);
  101.             }
  102.             return $this->json(['message' => 'No users attached to organization']);
  103.         }
  104.         return $this->json(['message' => 'Organization not found'], Response::HTTP_NOT_FOUND);
  105.     }
  106.     /**
  107.      * @Route("/export", name="admin_organization_export", methods={"GET"})
  108.      */
  109.     public function export()
  110.     {
  111.         $repository $this->em->getRepository(Organization::class);
  112.         $aStatus = [
  113.             OrganizationStatusEnum::NEW,
  114.             OrganizationStatusEnum::CANCELLED,
  115.             OrganizationStatusEnum::PRE_CANCELLATION,
  116.             OrganizationStatusEnum::LOST,
  117.         ];
  118.         $organizations $repository->getOrganizationWithoutStatus($aStatus);
  119.         $rows = [];
  120.         $data = [
  121.             'ID',
  122.             'Dénomination sociale',
  123.             'Date effet contrat',
  124.             'Statut',
  125.             'Date facture réccurente',
  126.             'Abonnement',
  127.             'ID Facture',
  128.             'Montant abonnement en €',
  129.             'Montant facture en €',
  130.         ];
  131.         $rows[] = implode(','$data);
  132.         /** @var Organization $organization */
  133.         foreach ($organizations as $organization) {
  134.             $invoice null;
  135.             /** @var Invoice $object */
  136.             foreach ($organization->getInvoices() as $object) {
  137.                 $date $object->getCreatedAt()->format('Y-m');
  138.                 if ('2020-02' == $date && $object->getIsDomiciliation()) {
  139.                     $invoice $object;
  140.                     break;
  141.                 }
  142.             }
  143.             try {
  144.                 $subscription SubscriptionUtils::getDomSubscription($organization);
  145.                 $data = [
  146.                     $organization->getId(),
  147.                     $organization->getLegalName(),
  148.                     (null !== $organization->getDomiciliationStartDate()) ? $organization->getDomiciliationStartDate()->format('d-m-Y') : '',
  149.                     $this->translator->trans(OrganizationStatusEnum::getReadableValue($organization->getStatus())),
  150.                     (null !== $organization->getDomiciliationStartDate()) ? $organization->getDomiciliationStartDate()->format('d') : '',
  151.                     (null !== $subscription) ? $subscription->getType() : '',
  152.                     (null !== $invoice) ? $invoice->getId() : '',
  153.                     (null !== $subscription) ? $subscription->getTotalPriceWithTax() : '',
  154.                     (null !== $invoice) ? $invoice->getPrice() : '',
  155.                 ];
  156.                 $rows[] = implode(','$data);
  157.             } catch (\Exception $e) {
  158.                 continue;
  159.             }
  160.         }
  161.         $content implode("\n"$rows);
  162.         $response = new Response($content);
  163.         $response->headers->set('Content-Type''text/csv');
  164.         $response->headers->set('Content-Type''application/force-download');
  165.         $response->headers->set('Content-Transfer-Encoding''UTF-8');
  166.         $response->headers->set('Content-Disposition',
  167.             'attachment; filename="export-facture-'.date('Ymd_His').'.csv"');
  168.         echo "\xEF\xBB\xBF";
  169.         return $response;
  170.     }
  171. }