<?phpnamespace App\EventSubscriber;use App\Entity\Tender;use App\Entity\TenderDokumenPenawaran;use App\Entity\TenderKualifikasi;use App\Entity\TenderPokja;use App\Entity\TenderTahapan;use App\Repository\MasterDokumenPenawaranRepository;use App\Repository\MasterKualifikasiRepository;use App\Repository\TahapanTenderRepository;use App\Repository\TenderRepository;use App\Repository\TenderTahapanRepository;use Doctrine\Persistence\ManagerRegistry;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;class EaTenderSubscriber implements EventSubscriberInterface{ private TahapanTenderRepository $tahapanTenderRepository; private TenderTahapanRepository $tenderTahapanRepository; private MasterKualifikasiRepository $masterKualifikasiRepository; private MasterDokumenPenawaranRepository $masterDokumenPenawaranRepository; private ManagerRegistry $doctrine; public function __construct( TahapanTenderRepository $tahapanTenderRepository, TenderTahapanRepository $tenderTahapanRepository, MasterKualifikasiRepository $masterKualifikasiRepository, MasterDokumenPenawaranRepository $masterDokumenPenawaranRepository, ManagerRegistry $doctrine ) { $this->tahapanTenderRepository = $tahapanTenderRepository; $this->tenderTahapanRepository = $tenderTahapanRepository; $this->masterKualifikasiRepository = $masterKualifikasiRepository; $this->masterDokumenPenawaranRepository = $masterDokumenPenawaranRepository; $this->doctrine = $doctrine; } public static function getSubscribedEvents(): array { return [ BeforeEntityPersistedEvent::class => ['addTahapanTender'], BeforeEntityUpdatedEvent::class => ['groupPokja'], ]; } public function addTahapanTender(BeforeEntityPersistedEvent $event) { $entity = $event->getEntityInstance(); if (!($entity instanceof Tender)) { return; } $tahapan = $this->tahapanTenderRepository->findBy(['kategori' => $entity->getKategoriTahapan()]); $kualifikasi = $this->masterKualifikasiRepository->findAll(); $penawaran = $this->masterDokumenPenawaranRepository->findAll(); $entityManager = $this->doctrine->getManager(); foreach ($tahapan as $t) { $tenderTahapan = new TenderTahapan(); $tenderTahapan->setTender($entity); $tenderTahapan->setTahapan($t); $tenderTahapan->setBerubah(false); $entityManager->persist($tenderTahapan); $entity->addTahapan($tenderTahapan); } foreach ($kualifikasi as $k) { $tenderKualifiksai = new TenderKualifikasi(); $tenderKualifiksai->setTender($entity); $tenderKualifiksai->setKualifikasi($k); $entityManager->persist($tenderKualifiksai); $entity->addKualifikasi($tenderKualifiksai); } foreach ($penawaran as $p) { $tenderPenawaran = new TenderDokumenPenawaran(); $tenderPenawaran->setTender($entity); $tenderPenawaran->setDokumenPenawaran($p); $entityManager->persist($tenderPenawaran); $entity->addDokumenPenawaran($tenderPenawaran); } if ($entity->getGroupPokja()) { foreach ($entity->getGroupPokja()->getUsers() as $user) { $tenderPokja = new TenderPokja(); $tenderPokja->setTender($entity); $tenderPokja->setUser($user); $entityManager->persist($tenderPokja); } } } public function groupPokja(BeforeEntityUpdatedEvent $event) { $entity = $event->getEntityInstance(); if (!($entity instanceof Tender)) { return; } $entityManager = $this->doctrine->getManager(); if ($entity->getGroupPokja()) { foreach ($entity->getGroupPokja()->getUsers() as $u) { $tenderPokja = new TenderPokja(); $tenderPokja->setTender($entity); $tenderPokja->setUser($u); $entityManager->persist($tenderPokja); } } }}