<?php
namespace App\Controller\Admin;
use App\Controller\VendorController;
use App\Entity\Announcement;
use App\Entity\Answer;
use App\Entity\Bagian;
use App\Entity\BentukUsaha;
use App\Entity\IzinUsaha;
use App\Entity\JenisKontrak;
use App\Entity\JenisPengadaan;
use App\Entity\KlasifikasiUsaha;
use App\Entity\Kontak;
use App\Entity\MasterDokumenPenawaran;
use App\Entity\MasterKualifikasi;
use App\Entity\MetodePengadaan;
use App\Entity\Narahubung;
use App\Entity\Penyuratan;
use App\Entity\PokjaGroup;
use App\Entity\Question;
use App\Entity\Rup;
use App\Entity\TahapanTender;
use App\Entity\Tender;
use App\Entity\TenderMetodePenyampaianDokumenPenawaran;
use App\Entity\Topic;
use App\Entity\User;
use App\Entity\Vendor;
use App\Entity\VendorTender;
use App\Entity\VendorTenderEvaluasi;
use App\Entity\Wilayah;
use App\Entity\WilayahPdam;
use App\Repository\VendorRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\CredentialsExpiredException;
use Symfony\Component\Security\Core\User\UserInterface;
class DashboardController extends AbstractDashboardController
{
#[IsGranted('ROLE_USER')]
#[Route('/admin', name: 'admin')]
public function index(): Response
{
//return parent::index();
// Option 1. You can make your dashboard redirect to some common page of your backend
//
$hasAccess = $this->isGranted('ROLE_ADMIN');
$adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);
if ($hasAccess) {
return $this->redirect($adminUrlGenerator->setController(TenderCrudController::class)->generateUrl());
} elseif ($this->isGranted('ROLE_LPSE')) {
return $this->redirect($adminUrlGenerator->setController(RupCrudController::class)->generateUrl());
} elseif ($this->isGranted('ROLE_POKJA')) {
return $this->redirect($adminUrlGenerator->setController(TenderCrudController::class)->generateUrl());
} elseif ($this->isGranted('ROLE_PPK')) {
return $this->redirect($adminUrlGenerator->setController(TenderCrudController::class)->generateUrl());
} else {
return $this->redirect($adminUrlGenerator->setRoute('app_vendor_dashboard')->generateUrl());
}
// Option 2. You can make your dashboard redirect to different pages depending on the user
//
// if ('jane' === $this->getUser()->getUsername()) {
// return $this->redirect('...');
// }
// Option 3. You can render some custom template to display a proper dashboard with widgets, etc.
// (tip: it's easier if your template extends from @EasyAdmin/page/content.html.twig)
//
// return $this->render('some/path/my-dashboard.html.twig');
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('E-tender PDAM')
->disableDarkMode();
}
public function configureMenuItems(): iterable
{
if ($this->getUser() === null) {
throw new CredentialsExpiredException("Sesi Habis");
}
$user = $this->getUser();
if (!$user instanceof User) {
$this->redirectToRoute('app_homepage');
}
$vendorId = null;
$vendorEmail = null;
foreach ($user->getVendors() as $vendor) {
$vendorId = $vendor->getVendor()->getId();
$vendorEmail = $vendor->getVendor()->getEmail();
}
yield MenuItem::linkToRoute('Beranda', 'fa-solid fa-table-columns', 'app_vendor_dashboard')
->setPermission('ROLE_VENDOR');
yield MenuItem::linkToCrud('Data Penyedia', 'fa-solid fa-layer-group', Vendor::class)
->setAction(Action::EDIT)
->setEntityId($vendorId)
->setPermission('ROLE_VENDOR');
yield MenuItem::linkToRoute('Paket Baru', 'fa-solid fa-box-archive', 'app_paket_baru')
->setPermission('ROLE_VENDOR');
yield MenuItem::linkToRoute('Inbox', 'fa-solid fa-inbox', 'app_inbox')
->setPermission('ROLE_VENDOR');
yield MenuItem::linkToRoute('Log Akses', 'fa-solid fa-repeat', 'app_log_akses')
->setPermission('ROLE_VENDOR');
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-dashboard')
->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Berita', 'fa-solid fa-newspaper', Announcement::class);
yield MenuItem::subMenu('Referensi', 'fas fa-folder')->setSubItems([
MenuItem::linkToCrud('Jenis Kontrak', 'fas fa-folder', JenisKontrak::class),
MenuItem::linkToCrud('Jenis Pengadaan', 'fas fa-folder', JenisPengadaan::class),
MenuItem::linkToCrud('Metode Pengadaan', 'fas fa-users', MetodePengadaan::class),
MenuItem::linkToCrud('Metode Penyampaian Dokumen Penawaran', 'fas fa-users', TenderMetodePenyampaianDokumenPenawaran::class),
MenuItem::linkToCrud('Bentuk Usaha', 'fas fa-users', BentukUsaha::class),
MenuItem::linkToCrud('Izin Usaha', 'fas fa-users', IzinUsaha::class),
MenuItem::linkToCrud('Klasifikasi Usaha', 'fas fa-users', KlasifikasiUsaha::class),
MenuItem::linkToCrud('Tahapan Tender', 'fas fa-users', TahapanTender::class),
MenuItem::linkToCrud('Master Kualifikasi', 'fas fa-users', MasterKualifikasi::class),
MenuItem::linkToCrud('Master Dokumen Penawaran', 'fas fa-users', MasterDokumenPenawaran::class),
MenuItem::linkToCrud('Wilayah', 'fas fa-users', Wilayah::class),
MenuItem::linkToCrud('Wilayah/Bagian', 'fas fa-users', WilayahPdam::class),
MenuItem::linkToCrud('Group Pokja', 'fas fa-users', PokjaGroup::class),
// MenuItem::linkToCrud('Bagian', 'fas fa-users', Bagian::class),
])->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Rencana Umum Pengadaan', 'fas fa-comments', Rup::class)->setPermission('ROLE_LPSE');
yield MenuItem::linkToCrud('Tender', 'fas fa-question-circle', Tender::class)
->setPermission('ROLE_POKJA');
yield MenuItem::linkToCrud('Tender', 'fas fa-question-circle', Tender::class)
->setPermission('ROLE_PPK');
if ($this->isGranted('ROLE_POKJA') || $this->isGranted('ROLE_LPSE')) {
// yield MenuItem::linkToCrud('Vendor - Tender', 'fas fa-question-circle', VendorTender::class);
yield MenuItem::linkToRoute('Vendor - Tender', 'fas fa-question-circle', 'app_admin_vendor_tender');
}
yield MenuItem::linkToCrud('Skor Vendor', 'fas fa-question-circle', VendorTenderEvaluasi::class)
->setPermission('ROLE_POKJA');
yield MenuItem::LinkToRoute('Pertanyaan & Jawaban', 'fas fa-comments', 'app_pertanyaan_jawaban')->setPermission('ROLE_POKJA');
yield MenuItem::linkToCrud('Penyuratan', 'fas fa-envelope', Penyuratan::class)->setPermission('ROLE_POKJA');
yield MenuItem::linkToCrud('Tender', 'fas fa-question-circle', Tender::class)
->setPermission('ROLE_LPSE');
yield MenuItem::linkToCrud('User', 'fas fa-users', User::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Kontak', 'fas fa-envelope', Kontak::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Vendor', 'fas fa-users', Vendor::class)
->setPermission('ROLE_ADMIN');
yield MenuItem::linkToUrl('Homepage', 'fas fa-home', $this->generateUrl('app_homepage'));
}
public function configureActions(): Actions
{
return parent::configureActions()
->add(Crud::PAGE_INDEX, Action::DETAIL);
}
public function configureUserMenu(UserInterface $user): UserMenu
{
if (!$user instanceof User) {
throw new \Exception("Wrong User");
}
return parent::configureUserMenu($user)
->setAvatarUrl($user->getAvatarUrl())
->addMenuItems([
MenuItem::linkToUrl('My Profile', 'fas fa-user', $this->generateUrl('app_profile_show'))
]); // TODO: Change the autogenerated stub
}
public function configureAssets(): Assets
{
return parent::configureAssets()
->addWebpackEncoreEntry('admin')->addCssFile('bundles/css/paketbaru.css');
}
}