src/Controller/Api/BulletinController.php line 114

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\UserDonasi;
  4. use App\Entity\UserBulletin;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use App\Repository\ArtikelRepository;
  7. use App\Repository\BulletinRepository;
  8. use App\Repository\DokumentasiRepository;
  9. use App\Repository\UserBulletinRepository;
  10. use App\Repository\UserDonasiRepository;
  11. use App\Repository\KategoriDonasiRepository;
  12. use Doctrine\ORM\Tools\Pagination\Paginator;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Response;
  17. /**
  18.  * Description of BulletinController
  19.  * @Route("/", name="api_bulletin_")
  20.  * @author programmer
  21.  */
  22. class BulletinController extends AbstractController
  23. {
  24.     private BulletinRepository $bulletinRepository;
  25.     private UserBulletinRepository $userBulletinRepository;
  26.     private UserDonasiRepository $userDonasiRepository;
  27.     private ArtikelRepository $artikelRepository;
  28.     private DokumentasiRepository $dokRepository;
  29.     private KategoriDonasiRepository $katDonasiRepository;
  30.     private $manager;
  31.     public function __construct(
  32.         BulletinRepository $bulletinRepository,
  33.         UserBulletinRepository $userBulletinRepository,
  34.         UserDonasiRepository $userDonasiRepository,
  35.         ArtikelRepository $artikelRepository,
  36.         EntityManagerInterface $manager,
  37.         DokumentasiRepository $dokRepository,
  38.         KategoriDonasiRepository $katDonasiRepository
  39.     ) {
  40.         $this->bulletinRepository $bulletinRepository;
  41.         $this->userBulletinRepository $userBulletinRepository;
  42.         $this->userDonasiRepository $userDonasiRepository;
  43.         $this->artikelRepository $artikelRepository;
  44.         $this->dokRepository $dokRepository;
  45.         $this->katDonasiRepository $katDonasiRepository;
  46.         $this->manager $manager;
  47.     }
  48.     /**
  49.      * @Route("bulletin.json", name="index", methods={"GET"})
  50.      */
  51.     public function index(Request $request):Response
  52.     {
  53.         $content $this->jsonToArray($request->getContent());
  54.         $page $content['page'];
  55.         $limit $content['limit'];
  56.         $filters $content['filter'];
  57.         $queryWhere "a.id is not null" ;
  58.         foreach($filters as $k => $v) {
  59.             if(is_int($v)) {
  60.                 $queryWhere .= " AND a.".$k." = '".$v."'";
  61.             }else{
  62.                 $queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
  63.             }
  64.         }
  65.         $query $this->bulletinRepository->createQueryBuilder('a')
  66.             ->where($queryWhere)
  67.             ->getQuery();
  68.         $paginator = new Paginator($query);
  69.         $totalItems count($paginator);
  70.         $pagesCount ceil($totalItems $limit);
  71.         $paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
  72.         $result = [];
  73.         foreach ($paginator as $Data)
  74.         {
  75.             $artikels $this->artikelRepository->findByBulletinId($Data->getId());
  76.             $data_art = [];
  77.             foreach ($artikels as $key => $artikel) {
  78.                 $data_art[$key]['judul'] = $artikel->getJudul();
  79.                 $data_art[$key]['isi'] = $artikel->getIsi();
  80.                 $data_art[$key]['penulis'] = $artikel->getPenulis();
  81.                 $data_art[$key]['tanggal'] = $artikel->getTanggal();
  82.                 $data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
  83.             }
  84.             $result['page'] = $page;
  85.             $result['total_item'] = $totalItems;
  86.             $result['total_page'] = $pagesCount;
  87.             $result['content'][] = array(
  88.                 'id' => $Data -> getId(),
  89.                 'kode' => $Data -> getKode(),
  90.                 'edisi' => $Data -> getEdisi(),
  91.                 'nama' => $Data -> getNama(),
  92.                 'tanggal' => $Data -> getTanggal(),
  93.                 'tag' => $Data -> getTag(),
  94.                 'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
  95.                 'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
  96.                 'artikel' => $data_art
  97.             );
  98.         }
  99.         return $this -> json($result);
  100.     }
  101.     /**
  102.      * @Route("bulletin-x.json", name="index_react", methods={"GET"})
  103.      */
  104.     public function index_react(Request $request):Response
  105.     {
  106.         $user $this->getUser();
  107.         $page = ($request->get('page')) ? $request->get('page') : ;
  108.         $limit = ($request->get('limit')) ? $request->get('limit') : ;
  109.         $filters $request->get('filter');
  110.         $queryWhere "a.id is not null" ;
  111.         if($filters) {
  112.             foreach($filters as $k => $v) {
  113.                 if(is_numeric($v)) {
  114.                     $queryWhere .= " AND a.".$k." = '".$v."'";
  115.                 }else{
  116.                     $queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
  117.                 }
  118.             }
  119.         }
  120.         $query $this->bulletinRepository->createQueryBuilder('a')
  121.             ->where($queryWhere)
  122.             ->getQuery();
  123.         $paginator = new Paginator($query);
  124.         $totalItems count($paginator);
  125.         $pagesCount ceil($totalItems $limit);
  126.         $paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
  127.         $result = [];
  128.         foreach ($paginator as $Data)
  129.         {
  130.             $artikels $this->artikelRepository->findByBulletinId($Data->getId());
  131.             $isMyBulletin = ($this->userBulletinRepository->findOneBy(['kmj_user'=>$user,'bulletin'=>$Data]))?1:0;
  132.             $data_art = [];
  133.             foreach ($artikels as $key => $artikel) {
  134.                 $data_art[$key]['judul'] = $artikel->getJudul();
  135.                 $data_art[$key]['isi'] = $artikel->getIsi();
  136.                 $data_art[$key]['penulis'] = $artikel->getPenulis();
  137.                 $data_art[$key]['tanggal'] = $artikel->getTanggal();
  138.                 $data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
  139.             }
  140.             $result['page'] = $page;
  141.             $result['total_item'] = $totalItems;
  142.             $result['total_page'] = $pagesCount;
  143.             $result['content'][] = array(
  144.                 'id' => $Data -> getId(),
  145.                 'kode' => $Data -> getKode(),
  146.                 'is_mybulletin' => $isMyBulletin,
  147.                 'edisi' => $Data -> getEdisi(),
  148.                 'nama' => $Data -> getNama(),
  149.                 'tanggal' => $Data -> getTanggal(),
  150.                 'tag' => $Data -> getTag(),
  151.                 'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
  152.                 'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
  153.                 'artikel' => $data_art
  154.             );
  155.         }
  156.         return $this -> json($result);
  157.     }
  158.     /**
  159.      * @Route("mybulletin.json", name="index_mybulletin", methods={"GET"})
  160.      */
  161.     public function index_mybulletin(Request $request):Response
  162.     {
  163.         
  164.         $user $this->getUser();
  165.         // dump($user);exit;
  166.         $user_id $user->getId();
  167.         $page = ($request->get('page')) ? $request->get('page') : ;
  168.         $limit = ($request->get('limit')) ? $request->get('limit') : ;
  169.         $filters $request->get('filter');
  170.         $queryWhere "a.status = '".UserDonasi::KODE_SUCCESS."' ";
  171.         if($filters) {
  172.             foreach($filters as $k => $v) {
  173.                 if(is_int($v)) {
  174.                     $queryWhere .= " AND a.".$k." = '".$v."'";
  175.                 }else if($k == 'user_id') {
  176.                     $queryWhere .= " AND a.kmj_user = '".$v."'";
  177.                 }else{
  178.                     $queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
  179.                 }
  180.             }
  181.         }
  182.         $queryWhere .= " AND a.kmj_user = '".$user_id."'";
  183.         $query $this->userBulletinRepository->createQueryBuilder('a')
  184.             ->innerJoin('a.bulletin''al')
  185.             ->where($queryWhere)
  186.             ->getQuery();
  187.         $paginator = new Paginator($query);
  188.         $totalItems count($paginator);
  189.         $pagesCount ceil($totalItems $limit);
  190.         $paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
  191.         $result = [];
  192.         $result['page'] = 0;
  193.         $result['total_item'] = 0;
  194.         $result['total_page'] = 0;
  195.         $result['content'] = [];
  196.         $i0;
  197.         foreach ($paginator as $Data)
  198.         {
  199.             $Bulletin $Data->getBulletin();
  200.             $artikels $this->artikelRepository->findByBulletinId($Bulletin->getId());
  201.             $data_art = [];
  202.             foreach ($artikels as $key => $artikel) {
  203.                 $data_art[$key]['judul'] = $artikel->getJudul();
  204.                 $data_art[$key]['isi'] = $artikel->getIsi();
  205.                 $data_art[$key]['penulis'] = $artikel->getPenulis();
  206.                 $data_art[$key]['tanggal'] = $artikel->getTanggal();
  207.                 $data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
  208.             }
  209.             $result['page'] = $page;
  210.             $result['total_item'] = $totalItems;
  211.             $result['total_page'] = $pagesCount;
  212.             $result['content'][$i] = array(
  213.                 'user_id' => $Data->getKmjUser()->getId(),
  214.                 'id' => $Bulletin -> getId(),
  215.                 'kode' => $Bulletin -> getKode(),
  216.                 'edisi' => $Bulletin -> getEdisi(),
  217.                 'nama' => $Bulletin -> getNama(),
  218.                 'tanggal' => $Bulletin -> getTanggal(),
  219.                 'tag' => $Bulletin -> getTag(),
  220.                 'files' => $this->bulletinRepository->getDokumentasis($Bulletin->getId(), $request),
  221.                 'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
  222.                 'artikel' => $data_art
  223.             );
  224.             $i++;
  225.         }
  226.         return $this -> json($result);
  227.     }
  228.     /**
  229.      * @Route("add-mybulletin.json", name="add_mybulletin", methods={"POST"})
  230.      */
  231.     public function add_mybulletin(Request $request):Response
  232.     {
  233.         $content $this->jsonToArray($request->getContent());
  234.         $param $content['param'];
  235.         $KmjUser $this->getUser();
  236.         $userDonasi $this->userDonasiRepository->findOneBy(['kmj_user'=>$KmjUser,'status_trx'=>'berhasil']);
  237.         $bulletin $this->bulletinRepository->findOneById($param['bulletin_id']);
  238.         $isMyBulletin $this->userBulletinRepository->findOneBy(['kmj_user'=>$KmjUser,'bulletin'=>$bulletin]);
  239.         // $KmjUser = $this->kmjUserRepo->find($param['user_id']);
  240.         try {
  241.             if($KmjUser && $userDonasi && !$isMyBulletin){
  242.                 $object = (new UserBulletin())
  243.                     ->setStatus(UserDonasi::KODE_SUCCESS)
  244.                     ->setBulletin($bulletin)
  245.                     ->setCreatedAt(new \DateTimeImmutable())
  246.                     ->setKmjUser($KmjUser)
  247.                     ->setUserDonasi($userDonasi)
  248.                 ;
  249.                 $this->manager->persist($object);
  250.                 $this->manager->flush();
  251.                 $result['message']   = 'Berhasil Menambah buletin';
  252.             }else{
  253.                 if($isMyBulletin){
  254.                     
  255.                     $result['message']   = 'Oppss, penambahan bulletin gagal, bulletin sudah masuk my bulletin !';
  256.                 }else{
  257.                     $result['message']   = 'Oppss, penambahan bulletin gagal !';
  258.                 }
  259.             }
  260.         } catch (\Exception $e) {
  261.             $result['message']   = 'Oppss, penambahan bulletin gagal !';
  262.             $result['error']     = $e;
  263.         }
  264.         return $this -> json($result);
  265.     }
  266.      /**
  267.      * @Route("quota-mybulletin.json", name="quota_mybulletin", methods={"GET"})
  268.      */
  269.     public function quota_mybulletin(Request $request):Response
  270.     {
  271.         $content $this->jsonToArray($request->getContent());
  272.         $KmjUser $this->getUser();
  273.         $userDonasi $this->userDonasiRepository->findBy(['kmj_user'=>$KmjUser,'status_trx'=>'berhasil']);
  274.         $userBulletin $this->userBulletinRepository->findBy(['kmj_user'=>$KmjUser]);
  275.         // $KmjUser = $this->kmjUserRepo->find($param['user_id']);
  276.         try {
  277.             if($KmjUser){
  278.                 $totalDonasi 0;
  279.                 $totalBulletin 0;
  280.                 $quotaBulletin 0;
  281.                 $sisaQuotaBulletin 0;
  282.                 foreach ($userDonasi as $user_donasi) {
  283.                     $totalDonasi += $user_donasi->getNilai();
  284.                 }
  285.                 $totalBulletin count($userBulletin);
  286.                 $katDonasiRepos $this->katDonasiRepository->findByNilai($totalDonasi);
  287.                 foreach ($katDonasiRepos as $user_donasi) {
  288.                     $quotaBulletin += $user_donasi->getJumlahBulletin();
  289.                 }
  290.                 $sisaQuotaBulletin $quotaBulletin-$totalBulletin;
  291.                 $sisaQuotaBulletin = ($sisaQuotaBulletin>0)?$sisaQuotaBulletin:0;
  292.                 
  293.                 $result['message']   = 'sukses';
  294.                 $result['content']['jml_donasi']   = count($userDonasi);
  295.                 $result['content']['total_donasi']   = $totalDonasi;
  296.                 $result['content']['total_mybulletin']   = $totalBulletin;
  297.                 $result['content']['quota_bulletin']   = $quotaBulletin;
  298.                 $result['content']['sisa_quota_bulletin']   = $sisaQuotaBulletin;
  299.             }else{
  300.                 $result['message']   = 'Oppss, user tidak terdaftar !';
  301.             }
  302.         } catch (\Exception $e) {
  303.             $result['message']   = 'Oppss, quota bermasalah !';
  304.             $result['error']     = $e;
  305.         }
  306.         return $this -> json($result);
  307.     }
  308.     private function jsonToArray($content){
  309.         $request json_decode($content);
  310.         $request json_decode(json_encode($request),true);
  311.         return $request;
  312.     }
  313. }