Current path: home/webdevt/cryptoimpot.fr/module/Application/src/Mapper/
?? Go up: /home/webdevt/cryptoimpot.fr/module/Application/src
<?php
namespace Application\Mapper;
use Doctrine\ORM\EntityManager;
use TheSeer\Tokenizer\Exception;
use Laminas\Hydrator\HydratorInterface;
use Laminas\Paginator\Adapter\ArrayAdapter;
use Laminas\Paginator\Paginator;
class LedgioMapper {
/**
* @var EntityManager
*/
protected $em;
protected $entityClass;
protected $orderAuthorized;
protected $orderByAuthorized;
public function __construct(EntityManager $em) {
$this->em = $em;
$this->entityClass = 'Application\Entity\Ledgio';
$this->orderByAuthorized = array(
'dateTransaction'
// 'id',
// 'categorie',
// 'titre',
// 'statut',
// 'dateCreation'
);
$this->orderAuthorized = array(
'ASC',
'DESC'
);
}
public function findById($id) {
$er = $this->em->getRepository($this->entityClass);
return $er->findOneBy(array('id' => $id));
}
public function findByExchangeAndUser($exchange, $user) {
$er = $this->em->getRepository($this->entityClass);
return $er->findBy(array('exchange' => $exchange, 'user' => $user));
}
public function findLedgioSameDatetimeAndAssetAndExchange($exchange, $user, $tradedCurrency, $receivedCurrency, $datetimeTransaction) {
$er = $this->em->getRepository($this->entityClass);
return $er->findBy(array(
'exchange' => $exchange,
'user' => $user,
'tradedCurrency' => $tradedCurrency,
'receivedCurrency' => $receivedCurrency,
'datetimeTransaction' => $datetimeTransaction,
));
}
public function getListByUser($user, $parameters = array(), $pagination = false) {
$parameters['user'] = $user;
return $this->getList($parameters, $pagination);
}
public function getListByUserAndWarning($user, $parameters = array(), $pagination = false) {
$er = $this->em->getRepository($this->entityClass);
$query = $er->createQueryBuilder('l');
$query->where('l.user = (:user)')
->setParameter('user', $user);
$query->andWhere('l.warningMessage = :warningMessage')->setParameter('warningMessage', 'MONTANT_TRADE_SUP_WALLET');
$query->orderBy('l.datetimeTransaction', 'ASC');
return $query->getQuery()->getResult();
}
public function countTradeByUser($user, $inOrOutOrAll = 'all', $fiatCryptoOrAll = 'all', $year = 'all') {
$er = $this->em->getRepository($this->entityClass);
$query = $er->createQueryBuilder('l');
$query->select('COUNT(l.id) as countId')
->where('l.user = (:user)')
->setParameter('user', $user);
if ($inOrOutOrAll == 'in') {
$query->andWhere('l.tradedCurrency = :tradedCurrency')->setParameter('tradedCurrency', 'EUR');
} else if ($inOrOutOrAll == 'out') {
$query->andWhere('l.tradedCurrency != :tradedCurrency')->setParameter('tradedCurrency', 'EUR');
}
if ($fiatCryptoOrAll == 'fiat') {
$query->andWhere('l.tradedCurrency = :tradedCurrency')->setParameter('tradedCurrency', 'EUR');
} else if ($inOrOutOrAll == 'crypto') {
$query->andWhere('l.tradedCurrency != :tradedCurrency')->setParameter('tradedCurrency', 'EUR');
}
return $query->getQuery()->getResult()[0]['countId'];
}
public function countSessionFiatByUserAndYear($user, $year) {
$er = $this->em->getRepository($this->entityClass);
$query = $er->createQueryBuilder('l');
$query->select('COUNT(l.id) as countId')
->where('l.user = (:user)')
->setParameter('user', $user);
$dateFrom = new \DateTime($year . '-01-01 00:00:00');
$dateTo = new \DateTime($year . '-12-31 23:59:59');
$query->andWhere('l.receivedCurrency = :receivedCurrency')->setParameter('receivedCurrency', 'EUR');
$query->andWhere('l.datetimeTransaction >= :datetimeTransaction')->setParameter('datetimeTransaction', $dateFrom);
$query->andWhere('l.datetimeTransaction <= :datetimeTransaction')->setParameter('datetimeTransaction', $dateTo);
return $query->getQuery()->getResult()[0]['countId'];
}
public function countInvestFiatByUserAndYear($user, $year) {
$er = $this->em->getRepository($this->entityClass);
$query = $er->createQueryBuilder('l');
$query->select('COUNT(l.id) as countId')
->where('l.user = (:user)')
->setParameter('user', $user);
$dateFrom = new \DateTime($year . '-01-01 00:00:00');
$dateTo = new \DateTime($year . '-12-31 23:59:59');
$query->andWhere('l.tradedCurrency = :tradedCurrency')->setParameter('tradedCurrency', 'EUR');
$query->andWhere('l.datetimeTransaction >= :datetimeTransaction')->setParameter('datetimeTransaction', $dateFrom);
$query->andWhere('l.datetimeTransaction <= :datetimeTransaction')->setParameter('datetimeTransaction', $dateTo);
return $query->getQuery()->getResult()[0]['countId'];
}
public function countSessionFiatTradeByUser($user) {
return $this->countTradeByUser($user, 'in');
}
public function countInvestFiatTradeByUser($user) {
return $this->countTradeByUser($user, 'out');
}
public function countSessionFiatByUserAndByYear($user, $year) {
return $this->countTradeByUser($user, 'out', $year);
}
public function getList($parameters, $pagination = true, $onlyPublished = true) {
$er = $this->em->getRepository($this->entityClass);
$query = $er->createQueryBuilder('d')
//->leftJoin('d.statut', 'st')
;
if (isset($parameters['sort_by'])) {
$sort_by = in_array($parameters['sort_by'], $this->orderByAuthorized) ? $parameters['sort_by'] : 'id';
if (isset($parameters['sort'])) {
$sort = in_array($parameters['sort'], $this->orderAuthorized) ? $parameters['sort'] : 'DESC';
if ($parameters['sort_by'] == 'statut') {
$query->orderBy('st.statut', $sort);
} else {
// $query->orderBy('d.' . $sort_by, $sort);
$query->orderBy('d.datetimeTransaction', $sort);
}
}
} else {
$query->orderBy('d.datetimeTransaction', 'ASC');
}
// if (isset($parameters['user'])) {
// $user = $parameters['user'];
// $query->orWhere('d.user_id = :search')
// ->setParameter('search', $user->getId());
// }
// if (isset($parameters['search'])) {
// $search = $parameters['search'];
//
// // Gestion recherche phrase exacte si présence de " début et fin de chaine, ou un des mots présents
// if (substr($search, 0, 1) == '"' && substr($search, -1, 1) == '"') {
// $search = substr($search, 1, -1);
// } else {
// $search = explode(' ', $search);
// }
// if (is_array($search)) {
// $i = 1;
// foreach ($search as $searchElement) {
// $query->orWhere('d.categorie LIKE ?' . $i)
// ->orWhere('d.titre LIKE ?' . $i)
// ->orWhere('d.file LIKE ?' . $i)
// ->orWhere('st.statut LIKE ?' . $i)
// ->setParameter($i, '%' . $searchElement . '%');
// $i++;
// }
// } else {
// if ($search == 'publié') {
// $query->orWhere('d.categorie = :search')
// ->orWhere('d.titre = :search')
// ->orWhere('d.file = :search')
// ->orWhere('st.statut = :search')
// ->setParameter('search', $search);
// } else {
// $query->orWhere('d.categorie LIKE :search')
// ->orWhere('d.titre LIKE :search')
// ->orWhere('d.file LIKE :search')
// ->orWhere('st.statut LIKE :search')
// ->setParameter('search', '%' . $search . '%');
// }
// }
// }
if (isset($parameters['user'])) {
$query->where('d.user = (:user)')
->setParameter('user', $parameters['user']);
}
if (isset($parameters['warningMessage'])) {
$query->andWhere('d.warningMessage = (:warningMessage)')
->setParameter('warningMessage', $parameters['warningMessage']);
}
// if ($onlyPublished) {
// $query->andWhere('st.id = :publish')
// ->setParameter('publish', 1);
// }
$arrayLedgio = $query->getQuery()
->getResult();
foreach ($arrayLedgio as $index => $ledgio) {
if (is_null($ledgio->getTradedDevise()->getId())) {
echo 'devise non reconnue';
exit;
}
}
if ($pagination === true) {
$paginatorAdapter = new ArrayAdapter($arrayLedgio);
return new Paginator($paginatorAdapter);
} else {
return $arrayLedgio;
}
}
public function insert($entity, $tableName = null, HydratorInterface $hydrator = null) {
return $this->persist($entity);
}
public function update($entity, $where = null, $tableName = null, HydratorInterface $hydrator = null) {
return $this->persist($entity);
}
protected function persist($entity) {
$this->em->persist($entity);
$this->em->flush();
return $entity;
}
public function delete($entity, $where = null, $tableName = null, HydratorInterface $hydrator = null) {
try {
$this->em->remove($entity);
$this->em->flush();
return true;
} catch (Exception $e) {
return false;
}
}
}