?? GreyFile — Mystic File Browser

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



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

?? Viewing: ExchangeGeneriqueService.php

<?php

namespace Application\Service\ExchangeService;

use Application\Entity\Ledgio;
use Application\Mapper\LedgioMapper;
use PHPUnit\Util\Exception;

/**
 * Description of KrakenService
 *
 * @author jimmy
 */
class ExchangeGeneriqueService extends BaseService
{

    const ERROR_TITLE_CSV_COL_REQUIRED = 'Le csv ne comporte pas les entêtes requis : [REQUIRED_COLUMN]';
    const ERROR_MESSAGE_CSV_COL_REQUIRED = 'Vérifiez que vous êtes sur la bonne page d\'importation. Changez d\'onglet s\'il s\'agit d\'un fichier provenant d\'une autre platteforme que Kraken.';

    protected $file;
    protected $requiredColumn = array(
        'Date (UTC)',
        'Exchange',
        'Montant tradé',
        'Monnaie tradée',
        'Montant reçu',
        'Monnaie reçue',
        'Montant frais',
        'Monnaie frais'
    );
    protected $mapperCurrency = array(
        'XDAO' => 'DAO',
        'XETC' => 'ETC',
        'XETH' => 'ETH',
        'XLTC' => 'LTC',
        'XMLN' => 'MLN',
        'XNMC' => 'NMC',
        'XREP' => 'REP',
        'XXVN' => 'XVN',
        'XICN' => 'ICN',
        'XXBT' => 'BTC',
        'XXDG' => 'XDG',
        'XXLM' => 'XLM',
        'XXMR' => 'XMR',
        'XXTZ' => 'XTZ',
        'XXRP' => 'XRP',
        'XZEC' => 'ZEC',
        'ZCAD' => 'CAD',
        'ZEUR' => 'EUR',
        'ZGBP' => 'GBP',
        'ZJPY' => 'JPY',
        'ZKRW' => 'KRW',
        'ZUSD' => 'USD');
    protected $columnCsv;
    protected $errorMessage;
    protected $contentFile;
    protected $linesArray;
    protected $ledgioMapper;

    protected function getTimeIndex()
    {
        return $this->columnCsvMapper['Date (UTC)'];
    }

    protected function getExchangeIndex()
    {
        return $this->columnCsvMapper['Exchange'];
    }

    protected function getTradedAmountIndex()
    {
        return $this->columnCsvMapper['Montant tradé'];
    }

    protected function getTradedCurrencyIndex()
    {
        return $this->columnCsvMapper['Monnaie tradée'];
    }

    protected function getReceivedAmountIndex()
    {
        return $this->columnCsvMapper['Montant reçu'];
    }

    protected function getReceivedCurrencyIndex()
    {
        return $this->columnCsvMapper['Monnaie reçue'];
    }

    protected function getFeesAmountIndex()
    {
        return $this->columnCsvMapper['Montant frais'];
    }

