src/Repository/Idempiere/AdSequenceRepository.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Repository\Idempiere;
  3. use App\Entity\Idempiere\AdSequence;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. /**
  7.  * @method AdSequence|null find($id, $lockMode = null, $lockVersion = null)
  8.  * @method AdSequence|null findOneBy(array $criteria, array $orderBy = null)
  9.  * @method AdSequence[]    findAll()
  10.  * @method AdSequence[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  11.  */
  12. class AdSequenceRepository extends ServiceEntityRepository
  13. {
  14.     public function __construct(ManagerRegistry $registry)
  15.     {
  16.         parent::__construct($registryAdSequence::class);
  17.     }
  18.     
  19.     /**
  20.      * Buscar el correlativo siguiente de una
  21.      * secuencia
  22.      * 
  23.      * @param AdSequence $sequence Secuencia
  24.      * @param object $entity Entidad base
  25.      * 
  26.      * @return string Correlativo 
  27.      */
  28.     public function findNextSequence(AdSequence $sequenceObject $entity null): String
  29.     {
  30.         $connection $this->getEntityManager()->getConnection();
  31.         if( $sequence->getIsorglevelsequence() )
  32.             return $this->findNextSequenceByOrg($sequence$entity);
  33.         $stmt $connection->prepare("SELECT nextid(:sequence_id, 'N')");
  34.         $resultSet $stmt->executeQuery(['sequence_id' => $sequence->getId() ]);
  35.         return $resultSet->fetchOne();
  36.     }
  37.     /**
  38.      * Buscar el correlativo siguiente 
  39.      * de una secuencia correspondiente a 
  40.      * una organizacion 
  41.      * 
  42.      * @param AdSequence $sequence Secuencia
  43.      * @param object $entity Entidad base
  44.      * 
  45.      * @return string Correlativo
  46.      */
  47.     protected function findNextSequenceByOrg(AdSequence $sequenceObject $entity): String
  48.     {
  49.         $connection $this->getEntityManager()->getConnection();
  50.         // Get Current Next
  51.         $stmt $connection->prepare(
  52.             "SELECT currentnext FROM ad_sequence_no 
  53.             WHERE ad_sequence_id = :sequence_id AND ad_org_id = :org_id");
  54.         $resultSet $stmt->executeQuery([
  55.             'sequence_id' => $sequence->getId(),
  56.             'org_id' => $entity->getAdOrg()->getAdOrgId()
  57.         ]);
  58.         $currentnext $resultSet->fetchOne();
  59.         // Get Prefix
  60.         $prefix $this->buildPrefex($sequence->getPrefix(), $entity);
  61.         // Update Sequence No
  62.         $stmt $connection->prepare(
  63.             "UPDATE ad_sequence_no SET currentnext = :currentnext
  64.             WHERE ad_sequence_id = :sequence_id AND ad_org_id = :org_id"
  65.         );
  66.         $stmt->executeQuery([
  67.             'currentnext' => $currentnext 1,
  68.             'sequence_id' => $sequence->getId(),
  69.             'org_id' => $entity->getAdOrg()->getAdOrgId()
  70.         ]);
  71.         return $prefix $currentnext;
  72.     }
  73.     /**
  74.      * Genera un RowGUID
  75.      * 
  76.      * @return string RowGUID
  77.      */
  78.     public function findNextUU(): String
  79.     {
  80.         $connection $this->getEntityManager()->getConnection();
  81.         $stmt $connection->prepare("SELECT generate_uuid()");
  82.         $resultSet $stmt->executeQuery();
  83.         return $resultSet->fetchOne();
  84.     }
  85.     /**
  86.      * Construir prefijos de secuencias
  87.      * 
  88.      * @param string $prefix Prefijo de la secuencia
  89.      * @param object $entity Entidad base
  90.      * 
  91.      * @return string Prefijo
  92.      */
  93.     protected function buildPrefex(String $prefixObject $entity): String
  94.     {
  95.         if ( !empty($prefix) ) {
  96.             $prefix preg_split('([<@.>\s])'$prefix);
  97.             $prefix array_filter($prefix'trim');
  98.             $_prefix $prefix[0];
  99.             if (count($prefix) === 4) {
  100.                 $connection $this->getEntityManager()->getConnection();
  101.                 $getObject 'get' implodearray_map('ucfirst'explode('_'$prefix[2]) ) );
  102.                 $sql "SELECT {$prefix[3]} FROM {$prefix[2]} WHERE {$prefix[1]} = :value";
  103.                 $stmt $connection->prepare($sql);
  104.                 $resultSet $stmt->executeQuery( ['value' => $entity->$getObject()->getId()] );
  105.                 $_prefix .= $resultSet->fetchOne();
  106.             }
  107.             return $_prefix;
  108.         }
  109.         return '';
  110.     }
  111. }