?? GreyFile — Mystic File Browser

Current path: home/webdevt/cryptoimpot.fr/module/Application/src/Mapper/



?? Go up: /home/webdevt/cryptoimpot.fr/module/Application/src

?? Viewing: LedgioMapper.php

<?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;
        }
    }

}


??

??