    protected function getFeesCurrencyIndex()
    {
        return $this->columnCsvMapper['Monnaie frais'];
    }

//    protected function getPairIndex() {
//        return $this->columnCsvMapper['pair'];
//    }
//    protected function getCostIndex() {
//        return $this->columnCsvMapper['cost'];
//    }
//
//    protected function getFeeIndex() {
//        return $this->columnCsvMapper['fee'];
//    }
//
//    protected function getVolIndex() {
//        return $this->columnCsvMapper['vol'];
//    }
//
//    protected function getTxidIndex() {
//        return $this->columnCsvMapper['txid'];
//    }
//    protected function getrarrayCurrencyFromStrKraken($pairStrKraken) {
//
//
//        $i = 2;
//        while ($i++ < strlen($pairStrKraken)) {
//            $code1 = substr($pairStrKraken, 0, $i);
//            //var_dump($code1);
//            $devise1 = $this->mapperDeviseKraken->findByCode($code1);
//            if ($devise1) {
//                break;
//            }
//        }
//
//        if (empty($devise1)) {
//
//            $devise1 = $this->mapperDeviseKraken->findByCode(substr('Z' . $code1));
//        }
//
//        if (empty($devise1)) {
//
//            $devise1 = $this->mapperDeviseKraken->findByCode(substr('X' . $code1));
//        }
//
////        if (empty($devise1)) {
////            $i = 2;
////            while ($i++ < strlen($pairStrKraken)) {
////                $code1 = substr($pairStrKraken, 1, $i);
////                //var_dump($code1);
////                $devise1 = $this->mapperDeviseKraken->findByCode($code1);
////                if ($devise1) {
////                    break;
////                }
////            }
////        }
//
//        $code2 = substr($pairStrKraken, $i);
//        $devise2 = $this->mapperDeviseKraken->findByCode($code2);
//        if (empty($devise2)) {
//
//            $devise2 = $this->mapperDeviseKraken->findByCode(substr('Z' . $code2, 0, strlen($code2)));
//        }
//
//        if (empty($devise2)) {
//
//            $devise2 = $this->mapperDeviseKraken->findByCode(substr('X' . $code2, 0, strlen($code2)));
//        }
//       if ($code1 === 'IOT') {
//           //\Doctrine\Common\Util\Debug::dump($devise1);
//           var_dump($devise1->getId());
//           echo 'toto';
//       }
//       if ($code2 === 'XZEC') {
//           //\Doctrine\Common\Util\Debug::dump($devise1);
//           var_dump($devise2->getId());
//           echo 'toto';
//       }
//var_dump($str2);
//var_dump($devise1->getDevise()->getCode()); exit;
//        if ($devise1 && $devise2) {
//            return [$devise1->getCode(), $devise2->getCode()];
//        } else {
//            $str = '';
//            if (!$devise1) {
//                $str .= $code1 . ' ';
//            }
//            if (!$devise2) {
//                $str .= $code2;
//            }
//
//            throw new Exception('Devise inconnue : ' . $str);
//            exit;
//            var_dump($code2); 
//            var_dump($code1);
//        }
//    }

    protected function getTimestamp($arrayLine)
    {
        $dateStr = $arrayLine[$this->getTimeIndex()];
        $dateTime = new \DateTime($dateStr);
        return $dateTime->getTimestamp();
    }

    protected function getDatetime($arrayLine)
    {
        $dateStr = $arrayLine[$this->getTimeIndex()];
        $dateTime = new \DateTime($dateStr);
        return $dateTime;
    }

    protected function getExchange($arrayLine)
    {
        return $arrayLine[$this->getExchangeIndex()];
    }

//    protected function getFee($arrayLine) {
//        return $arrayLine[$this->getFeeIndex()];
//    }

    protected function getPair($arrayLine)
    {
        $pairStrKraken = $arrayLine[$this->getPairIndex()];
        $arrayAsset = $this->getrarrayCurrencyFromStrKraken($pairStrKraken);

        //var_dump($arrayAsset); exit;
        return $arrayAsset;
    }

    protected function getType($arrayLine)
    {
        $type = $arrayLine[$this->getTypeIndex()];
        return $type;
    }

    protected function getTradedAmount($arrayLine)
    {

        return $arrayLine[$this->getTradedAmountIndex()];
    }

    protected function getTradedCurrency($arrayLine)
    {
        return $arrayLine[$this->getTradedCurrencyIndex()];
    }

    protected function getReceivedAmount($arrayLine)
    {
        return $arrayLine[$this->getReceivedAmountIndex()];
    }

    protected function getReceivedCurrency($arrayLine)
    {
        return $arrayLine[$this->getReceivedCurrencyIndex()];
    }

    protected function getFeesAmount($arrayLine)
    {
        return $arrayLine[$this->getFeesAmountIndex()];
    }

    protected function getFeesCurrency($arrayLine)
    {
        return $arrayLine[$this->getFeesCurrencyIndex()];
    }

