src/Controller/Admin/UserCheckoutInfoController.php line 42

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Admin;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use EADPlataforma\Entity\UserCheckoutInfo;
  7. use EADPlataforma\Entity\City;
  8. use EADPlataforma\Entity\State;
  9. use EADPlataforma\Entity\Country;
  10. use EADPlataforma\Entity\User;
  11. use EADPlataforma\Entity\UserSubscription;
  12. use EADPlataforma\Enum\UserCheckoutInfoEnum;
  13. use EADPlataforma\Enum\UserSubscriptionEnum;
  14. use EADPlataforma\Enum\ErrorEnum;
  15. /**
  16.  * @Route(
  17.  *      path          = "/admin/user/info/checkout",
  18.  *      schemes         = {"http|https"}
  19.  * )
  20.  * @Cache(
  21.  *      maxage          = "0",
  22.  *      smaxage         = "0",
  23.  *      expires         = "now",
  24.  *      public          = false
  25.  * )
  26.  */
  27. class UserCheckoutInfoController extends AbstractController {
  28.     
  29.     public function getEntityClass(){
  30.         return UserCheckoutInfo::class;
  31.     }
  32.     /**
  33.      * @Route(
  34.      *      path          = "/list/paginate",
  35.      *      methods       = {"GET"}
  36.      * )
  37.      */
  38.     public function getUserCheckoutInfoPaginate(Request $request) {
  39.         if(!$this->user){
  40.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  41.         }
  42.         $this->requestUtil->setRequest($request)->setData();
  43.         $columns = [
  44.             "ui.id"
  45.             "ui.name",
  46.             "ui.email",
  47.             "ui.document",
  48.             "ui.phone",
  49.             "ui.address",
  50.             "ui.default",
  51.             "ui.addressComplement",
  52.             "ui.addressNeighborhood",
  53.             "ui.addressNumber",
  54.             "ui.zipCode",
  55.             "ui.receiveEmail",
  56.             "IDENTITY(ui.country) AS country",
  57.             "IDENTITY(ui.state) AS state",
  58.             "IDENTITY(ui.city) AS city",
  59.             "DATE_FORMAT(ui.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  60.             "ud.name AS userDelete"
  61.         ];
  62.         $userClass User::class;
  63.         $joins = [
  64.             "{$userClass} AS ud"    => ["LEFT""ud.id = ui.userDelete"]
  65.         ];
  66.         $orderParam $this->requestUtil->getField('order');
  67.         $searchText $this->requestUtil->getField('searchText');       
  68.         $limit $this->requestUtil->getField('limit');
  69.         $offset $this->requestUtil->getField('offset');
  70.         $filter = [];
  71.         $filterDelete $this->requestUtil->getDeletedParam();
  72.         $filter = [ 
  73.             "ui.user" => $this->user->getId(),
  74.         ];
  75.         $order = [ "ui.id" => "ASC" ];
  76.         if(!empty($orderParam)){
  77.             $order json_decode($orderParamtrue);
  78.         }
  79.         $data $this->repository->paginate(
  80.             "ui"
  81.             $searchText
  82.             $columns
  83.             $joins
  84.             $filter
  85.             $order
  86.             $limit
  87.             $offset
  88.             $filterDelete
  89.         );
  90.         return $this->eadResponse($data);
  91.     }
  92.     /**
  93.      * @Route(
  94.      *      path          = "/list/all",
  95.      *      methods       = {"GET"}
  96.      * )
  97.      */
  98.     public function getUserCheckoutInfoAll(Request $request) {
  99.         if(!$this->user){
  100.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  101.         }
  102.         $infos $this->repository->findBy([
  103.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED,
  104.             "user" => $this->user->getId(),
  105.         ]);
  106.         $data = [];
  107.         foreach ($infos as $key => $info) {
  108.             $data[] = $info->toReturn();
  109.         }
  110.         return $this->eadResponse($data);
  111.     }
  112.     /**
  113.      * @Route(
  114.      *      path          = "/detail/{id}",
  115.      *      name          = "userCheckoutInfoDetail",
  116.      *      methods       = {"GET"},
  117.      *      requirements  = { "id" = "\d+" }
  118.      * )
  119.      */
  120.     public function getUserCheckoutInfoDetail(Request $request) {
  121.         if(!$this->user){
  122.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  123.         }
  124.         
  125.         $userCheckoutInfoId $request->get('id');
  126.         $userCheckoutInfo $this->repository->findOneBy([
  127.             "id" => $userCheckoutInfoId,
  128.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  129.         ]);
  130.         if (!$userCheckoutInfo) {
  131.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  132.         }
  133.         
  134.         return $this->eadResponse($userCheckoutInfo->toReturn());
  135.     }
  136.     /**
  137.      * @Route(
  138.      *      path          = "/register",
  139.      *      name          = "registerUserCheckoutInfo",
  140.      *      methods       = {"POST"},
  141.      * )
  142.      */
  143.     public function registerUserCheckoutInfo(Request $request) {
  144.         if(!$this->user){
  145.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  146.         }
  147.         $this->requestUtil->setRequest($request)->setData();
  148.         $userCheckoutInfo = new userCheckoutInfo();
  149.         if($this->requestUtil->issetField('default')){
  150.             $userCheckoutInfo->setDefault((int)$this->requestUtil->getField('default'));
  151.         }
  152.         if($this->requestUtil->issetField('name')){
  153.             $userCheckoutInfo->setName($this->requestUtil->getField('name'));
  154.         }
  155.         if($this->requestUtil->issetField('email')){
  156.             $userCheckoutInfo->setEmail($this->requestUtil->getField('email'));
  157.         }
  158.         if($this->requestUtil->issetField('document')){
  159.             $userCheckoutInfo->setDocument($this->requestUtil->getField('document'));
  160.         }
  161.         if($this->requestUtil->issetField('phone')){
  162.             $userCheckoutInfo->setPhone($this->requestUtil->getField('phone'));
  163.         }
  164.         if($this->requestUtil->issetField('country')){
  165.             $countryId $this->requestUtil->getField('country');
  166.             $country $this->em->getRepository(Country::class)->findOneBy([
  167.                 "id" => $countryId,
  168.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  169.             ]);
  170.             $userCheckoutInfo->setCountry($country);
  171.         }
  172.         if($this->requestUtil->issetField('state')){
  173.             $stateId $this->requestUtil->getField('state');
  174.             $state $this->em->getRepository(State::class)->findOneBy([
  175.                 "id" => $stateId,
  176.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  177.             ]);
  178.             $userCheckoutInfo->setState($state);
  179.         }
  180.         if($this->requestUtil->issetField('city')){
  181.             $cityId $this->requestUtil->getField('city');
  182.             $city $this->em->getRepository(City::class)->findOneBy([
  183.                 "id" => $cityId,
  184.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  185.             ]);
  186.             $userCheckoutInfo->setCity($city);
  187.         }
  188.         if($this->requestUtil->issetField('zipCode')){
  189.             $userCheckoutInfo->setZipCode($this->requestUtil->getField('zipCode'));
  190.         }
  191.         if($this->requestUtil->issetField('address')){
  192.             $userCheckoutInfo->setAddress($this->requestUtil->getField('address'));
  193.         }
  194.         if($this->requestUtil->issetField('addressNumber')){
  195.             $userCheckoutInfo->setAddressNumber($this->requestUtil->getField('addressNumber'));
  196.         }
  197.         if($this->requestUtil->issetField('addressComplement')){
  198.             $userCheckoutInfo->setAddressComplement($this->requestUtil->getField('addressComplement'));
  199.         }
  200.         if($this->requestUtil->issetField('addressNeighborhood')){
  201.             $userCheckoutInfo->setAddressNeighborhood(
  202.                 $this->requestUtil->getField('addressNeighborhood')
  203.             );
  204.         }
  205.         
  206.         if($this->requestUtil->issetField('receiveEmail')){
  207.             $userCheckoutInfo->setReceiveEmail((int)$this->requestUtil->getField('receiveEmail'));
  208.         }
  209.         $userCheckoutInfo->setUser($this->user);
  210.         $numberUserCheckoutInfo $this->repository->count([
  211.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED,
  212.             "user" => $this->user->getId()
  213.         ]);
  214.         if(empty($numberUserCheckoutInfo)){
  215.             $userCheckoutInfo->setDefault(UserCheckoutInfoEnum::YES);
  216.         }
  217.         if($userCheckoutInfo->getDefault() == UserCheckoutInfoEnum::YES){
  218.             $this->repository->removeDefault($this->user->getId());
  219.         }
  220.         $errors $this->validateEntity($userCheckoutInfo);
  221.         if($errors){
  222.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  223.         }
  224.         $this->em->persist($userCheckoutInfo);
  225.         $this->em->flush();
  226.         $data $userCheckoutInfo->toReturn();
  227.         return $this->eadResponse($data);
  228.     }
  229.     /**
  230.      * @Route(
  231.      *      path          = "/edit/{id}",
  232.      *      name          = "editUserCheckoutInfo",
  233.      *      methods       = {"PUT"},
  234.      * )
  235.      */
  236.     public function editUserCheckoutInfo(Request $request) {
  237.         if(!$this->user){
  238.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  239.         }
  240.         $this->requestUtil->setRequest($request)->setData();
  241.         $userCheckoutInfo $this->repository->findOneBy([
  242.             "id" => (int)$request->get('id'),
  243.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  244.         ]);
  245.         
  246.         if (!$userCheckoutInfo) {
  247.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  248.         }
  249.         if($this->user->getId() != $userCheckoutInfo->getUser()->getId()){
  250.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  251.         }
  252.         if($this->requestUtil->issetField('name')){
  253.             $userCheckoutInfo->setName($this->requestUtil->getField('name'));
  254.         }
  255.         if($this->requestUtil->issetField('email')){
  256.             $userCheckoutInfo->setEmail($this->requestUtil->getField('email'));
  257.         }
  258.         if($this->requestUtil->issetField('document')){
  259.             $userCheckoutInfo->setDocument($this->requestUtil->getField('document'));
  260.         }
  261.         if($this->requestUtil->issetField('phone')){
  262.             $userCheckoutInfo->setPhone($this->requestUtil->getField('phone'));
  263.         }
  264.         if($this->requestUtil->issetField('country')){
  265.             $countryId $this->requestUtil->getField('country');
  266.             $country $this->em->getRepository(Country::class)->findOneBy([
  267.                 "id" => $countryId,
  268.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  269.             ]);
  270.             if($country){
  271.                 $userCheckoutInfo->setCountry($country);
  272.             }else{
  273.                 $userCheckoutInfo->setCountry(null);
  274.             }
  275.         }else{
  276.             $userCheckoutInfo->setCountry(null);
  277.         }
  278.         if($this->requestUtil->issetField('state')){
  279.             $stateId $this->requestUtil->getField('state');
  280.             $state $this->em->getRepository(State::class)->findOneBy([
  281.                 "id" => $stateId,
  282.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  283.             ]);
  284.             if($state){
  285.                 $userCheckoutInfo->setState($state);
  286.             }else{
  287.                 $userCheckoutInfo->setState(null);
  288.             }
  289.         }else{
  290.             $userCheckoutInfo->setState(null);
  291.         }
  292.         if($this->requestUtil->issetField('city')){
  293.             $cityId $this->requestUtil->getField('city');
  294.             $city $this->em->getRepository(City::class)->findOneBy([
  295.                 "id" => $cityId,
  296.                 "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  297.             ]);
  298.             if($city){
  299.                 $userCheckoutInfo->setCity($city);
  300.             }else{
  301.                 $userCheckoutInfo->setCity(null);
  302.             }
  303.         }else{
  304.             $userCheckoutInfo->setCity(null);
  305.         }
  306.         if($this->requestUtil->issetField('zipCode')){
  307.             $userCheckoutInfo->setZipCode($this->requestUtil->getField('zipCode'));
  308.         }
  309.         if($this->requestUtil->issetField('address')){
  310.             $userCheckoutInfo->setAddress($this->requestUtil->getField('address'));
  311.         }
  312.         if($this->requestUtil->issetField('addressNumber')){
  313.             $userCheckoutInfo->setAddressNumber($this->requestUtil->getField('addressNumber'));
  314.         }
  315.         if($this->requestUtil->issetField('addressComplement')){
  316.             $userCheckoutInfo->setAddressComplement($this->requestUtil->getField('addressComplement'));
  317.         }
  318.         if($this->requestUtil->issetField('addressNeighborhood')){
  319.             $userCheckoutInfo->setAddressNeighborhood(
  320.                 $this->requestUtil->getField('addressNeighborhood')
  321.             );
  322.         }
  323.         
  324.         if($this->requestUtil->issetField('receiveEmail')){
  325.             $userCheckoutInfo->setReceiveEmail((int)$this->requestUtil->getField('receiveEmail'));
  326.         }
  327.         $numberUserCheckoutInfo $this->repository->count([
  328.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED,
  329.             "user" => $this->user->getId()
  330.         ]);
  331.         if(empty($numberUserCheckoutInfo)){
  332.             $userCheckoutInfo->setDefault(UserCheckoutInfoEnum::YES);
  333.         }
  334.         $errors $this->validateEntity($userCheckoutInfo);
  335.         if($errors){
  336.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  337.         }
  338.         $this->em->flush();
  339.         $data $userCheckoutInfo->toReturn();
  340.         return $this->eadResponse($data);
  341.     }
  342.     /**
  343.      * @Route(
  344.      *      path          = "/change/default/{userCheckoutInfoId}",
  345.      *      methods       = {"GET"},
  346.      *      requirements  = {"userCheckoutInfoId": "\d+"}
  347.      * )
  348.      */
  349.     public function changeUserCheckoutInfoDefault(Request $request) {
  350.         if(!$this->user){
  351.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  352.         }
  353.         $userCheckoutInfoId $request->get('userCheckoutInfoId');
  354.         $userCheckoutInfo $this->repository->findOneBy([
  355.             "id" => $userCheckoutInfoId,
  356.             "user" => $this->user->getId(),
  357.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  358.         ]);
  359.         if(!$userCheckoutInfo){
  360.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  361.         }
  362.         $this->repository->removeDefault($this->user->getId());
  363.         $userCheckoutInfo->setDefault(UserCheckoutInfoEnum::YES);
  364.         $userSubscriptions $this->em->getRepository(UserSubscription::class)->findBy([ 
  365.             "user" => $this->user->getId(),
  366.             "status" => UserSubscriptionEnum::STATUS_ACTIVE,
  367.             "deleted" => UserSubscriptionEnum::ITEM_NO_DELETED
  368.         ]);
  369.         foreach($userSubscriptions as $key => $userSubscription) {
  370.             $userSubscription->setUserCheckoutInfo($userCheckoutInfo);
  371.         }
  372.         $this->em->flush();
  373.         $data $userCheckoutInfo->toReturn();
  374.         return $this->eadResponse($data);
  375.     }
  376.     /**
  377.      * @Route(
  378.      *      path          = "/delete/{userCheckoutInfoId}",
  379.      *      methods       = {"DELETE"},
  380.      *      requirements  = { "userCheckoutInfoId" = "\d+" }
  381.      * )
  382.      */
  383.     public function deleteUserCheckoutInfo(Request $request) {
  384.         if(!$this->user){
  385.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  386.         }
  387.         $userCheckoutInfoId $request->get('userCheckoutInfoId');
  388.         $userCheckoutInfo $this->repository->findOneBy([
  389.             "id" => $userCheckoutInfoId,
  390.             "user" => $this->user->getId(),
  391.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  392.         ]);
  393.         if (!$userCheckoutInfo) {
  394.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  395.         }
  396.         $countUserSubscription $this->em->getRepository(UserSubscription::class)->count([ 
  397.             "userCheckoutInfo" => $userCheckoutInfoId,
  398.             "user" => $this->user->getId(),
  399.             "deleted" => UserSubscriptionEnum::ITEM_NO_DELETED
  400.         ]);
  401.         if($countUserSubscription 0){
  402.             return $this->eadResponse([ 
  403.                 "message" => "Este faturamento não pode ser deletado, pois está vinculado a uma assinatura" 
  404.             ], ErrorEnum::ACTION_INVALID);
  405.         }
  406.         $userCheckoutInfo->setUserDelete($this->user);
  407.         $userCheckoutInfo->setDateDelete(date('Y-m-d H:i:s'));
  408.         $userCheckoutInfo->individual();
  409.         $userCheckoutInfo->delete();
  410.         $this->userLogService->logDelete("user_checkout_info"$userCheckoutInfo->getId(), [ 
  411.             "deleted" => UserCheckoutInfoEnum::ITEM_DELETED
  412.         ]);
  413.         $this->em->flush();
  414.         return $this->eadResponse([ "delete" => ]);
  415.     }
  416. }