<?php
namespace App\Controller\Api;
use App\Entity\UserDonasi;
use App\Entity\UserBulletin;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ArtikelRepository;
use App\Repository\BulletinRepository;
use App\Repository\DokumentasiRepository;
use App\Repository\UserBulletinRepository;
use App\Repository\UserDonasiRepository;
use App\Repository\KategoriDonasiRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
/**
* Description of BulletinController
* @Route("/", name="api_bulletin_")
* @author programmer
*/
class BulletinController extends AbstractController
{
private BulletinRepository $bulletinRepository;
private UserBulletinRepository $userBulletinRepository;
private UserDonasiRepository $userDonasiRepository;
private ArtikelRepository $artikelRepository;
private DokumentasiRepository $dokRepository;
private KategoriDonasiRepository $katDonasiRepository;
private $manager;
public function __construct(
BulletinRepository $bulletinRepository,
UserBulletinRepository $userBulletinRepository,
UserDonasiRepository $userDonasiRepository,
ArtikelRepository $artikelRepository,
EntityManagerInterface $manager,
DokumentasiRepository $dokRepository,
KategoriDonasiRepository $katDonasiRepository
) {
$this->bulletinRepository = $bulletinRepository;
$this->userBulletinRepository = $userBulletinRepository;
$this->userDonasiRepository = $userDonasiRepository;
$this->artikelRepository = $artikelRepository;
$this->dokRepository = $dokRepository;
$this->katDonasiRepository = $katDonasiRepository;
$this->manager = $manager;
}
/**
* @Route("bulletin.json", name="index", methods={"GET"})
*/
public function index(Request $request):Response
{
$content = $this->jsonToArray($request->getContent());
$page = $content['page'];
$limit = $content['limit'];
$filters = $content['filter'];
$queryWhere = "a.id is not null" ;
foreach($filters as $k => $v) {
if(is_int($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
$query = $this->bulletinRepository->createQueryBuilder('a')
->where($queryWhere)
->getQuery();
$paginator = new Paginator($query);
$totalItems = count($paginator);
$pagesCount = ceil($totalItems / $limit);
$paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
$result = [];
foreach ($paginator as $Data)
{
$artikels = $this->artikelRepository->findByBulletinId($Data->getId());
$data_art = [];
foreach ($artikels as $key => $artikel) {
$data_art[$key]['judul'] = $artikel->getJudul();
$data_art[$key]['isi'] = $artikel->getIsi();
$data_art[$key]['penulis'] = $artikel->getPenulis();
$data_art[$key]['tanggal'] = $artikel->getTanggal();
$data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
}
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'kode' => $Data -> getKode(),
'edisi' => $Data -> getEdisi(),
'nama' => $Data -> getNama(),
'tanggal' => $Data -> getTanggal(),
'tag' => $Data -> getTag(),
'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
'artikel' => $data_art
);
}
return $this -> json($result);
}
/**
* @Route("bulletin-x.json", name="index_react", methods={"GET"})
*/
public function index_react(Request $request):Response
{
$user = $this->getUser();
$page = ($request->get('page')) ? $request->get('page') : 1 ;
$limit = ($request->get('limit')) ? $request->get('limit') : 1 ;
$filters = $request->get('filter');
$queryWhere = "a.id is not null" ;
if($filters) {
foreach($filters as $k => $v) {
if(is_numeric($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
}
$query = $this->bulletinRepository->createQueryBuilder('a')
->where($queryWhere)
->getQuery();
$paginator = new Paginator($query);
$totalItems = count($paginator);
$pagesCount = ceil($totalItems / $limit);
$paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
$result = [];
foreach ($paginator as $Data)
{
$artikels = $this->artikelRepository->findByBulletinId($Data->getId());
$isMyBulletin = ($this->userBulletinRepository->findOneBy(['kmj_user'=>$user,'bulletin'=>$Data]))?1:0;
$data_art = [];
foreach ($artikels as $key => $artikel) {
$data_art[$key]['judul'] = $artikel->getJudul();
$data_art[$key]['isi'] = $artikel->getIsi();
$data_art[$key]['penulis'] = $artikel->getPenulis();
$data_art[$key]['tanggal'] = $artikel->getTanggal();
$data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
}
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'kode' => $Data -> getKode(),
'is_mybulletin' => $isMyBulletin,
'edisi' => $Data -> getEdisi(),
'nama' => $Data -> getNama(),
'tanggal' => $Data -> getTanggal(),
'tag' => $Data -> getTag(),
'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
'artikel' => $data_art
);
}
return $this -> json($result);
}
/**
* @Route("mybulletin.json", name="index_mybulletin", methods={"GET"})
*/
public function index_mybulletin(Request $request):Response
{
$user = $this->getUser();
// dump($user);exit;
$user_id = $user->getId();
$page = ($request->get('page')) ? $request->get('page') : 1 ;
$limit = ($request->get('limit')) ? $request->get('limit') : 1 ;
$filters = $request->get('filter');
$queryWhere = "a.status = '".UserDonasi::KODE_SUCCESS."' ";
if($filters) {
foreach($filters as $k => $v) {
if(is_int($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else if($k == 'user_id') {
$queryWhere .= " AND a.kmj_user = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
}
$queryWhere .= " AND a.kmj_user = '".$user_id."'";
$query = $this->userBulletinRepository->createQueryBuilder('a')
->innerJoin('a.bulletin', 'al')
->where($queryWhere)
->getQuery();
$paginator = new Paginator($query);
$totalItems = count($paginator);
$pagesCount = ceil($totalItems / $limit);
$paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
$result = [];
$result['page'] = 0;
$result['total_item'] = 0;
$result['total_page'] = 0;
$result['content'] = [];
$i= 0;
foreach ($paginator as $Data)
{
$Bulletin = $Data->getBulletin();
$artikels = $this->artikelRepository->findByBulletinId($Bulletin->getId());
$data_art = [];
foreach ($artikels as $key => $artikel) {
$data_art[$key]['judul'] = $artikel->getJudul();
$data_art[$key]['isi'] = $artikel->getIsi();
$data_art[$key]['penulis'] = $artikel->getPenulis();
$data_art[$key]['tanggal'] = $artikel->getTanggal();
$data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
}
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][$i] = array(
'user_id' => $Data->getKmjUser()->getId(),
'id' => $Bulletin -> getId(),
'kode' => $Bulletin -> getKode(),
'edisi' => $Bulletin -> getEdisi(),
'nama' => $Bulletin -> getNama(),
'tanggal' => $Bulletin -> getTanggal(),
'tag' => $Bulletin -> getTag(),
'files' => $this->bulletinRepository->getDokumentasis($Bulletin->getId(), $request),
'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
'artikel' => $data_art
);
$i++;
}
return $this -> json($result);
}
/**
* @Route("add-mybulletin.json", name="add_mybulletin", methods={"POST"})
*/
public function add_mybulletin(Request $request):Response
{
$content = $this->jsonToArray($request->getContent());
$param = $content['param'];
$KmjUser = $this->getUser();
$userDonasi = $this->userDonasiRepository->findOneBy(['kmj_user'=>$KmjUser,'status_trx'=>'berhasil']);
$bulletin = $this->bulletinRepository->findOneById($param['bulletin_id']);
$isMyBulletin = $this->userBulletinRepository->findOneBy(['kmj_user'=>$KmjUser,'bulletin'=>$bulletin]);
// $KmjUser = $this->kmjUserRepo->find($param['user_id']);
try {
if($KmjUser && $userDonasi && !$isMyBulletin){
$object = (new UserBulletin())
->setStatus(UserDonasi::KODE_SUCCESS)
->setBulletin($bulletin)
->setCreatedAt(new \DateTimeImmutable())
->setKmjUser($KmjUser)
->setUserDonasi($userDonasi)
;
$this->manager->persist($object);
$this->manager->flush();
$result['message'] = 'Berhasil Menambah buletin';
}else{
if($isMyBulletin){
$result['message'] = 'Oppss, penambahan bulletin gagal, bulletin sudah masuk my bulletin !';
}else{
$result['message'] = 'Oppss, penambahan bulletin gagal !';
}
}
} catch (\Exception $e) {
$result['message'] = 'Oppss, penambahan bulletin gagal !';
$result['error'] = $e;
}
return $this -> json($result);
}
/**
* @Route("quota-mybulletin.json", name="quota_mybulletin", methods={"GET"})
*/
public function quota_mybulletin(Request $request):Response
{
$content = $this->jsonToArray($request->getContent());
$KmjUser = $this->getUser();
$userDonasi = $this->userDonasiRepository->findBy(['kmj_user'=>$KmjUser,'status_trx'=>'berhasil']);
$userBulletin = $this->userBulletinRepository->findBy(['kmj_user'=>$KmjUser]);
// $KmjUser = $this->kmjUserRepo->find($param['user_id']);
try {
if($KmjUser){
$totalDonasi = 0;
$totalBulletin = 0;
$quotaBulletin = 0;
$sisaQuotaBulletin = 0;
foreach ($userDonasi as $user_donasi) {
$totalDonasi += $user_donasi->getNilai();
}
$totalBulletin = count($userBulletin);
$katDonasiRepos = $this->katDonasiRepository->findByNilai($totalDonasi);
foreach ($katDonasiRepos as $user_donasi) {
$quotaBulletin += $user_donasi->getJumlahBulletin();
}
$sisaQuotaBulletin = $quotaBulletin-$totalBulletin;
$sisaQuotaBulletin = ($sisaQuotaBulletin>0)?$sisaQuotaBulletin:0;
$result['message'] = 'sukses';
$result['content']['jml_donasi'] = count($userDonasi);
$result['content']['total_donasi'] = $totalDonasi;
$result['content']['total_mybulletin'] = $totalBulletin;
$result['content']['quota_bulletin'] = $quotaBulletin;
$result['content']['sisa_quota_bulletin'] = $sisaQuotaBulletin;
}else{
$result['message'] = 'Oppss, user tidak terdaftar !';
}
} catch (\Exception $e) {
$result['message'] = 'Oppss, quota bermasalah !';
$result['error'] = $e;
}
return $this -> json($result);
}
private function jsonToArray($content){
$request = json_decode($content);
$request = json_decode(json_encode($request),true);
return $request;
}
}