<?phpnamespace App\EventSubscriber;use App\Entity\Tender;use App\Entity\TenderDokumenPenawaran;use App\Entity\TenderKualifikasi;use App\Entity\TenderTahapan;use App\Entity\VendorTender;use App\Entity\VendorTenderEvaluasi;use App\Repository\MasterDokumenPenawaranRepository;use App\Repository\MasterKualifikasiRepository;use App\Repository\TahapanTenderRepository;use App\Repository\TenderRepository;use App\Repository\TenderTahapanRepository;use App\Repository\VendorTenderEvaluasiRepository;use Doctrine\Persistence\ManagerRegistry;use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Component\EventDispatcher\EventSubscriberInterface;class EaVendorTenderSubscriber implements EventSubscriberInterface{ private ManagerRegistry $doctrine; private VendorTenderEvaluasiRepository $vendorTenderEvaluasiRepository; private Security $security; public function __construct( ManagerRegistry $doctrine, VendorTenderEvaluasiRepository $vendorTenderEvaluasiRepository, Security $security ) { $this->vendorTenderEvaluasiRepository = $vendorTenderEvaluasiRepository; $this->doctrine = $doctrine; $this->security = $security; } public static function getSubscribedEvents(): array { return [ BeforeEntityUpdatedEvent::class => ['calculateUpdated'], BeforeEntityPersistedEvent::class => ['caculatePersist'] ]; } public function caculatePersist(BeforeEntityPersistedEvent $event) { $entity = $event->getEntityInstance();// dd($entity); if (!($entity instanceof VendorTenderEvaluasi)) { return; } $user = $this->security->getUser(); $entity->setPokja($user); $data = $this->vendorTenderEvaluasiRepository->findBy(['vendorTender' => $entity->getVendorTender()]); $tender = $entity->getVendorTender()->getTender()->getTenderPokjas(); if ((count($data) + 1) <> count($tender)) { return; } $skorHarga = 0; $skorKualifikasi = 0; $skorTeknis = 0; foreach ($data as $d) { $skorHarga += $d->getSkorHarga(); $skorKualifikasi += $d->getSkorKualifikasi(); $skorTeknis += $d->getSkorTeknis(); } $ent2 = $entity->getVendorTender(); $ent2->setSkorTeknis($skorTeknis / count($tender)); $ent2->setSkorKualifikasi($skorKualifikasi / count($tender)); $ent2->setSkorHarga($skorHarga / count($tender)); $skorAkhir = ($ent2->getSkorTeknis() + $ent2->getSkorKualifikasi() + $ent2->getSkorHarga()) / 3; $ent2->setSkorAkhir($skorAkhir); $ent2->setEvaluasiAdministrasi(true); $ent2->setEvaulasiKualifikasi(true); $ent2->setEvaluasiHarga(true); $ent2->setPembuktianKualifikasi(true); $manager = $this->doctrine->getManager(); $manager->persist($ent2); } public function calculateUpdated(BeforeEntityUpdatedEvent $event) { $entity = $event->getEntityInstance(); if (!($entity instanceof VendorTenderEvaluasi)) { return; } $user = $this->security->getUser(); $entity->setPokja($user); $data = $this->vendorTenderEvaluasiRepository->findBy(['vendorTender' => $entity->getVendorTender()]); $tender = $entity->getVendorTender()->getTender()->getTenderPokjas(); if (count($data) <> count($tender)) { return; } $skorHarga = 0; $skorKualifikasi = 0; $skorTeknis = 0; foreach ($data as $d) { $skorHarga += $d->getSkorHarga(); $skorKualifikasi += $d->getSkorKualifikasi(); $skorTeknis += $d->getSkorTeknis(); } $ent2 = $entity->getVendorTender(); $ent2->setSkorTeknis($skorTeknis / count($tender)); $ent2->setSkorKualifikasi($skorKualifikasi / count($tender)); $ent2->setSkorHarga($skorHarga / count($tender)); $skorAkhir = ($ent2->getSkorTeknis() + $ent2->getSkorKualifikasi() + $ent2->getSkorHarga()) / 3; $ent2->setSkorAkhir($skorAkhir); $ent2->setEvaluasiAdministrasi(true); $ent2->setEvaulasiKualifikasi(true); $ent2->setEvaluasiHarga(true); $ent2->setPembuktianKualifikasi(true); $manager = $this->doctrine->getManager(); $manager->persist($ent2); }}