    protected function getTxid($arrayLine)
    {
        $txId = $arrayLine[$this->getTxidIndex()];
        return $txId;
    }

    public function getEntityManager()
    {
        return $this->entityManager;
    }

    public function __construct($file, $user, \Doctrine\ORM\EntityManager $em)
    {

        $mapperCoursDevise =
        //ini_set('memory_limit', '512M');
        $this->exchangeRateService = new \Application\Service\ExchangeRateService($em);
        $this->file = $file;
        $this->user = $user;
        $this->entityManager = $em;

        $this->ledgioMapper = new LedgioMapper($em);


        // Mapper Devise
        $mapperDeviseKraken = new \Application\Mapper\DeviseKrakenMapper($this->entityManager);
        $this->mapperDeviseKraken = $mapperDeviseKraken;
        $this->arrayMapperKraken = $mapperDeviseKraken->getArrayMapper();

        $mapperDeviseBittrex = new \Application\Mapper\DeviseBittrexMapper($this->entityManager);
        $this->arrayMapperBittrex = $mapperDeviseBittrex->getArrayMapper();


        $mapperDevise = new \Application\Mapper\DeviseMapper($this->entityManager);

        $this->initColFromCsv();

        $mapperExchange = new \Application\Mapper\ExchangeMapper($em);
        $exchange = $mapperExchange->findByName('Exchange Générique');

        if ($this->isValid()) {
            $mapperImport = new \Application\Mapper\ImportMapper($this->getEntityManager());
            $mapperDevise = new \Application\Mapper\DeviseMapper($this->getEntityManager());
            $importEntity = new \Application\Entity\Import(
                array(
                    'user' => $user,
                    'exchange' => $exchange,
                    'sourceType' => 'csv',
                    'name' => basename($file),
                    'path' => $file,
                    'nombreTrade' => 0,
                    'datetimeImport' => new \DateTime()
                ));
            $mapperImport->insert($importEntity);
            $this->ledgioMapper = new \Application\Mapper\LedgioMapper($em);
            /* save */
            $start = microtime(true);
            $batchSize = 200;
            //$user = $em->merge($user);
            foreach ($this->linesArray as $index => $row) {
                $row = trim($row);
                if (empty($row)) {
                    continue;
                }
                //var_dump($row);
                if ($index != 0) {

                    /* date */


                    $arrayLine = str_getcsv($row);
                    if (is_null($row)) {
                        continue;
                    }
                    $datetimeTransaction = $this->getDatetime($arrayLine);

                    if ($arrayLine[1] === 'toto') {
                        echo 'idex'; exit;
                    }
                    $exchange = $mapperExchange->findByName($this->getExchange($arrayLine));


                    if (empty($exchange)) {
                        echo 'echange';
                        var_dump($this->getExchange($arrayLine)); exit;
                        mail('jimmykurc@gmail.com', 'Exchange non reconnu', 'Exchange non reconnu : ' . $this->getExchange($arrayLine));
                    }

                    $tradedAmount = $this->getTradedAmount($arrayLine);
                    $tradedCurrency = $this->getTradedCurrency($arrayLine);

//                    $tradedDevise = $mapperDevise->findByCode($tradedCurrency);
                    if (!empty($this->arrayMapperKraken[$tradedCurrency])) {
                        $tradedDevise = $this->arrayMapperKraken[$tradedCurrency];
                    } elseif (!empty($this->arrayMapperBittrex[$tradedCurrency])) {
                        $tradedDevise = $this->arrayMapperBittrex[$tradedCurrency];
                    } else {

                        $tradedDevise = $mapperDevise->findByCode($tradedCurrency);

                    }

                    if (empty($tradedDevise)) {
                        var_dump($datetimeTransaction);
                        echo $tradedCurrency . 'traded devise';
                        var_dump($tradedCurrency);exit;
                        mail('jimmykurc@gmail.com', 'Devise Générique non reconnue', 'Devise Générique non reconnue : ' . $tradedCurrency);
                    }

                    $receivedAmount = $this->getReceivedAmount($arrayLine);
                    $receivedCurrency = $this->getReceivedCurrency($arrayLine);

                    if (!empty($this->arrayMapperKraken[$receivedCurrency])) {
                        $receivedDevise = $this->arrayMapperKraken[$receivedCurrency];
                    } elseif (!empty($this->arrayMapperBittrex[$receivedCurrency])) {
                        $receivedDevise = $this->arrayMapperBittrex[$receivedCurrency];
                    } else {
                        $receivedDevise = $mapperDevise->findByCode($receivedCurrency);
                    }



                    if (empty($receivedDevise)) {
                        echo 'empty received currency';
                        var_dump($receivedCurrency);exit;
                        mail('jimmykurc@gmail.com', 'Devise Générique non reconnue', 'Devise Générique non reconnue : ' . $receivedCurrency);
                    }


                    //fees

                    $feesAmount = $this->getFeesAmount($arrayLine);
                    $feesCurrency = $this->getFeesCurrency($arrayLine);

                    if (!empty($feesCurrency)) {
                        if (!empty($this->arrayMapperKraken[$feesCurrency])) {
                            $feesDevise = $this->arrayMapperKraken[$feesCurrency];
                        } elseif (!empty($this->arrayMapperBittrex[$feesCurrency])) {
                            $feesDevise = $this->arrayMapperBittrex[$feesCurrency];
                        } else {
                            $feesDevise = $mapperDevise->findByCode($feesCurrency);
                        }
                    } else {
                        $feesAmount = 0;
                        $feesDevise = null;
                    }


                    if ($tradedDevise instanceof \Application\Entity\Devise) {
                        $ledgioTradedDevise = $tradedDevise;
                    } else {
                        $ledgioTradedDevise = $tradedDevise->getDevise();
                    }
                    if ($receivedDevise instanceof \Application\Entity\Devise) {
                        $ledgioReceivedDevise = $receivedDevise;
                    } else {
                        $ledgioReceivedDevise = $receivedDevise->getDevise();
                    }


                    if ($ledgioReceivedDevise->getCode() === 'EUR') {
                        $receivedAmountInEUR = $receivedAmount;
                    } else {
                        $unitPriceReceivedInEUR = $this->getExchangeRateService()->getPriceInEuroFromDevise($ledgioReceivedDevise, $datetimeTransaction);
                        if ($unitPriceReceivedInEUR == 0) {
                            echo $datetimeTransaction->format('Y-m-d H:i:s');
                            echo $ledgioReceivedDevise->getId();
                            echo 'prix unitaire 0';
                            exit;
                        }

                        $receivedAmountInEUR = $receivedAmount * $unitPriceReceivedInEUR;
                    }

                    $ledgioFeesDevise = null;
                    $feesEUR = '';
                    if (!empty($feesDevise)) {
                        if ($feesDevise instanceof \Application\Entity\Devise) {
                            $ledgioFeesDevise = $feesDevise;
                        } else {
                            try {
                                $ledgioFeesDevise = $feesDevise->getDevise();
                            } catch (Exception $exception) {
                                var_dump($feesCurrency);
                            }
                        }
                        if (!empty($feesAmount)) {
                            if ($ledgioFeesDevise->getCode() === 'EUR') {
                                $feesEUR = $feesAmount;
                            } else {
                                $priceFees = $this->getExchangeRateService()->getPriceInEuroFromDevise($ledgioFeesDevise, $datetimeTransaction);
                                $feesEUR = $feesAmount * $priceFees;
                            }
                        } else {
                            $feesEUR = 0;
                        }
                    }

if (strpos(strtolower($feesAmount),'e') == true) {

    //$feesAmount = $explode[0] * pow(10, $explode[1]);
    $feesAmount = rtrim(number_format($feesAmount, 12),0);
    //$feesAmount = rtrim(sprintf('%g',$feesAmount),'0');

}

                    if (strpos(strtolower($tradedAmount),'e') == true) {
                        $tradedAmount = rtrim(number_format($tradedAmount, 12),0);
                    }

                    if (strpos(strtolower($receivedAmount),'e') == true) {
                        $receivedAmount = rtrim(number_format($receivedAmount, 12),0);
                    }

                    $ledgio = new Ledgio(array(
                        'datetimeTransaction' => $datetimeTransaction,
                        'user' => $user,
                        'exchange' => $exchange,
                        'type' => 'BUY',
                        'pair' => $tradedCurrency . '-' . $receivedCurrency,
//                        'fees' => $this->getFee($arrayLine),
                        'feesAmount' => (!empty($feesAmount) ? $feesAmount : 0),
                        'feesDevise' => (!empty($ledgioFeesDevise) ? $ledgioFeesDevise : null),
                        'feesCurrency' => (!empty($feesCurrency) ? $feesCurrency : null),
                        'feesEUR' => (!empty($feesEUR) ? $feesEUR : 0),
                        'tradedAmount' => $tradedAmount,
                        'tradedCurrency' => $tradedCurrency,
                        'tradedDevise' => $ledgioTradedDevise,
                        'receivedAmount' => $receivedAmount,
                        'receivedCurrency' => $receivedCurrency,
                        'receivedAmountInEUR' => $receivedAmountInEUR,
                        'receivedDevise' => $ledgioReceivedDevise,
                        'transactionId' => '',
                        'import' => $importEntity
                    ));

                    $ledgio->setUser($user);

                    $ledgio->setTradedAmount($tradedAmount);
                    $ledgio->setReceivedAmount($receivedAmount);

                    // debug multi line with same datetime and same exchange and same assets traded
//echo 'toto';

//                    $findLedgioSameDatetimeAndAssetAndExchange = $this->ledgioMapper->findLedgioSameDatetimeAndAssetAndExchange($exchange, $user, $tradedCurrency, $receivedCurrency, $datetimeTransaction);
                    $findLedgioSameDatetimeAndAssetAndExchangeCollection = $this->ledgioMapper->findLedgioSameDatetimeAndAssetAndExchange($exchange, $user, $tradedCurrency, $receivedCurrency, $datetimeTransaction);


                    if ($findLedgioSameDatetimeAndAssetAndExchangeCollection) {
                        if (count($findLedgioSameDatetimeAndAssetAndExchangeCollection) > 1) {
                            throw new Exception('Une erreur est survenue. Plusieurs échanges avec la même date et les même crypto.');
                        }
                        //var_dump(count($findLedgioSameDatetimeAndAssetAndExchangeCollection));
                        $findLedgioSameDatetimeAndAssetAndExchange = $findLedgioSameDatetimeAndAssetAndExchangeCollection[0];
                        //echo 'toto';


//                        var_dump(array(
//                            'datetimeTransaction' => $datetimeTransaction,
//                            'user' => $user,
//                            'exchange' => $exchange,
//                            'type' => 'BUY',
//                            'pair' => $tradedCurrency . '-' . $receivedCurrency,
////                        'fees' => $this->getFee($arrayLine),
//                            'fees' => '',
//                            'feesDevise' => '',
//                            'feesEUR' => '',
//                            'tradedAmount' => $tradedAmount,
//                            'tradedCurrency' => $tradedCurrency,
//                            'tradedDevise' => $ledgioTradedDevise,
//                            'receivedAmount' => $receivedAmount,
//                            'receivedCurrency' => $receivedCurrency,
//                            'receivedDevise' => $ledgioReceivedDevise,
//                            'transactionId' => '',
//                            'import' => $importEntity
//                        ));
                        //echo $findLedgioSameDatetimeAndAssetAndExchange->getTradedCurrency();

                        // update valeur
                        $newTradedAmount = $findLedgioSameDatetimeAndAssetAndExchange->getTradedAmount() + $ledgio->getTradedAmount();
                        //var_dump($ledgio->getReceivedAmount());
                        //var_dump($findLedgioSameDatetimeAndAssetAndExchange->getReceivedAmount());
                        $newReceivedAmount = $findLedgioSameDatetimeAndAssetAndExchange->getReceivedAmount() + $ledgio->getReceivedAmount();
                        $newReceivedAmountInEUR = $findLedgioSameDatetimeAndAssetAndExchange->getReceivedAmountInEUR() + $ledgio->getReceivedAmountInEUR();

                        $newFeesAmount = $findLedgioSameDatetimeAndAssetAndExchange->getFeesAmount() + $ledgio->getFeesAmount();
                        $newFeesEUR = $findLedgioSameDatetimeAndAssetAndExchange->getFeesEUR() + $ledgio->getFeesEUR();

                        $findLedgioSameDatetimeAndAssetAndExchange->setTradedAmount($newTradedAmount);
                        $findLedgioSameDatetimeAndAssetAndExchange->setReceivedAmount($newReceivedAmount);
                        $findLedgioSameDatetimeAndAssetAndExchange->setReceivedAmountInEUR($newReceivedAmountInEUR);
                        $findLedgioSameDatetimeAndAssetAndExchange->setFeesAmount($newFeesAmount);
                        $findLedgioSameDatetimeAndAssetAndExchange->setFeesEUR($newFeesEUR);


                        $ledgio = $findLedgioSameDatetimeAndAssetAndExchange;
//                        $findLedgioSameDatetimeAndAssetAndExchange->setMultiline($multiline);
//                        $em->persist($findLedgioSameDatetimeAndAssetAndExchange);
                        //exit;
                    }
                    $multiline = $ledgio->getMultiline();
                    if (empty($multiline)) {
                        $multiline = [];
                    } else {
                        $multiline = json_decode($multiline);
                    }

                    $multiline[] = array(
                        'datetimeTransaction' => $datetimeTransaction,
                        'user' => $user,
                        'exchange' => $exchange,
                        'type' => 'BUY',
                        'pair' => $tradedCurrency . '-' . $receivedCurrency,
                        'feesAmount' => (!empty($feesAmount) ? $feesAmount : 0),
                        'feesDevise' => (!empty($ledgioFeesDevise) ? $ledgioFeesDevise : null),
                        'feesCurrency' => (!empty($feesCurrency) ? $feesCurrency : null),
                        'feesEUR' => (!empty($feesEUR) ? $feesEUR : 0),
                        'tradedAmount' => $tradedAmount,
                        'tradedCurrency' => $tradedCurrency,
                        'tradedDevise' => $ledgioTradedDevise,
                        'receivedAmount' => $receivedAmount,
                        'receivedCurrency' => $receivedCurrency,
                        'receivedAmountInEUR' => (!empty($receivedAmountInEUR) ? $receivedAmountInEUR : 0),
                        'receivedDevise' => $ledgioReceivedDevise,
                        'transactionId' => '',
                        'import' => $importEntity
                    );
//                    $multiline[] = 1;

                    $multiline = json_encode($multiline);
                    $ledgio->setMultiline($multiline);
//                    else {
                    $em->persist($ledgio);
//                    var_dump(json_decode($ledgio->getMultiline()));
//                    echo '------------';

                    $em->flush();
//                    }

                    $this->countLineRecorded++;

//                    if (($index % $batchSize) == 0) {
//                        $em->flush();
//
//                    }


// flush the remaining objects
// trop long !!!!!!!!
                    //$this->ledgioMapper->insert($entity);
                    // $newDate = new \DateTime();
//                    $newDate->setTimestamp($timestampTransaction);
                    //$newDate = \DateTime::createFromFormat('U', $timestampTransaction);
//                     echo  $newDate->format('Y-m-d H:i:s');
//                    var_dump($timestampTransaction); exit;
//                    $dateTime = new \DateTime($dateStr);
                    //$ledgioEntity = new \Application\Entity\Ledgio();
                }
            }
            $em->flush();
            //$em->clear();
            //$em->clear('\Application\Entity\Ledgio');
            //$time_elapsed_secs = microtime(true) - $start;
//            echo $time_elapsed_secs;
//            exit;
            $importEntity->setNombreTrade($this->countLineRecorded);
            $mapperImport->update($importEntity);


//            $collectionLedgio = $this->ledgioMapper->getListByUser($this->user, array(), false);
//            foreach ($collectionLedgio as $index => $ledgio) {
//                if (!$this->entityManager->contains($ledgio)) {
//                    \Doctrine\Common\Util\Debug::dump($ledgio->getTradedDevise());
//                    var_dump($ledgio->getTradedDevise()->getCode());
//                    var_dump($ledgio->getTradedCurrency());
//                    var_dump($ledgio->getTransactionId());
//                    \Doctrine\Common\Util\Debug::dump($ledgio->getImport());
//                }
//            }
//            exit;
        }
    }

