Current path: home/webdevt/cryptoimpot.fr/module/Application/src/Service/
?? Go up: /home/webdevt/cryptoimpot.fr/module/Application/src
<?php
namespace Application\Service;
use Application\Mapper\ImportMapper;
use Application\Mapper\LedgioMapper;
use DateTime;
use Application\Tool\CurrencyTool;
use Laminas\Http\Header\Warning;
/**
* Description of LedgioService
*
* @author jimmy
*/
class LedgioService
{
/*
* Tableeau regroupant les transactions d'une même crypto effectuées au même moment
*/
public $arrayConsolidation = [];
/*
* Prix total d'acquisition 220
* Détail des prix d'acquisition par crypto
*/
public $arrayAcquisitionBefore2019 = [];
/*
* Cumul qte par crypto par crypto
*/
public $arrayCumulParCryptoAcquisitionBefore2019 = [];
/*
* Cumul valeur total acquisition par crypto par crypto après échange
*/
public $arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019 = [];
const MONTANT_TRADE_SUP_WALLET = 'MONTANT_TRADE_SUP_WALLET';
public $countLineRecorded = 0;
public $sommePrixAcquites = 0;
// debug montant acquisition
public $sommePrixAcquitesEntre2019etJanvierAnneeImposition = 0;
public $sommeFractionsInitialesCapital = 0;
// debug montant acquisition
public $sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition = 0;
public $totalPrixAcquisitionBefore2019 = 0;
// debug montant acquisition
public $totalPrixAcquisitionPremierJanvierAnneeImposition = 0;
public $generatedAcquisitionAvant2019 = false;
public $useGeneratedAcquisitionAvant2019 = false;
public $arrayValuesWalletEUR = [];
protected $annexe_dir_base;
protected $ledgio_dir_base;
protected $tokenLedgio;
protected $arrayCsvTrade;
protected $arrayCryptosComplementaryInfos;
protected $arrayCryptosComplementaryInfosFull;
protected $anneeImposition;
protected $ledgioCollection;
protected $arrayRapportAnnexePrincipale = [];
// debug montant acquisition
protected $arrayRapportAnnexePrincipaleEntre2019etJanvierAnneeImposition = [];
protected $plusValue = 0;
// debug montant acquisition
protected $plusValueEntre2019etJanvierAnneeImposition = 0;
protected $investFiatConvertedInEUR = 0;
protected $valeurNominale = 0;
protected $acquisitionFiatDepuisDerniereCession = 0;
protected $prixAcquisition = 0;
public $explicationAcquisitionAvant2019 = [];
public $explicationValeurEchangeAvant2019 = [];
public $explanationPrixTotalAcquisition = [];
protected $arrayDetailFusionLigneMemeDateMemeAsset = [];
/**
*
* @var type
* array of asset with quantity
*/
protected $instantWallet = array();
protected $instantWalletAvantCession = array();
// debug montant acquisition
protected $instantWalletEntre2019EtJanvierImposition = array();
protected $CMCService;
#,PAIR,AMOUNT,PRICE,FEE,FEE CURRENCY,DATE,ORDER ID
protected $mapperFileInfosComplementaires = array(
'time' => "Date",
'type' => 'Type (optionnel)',
'codeIn' => "Symbole acquisition",
'qtyIn' => "Quantite acquisition",
'codeOut' => "Symbole cession",
'qtyOut' => "Quantite cession",
'exchange' => "Nom echange (optionnel)",
'tradeId' => "ID transaction (optionnel)",
'comment' => 'Commentaire (optionnel)'
);
protected $mapperAsset = 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',
'KFEE' => 'FEE');
/**
*
* @var type
* array containing fiat quantity invest
*/
protected $investFiat = ['EUR' => 0];
protected $investFiatAfter2019 = ['EUR' => 0];
protected $investFiatAfter2019Detail = [];
protected $arrayTransactionsCessionFiatAnneeImposition = [];
protected $arrayTransactionsImposable2048m = [];
protected $alldetailAchatParCession2048m = [];
/*
* Contient un tableau en cle la date de cession et en value le montant total de crypto acheté en EUR depuis la dernière cession
*/
protected $arrayAcquisitionFiatAvantDateCession = [];
// debug montant acquisition
protected $arrayAcquisitionFiatAvantDateCessionEntre2019etJanvierAnneeImposition = [];
public $arrayExplicationAcquisitionEUR = [];
public $detailArrayAcquisitionFiatDepuisDerniereCession = [];
public $arrayValuesWalletEURAcquisitionAvantAnneeImposition = [];
public $arrayExplicationWalletCumulApres2019 = [];
public $arrayExplicationWalletApres2019 = [];
public $arrayWarningWalletQte = [];
function __construct($user, $entityManager, $config = '')
{
$this->entityManager = $entityManager;
$this->mapperCoursDevise = new \Application\Mapper\CoursDeviseMapper($this->entityManager);
$this->ledgioMapper = new LedgioMapper($this->entityManager);
$this->user = $user;
$this->CMCService = new CMCService();
$this->CoinAPIService = new CoinAPIService();
if (!empty($config)) {
$this->annexe_dir_base = $config['path-app'] . '/data/annexe/';
$this->ledgio_dir_base = $config['path-app'] . '/data/io/';
$this->tokenLedgio = $this->user->getId();
$this->inputCsvDirectory = $this->ledgio_dir_base . $this->tokenLedgio . '/input/';
$this->anneeImposition = $config['anneeImposition'];
$this->inputDir = $this->ledgio_dir_base . $this->tokenLedgio . '/input/';
$this->outputDir = $this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->anneeImposition . '/';
// debug montant acquisition
if (!is_dir($this->outputDir)) {
mkdir($this->outputDir, 0777, true);
}
$this->initLogDate();
$this->initLogAcquisitionAvant2019();
}
}
protected function initLogDate()
{
$file = $this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-log-date';
if (is_file($file)) {
unlink($file);
}
}
protected function initLogAcquisitionAvant2019()
{
$file = $this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-log-acquisition-avant-2019';
if (is_file($file)) {
unlink($file);
}
}
/**
* @return array
*/
public function getArrayTransactionsImposable2048m()
{
return $this->arrayTransactionsImposable2048m;
}
/**
* @return array
*/
public function getArrayTransactionsCessionFiatAnneeImposition()
{
return $this->arrayTransactionsCessionFiatAnneeImposition;
}
/**
* @return array
*/
public function getAlldetailAchatParCession2048m()
{
return $this->alldetailAchatParCession2048m;
}
/**
* @return array
*/
public function getArrayDetailFusionLigneMemeDateMemeAsset()
{
return $this->arrayDetailFusionLigneMemeDateMemeAsset;
}
public function getArrayRapportAnnexePrincipale()
{
return $this->arrayRapportAnnexePrincipale;
}
// debug montant acquisition
public function getArrayRapportAnnexePrincipaleEntre2019etJanvierAnneeImposition()
{
return $this->arrayRapportAnnexePrincipaleEntre2019etJanvierAnneeImposition;
}
public function getInvestFiatAfter2019Detail()
{
return $this->investFiatAfter2019Detail;
}
public function getarrayAcquisitionBefore2019()
{
return $this->arrayAcquisitionBefore2019;
}
public function getBrouillonArrayRapportAnnexePrincipale()
{
if (empty($this->arrayRapportAnnexePrincipale)) {
return null;
}
$size = sizeof($this->arrayRapportAnnexePrincipale);
for ($i = 0; $i < 100; $i++) {
$returnArray[$i] = $this->arrayRapportAnnexePrincipale[0];
}
$num = (int)floor($size / 3);
$num = ($num === 0) ? 1 : $num;
return $returnArray;
}
public function update()
{
$this->instantWallet = array();
$warningLedgio = array();
$collectionLedgio = $this->ledgioMapper->getListByUser($this->user, array(), false);
$this->instantWallet = array();
$batchSize = 500;
foreach ($collectionLedgio as $index => $ledgio) {
if (!$this->entityManager->contains($ledgio)) {
echo 'false';
exit;
}
$i = 0;
$warningMessage = '';
/* @var $ledgio \Application\Entity\ledgio */
if (!empty($ledgio->getTradedDevise()->getId()) && !array_key_exists($ledgio->getTradedDevise()->getId(), $this->instantWallet)) {
$this->instantWallet[$ledgio->getTradedDevise()->getId()] = 0;
}
if (!empty($ledgio->getReceivedDevise()->getId()) && !array_key_exists($ledgio->getReceivedDevise()->getId(), $this->instantWallet)) {
$this->instantWallet[$ledgio->getReceivedDevise()->getId()] = 0;
}
if (!empty($ledgio->getTradedDevise()->getId()) && !array_key_exists($ledgio->getTradedDevise()->getId(), $this->instantWalletAvantCession)) {
$this->instantWalletAvantCession[$ledgio->getTradedDevise()->getId()] = 0;
}
if (!empty($ledgio->getReceivedDevise()->getId()) && !array_key_exists($ledgio->getReceivedDevise()->getId(), $this->instantWalletAvantCession)) {
$this->instantWalletAvantCession[$ledgio->getReceivedDevise()->getId()] = 0;
}
if (
(CurrencyTool::isFiat($ledgio->getTradedDevise()->getCode()) !== true) &&
// ($this->instantWallet[$ledgio->getTradedDevise()->getId()] < $ledgio->getTradedAmount())) {
// (bccomp($ledgio->getTradedAmount(), $this->instantWallet[$ledgio->getTradedDevise()->getId()]) === 1)) {
// ($ledgio->getTradedAmount() - $this->instantWallet[$ledgio->getTradedDevise()->getId()] > 0)) {
(bccomp(round($ledgio->getTradedAmount(),10), round($this->instantWallet[$ledgio->getTradedDevise()->getId()],10)) === 1 )) {
//var_dump($ledgio->getTradedDevise()->getId());
// var_dump($ledgio->getTradedAmount());
// var_dump($this->instantWallet[$ledgio->getTradedDevise()->getId()]);
// var_dump($this->instantWallet[$ledgio->getTradedDevise()->getId()] < $ledgio->getTradedAmount());
//
// var_dump(bccomp($this->instantWallet[$ledgio->getTradedDevise()->getId()], $ledgio->getTradedAmount()));
// exit;
// $warningMessage = 'Le montant tradé est supérieur à ce que vous possédez dans votre portefeuille au moment de l\'opération.';
$warningMessage = 'MONTANT_TRADE_SUP_WALLET';
$this->instantWalletAvantCession = $this->instantWallet;
}
//var_dump($this->instantWallet[$ledgio->getTradedDevise()->getId()]);
$ledgio->setCumulTraded($this->instantWallet[$ledgio->getTradedDevise()->getId()]);
$ledgio->setCumulReceived($this->instantWallet[$ledgio->getReceivedDevise()->getId()]);
$this->instantWallet[$ledgio->getTradedDevise()->getId()] = $this->instantWallet[$ledgio->getTradedDevise()->getId()] - $ledgio->getTradedAmount();
$this->instantWallet[$ledgio->getReceivedDevise()->getId()] = $this->instantWallet[$ledgio->getReceivedDevise()->getId()] + $ledgio->getReceivedAmount();
// a supprimer
// if ($this->instantWallet[$ledgio->getTradedDevise()->getId()] < 0) {
// unset($this->instantWallet[$ledgio->getTradedDevise()->getId()]);
// }
// a supprimer
// $ledgio->setInstantWallet(json_encode($this->instantWallet));
$ledgio->setInstantWallet(json_encode($this->instantWalletAvantCession));
$ledgio->setWarningMessage($warningMessage);
if (!$this->entityManager->contains($ledgio->getTradedDevise())) {
$tradedDevise = $this->entityManager->find('\Application\Entity\Devise', $ledgio->getTradedDevise()->getId());
if ($tradedDevise) {
$ledgio->setTradedDevise($tradedDevise);
}
}
if (!$this->entityManager->contains($ledgio->getReceivedDevise())) {
$receivedDevise = $this->entityManager->find('\Application\Entity\Devise', $ledgio->getReceivedDevise()->getId());
if ($receivedDevise) {
$ledgio->setReceivedDevise($receivedDevise);
}
}
if (!$this->entityManager->contains($ledgio->getUser())) {
$userFind = $this->entityManager->find('\User\Entity\User', $ledgio->getUser()->getId());
if ($userFind) {
$ledgio->setUser($userFind);
}
}
if (!$this->entityManager->contains($ledgio->getExchange())) {
$exchangeFind = '';
if ($ledgio->getExchange() instanceof \Application\Entity\Exchange) {
$exchangeFind = $this->entityManager->find('\Application\Entity\Exchange', $ledgio->getExchange()->getId());
}
if ($exchangeFind) {
$ledgio->setExchange($exchangeFind);
}
}
$this->entityManager->merge($ledgio);
$collectionLedgio[$index] = $ledgio;
$this->countLineRecorded++;
}
$this->entityManager->flush();
$this->entityManager->clear();
}
public function hasReceivedFiat($ledgio)
{
$arrayFiat = array(
'CAD',
'EUR',
'GBP',
'JPY',
'KRW',
'USD');
return in_array($ledgio->getReceivedCurrency(), $arrayFiat);
}
public function hasTradedFiat($ledgio)
{
$arrayFiat = array(
'CAD',
'EUR',
'GBP',
'JPY',
'KRW',
'USD');
return in_array($ledgio->getTradedCurrency(), $arrayFiat);
}
public function getArrayImport()
{
$mapperImport = new ImportMapper($this->entityManager);
$collectionImport = $mapperImport->findByUser($this->user);
return $collectionImport;
}
public function getArrayAcquisitionFiatAvantDateCession()
{
return $this->arrayAcquisitionFiatAvantDateCession;
}
// debug montant acquisition
public function getArrayAcquisitionFiatAvantDateCessionEntre2019etJanvierAnneeImposition()
{
return $this->arrayAcquisitionFiatAvantDateCessionEntre2019etJanvierAnneeImposition;
}
public function getTotalPrixAcquisitionBefore2019()
{
return $this->totalPrixAcquisitionBefore2019;
}
public function reportByYear()
{
//avant 2019
if ($this->anneeImposition < 2019) {
$this->report2048m();
} else {
$this->report();
}
}
public function report2048m()
{
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-annexe-1-plus-value')) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-annexe-1-plus-value');
}
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-plus-value')) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-plus-value');
}
$this->ledgioCollection = $this->ledgioMapper->getListByUser($this->user, array(), false);
$this->resetConsolidationLedgio();
foreach ($this->ledgioCollection as $ledgio) {
set_time_limit(0);
$assetIn = $ledgio->getReceivedCurrency();
$deviseIn = $ledgio->getReceivedDevise();
$qtyIn = $ledgio->getReceivedAmount();
$assetOut = $ledgio->getTradedCurrency();
$deviseOut = $ledgio->getTradedDevise();
$qtyOut = $ledgio->getTradedAmount();
$mvtType = '';
$tradeId = $ledgio->getId();
$fraisCessionEUR = $ledgio->getFeesEUR();
$dateTime = $ledgio->getDatetimeTransaction();
if ($ledgio->getExchange() instanceof \Application\Entity\Exchange) {
$exchange = $ledgio->getExchange()->getName();
} else {
$exchange = 'inconnu';
}
if ($this->isFiat($assetIn) && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
if (!empty($ledgio->getMultiline())) {
$this->arrayDetailFusionLigneMemeDateMemeAsset[] = json_decode($ledgio->getMultiline());
} else {
$this->arrayDetailFusionLigneMemeDateMemeAsset[] = null;
}
}
$this->processLineLedgio2048m($deviseIn, abs($qtyIn), $deviseOut, abs($qtyOut), $dateTime, $mvtType, $exchange, $tradeId, $fraisCessionEUR);
}
if (empty($this->getArrayCryptosComplementaryInfosFull())) {
$this->genererPlusValueReport();
}
}
public function report()
{
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-annexe-1-plus-value')) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-annexe-1-plus-value');
}
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-plus-value')) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-plus-value');
}
$this->ledgioCollection = $this->ledgioMapper->getListByUser($this->user, array(), false);
$this->resetConsolidationLedgio();
$this->processLegioCalc();
if (empty($this->getArrayCryptosComplementaryInfosFull())) {
$this->genererPlusValueReport();
}
}
protected function resetConsolidationLedgio()
{
if (!is_dir($this->ledgio_dir_base . $this->tokenLedgio . '/output/')) {
mkdir($this->ledgio_dir_base . $this->tokenLedgio . '/output/', 0777, true);
}
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-consolidation')) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-consolidation');
}
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-consolidation', implode(",", array_values($this->mapperFileInfosComplementaires)) . PHP_EOL, FILE_APPEND | LOCK_EX);
}
public function processLegioCalc()
{
foreach ($this->ledgioCollection as $ledgio) {
set_time_limit(0);
$assetIn = $ledgio->getReceivedCurrency();
$deviseIn = $ledgio->getReceivedDevise();
$qtyIn = $ledgio->getReceivedAmount();
$assetOut = $ledgio->getTradedCurrency();
$deviseOut = $ledgio->getTradedDevise();
$qtyOut = $ledgio->getTradedAmount();
$mvtType = '';
$tradeId = $ledgio->getId();
$fraisCessionEUR = $ledgio->getFeesEUR();
$dateTime = $ledgio->getDatetimeTransaction();
if ($ledgio->getExchange() instanceof \Application\Entity\Exchange) {
$exchange = $ledgio->getExchange()->getName();
} else {
$exchange = 'inconnu';
}
if ($this->isFiat($assetIn) && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
if (!empty($ledgio->getMultiline())) {
$this->arrayDetailFusionLigneMemeDateMemeAsset[] = json_decode($ledgio->getMultiline());
} else {
$this->arrayDetailFusionLigneMemeDateMemeAsset[] = null;
}
}
$this->processLineLedgio($deviseIn, abs($qtyIn), $deviseOut, abs($qtyOut), $dateTime, $mvtType, $exchange, $tradeId, $fraisCessionEUR);
}
}
protected function isFiat($code)
{
$arrayFiat = array(
'CAD',
'EUR',
'GBP',
'JPY',
'KRW',
'USD');
return in_array($code, $arrayFiat);
}
protected function processLineLedgio($deviseIn, $qtyIn, $deviseOut, $qtyOut, $dateTime, $mvtType, $exchangeName, $tradeId, $fraisCessionEUR = 0, $debug=false)
{
$this->logDate($dateTime->format('Y-m-d'));
if ($debug) {
$this->addLineConsolidationLedgio($dateTime->format('Y-m-d H:i:s'), $deviseIn, $qtyIn, $deviseOut, $qtyOut, $exchangeName, $tradeId);
}
// Tableau de consolidation affiché dans le rapport principal (ce tableau regroupe les trades au meême moment avec la même crypto)
$this->arrayConsolidation[] = [
'dateTime' => $dateTime->format('Y-m-d H:i:s'),
'deviseReceived' => $deviseIn,
'qtyReceived' => $qtyIn,
'deviseTraded' => $deviseOut,
'qtyTraded' => $qtyOut,
'exchangeName' => $exchangeName,
'trdedId' => $tradeId];
// ???????
if ($dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && empty($this->wallet[$this->anneeImposition . '-01-01'])) {
$this->saveWalletDebutAnneeImposable();
}
if ($debug) {
$this->logAcquisitionAvant2019('Test - avant ou après 01-01-2019 00:00:00 ?' . PHP_EOL);
}
// Cas des échanges avant 2019
if ($dateTime < new DateTime('2019-01-01 00:00:00')) {
if ($debug) {
$this->logAcquisitionAvant2019('=> avant 01-01-2019 00:00:00' . PHP_EOL);
$this->logAcquisitionAvant2019('Test - Devise In is fiat ? on l\'ajoute au wallet avant 2019' . PHP_EOL);
}
// si c'est pas du fiat en in on l'ajoute au wallet acquisition avant 2019
if (!$this->isFiat($deviseIn->getCode())) {
if ($debug) {
$this->logAcquisitionAvant2019('=> Devise In n\'est pas du fiat' . PHP_EOL);
// si on n'a pas d'index correspondant à la devise on crée un tableau vide
$this->logAcquisitionAvant2019('Test - Devise In dans le wallet avant 2019 ?' . PHP_EOL);
}
if (empty($this->arrayAcquisitionBefore2019[$deviseIn->getCode()])) {
$this->logAcquisitionAvant2019('=> Devise In non trouvé dans le wallet on crée une clé dans le tableau' . PHP_EOL);
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()] = array();
}
if (empty($this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()])) {
$this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()] = 0;
}
if (empty($this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()])) {
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()] = 0;
}
// on traite la devise out
// si c'est du fiat en out
$this->logAcquisitionAvant2019('Test - out is fiat ?' . PHP_EOL);
if ($this->isFiat($deviseOut->getCode())) {
$this->logAcquisitionAvant2019('=> out is fiat' . PHP_EOL);
// si EUR sinon on calcule le fiat en EUR
$this->logAcquisitionAvant2019('Test - Is fiat out is EUR' . PHP_EOL);
if ($deviseOut->getCode() !== 'EUR') {
$this->logAcquisitionAvant2019('=> fiat out n\'est pas EUR' . PHP_EOL);
$price = $this->getPrice($deviseOut, $dateTime);
if (empty($price)) {
$this->logAcquisitionAvant2019('WARNING : prix non trouvé pour ' . $deviseOut->getCode() . ' le ' . $dateTime->format('d-m-Y') . PHP_EOL);
$this->logAcquisitionAvant2019($_SERVER['SERVER_NAME'] . PHP_EOL);
if ($_SERVER['SERVER_NAME'] == 'ledgio.fr') {
$this->logAcquisitionAvant2019('WARNING:' . $dateTime->format('d-m-Y') . ' : ' . $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé' . PHP_EOL);
//mail('jimmykurc@gmail.com', $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé');
}
}
$prixEuro = $qtyOut * $price;
} else {
$this->logAcquisitionAvant2019('=> fiat out est EUR' . PHP_EOL);
$prixEuro = $qtyOut;
}
$this->logAcquisitionAvant2019('ajout de ' . $qtyIn . ' ' . $deviseIn->getCode() . ' acquis pour un total de ' . $prixEuro . 'EUR' . PHP_EOL);
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()][] = ['qte' => $qtyIn, 'prixEuro' => $prixEuro];
$oldQuantite = $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()] = $qtyIn + $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
// cumul prix acquisition de la crypto en cours
$cumulAcquisitionParCryptoEURAvantEchange = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()] = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()] + $prixEuro;
$this->explicationAcquisitionAvant2019[$deviseIn->getCode()][$dateTime->format('Y-m-d H:i:s')][] = [
'dateTime' => $dateTime,
'oldQte' => $oldQuantite,
'qtyOutTmp' => '',
'qtyIn' => $qtyIn,
'newQte' => $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()],
'monnaieFiatRecu' => $deviseOut->getCode(),
'qtyFiatRecu' => $qtyOut,
'conversionEur' => !empty($price) ? $price : 1,
'prixUnitaireIn' => $prixEuro / $qtyIn,
// explication prix
'oldPrixEuro' => '',
'ratioPrixEuro' => '',
'newPrixEuro' => $prixEuro,
'cumulAcquisitionParCryptoEUR' => $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()],
'cumulAcquisitionParCryptoEURAvantEchange' => $cumulAcquisitionParCryptoEURAvantEchange
];
} else {
$this->logAcquisitionAvant2019('=> out is crypto' . PHP_EOL);
if (empty($this->explicationValeurEchangeAvant2019[$deviseIn->getCode()])) {
$this->explicationValeurEchangeAvant2019[$deviseIn->getCode()] = [];
}
if (empty($this->explicationValeurEchangeAvant2019[$deviseIn->getCode()][$dateTime->format('Y-m-d H:i:s')])) {
$this->explicationValeurEchangeAvant2019[$deviseIn->getCode()][$dateTime->format('Y-m-d H:i:s')] = [];
}
// On prend la valeur en EUR en cas d'echange de crypto (comme si la transaction avait été faite avec des euros)
$price = $this->getPrice($deviseIn, $dateTime);
// on recupére aussi le prix de la crypto qu'on cede pour voir si le prix en EUR equivaut a celui trouvé pour celui qu'on recoit
$priceOut = $this->getPrice($deviseOut, $dateTime);
$prixEuro = $qtyIn * $price;
$prixEuroOutTest = $qtyOut * $priceOut;
$this->logAcquisitionAvant2019('ajout de ' . $qtyIn . ' ' . $deviseIn->getCode() . ' valorisés pour un total de ' . $prixEuro . 'EUR' . '(' . $qtyOut . ' ' . $deviseOut->getCode() . ')' . PHP_EOL);
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()][] = ['qte' => $qtyIn, 'prixEuro' => $prixEuro];
$oldQuantite = $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()] = $qtyIn + $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$cumulAcquisitionParCryptoEURAvantEchange = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()] += $prixEuro;
$this->explicationAcquisitionAvant2019[$deviseIn->getCode()][$dateTime->format('Y-m-d H:i:s')][] = [
'dateTime' => $dateTime,
'oldQte' => $oldQuantite,
'qtyOutTmp' => '',
'qtyIn' => $qtyIn,
'newQte' => $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseIn->getCode()],
'prixUnitaireIn' => $price,
'unitInPriceCryptoToEur' => $price,
'unitOutPriceCryptoToEur' => $priceOut,
'inPriceCryptoToEur' => $prixEuro,
'outPriceCryptoToEur' => $prixEuroOutTest,
// explication prix
'oldPrixEuro' => '',
'ratioPrixEuro' => '',
'newPrixEuro' => $prixEuro,
'cumulAcquisitionParCryptoEUR' => $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()],
'cumulAcquisitionParCryptoEURAvantEchange' => $cumulAcquisitionParCryptoEURAvantEchange
];
$this->explicationValeurEchangeAvant2019[$deviseIn->getCode()][$dateTime->format('Y-m-d H:i:s')][] = [
'dateTime' => $dateTime,
'qtyIn' => $qtyIn,
'deviseIn' => $deviseIn->getCode(),
'qtyOut' => $qtyOut,
'deviseOut' => $deviseOut->getCode(),
'prixUnitaireIn' => $price,
'newPrixEuro' => $prixEuro
];
}
// on ajoute la qte de crypto recu
}
$this->logAcquisitionAvant2019('Test - Devise Out is fiat ?' . PHP_EOL);
// on doit sortir la deviseOut du wallet par la methode FIFO
if (!$this->isFiat($deviseOut->getCode())) {
$this->logAcquisitionAvant2019('=> Devise Out is not fiat ?' . PHP_EOL);
// initialisation des prix et qté à sortir
// $prixEurOut = 0;
$i = 0;
$qtyOutTmp = $qtyOut;
// si on n'a pas d'index correspondant à la devise on crée un tableau vide
$this->logAcquisitionAvant2019('Test - Devise Out dans le wallet avant 2019 ?' . PHP_EOL);
if (empty($this->arrayAcquisitionBefore2019[$deviseOut->getCode()])) {
$this->logAcquisitionAvant2019('=> Devise Out non trouvé dans le wallet on crée une clé dans le tableau' . PHP_EOL);
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()] = array();
}
if (empty($this->arrayCumulParCryptoAcquisitionBefore2019[$deviseOut->getCode()])) {
$this->arrayCumulParCryptoAcquisitionBefore2019[$deviseOut->getCode()] = 0;
}
if (empty($this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()])) {
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()] = 0;
}
if (empty($this->explicationAcquisitionAvant2019[$deviseOut->getCode()]) || !is_array($this->explicationAcquisitionAvant2019[$deviseOut->getCode()])) {
$this->explicationAcquisitionAvant2019[$deviseOut->getCode()] = [];
}
if (empty($this->explicationAcquisitionAvant2019[$deviseOut->getCode()][$dateTime->format('Y-m-d H:i:s')]) || !is_array($this->explicationAcquisitionAvant2019[$deviseOut->getCode()][$dateTime->format('Y-m-d H:i:s')])) {
$this->explicationAcquisitionAvant2019[$deviseOut->getCode()][$dateTime->format('Y-m-d H:i:s')] = [];
}
// Méthode FIFO on parcours tous les achats de crypto et on soustrait la quantité sortie
$this->logAcquisitionAvant2019('WHILE - FIFO on parcours les achats de crypto et on enlève la qté sortie' . PHP_EOL);
while ($i < count($this->arrayAcquisitionBefore2019[$deviseOut->getCode()]) && $qtyOutTmp > 0) {
$arrayBuyCrypto = $this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i];
// si la qté sortie est inférieur à la qté d'un achat à un instant T
// on la soustrait et on s'arrete
if ($qtyOutTmp <= $arrayBuyCrypto['qte']) {
// calcul du nouveau montant total d'acquisiton en EUR
$newPrixEuro = $arrayBuyCrypto['prixEuro'] - ($qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte']);
$newQte = $arrayBuyCrypto['qte'] - $qtyOutTmp;
$oldQuantite = $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseOut->getCode()];
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i] = ['qte' => $newQte, 'prixEuro' => $newPrixEuro];
$this->arrayCumulParCryptoAcquisitionBefore2019[$deviseOut->getCode()] = $this->arrayCumulParCryptoAcquisitionBefore2019[$deviseOut->getCode()] - $qtyOutTmp;
$cumulAcquisitionParCryptoEURAvantEchange = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()];
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()] = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()] - ($qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte']);
$this->explicationAcquisitionAvant2019[$deviseOut->getCode()][$dateTime->format('Y-m-d H:i:s')][] = [
'dateTime' => $dateTime,
'oldQte' => $oldQuantite,
'qtyOutTmp' => $qtyOutTmp,
'qtyIn' => '',
'newQte' => $newQte,
'prixUnitaireIn' => '',
// explication prix
'oldQtePourCalculRatio' => $arrayBuyCrypto['qte'],
'oldPrixEuro' => $arrayBuyCrypto['prixEuro'],
'ratioPrixEuro' => $qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte'],
'newPrixEuro' => $newPrixEuro,
'cumulAcquisitionParCryptoEURAvantEchange' => $cumulAcquisitionParCryptoEURAvantEchange,
'cumulAcquisitionParCryptoEUR' => $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()]
];
$this->logAcquisitionAvant2019('Mise à jour acquisition ' . $newQte . ' ' . $deviseOut->getCode() . ' pour ' . $newPrixEuro . ' EUR' . PHP_EOL);
$this->logAcquisitionAvant2019(print_r($this->arrayAcquisitionBefore2019[$deviseOut->getCode()], true));
// on passe la qté restante à 0;
$qtyOutTmp = 0;
} else {
// cas la qté restante est supérieur à la ligne d'acquisition en cours
// on soustrait du tableau la qte
if (!empty($arrayBuyCrypto['qte'])) {
//$prixEurOut = $prixEurOut + $arrayBuyCrypto['prixEuro'];
// on remet à 0 la qté du 1er achat entré
$this->logAcquisitionAvant2019('Suppression de ' . $arrayBuyCrypto['qte'] . ' ' . $deviseOut->getCode() . ' de l\'acquisition ' . $i . PHP_EOL);
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i]['qte'] = 0;
$this->logAcquisitionAvant2019(print_r($this->arrayAcquisitionBefore2019[$deviseOut->getCode()], true));
// cumul prix acquisition par crypto
$cumulAcquisitionParCryptoEURAvantEchange = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()];
$this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()] = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()] - $arrayBuyCrypto['prixEuro'];
$this->explicationAcquisitionAvant2019[$deviseOut->getCode()][$dateTime->format('Y-m-d H:i:s')][] = [
'dateTime' => $dateTime,
'oldQte' => $arrayBuyCrypto['qte'],
'qtyOutTmp' => $arrayBuyCrypto['qte'],
'qtyIn' => '',
'newQte' => 0,
'prixUnitaireIn' => '',
// explication prix
'oldPrixEuro' => $arrayBuyCrypto['prixEuro'],
'ratioPrixEuro' => $arrayBuyCrypto['prixEuro'],
'newPrixEuro' => 0,
'cumulAcquisitionParCryptoEURAvantEchange' => $cumulAcquisitionParCryptoEURAvantEchange,
'cumulAcquisitionParCryptoEUR' => $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseOut->getCode()],
];
$qtyOutTmp = $qtyOutTmp - $arrayBuyCrypto['qte'];
$this->logAcquisitionAvant2019('il reste ' . $qtyOutTmp . ' ' . $deviseOut->getCode() . ' à soustraire par la méthode FIFO' . PHP_EOL);
}
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()] = array_values($this->arrayAcquisitionBefore2019[$deviseOut->getCode()]);
}
$i++;
}
if ($qtyOutTmp > 0) {
$this->logAcquisitionAvant2019('Vous cherchez à vendre des crypto que vous n\'avez pas : ' . $qtyOutTmp . ' ' . $deviseOut->getCode() . PHP_EOL);
}
}
// fin sortir la deviseOut du wallet par la methode FIFO
} else {
$this->logAcquisitionAvant2019('=> après 01-01-2019 00:00:00' . PHP_EOL);
}
// generer prix acquisition avant 1er janvier 2019
if ($dateTime >= new DateTime('2019-01-01 00:00:00') && empty($this->generatedAcquisitionAvant2019)) {
$this->generateAcquisitionAvant2019();
}
$doScreenShot = $this->processInLedgio($deviseIn, $qtyIn, $dateTime);
if ($dateTime >= new DateTime('2019-01-01 00:00:00') && empty($this->useGeneratedAcquisitionAvant2019)) {
$this->sommePrixAcquites = $this->totalPrixAcquisitionBefore2019;
$this->useGeneratedAcquisitionAvant2019 = true;
}
if ($dateTime >= new DateTime('2019-01-01 00:00:00')) {
if (empty($this->arrayExplicationAcquisitionEUR)) {
$this->arrayExplicationAcquisitionEUR[] = [
'dateTime' => new DateTime('2019-01-01 00:00:00'),
'augmentationPrixAcquisition' => 0,
'diminutionPrixAcquisition' => 0,
'prixAcquisitionTotal' => $this->totalPrixAcquisitionBefore2019,
'oldPrix' => '-',
'prixEuro' => '-',
'totalValueCrypto' => '-'
];
}
// echo 'toto'; echo $deviseOut->getCode();
if ($this->isFiat($deviseOut->getCode())) {
//echo 'titi';
if ($deviseOut->getCode() !== 'EUR') {
$price = $this->getPrice($deviseOut, $dateTime);
if (empty($price)) {
if ($_SERVER['SERVER_NAME'] == 'ledgio.fr') {
$this->logAcquisitionAvant2019('WARNING:' . $dateTime->format('d-m-Y') . ' : ' . $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé' . PHP_EOL);
//mail('jimmykurc@gmail.com', $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé');
}
}
$prixEuro = $qtyOut * $price;
} else {
$prixEuro = $qtyOut;
}
// echo 'toto';
$cumulAcquisitionParCryptoEURAvantEchange = $this->arrayCumulValeurTotaleAcquisitionParCryptoAcquisitionBefore2019[$deviseIn->getCode()];
$lastIndex = count($this->arrayExplicationAcquisitionEUR) - 1;
$oldPrix = $this->arrayExplicationAcquisitionEUR[$lastIndex]['prixAcquisitionTotal'];
$this->arrayExplicationAcquisitionEUR[] = [
'dateTime' => $dateTime,
'augmentationPrixAcquisition' => $prixEuro,
'diminutionPrixAcquisition' => 0,
'prixAcquisitionTotal' => $oldPrix + $prixEuro,
'cumulAcquisitionParCryptoEURAvantEchange' => $cumulAcquisitionParCryptoEURAvantEchange,
'oldPrix' => $oldPrix,
'prixEuro' => '-',
'totalValueCrypto' => '-'
];
}
if ($this->isFiat($deviseIn->getCode())) {
if ($deviseIn->getCode() !== 'EUR') {
$price = $this->getPrice($deviseIn, $dateTime);
if (empty($price)) {
if ($_SERVER['SERVER_NAME'] == 'ledgio.fr') {
$this->logAcquisitionAvant2019('WARNING:' . $dateTime->format('d-m-Y') . ' : ' . $deviseIn->getCode() . ' : prix EUR non trouvé', $deviseIn->getCode() . ' : prix EUR non trouvé' . PHP_EOL);
//mail('jimmykurc@gmail.com', $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé');
}
}
$prixEuro = $qtyIn * $price;
} else {
$prixEuro = $qtyIn;
}
$lastIndex = count($this->arrayExplicationAcquisitionEUR) - 1;
$oldPrix = $this->arrayExplicationAcquisitionEUR[$lastIndex]['prixAcquisitionTotal'];
// valeur wallet
//var_dump($this->instantWallet); exit;
$totalValueCrypto = 0;
if (!empty($this->instantWallet && is_array($this->instantWallet))) {
foreach ($this->instantWallet as $id => $arrayInfo) {
if (!empty($arrayInfo['qty'])) {
$price = $this->getPrice($arrayInfo['devise'], $dateTime);
if ($arrayInfo['qty'] < 0) {
$this->logAnnexe('!!!!! Certains achats de crypto n\'ont pas été enregistré !!!!');
} else {
$totalValueCrypto = $totalValueCrypto + $arrayInfo['qty'] * $price;
// $this->arrayValuesWalletEUR[$dateTime->format('Y-m-d H:i:s')][$arrayInfo['devise']->getCode()] = ['devise' => $arrayInfo['devise']->getCode(), 'qty' => $arrayInfo['qty'], 'unitPrice' => $price, 'total' => $arrayInfo['qty'] * $price];
$arrayCessionWalletDetail['wallet'][] = ['datetime' => $dateTime, 'devise' => $arrayInfo['devise']->getCode(), 'qty' => $arrayInfo['qty'], 'unitPrice' => $price, 'total' => $arrayInfo['qty'] * $price];
}
}
}
if (!empty($arrayCessionWalletDetail)) {
$this->arrayValuesWalletEURAcquisitionAvantAnneeImposition[] = $arrayCessionWalletDetail;
}
// if ($dateTime >= new DateTime('2019-04-08 10:20:01')) {
// var_dump($this->arrayValuesWalletEUR); exit;
// }
}
$diminutionPrixAcquisition = $oldPrix * $prixEuro / $totalValueCrypto;
$this->arrayExplicationAcquisitionEUR[] = [
'dateTime' => $dateTime,
'augmentationPrixAcquisition' => 0,
'diminutionPrixAcquisition' => $diminutionPrixAcquisition,
'prixAcquisitionTotal' => $oldPrix - $diminutionPrixAcquisition,
'oldPrix' => $oldPrix,
'prixEuro' => $prixEuro,
'totalValueCrypto' => $totalValueCrypto
];
}
}
// Evolution du wallet
if (!$this->isFiat($deviseIn->getCode())) {
if (empty($this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()])) {
$this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()] = 0;
}
if (empty($this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()])) {
$this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()] = 0;
}
$cumulInAvantTransaction = !empty($this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()]) ? $this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()]: 0;
$this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()] += $qtyIn;
$this->arrayExplicationWalletApres2019[$deviseIn->getCode()][]= [
'dateTime' => $dateTime,
'qteIn' => $qtyIn,
'cumulAvantTransaction' => $cumulInAvantTransaction,
'cumulApresTransaction' => $this->arrayExplicationWalletCumulApres2019[$deviseIn->getCode()]
];
}
if (!$this->isFiat($deviseOut->getCode())) {
if (empty($this->arrayExplicationWalletApres2019[$deviseOut->getCode()])) {
$this->arrayExplicationWalletApres2019[$deviseIn->getCode()] = [];
}
if (empty($this->arrayExplicationWalletApres2019[$deviseOut->getCode()])) {
$this->arrayExplicationWalletApres2019[$deviseOut->getCode()] = [];
}
$cumulOutAvantTransaction = !empty($this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()]) ? $this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()] : 0;
$this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()] -= $qtyOut;
$this->arrayExplicationWalletApres2019[$deviseOut->getCode()][]= [
'dateTime' => $dateTime,
'qteOut' => $qtyOut,
'cumulAvantTransaction' => $cumulOutAvantTransaction,
'cumulApresTransaction' => $this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()]
];
if (round($this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()],8) < -0.00000001) {
if (empty($this->arrayWarningWalletQte[$deviseOut->getCode()])) {
$this->arrayWarningWalletQte[$deviseOut->getCode()] = [];
}
$this->arrayWarningWalletQte[$deviseOut->getCode()][]= [
'deltaRound' => round($this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()],8),
'delta' => $this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()],
'dateTime' => $dateTime,
'qteOut' => $qtyOut,
'cumulAvantTransaction' => $cumulOutAvantTransaction,
'cumulApresTransaction' => $this->arrayExplicationWalletCumulApres2019[$deviseOut->getCode()]
];
}
}
if ($dateTime->format('Y-m-d H:i:s') == '2019-10-25 14:56:00') {
// echo 'toto';
// echo $qtyIn;
// echo $qtyOut;
// var_dump($this->isFiat($deviseOut->getCode()));
// exit;
}
if ($doScreenShot === true) {
$this->arrayTransactionsCessionFiatAnneeImposition[] = [
'deviseIn' => $deviseIn,
'qtyIn' => $qtyIn,
'deviseOut' => $deviseOut,
'qtyOut' => $qtyOut,
'datetime' => $dateTime,
'type' => $mvtType,
'exchangeName' => $exchangeName,
'tradeId' => $tradeId,
'fraisCession' => $fraisCessionEUR
];
$this->generateReportLineAfter2019($qtyIn, $dateTime, $exchangeName, $tradeId, $fraisCessionEUR, $deviseOut);
}
$this->processOutLedgio($deviseOut, abs($qtyOut), $dateTime);
}
// Début processLineLedgio2048m
protected function processLineLedgio2048m($deviseIn, $qtyIn, $deviseOut, $qtyOut, $dateTime, $mvtType, $exchangeName, $tradeId, $fraisCessionEUR = 0, $debug = false)
{
$this->logDate($dateTime->format('Y-m-d'));
$this->addLineConsolidationLedgio($dateTime->format('Y-m-d H:i:s'), $deviseIn, $qtyIn, $deviseOut, $qtyOut, $exchangeName, $tradeId);
if($debug) {
if ($dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && empty($this->wallet[$this->anneeImposition . '-01-01'])) {
$this->saveWalletDebutAnneeImposable();
}
$this->logAcquisitionAvant2019('Test - avant ou après 01-01-2019 00:00:00 ?' . PHP_EOL);
}
// Traitement avant le 1er janvier 2019
if ($dateTime < new DateTime('2019-01-01 00:00:00')) {
if($debug) {
$this->logAcquisitionAvant2019('=> avant 01-01-2019 00:00:00' . PHP_EOL);
$this->logAcquisitionAvant2019('Test - Devise In is fiat ? on l\'ajoute au wallet avant 2019' . PHP_EOL);
}
// si c'est pas du fiat en in on l'ajoute au wallet acquisition avant 2019
if (!$this->isFiat($deviseIn->getCode())) {
if($debug) {
$this->logAcquisitionAvant2019('=> Devise In n\'est pas du fiat' . PHP_EOL);
// si on n'a pas d'index correspondant à la devise on crée un tableau vide
$this->logAcquisitionAvant2019('Test - Devise In dans le wallet avant 2019 ?' . PHP_EOL);
}
if (empty($this->arrayAcquisitionBefore2019[$deviseIn->getCode()])) {
if($debug) {
$this->logAcquisitionAvant2019('=> Devise In non trouvé dans le wallet on crée une clé dans le tableau' . PHP_EOL);
}
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()] = array();
}
// on traite la devise out
// si c'est du fiat en out (achat de crypto contre du fiat)
$this->logAcquisitionAvant2019('Test - out is fiat ?' . PHP_EOL);
if ($this->isFiat($deviseOut->getCode())) {
if($debug) {
$this->logAcquisitionAvant2019('=> out is fiat' . PHP_EOL);
// si EUR sinon on calcule le fiat en EUR
$this->logAcquisitionAvant2019('Test - Is fiat out is EUR' . PHP_EOL);
}
// si on n'a pas de l'euro on convertit le fiat en euro
if ($deviseOut->getCode() !== 'EUR') {
if($debug) {
$this->logAcquisitionAvant2019('=> fiat out n\'est pas EUR' . PHP_EOL);
}
$price = $this->getPrice($deviseOut, $dateTime);
if (empty($price)) {
if($debug) {
$this->logAcquisitionAvant2019('WARNING : prix non trouvé pour ' . $deviseOut->getCode() . ' le ' . $dateTime->format('d-m-Y') . PHP_EOL);
$this->logAcquisitionAvant2019($_SERVER['SERVER_NAME'] . PHP_EOL);
$this->logAcquisitionAvant2019('WARNING:' . $dateTime->format('d-m-Y') . ' : ' . $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé' . PHP_EOL);
//mail('jimmykurc@gmail.com', $deviseOut->getCode() . ' : prix EUR non trouvé', $deviseOut->getCode() . ' : prix EUR non trouvé');
}
}
$prixEuro = $qtyOut * $price;
} else {
if($debug) {
$this->logAcquisitionAvant2019('=> fiat out est EUR' . PHP_EOL);
}
$prixEuro = $qtyOut;
}
if($debug) {
$this->logAcquisitionAvant2019('ajout de ' . $qtyIn . ' ' . $deviseIn->getCode() . ' acquis pour un total de ' . $prixEuro . 'EUR' . PHP_EOL);
}
$infosOld = [];
$infosOld[] = ['deviseReceived' => $deviseIn, 'qteReceived' => $qtyIn, 'deviseTraded' => $deviseOut, 'qteTraded' => $qtyOut, 'datetime' => $dateTime, 'exchange' => $exchangeName, 'tradeId' => $tradeId, 'fraisCessionEUR' => $fraisCessionEUR];
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()][] = [
'qteAcquisition' => $qtyIn,
'prixEURAcquisition' => $prixEuro,
'prixUnitaireEURAcquisition' => $prixEuro / $qtyIn,
'datetimeAcquisition' => $dateTime,
'qte' => $qtyIn,
'prixUnitaireEUR' => $prixEuro / $qtyIn,
'prixEuro' => $prixEuro,
'infosAchatInit' => $infosOld,
'commentaire' => '1'
];
} else {
// cas de l'echange contre crypto
if($debug) {
$this->logAcquisitionAvant2019('=> out is crypto' . PHP_EOL);
}
// Avant 2019 On prend la valeur en EUR en cas d'echange de crypto (comme si la transaction avait été faite avec des euros)
$price = $this->getPrice($deviseIn, $dateTime);
$prixEuro = $qtyIn * $price;
$this->logAcquisitionAvant2019('ajout de ' . $qtyIn . ' ' . $deviseIn->getCode() . ' valorisés pour un total de ' . $prixEuro . 'EUR' . '(' . $qtyOut . ' ' . $deviseOut->getCode() . ')' . PHP_EOL);
$infosOld = [];
$infosOld[] = ['deviseReceived' => $deviseIn, 'qteReceived' => $qtyIn, 'deviseTraded' => $deviseOut, 'qteTraded' => $qtyOut, 'datetime' => $dateTime, 'exchange' => $exchangeName, 'tradeId' => $tradeId, 'fraisCessionEUR' => $fraisCessionEUR];
$this->arrayAcquisitionBefore2019[$deviseIn->getCode()][] = [
'qteAcquisition' => $qtyIn,
'prixEURAcquisition' => $prixEuro,
'prixUnitaireEURAcquisition' => $prixEuro / $qtyIn,
'datetimeAcquisition' => $dateTime,
'qte' => $qtyIn,
'prixUnitaireEUR' => $prixEuro / $qtyIn, 'prixEuro' => $prixEuro,
'infosAchatInit' => $infosOld,
'commentaire' => '2'
];
}
// on ajoute la qte de crypto recu
}
if($debug) {
$this->logAcquisitionAvant2019('Test - Devise Out is fiat ?' . PHP_EOL);
}
// on doit sortir la deviseOut du wallet par la methode FIFO
if (!$this->isFiat($deviseOut->getCode())) {
if($debug) {
$this->logAcquisitionAvant2019('=> Devise Out is not fiat ?' . PHP_EOL);
}
// initialisation des prix et qté à sortir
// $prixEurOut = 0;
$i = 0;
$qtyOutTmp = $qtyOut;
// si on n'a pas d'index correspondant à la devise on crée un tableau vide
if($debug) {
$this->logAcquisitionAvant2019('Test - Devise Out dans le wallet avant 2019 ?' . PHP_EOL);
}
if (empty($this->arrayAcquisitionBefore2019[$deviseOut->getCode()])) {
if($debug) {
$this->logAcquisitionAvant2019('=> Devise Out non trouvé dans le wallet on crée une clé dans le tableau' . PHP_EOL);
}
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()] = array();
}
// Méthode FIFO on parcours tous les achats de crypto et on soustrait la quantité sortie
if($debug) {
$this->logAcquisitionAvant2019('WHILE - FIFO on parcours les achats de crypto et on enlève la qté sortie' . PHP_EOL);
}
//
if ($deviseIn->getCode() != 'EUR') {
$txConversion = $this->getPrice($deviseIn, $dateTime);
$priceEUR = $txConversion * $qtyIn;
} else {
$priceEUR = $qtyIn;
}
if ($priceEUR >= 5000 && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$arrayDetailPrixAchat = [];
}
$totalEURAcquisitionFIFO = 0;
while ($i < count($this->arrayAcquisitionBefore2019[$deviseOut->getCode()]) && $qtyOutTmp > 0) {
$arrayBuyCrypto = $this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i];
// si la qté sortie est inférieur à la qté d'un achat à un instant T
// on la soustrait et on s'arrete
if ($qtyOutTmp <= $arrayBuyCrypto['qte']) {
// calcul du nouveau montant total d'acquisiton en EUR
$newPrixEuro = $arrayBuyCrypto['prixEuro'] - ($qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte']);
$newQte = $arrayBuyCrypto['qte'] - $qtyOutTmp;
// detail des prix pour calculer le prix d'achat
if ($priceEUR >= 5000 && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$arrayDetailPrixAchat[] = [
'qteAcquisition' => !empty($arrayBuyCrypto['qteAcquisition']) ? $arrayBuyCrypto['qteAcquisition'] : null,
'prixEURAcquisition' => !empty($arrayBuyCrypto['prixEURAcquisition']) ? $arrayBuyCrypto['prixEURAcquisition'] : null,
'prixUnitaireEURAcquisition' => !empty($arrayBuyCrypto['prixUnitaireEURAcquisition']) ? $arrayBuyCrypto['prixUnitaireEURAcquisition'] : null,
'datetimeAcquisition' => !empty($arrayBuyCrypto['datetimeAcquisition']) ? $arrayBuyCrypto['datetimeAcquisition'] : null,
'qteCessionPartielle' => $qtyOutTmp,
'qteRestanteWallet' => $arrayBuyCrypto['qte'] - $qtyOutTmp,
'qteRestanteACeder' => 0,
'prixUnitaireEUR' => $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte'],
'infosAchatInit' => $arrayBuyCrypto['infosAchatInit'],
'diffDetention' => $dateTime->diff($arrayBuyCrypto['datetimeAcquisition']),
// 'commentaire' => '3 ' . $arrayBuyCrypto['qte']
];
// $totalEURAcquisitionFIFO += $qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte'];
$totalEURAcquisitionFIFO += $qtyOutTmp * $arrayBuyCrypto['prixUnitaireEURAcquisition'];
}
if($debug) {
$this->logAcquisitionAvant2019('Mise à jour acquisition ' . $newQte . ' ' . $deviseOut->getCode() . ' pour ' . $newPrixEuro . ' EUR' . PHP_EOL);
}
if (empty($infosOld = $this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i]['infosAchatInit'])) {
$infosOld = [];
} else {
$infosOld = $this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i]['infosAchatInit'];
}
$infosOld[] = ['deviseReceived' => $deviseIn, 'qteReceived' => $qtyIn, 'deviseTraded' => $deviseOut, 'qteTraded' => $qtyOut, 'datetime' => $dateTime, 'exchange' => $exchangeName, 'tradeId' => $tradeId, 'fraisCessionEUR' => $fraisCessionEUR];
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i] = [
'qteAcquisition' => !empty($arrayBuyCrypto['qteAcquisition']) ? $arrayBuyCrypto['qteAcquisition'] : null,
'prixEURAcquisition' => !empty($arrayBuyCrypto['prixEURAcquisition']) ? $arrayBuyCrypto['prixEURAcquisition'] : null,
'prixUnitaireEURAcquisition' => !empty($arrayBuyCrypto['prixUnitaireEURAcquisition']) ? $arrayBuyCrypto['prixUnitaireEURAcquisition'] : null,
'datetimeAcquisition' => !empty($arrayBuyCrypto['datetimeAcquisition']) ? $arrayBuyCrypto['datetimeAcquisition'] : null,
'qte' => $newQte,
'prixEuro' => $newPrixEuro,
'infosAchatInit' => $infosOld,
'commentaire' => '4'
];
if($debug) {
$this->logAcquisitionAvant2019(print_r($this->arrayAcquisitionBefore2019[$deviseOut->getCode()], true));
}
// on passe la qté restante à 0;
$qtyOutTmp = 0;
} else {
// cas la qté restante est supérieur à la ligne d'acquisition en cours
// on soustrait du tableau la qte
if (!empty($arrayBuyCrypto['qte'])) {
//$prixEurOut = $prixEurOut + $arrayBuyCrypto['prixEuro'];
// detail des prix pour calculer le prix d'achat
if ($priceEUR >= 5000 && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$arrayDetailPrixAchat[] = [
'qteAcquisition' => !empty($arrayBuyCrypto['qteAcquisition']) ? $arrayBuyCrypto['qteAcquisition'] : null,
'prixEURAcquisition' => !empty($arrayBuyCrypto['prixEURAcquisition']) ? $arrayBuyCrypto['prixEURAcquisition'] : null,
'prixUnitaireEURAcquisition' => !empty($arrayBuyCrypto['prixUnitaireEURAcquisition']) ? $arrayBuyCrypto['prixUnitaireEURAcquisition'] : null,
'datetimeAcquisition' => !empty($arrayBuyCrypto['datetimeAcquisition']) ? $arrayBuyCrypto['datetimeAcquisition'] : null,
'qteCessionPartielle' => $arrayBuyCrypto['qte'],
'qteRestanteWallet' => 0,
'qteRestanteACeder' => $qtyOutTmp - $arrayBuyCrypto['qte'],
'prixUnitaireEUR' => $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte'],
'infosAchatInit' => $arrayBuyCrypto['infosAchatInit'],
'diffDetention' => $dateTime->diff($arrayBuyCrypto['datetimeAcquisition'])
// 'commentaire' => '5 ' . $arrayBuyCrypto['qte']
];
// $totalEURAcquisitionFIFO += $qtyOutTmp * $arrayBuyCrypto['prixEuro'] / $arrayBuyCrypto['qte'];
$totalEURAcquisitionFIFO += $arrayBuyCrypto['qte'] * $arrayBuyCrypto['prixUnitaireEURAcquisition'];
}
// on remet à 0 la qté du 1er achat entré
if($debug) {
$this->logAcquisitionAvant2019('Suppression de ' . $arrayBuyCrypto['qte'] . ' ' . $deviseOut->getCode() . ' de l\'acquisition ' . $i . PHP_EOL);
}
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()][$i]['qte'] = 0;
if($debug) {
$this->logAcquisitionAvant2019(print_r($this->arrayAcquisitionBefore2019[$deviseOut->getCode()], true));
}
$qtyOutTmp = $qtyOutTmp - $arrayBuyCrypto['qte'];
if($debug) {
$this->logAcquisitionAvant2019('il reste ' . $qtyOutTmp . ' ' . $deviseOut->getCode() . ' à soustraire par la méthode FIFO' . PHP_EOL);
}
}
$this->arrayAcquisitionBefore2019[$deviseOut->getCode()] = array_values($this->arrayAcquisitionBefore2019[$deviseOut->getCode()]);
}
$i++;
}
if ($priceEUR >= 5000 && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$this->alldetailAchatParCession2048m[] = ['infosAchat' => $arrayDetailPrixAchat, 'dateCession' => $dateTime];
}
if($debug) {
if ($qtyOutTmp > 0) {
$this->logAcquisitionAvant2019('Vous cherchez à vendre des crypto que vous n\'avez pas : ' . $qtyOutTmp . ' ' . $deviseOut->getCode() . PHP_EOL);
}
}
}
// fin sortir la deviseOut du wallet par la methode FIFO
} else {
if($debug) {
$this->logAcquisitionAvant2019('=> après 01-01-2019 00:00:00' . PHP_EOL);
}
}
if (!$this->isFiat($deviseOut->getCode())) {
// on prend les transactions de plus de 5000 EUR
//$price in EUR
if ($deviseIn->getCode() != 'EUR') {
$txConversion = $this->getPrice($deviseIn, $dateTime);
$priceEUR = $txConversion * $qtyIn;
} else {
$priceEUR = $qtyIn;
}
$txConversionOut = $this->getPrice($deviseOut, $dateTime);
$priceEUROut = $txConversionOut * $qtyOut;
if (($priceEUROut >= 5000 || $priceEUR >= 5000) && $dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
// calcul la moyenne des années de détention
$nbAnneeCumul = 0;
$qteCessionPartielleCumule = 0;
if (!empty($arrayDetailPrixAchat)) {
foreach ($arrayDetailPrixAchat as $ligneDetail) {
$nbAnneeCumul += $ligneDetail['diffDetention']->y * $ligneDetail['qteCessionPartielle'];
$qteCessionPartielleCumule += $ligneDetail['qteCessionPartielle'];
}
}
$moyenneAnneeAquisition = 0;
if (!empty($qteCessionPartielleCumule)) {
$moyenneAnneeAquisition = $nbAnneeCumul / $qteCessionPartielleCumule;
}
$this->arrayTransactionsImposable2048m[] = [
'deviseIn' => $deviseIn,
'qtyIn' => $qtyIn,
'deviseOut' => $deviseOut,
'qtyOut' => $qtyOut,
'datetime' => $dateTime,
'type' => $mvtType,
'exchangeName' => $exchangeName,
'tradeId' => $tradeId,
'fraisCession' => $fraisCessionEUR,
'priceEUR' => $priceEUR,
'priceEUROut' => $priceEUROut,
'totalEURAcquisitionFIFO' => $totalEURAcquisitionFIFO,
'moyenneAnneeAquisition' => $moyenneAnneeAquisition
];
}
}
$doScreenShot = $this->processInLedgio($deviseIn, $qtyIn, $dateTime);
$this->processOutLedgio($deviseOut, abs($qtyOut), $dateTime);
// si out n'est pas du fiat
}
// Fin processLineLedgio2048m
protected function logDate($str)
{
if (!is_dir($this->ledgio_dir_base))
if (!mkdir($concurrentDirectory = $this->ledgio_dir_base, 0777, true) && !is_dir($concurrentDirectory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
}
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-log-date', $str . PHP_EOL, FILE_APPEND | LOCK_EX);
}
protected function addLineConsolidationLedgio($date, $deviseIn, $qtyIn, $deviseOut, $qtyOut, $exchangeName, $tradeId)
{
if (!is_dir($this->annexe_dir_base))
if (!mkdir($concurrentDirectory = $this->annexe_dir_base, 0777, true) && !is_dir($concurrentDirectory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
}
$str = '"' . $date . '","' . $deviseIn->getCode() . '","' . $qtyIn . '","' . $deviseOut->getCode() . '","' . $qtyOut . '","' . $exchangeName . '","' . $tradeId . '"' . PHP_EOL;
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-consolidation', $str, FILE_APPEND | LOCK_EX);
}
public function saveWalletDebutAnneeImposable()
{
if (is_file($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-wallet-debut-annee-' . $this->anneeImposition)) {
unlink($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-wallet-debut-annee-' . $this->anneeImposition);
}
$this->wallet[$this->anneeImposition . '-01-01'] = $this->instantWallet;
$this->logWalletDebutAnneeImposable('Wallet au 1er janvier ' . $this->anneeImposition . ' : ' . PHP_EOL);
foreach ($this->instantWallet as $id => $arrayWallet) {
$this->logWalletDebutAnneeImposable($arrayWallet['devise']->getCode() . ' : ' . $arrayWallet['qty'] . PHP_EOL);
}
}
protected function logWalletDebutAnneeImposable($str, $debug=false)
{
if (!$debug) {
return false;
}
if (!is_dir($this->ledgio_dir_base))
if (!mkdir($concurrentDirectory = $this->ledgio_dir_base, 0777, true) && !is_dir($concurrentDirectory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
}
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-wallet-debut-annee-' . $this->anneeImposition, $str, FILE_APPEND | LOCK_EX);
}
protected function logAcquisitionAvant2019($str, $debug=false)
{
if (!$debug) {
return false;
}
if (!is_dir($this->ledgio_dir_base)) {
if (!mkdir($concurrentDirectory = $this->ledgio_dir_base, 0777, true) && !is_dir($concurrentDirectory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
}
}
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-log-acquisition-avant-2019', $str, FILE_APPEND | LOCK_EX);
}
public function getPrice($devise, DateTime $datetime)
{
$datetimeJour = clone $datetime;
//@todo call data market
//$value = 0;
// on récupère le prix approximatif de la journée
//@todo récupérer le prix à l'heure précise
$coursDevise = $this->mapperCoursDevise->findByDeviseAndDate($devise, $datetimeJour->setTime(0, 0, 0));
//echo 'cours';
if (!empty($coursDevise)) {
return $coursDevise->coursEuro;
}
// Si pas en base getPrice via API cryptomarketcap
if (!empty($devise->getIdCMC())) {
return $this->CMCService->getPriceByIdCMC($devise->getIdCMC(), $datetimeJour);
}
if (!empty($devise->getCode())) {
$price = $this->CoinAPIService->getPriceByCode($devise->getCode(), $datetimeJour);
return $price;
}
return false;
}
protected function generateAcquisitionAvant2019()
{
//Etape 1 : détermination de la composition du portefeuille global au 1er janvier 2019
foreach ($this->arrayAcquisitionBefore2019 as $code => $arrayAcquisitionDevise) {
$qtyTmp = 0;
$valueTotaleEurTmp = 0;
if (count($this->arrayAcquisitionBefore2019[$code]) == 0) {
unset($this->arrayAcquisitionBefore2019[$code]);
}
foreach ($arrayAcquisitionDevise as $key => $acquisitionDevise) {
if ($acquisitionDevise['qte'] > 0) {
$qtyTmp = $qtyTmp + $acquisitionDevise['qte'];
$valueTotaleEurTmp = $valueTotaleEurTmp + $acquisitionDevise['prixEuro'];
} else {
unset($this->arrayAcquisitionBefore2019[$code][$key]);
if (count($this->arrayAcquisitionBefore2019[$code]) == 0) {
unset($this->arrayAcquisitionBefore2019[$code]);
}
}
}
$this->totalPrixAcquisitionBefore2019 += $valueTotaleEurTmp;
}
$this->generatedAcquisitionAvant2019 = true;
}
protected function processInLedgio($deviseIn, $qtyIn, $dateTime)
{
$dogenerateReportLineAfter2019 = false;
if (!$this->isFiat($deviseIn->getCode())) {
// var_dump($qtyIn);
$this->updateWallet($deviseIn, $qtyIn, 'in', $dateTime);
} else {
$dogenerateReportLineAfter2019 = true;
}
return $dogenerateReportLineAfter2019 === true;
}
protected function updateWallet($devise, $qty, $mvtType, $dateTime)
{
if (!array_key_exists($devise->getId(), $this->instantWallet))
$this->instantWallet[$devise->getId()] = ['devise' => $devise, 'qty' => 0];
if ($mvtType === 'in') {
$this->instantWallet[$devise->getId()]['qty'] = $this->instantWallet[$devise->getId()]['qty'] + $qty;
} else {
if ($this->instantWallet[$devise->getId()]['qty'] < $qty) {
$this->arrayCryptosComplementaryInfosFull[$devise->getId()][] = array('date' => $dateTime->format('Y-m-d'), 'qty' => abs($qty));
}
$this->instantWallet[$devise->getId()]['qty'] = $this->instantWallet[$devise->getId()]['qty'] - $qty;
}
}
protected function processOutLedgio($deviseOut, $qtyOut, $dateTime)
{
if (!$this->isFiat($deviseOut->getCode())) {
// var_dump($qtyOut);
$this->updateWallet($deviseOut, $qtyOut, 'out', $dateTime);
} else {
$this->updateInvestFiat($deviseOut, $qtyOut);
if ($dateTime >= new DateTime('2019-01-01 00:00:00')) {
$this->updateInvestFiatAfter2019($deviseOut, $qtyOut, $dateTime);
}
}
}
/*
* prix de cession net c1 - (prix d'acquisition du portefeuille c1 * prix de cession brut c1 / valeur du portefeuille juste avant c1)
* 06/09/2019 : Plus ou moins value brute = Prix de cession - (Prix total d'acquisition x Prix de cession / Valeur globale du portefeuille)
* Prix de cession = Prix cession net
*
*/
protected function updateInvestFiat($devise, $qtyInvest)
{
if (!array_key_exists($devise->getCode(), $this->investFiat)) {
$this->investFiat[$devise->getCode()] = 0;
}
$this->investFiat[$devise->getCode()] = $this->investFiat[$devise->getCode()] + $qtyInvest;
//$this->logAnnexe('nouveau montant de fiat investi dans crypto suite à achat de crypto : ' . $this->investFiat['EUR'] . ' €' . PHP_EOL);
}
protected function updateInvestFiatAfter2019($devise, $qtyInvest, $dateTime)
{
if (!array_key_exists($devise->getCode(), $this->investFiatAfter2019)) {
$this->investFiatAfter2019[$devise->getCode()] = 0;
}
$this->investFiatAfter2019[$devise->getCode()] = $this->investFiatAfter2019[$devise->getCode()] + $qtyInvest;
if ($devise->getCode() != 'EUR') {
$taux = $this->getExchangeRates($devise->getCode(), $dateTime);
$valueEUR = $qtyInvest / $taux;
} else {
$valueEUR = $qtyInvest;
}
if ($valueEUR > 0) {
$this->investFiatAfter2019Detail[] = ['datetime' => $dateTime, 'code' => $devise->getCode(), 'qte' => $qtyInvest, 'qteEUR' => $valueEUR];
}
//$this->logAnnexe('nouveau montant de fiat investi dans crypto suite à achat de crypto : ' . $this->investFiat['EUR'] . ' €' . PHP_EOL);
}
public function getExchangeRates($currency, DateTime $dateTime)
{
$urlApi = 'https://api.exchangeratesapi.io/';
// asset fsym
$urlApi .= $dateTime->format('Y-m-d');
$urlApi .= '?base=EUR';
$urlApi .= '&symbols=' . $currency;
// fetch data
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $urlApi);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$rawData = curl_exec($curl);
curl_close($curl);
$data = json_decode($rawData, true);
if (!isset($data['rates'][$currency])) {
throw new \Exception('Taux de change non trouvé.');
$price = 0;
} else {
return $data['rates'][$currency];
}
}
protected function generateReportLineAfter2019($prixCessionBrut, $dateTime, $exchangeName, $tradeId, $fraisCession = 0, $deviseOut)
{
// calcul plus value
$totalValueCrypto = 0;
// debug montant acquisition
$totalValueCryptoEntre2019EtJanvierImposition = 0;
$valeurWallet = 0;
// debug montant acquisition
$valeurWalletEntre2019etJanvierAnneeImposition = 0;
$arrayCessionWalletDetail = [];
// debug montant acquisition
$arrayCessionWalletDetailEntre2019EtJanvierImposition = [];
$arrayCessionWalletDetail['datetime'] = $dateTime;
// debug montant acquisition
$arrayCessionWalletDetailEntre2019EtJanvierImposition['datetime'] = $dateTime;
// if ($dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
//var_dump($this->instantWallet); exit;
if (!empty($this->instantWallet && is_array($this->instantWallet))) {
foreach ($this->instantWallet as $id => $arrayInfo) {
if (!empty($arrayInfo['qty'])) {
$price = $this->getPrice($arrayInfo['devise'], $dateTime);
if ($arrayInfo['qty'] < 0) {
$this->logAnnexe('!!!!! Certains achats de crypto n\'ont pas été enregistré !!!!');
} else {
// on prend la valeur de l'api (valeur moyenne) @todo prendre le prix à l'heure près
// si c'est la crypto vendu on prend la valeur de cession net
if ($arrayInfo['devise']->getCode() == $deviseOut->getCode()) {
$totalValueCrypto = $totalValueCrypto + ($prixCessionBrut-$fraisCession);
} else {
$totalValueCrypto = $totalValueCrypto + $arrayInfo['qty'] * $price;
}
// $this->arrayValuesWalletEUR[$dateTime->format('Y-m-d H:i:s')][$arrayInfo['devise']->getCode()] = ['devise' => $arrayInfo['devise']->getCode(), 'qty' => $arrayInfo['qty'], 'unitPrice' => $price, 'total' => $arrayInfo['qty'] * $price];
$arrayCessionWalletDetail['wallet'][] = ['datetime' => $dateTime, 'devise' => $arrayInfo['devise']->getCode(), 'qty' => $arrayInfo['qty'], 'unitPrice' => $price, 'total' => $arrayInfo['qty'] * $price, 'totalReel' => ($deviseOut->getCode() == $arrayInfo['devise']->getCode() ? $prixCessionBrut-$fraisCession : '')];
}
}
}
if (!empty($arrayCessionWalletDetail)) {
$this->arrayValuesWalletEUR[] = $arrayCessionWalletDetail;
}
// if ($dateTime >= new DateTime('2019-04-08 10:20:01')) {
// var_dump($this->arrayValuesWalletEUR); exit;
// }
}
$valeurWallet = $totalValueCrypto;
}
// debug montant acquisition debut
// if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime < new DateTime($this->anneeImposition . '-01-01 00:00:00')) {
//
// if (!empty($this->instantWalletEntre2019EtJanvierImposition && is_array($this->instantWalletEntre2019EtJanvierImposition))) {
// foreach ($this->instantWalletEntre2019EtJanvierImposition as $id => $arrayInfoEntre2019EtJanvierImposition) {
// if (!empty($arrayInfoEntre2019EtJanvierImposition['qty'])) {
// $priceEntre2019EtJanvierImposition = $this->getPrice($arrayInfoEntre2019EtJanvierImposition['devise'], $dateTime);
//
// if ($arrayInfoEntre2019EtJanvierImposition['qty'] < 0) {
// $this->logAnnexe('!!!!! Certains achats de crypto n\'ont pas été enregistré !!!!');
// } else {
// $totalValueCryptoEntre2019EtJanvierImposition = $totalValueCryptoEntre2019EtJanvierImposition + $arrayInfoEntre2019EtJanvierImposition['qty'] * $priceEntre2019EtJanvierImposition;
//
//// $this->arrayValuesWalletEUR[$dateTime->format('Y-m-d H:i:s')][$arrayInfo['devise']->getCode()] = ['devise' => $arrayInfo['devise']->getCode(), 'qty' => $arrayInfo['qty'], 'unitPrice' => $price, 'total' => $arrayInfo['qty'] * $price];
// $arrayCessionWalletDetailEntre2019EtJanvierImposition['wallet'][] = ['datetime' => $dateTime, 'devise' => $arrayInfoEntre2019EtJanvierImposition['devise']->getCode(), 'qty' => $arrayInfoEntre2019EtJanvierImposition['qty'], 'unitPrice' => $priceEntre2019EtJanvierImposition, 'total' => $arrayInfoEntre2019EtJanvierImposition['qty'] * $priceEntre2019EtJanvierImposition];
// }
// }
// }
// if (!empty($arrayCessionWalletDetail)) {
// $this->arrayValuesWalletEUREntre2019EtJanvierImposition[] = $arrayCessionWalletDetailEntre2019EtJanvierImposition;
// }
//
// }
//
//
// $valeurWalletEntre2019etJanvierAnneeImposition = $totalValueCryptoEntre2019EtJanvierImposition;
//
// }
// debug montant acquisition fin
$acquisitionFiatDepuisDerniereCession = 0;
// debug montant acquisition
$acquisitionFiatDepuisDerniereCessionEntre2019etJanvierAnneeImposition = 0;
/* Calcul investissement en EUR */
if (!empty($this->investFiatAfter2019)) {
$detailArrayAcquisitionFiatDepuisDerniereCession = [];
foreach ($this->investFiatAfter2019 as $code => $qte) {
if ($code != 'EUR') {
$taux = $this->getExchangeRates($code, $dateTime);
$acquisitionFiatDepuisDerniereCession += $qte / $taux;
$detailArrayAcquisitionFiatDepuisDerniereCession[] = [
'dateTime' => $dateTime,
'code' => $code,
'qte' => $qte,
'fiat' => $qte / $taux,
'cumulFiat' => $acquisitionFiatDepuisDerniereCession
];
// debug montant acquisition
$acquisitionFiatDepuisDerniereCessionEntre2019etJanvierAnneeImposition += $qte / $taux;
} else {
$acquisitionFiatDepuisDerniereCession += $qte;
$detailArrayAcquisitionFiatDepuisDerniereCession[] = [
'dateTime' => $dateTime,
'code' => $code,
'qte' => $qte,
'fiat' => $qte,
'cumulFiat' => $acquisitionFiatDepuisDerniereCession
];
// debug montant acquisition
$acquisitionFiatDepuisDerniereCessionEntre2019etJanvierAnneeImposition += $qte;
}
$this->investFiat[$code] = 0;
// debug montant acquisition
$this->investFiatEntre2019etJanvierAnneeImposition[$code] = 0;
$this->investFiatAfter2019[$code] = 0;
}
if (!empty($detailArrayAcquisitionFiatDepuisDerniereCession) && sizeof($detailArrayAcquisitionFiatDepuisDerniereCession) > 0) {
$this->detailArrayAcquisitionFiatDepuisDerniereCession[$dateTime->format('Y-m-d H:i:s')] = $detailArrayAcquisitionFiatDepuisDerniereCession;
}
}
// on initialise sommePrixAcquites pour le 1er janvier 2019
if ($dateTime > new DateTime('2019-01-01 00:00:00') && empty($this->useGeneratedAcquisitionAvant2019)) {
$this->sommePrixAcquites = $this->totalPrixAcquisitionBefore2019;
// debug montant acquisition
$this->sommePrixAcquitesEntre2019etJanvierAnneeImposition = $this->totalPrixAcquisitionBefore2019;
echo 'sommePrixAcquites : ' . $this->sommePrixAcquites;
echo 'sommePrixAcquitesEntre2019etJanvierAnneeImposition : ' . $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition;
$this->useGeneratedAcquisitionAvant2019 = true;
}
// if ($dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$this->arrayAcquisitionFiatAvantDateCession[$dateTime->format('d-m-Y H:i:s')][] = ['totalEUR' => $acquisitionFiatDepuisDerniereCession, 'datetime' => $dateTime];
$oldSommePrixAcquites = $this->sommePrixAcquites;
$this->sommePrixAcquites = $this->sommePrixAcquites + $acquisitionFiatDepuisDerniereCession;
// Prix de cession BOFIP est le prix de cession net
$prixCession = $prixCessionBrut - $fraisCession;
$sommeFractionsInitialesCapital = $this->sommeFractionsInitialesCapital;
$prixTotalAcquisition = $this->sommePrixAcquites - $sommeFractionsInitialesCapital;
// echo $dateTime->format('Y-m-d');
// var_dump($this->sommePrixAcquites);
// var_dump($sommeFractionsInitialesCapital);
// var_dump($prixTotalAcquisition);
//
// echo '-------';
$plusOuMoinsValue = $this->calculPlusValueCession($prixCession, $prixTotalAcquisition, $prixCessionBrut, $valeurWallet);
$this->explanationPrixTotalAcquisition[] = [
'dateTime' => $dateTime,
'oldSommePrixAcquites' => $oldSommePrixAcquites,
'acquisitionFiatDepuisDerniereCession' => $acquisitionFiatDepuisDerniereCession,
'sommePrixAcquites' => $this->sommePrixAcquites,
'sommeFractionsInitialesCapital' => $sommeFractionsInitialesCapital,
'plusOuMoinsValue' => $plusOuMoinsValue,
'prixCession' => $prixCession,
'prixTotalAcquisition' => $prixTotalAcquisition
];
$this->sommeFractionsInitialesCapital = $this->sommeFractionsInitialesCapital + $prixCession - $plusOuMoinsValue;
$this->investFiat = [];
$this->investFiatAfter2019 = [];
}
// debug montant acquisition debut
// if($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
//
//
// $this->arrayAcquisitionFiatAvantDateCessionEntre2019etJanvierAnneeImposition[$dateTime->format('d-m-Y H:i:s')][] = ['totalEUR' => $acquisitionFiatDepuisDerniereCessionEntre2019etJanvierAnneeImposition, 'datetime' => $dateTime];
// $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition = $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition + $acquisitionFiatDepuisDerniereCessionEntre2019etJanvierAnneeImposition;
//
// $prixCessionBrutEntre2019etJanvierAnneeImposition = $prixCessionBrut;
// $fraisCessionEntre2019etJanvierAnneeImposition = $fraisCession;
// // Prix de cession BOFIP est le prix de cession net
// $prixCessionEntre2019etJanvierAnneeImposition = $prixCessionBrutEntre2019etJanvierAnneeImposition - $fraisCessionEntre2019etJanvierAnneeImposition;
// $sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition = $this->sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition;
// $prixTotalAcquisitionEntre2019etJanvierAnneeImposition = $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition - $sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition;
// $plusOuMoinsValueEntre2019etJanvierAnneeImposition = $this->calculPlusValueCession($prixCessionEntre2019etJanvierAnneeImposition, $prixTotalAcquisitionEntre2019etJanvierAnneeImposition, $prixCessionBrutEntre2019etJanvierAnneeImposition, $valeurWalletEntre2019etJanvierAnneeImposition);
// $this->sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition = $this->sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition + $prixCessionEntre2019etJanvierAnneeImposition - $plusOuMoinsValueEntre2019etJanvierAnneeImposition;
// $this->investFiatEntre2019etJanvierAnneeImposition = [];
// $this->investFiatAfter2019Entre2019etJanvierAnneeImposition = [];
//
//
// }
// debug montant acquisition fin
// calcul prix acquisition entre 2019 et le 1er janvier de l'année d'imposition
// if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-01-01 00:00:00')) {
// $prixCessionBrutEntre2019EtJanvierImposition = $prixCessionBrut;
//
// $this->arrayAcquisitionFiatEntre2019EtJanvierImposition[$dateTime->format('d-m-Y H:i:s')][] = ['totalEUR' => $acquisitionFiatDepuisDerniereCessionEntre2019EtJanvierAnneeImposition, 'datetime' => $dateTime];
// $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition = $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition + $acquisitionFiatDepuisDerniereCessionEntre2019EtJanvierAnneeImposition;
//
//
// // Prix de cession BOFIP est le prix de cession net
// $prixCessionEntre2019EtJanvierImposition = $prixCessionBrut - $fraisCession;
// $sommeFractionsInitialesCapitalEntre2019EtJanvierAnneeImposition = $this->sommeFractionsInitialesCapitalEntre2019EtJanvierAnneeImposition;
// $prixTotalAcquisitionEntre2019EtJanvierImposition = $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition - $sommeFractionsInitialesCapitalEntre2019EtJanvierAnneeImposition;
// $plusOuMoinsValueEntre2019EtJanvierImposition = $this->calculPlusValueCession($prixCessionEntre2019EtJanvierImposition, $prixTotalAcquisitionEntre2019EtJanvierImposition, $prixCessionBrutEntre2019EtJanvierImposition, $valeurWalletEntre2019EtJanvierImposition);
// $this->sommeFractionsInitialesCapitalEntre2019EtJanvierAnneeImposition = $this->sommeFractionsInitialesCapitalEntre2019EtJanvierAnneeImposition + $prixCessionEntre2019EtJanvierImposition - $plusOuMoinsValueEntre2019EtJanvierImposition;
// $this->investFiatEntre2019EtJanvierImposition = [];
// $this->investFiatAfter2019Entre2019EtJanvierImposition = [];
//
// }
/*
// plusoumoinsvalue = prix de cession net - (prix d'acquisition du portefeuille * prix de cession brut / valeur du portefeuille)
// prix de cession net - (prix d'acquisition du portefeuille * prix de cession brut / valeur du portefeuille)
// prix d'acquisition du portefeuille se revalorise à chaque vente
// lors de cession n° 2 = prix d'acquisition du portefeuille cession 1 + acquisitions fiat posterieur à cession - valeur nominale incluse dans la cession 1
// valeur nominale incluse dans cession 1 = prix de cession net c1 - plusvalue c1
Cession 2 :
plusoumoinsvalue c2 = prix de cession net c2 - (prix d'acquisition du portefeuille c2 * prix de cession brute c2 / valeur du portefeuille juste avant c2)
prix d'acquisition du portefeuille c2 = prix d'acquisition du portefeuille c1 + acquisition fiat apres c1 - valeure nominale de la cession c1
valeure nominale de la cession c1 = prix cession net c1 - plusoumoinvalue c1
// 07-04-2019
Example
cession 1 : 07-04-2019
plusoumoinsvalue c1 = prix de cession net c1 - (prix d'acquisition du portefeuille c1 * prix de cession brut c1 / valeur du portefeuille juste avant c1)
4800 - 10 - (prix d'acquisition du portefeuille c1 * 4800) / 9600)
plusoumoinsvalue = 4800 - 10 - (7100 * 4800) / 9600)
= 4790 - 3550 = 1240
prix d'acquisition du portefeuille c1 = prix d'acquisition du portefeuille 01/01/2019 + acquisition fiat post au 1 janvier - valeur nominale 1 janvier
0 + 7100 - 0
cession 2 : 10-05-2019
plusoumoinsvalue c2 = prix de cession net c2 - (prix d'acquisition du portefeuille c2 * prix de cession brut c2 / valeur du portefeuille juste avant c2)
7500 - 10 - (prix d'acquisition du portefeuille c2 * 7500) / 7500)
plusoumoinsvalue = 7490 - (3550 * 7500) / 7500)
= 7490 - 3550
= 3940
prix d'acquisition du portefeuille c2 = prix d'acquisition du portefeuille c1 + acquisition fiat depuis c1 - valeur nominale c1
prix d'acquisition du portefeuille c2 = 7100 + 0 - (prix cession net c1 - plusoumoinvalue c1)
(4790 - 1240)
(3550)
prix d'acquisition du portefeuille c2 = 3550
Colonnes du tableau :
Date de la cession fiat
Prix de cession brut
Frais de cession
Prix d'acquisition c-1
Acquisition fiat depuis c-1
Valeur nominale c-1
Valeur du portefeuille juste avant c
Plus ou moins value
*/
if ($dateTime >= new DateTime($this->anneeImposition . '-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
//if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime <= new DateTime($this->anneeImposition . '-12-31 23:59:59')) {
$this->plusValue = $this->plusValue + $plusOuMoinsValue;
// echo 'total';
$this->arrayRapportAnnexePrincipale[] = new \Application\Entity\RowReport([
'dateCession' => $dateTime,
'prixCessionBrut' => $prixCessionBrut,
'fraisCession' => $fraisCession,
'prixCession' => $prixCessionBrut - $fraisCession,
'sommePrixAcquites' => $this->sommePrixAcquites,
'sommeFractionsInitialesCapital' => $sommeFractionsInitialesCapital,
'prixTotalAcquisition' => $prixTotalAcquisition,
//'prixAcquisitionDerniereCession' => $prixAcquisitionDerniereCession,
//'acquisitionFiatDepuisDerniereCession' => $acquisitionFiatDepuisDerniereCession,
//'valeurNominaleDerniereCession' => $valeurNominaleDerniereCession,
'valeurPortefeuille' => $valeurWallet,
'plusOuMoinsValue' => $plusOuMoinsValue
]);
}
// debug montant acquisition debut
// if ($dateTime >= new DateTime('2019-01-01 00:00:00') && $dateTime < new DateTime($this->anneeImposition . '-01-01 00:00:00')) {
//
//
// $this->plusValueEntre2019etJanvierAnneeImposition = $this->plusValueEntre2019etJanvierAnneeImposition + $plusOuMoinsValueEntre2019etJanvierAnneeImposition;
//
// $this->arrayRapportAnnexePrincipaleEntre2019etJanvierAnneeImposition[] = new \Application\Entity\RowReport([
// 'dateCession' => $dateTime,
// 'prixCessionBrut' => $prixCessionBrutEntre2019etJanvierAnneeImposition,
// 'fraisCession' => $fraisCessionEntre2019etJanvierAnneeImposition,
// 'prixCession' => $prixCessionBrutEntre2019etJanvierAnneeImposition - $fraisCessionEntre2019etJanvierAnneeImposition,
// 'sommePrixAcquites' => $this->sommePrixAcquitesEntre2019etJanvierAnneeImposition,
// 'sommeFractionsInitialesCapital' => $sommeFractionsInitialesCapitalEntre2019etJanvierAnneeImposition,
// 'prixTotalAcquisition' => $prixTotalAcquisitionEntre2019etJanvierAnneeImposition,
// //'prixAcquisitionDerniereCession' => $prixAcquisitionDerniereCession,
// //'acquisitionFiatDepuisDerniereCession' => $acquisitionFiatDepuisDerniereCession,
// //'valeurNominaleDerniereCession' => $valeurNominaleDerniereCession,
// 'valeurPortefeuille' => $valeurWalletEntre2019etJanvierAnneeImposition,
// 'plusOuMoinsValue' => $plusOuMoinsValueEntre2019etJanvierAnneeImposition
// ]);
//
//
//
// }
// if {
// // calcul du prix d'acquisition
// // si prix acquisition
// }
// recupération de la dernière valeur du total d'acquisition de l'année
// if ($dateTime <= new DateTime($this->anneeImposition . '-01-01 00:00:00')) {
// $this->totalPrixAcquisitionPremierJanvierAnneeImposition = $prixTotalAcquisition;
// }
// debug montant acquisition fin
}
protected function logAnnexe($str)
{
if (!is_dir($this->annexe_dir_base)) {
if (!mkdir($concurrentDirectory = $this->annexe_dir_base, 0777, true) && !is_dir($concurrentDirectory)) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory));
}
}
file_put_contents($this->annexe_dir_base . $this->tokenLedgio, $str, FILE_APPEND | LOCK_EX);
}
protected function calculPlusValueCession($prixCession, $prixAcquisition, $prixCessionBrut, $valeurWallet)
{
if ($valeurWallet != 0) {
return $prixCession - ($prixAcquisition * $prixCessionBrut / $valeurWallet);
}
}
public function getArrayCryptosComplementaryInfosFull()
{
return $this->arrayCryptosComplementaryInfosFull;
}
public function genererPlusValueReport()
{
$this->logPlusValueReport('_____________________________________________________________________________' . PHP_EOL);
$this->logPlusValueReport('Résumé : ' . PHP_EOL);
$this->logPlusValueReport('Plus value totale à déclarer : ' . $this->plusValue . PHP_EOL);
$this->logPlusValueReport('Wallet actuel : ' . print_r($this->instantWallet, true) . PHP_EOL);
//$this->logPlusValueReport('Montant investi : ' . $this->investFiat['EUR'] . PHP_EOL);
$this->logPlusValueReport('____________________________________________________________________________' . PHP_EOL);
}
protected function logPlusValueReport($str)
{
if (!is_dir($this->ledgio_dir_base))
mkdir($this->ledgio_dir_base, 0777, true);
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-plus-value', $str, FILE_APPEND | LOCK_EX);
}
protected function logAnnexe1PlusValueReport($str)
{
if (!is_dir($this->ledgio_dir_base))
mkdir($this->ledgio_dir_base, 0777, true);
file_put_contents($this->ledgio_dir_base . $this->tokenLedgio . '/output/' . $this->tokenLedgio . '-annexe-1-plus-value', $str, FILE_APPEND | LOCK_EX);
}
}