<?php
namespace App\Repository\Idempiere;
use App\Entity\Idempiere\CPayment;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<CPayment>
*
* @method CPayment|null find($id, $lockMode = null, $lockVersion = null)
* @method CPayment|null findOneBy(array $criteria, array $orderBy = null)
* @method CPayment[] findAll()
* @method CPayment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class CPaymentRepository extends ServiceEntityRepository
{
public $sequence;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, CPayment::class);
/** Table Sequence */
$RSequence = new AdSequenceRepository($registry);
$this->sequence = $RSequence->findBy(['name' => $this->getClassMetadata()->getTableName()]);
$this->sequence = $this->sequence[0];
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function add(CPayment $entity, bool $flush = true): void
{
$this->_em->persist($entity);
if ($flush) {
$this->_em->flush();
}
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function remove(CPayment $entity, bool $flush = true): void
{
$this->_em->remove($entity);
if ($flush) {
$this->_em->flush();
}
}
/**
* Obtener pagos filtrando las
*
* @param array $BP_Items Rubros de Organizacion
* @param mixed $DocStatus Estatus de documento
* @param string $Date Fecha
*
* @return CPayment[] Pagos
*/
public function findPaymentsByBPItem(Array $BP_Items, $DocStatus = null, String $Date = null)
{
$qb = $this->createQueryBuilder('cp');
$qb
->join('cp.sm_marca', 'sm')
->where(
$qb->expr()->andX(
$qb->expr()->eq('cp.isreceipt', "'N'"),
$qb->expr()->in('sm.sm_bp_item_id', ':bp_items')
)
)
->setParameter('bp_items', $BP_Items);
if ( is_array($DocStatus) && count($DocStatus) > 0) {
$qb->andWhere(
$qb->expr()->in('cp.docstatus', ':status')
)->setParameter('status', $DocStatus);
} else if ( !is_null($DocStatus) && !empty($DocStatus) ) {
$qb->andWhere(
$qb->expr()->eq('cp.docstatus', ':status')
)->setParameter('status', $DocStatus);
}
if ( !is_null($Date) && !empty($Date) ) {
$qb->andWhere(
$qb->expr()->eq('cp.dateacct', ':date')
)->setParameter('date', $Date);
}
$query = $qb
->orderBy(
$qb->expr()->desc('cp.c_doctype_id'),
$qb->expr()->desc('cp.ad_org_id')
)
->getQuery();
return $query->getResult();
}
public function convertAmt(CPayment $Payamt)
{
$conn = $this->getEntityManager()->getConnection();
$sql = 'SELECT CURRENCYCONVERT(:payamt, :currency_id, :currencytarget_id, :dateacct, :conversiontype_id, :client_id, :org_id)';
$stmt = $conn->prepare($sql);
$rs = $stmt->executeQuery([
'payamt' => $Payamt->getPayamt(),
'currency_id' => $Payamt->getCCurrencyId(),
'currencytarget_id' => 100,
'dateacct' => $Payamt->getDateacct(),
'conversiontype_id' => $Payamt->getCConversiontypeId(),
'client_id' => $Payamt->getAdClientId(),
'org_id' => $Payamt->getAdOrgId()
]);
return $rs->fetchOne();
}
}