partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

StockLevelListener.php (1896B)


      1 <?php
      2 
      3 namespace PartKeepr\PartBundle\Listeners;
      4 
      5 use Doctrine\ORM\Event\OnFlushEventArgs;
      6 use PartKeepr\PartBundle\Entity\Part;
      7 use PartKeepr\StockBundle\Entity\StockEntry;
      8 use Symfony\Component\DependencyInjection\ContainerAware;
      9 
     10 class StockLevelListener extends ContainerAware
     11 {
     12     /**
     13      * Recomputes the stock level for each part.
     14      *
     15      * @param OnFlushEventArgs $eventArgs The event arguments as given by Doctrine
     16      */
     17     public function onFlush(OnFlushEventArgs $eventArgs)
     18     {
     19         $entityManager = $eventArgs->getEntityManager();
     20         $uow = $entityManager->getUnitOfWork();
     21 
     22         $parts = [];
     23 
     24         foreach ($uow->getScheduledEntityInsertions() as $updated) {
     25             if ($updated instanceof StockEntry) {
     26                 if (!in_array($updated->getPart(), $parts)) {
     27                     $parts[] = $updated->getPart();
     28                 }
     29             }
     30         }
     31 
     32         foreach ($uow->getScheduledEntityUpdates() as $updated) {
     33             if ($updated instanceof StockEntry) {
     34                 if (!in_array($updated->getPart(), $parts)) {
     35                     $parts[] = $updated->getPart();
     36                 }
     37             }
     38         }
     39 
     40         foreach ($parts as $part) {
     41             if ($part !== null) {
     42                 $this->updateStockLevel($part, $eventArgs);
     43             }
     44         }
     45     }
     46 
     47     /**
     48      * Updates the stock level for a specific part.
     49      *
     50      * @param Part             $part      The part to update
     51      * @param OnFlushEventArgs $eventArgs The event arguments
     52      */
     53     protected function updateStockLevel(Part $part, OnFlushEventArgs $eventArgs)
     54     {
     55         $entityManager = $eventArgs->getEntityManager();
     56 
     57         $part->recomputeStockLevels();
     58 
     59         $entityManager->getUnitOfWork()->recomputeSingleEntityChangeSet(
     60             $entityManager->getClassMetadata(get_class($part)),
     61             $part
     62         );
     63     }
     64 }