    protected function initColFromCsv()
    {
        $this->contentFile = file_get_contents($this->file);
        //var_dump($content);
        $this->linesArray = explode("\n", $this->contentFile);


        //var_dump($lines);
        //$this->columnCsv = explode(',', $lines[0]);
        $this->columnCsv = str_getcsv($this->linesArray[0]);
        $this->columnCsvMapper = array_flip($this->columnCsv);
//        var_dump($lines[0]);
//        exit;
        //echo $exchange;
//        foreach ($lines as $nbLine => $line) {
//            $csv_row = str_getcsv($line);
//
//            if ($nbLine == 0) {
//
//
//
//                foreach ($csv_row as $index => $nameCol) {
//
//                    //var_dump($nameCol);
//                    //var_dump($mapperFileExchange);
//                    if (in_array($nameCol, array_values($mapperFileExchange))) {
//                        $mapperFile[$nameCol] = $index;
//                    }
//                }
//            } else {
//                //if (empty($csv_row[$mapperFile['asset']])) continue;
//                if (!isset($mapperFile[$mapperFileExchange['time']])) {
////                            @todo
//                    //echo $nbLine;
//                    //echo $exchange;
//                    //var_dump($csv_row);
//                    // exit;
//                }
//                //var_dump($mapperFile);
//                //exit;
//                if (empty($csv_row[$mapperFile[$mapperFileExchange['time']]]))
//                    continue;
//
//
//                if (!array_key_exists($csv_row[$mapperFile[$mapperFileExchange['time']]], $ledgio))
//                    $ledgio[$csv_row[$mapperFile[$mapperFileExchange['time']]]] = [];
//
//
//                $ledgio[$csv_row[$mapperFile[$mapperFileExchange['time']]]][] = array('data' => $csv_row, 'exchange' => $exchange, 'mapperFile' => $mapperFile);
//                // exit;
//            }
//            //var_dump($mapperFile); exit;
//            //save data into database
//            //----
//        }
    }

    protected function setErrorMessage($errorMessage)
    {
        $this->errorMessage = $errorMessage;
    }

    public function getErrorMessage()
    {
        return $this->errorMessage;
    }

    public function isValid()
    {
        //var_dump($this->requiredColumn);
        //var_dump($this->columnCsv);
        $arrayDiff = array_diff($this->requiredColumn, $this->columnCsv);
        $colIsValid = !$arrayDiff;
        if ($colIsValid === false) {
            $this->setErrorMessage(array(
                    'header' => str_replace('[REQUIRED_COLUMN]', implode(', ', $arrayDiff), SELF::ERROR_TITLE_CSV_COL_REQUIRED),
                    'body' => SELF::ERROR_MESSAGE_CSV_COL_REQUIRED,
                    'footer' => '')
            );
        }
        return $colIsValid;
    }

}


??

??