コード例 #1
0
 public function get__________________old()
 {
     $toReturn = collect();
     $groupFilteredOperations = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->groupByToShareId()->filter()->get();
     //->toVehicle($vehicle)
     foreach ($groupFilteredOperations as $operationGrouped) {
         $SubRow = collect();
         foreach ($this->vehicle->shares as $share) {
             //$this->generateDirectHoldingLine()
             //$currencyRate = $this->CurrencyRate($latestShareValue->dateval);
             $toShare = Share::find($operationGrouped->to_share_id);
             $toVehicle = $toShare->vehicle;
             $SubRow->put('toVehicle', $toVehicle->id . ' - ' . $toVehicle->name);
             $SubRow->put('toshare', $toShare->id . ' ' . $toShare->name);
             // $commitmentsSum
             $operationList = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->fromShare($share)->toShare($toShare)->filter();
             $SubRow->put('commitmentsSum_operations', $operationList->get());
             // $lastDateRegisteredShareValueBorned = $this->lastDateRegisteredShareValueBorned();
             $currencyRate = $this->currencyRate($share, $toShare, $this->request->toDate);
             $commitmentsSum = $operationList->sum('commitment');
             $SubRow->put('commitmentsSum', $commitmentsSum * $currencyRate);
             $SubRow->put('commitmentsSum_calcul', $commitmentsSum . ' x ' . $currencyRate);
             $SubRow->put('commitmentsSum_formul', 'commitmentsSum x currencyRate');
             // $realizedValue
             $operationList = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->fromShare($share)->toShare($toShare)->filter();
             $realizedValueList = $operationList->where('cash_transfert', '>', 0);
             //->sum('cash_transfert');
             $SubRow->put('realizedValue_operations', $realizedValueList->get());
             $realizedValue = $realizedValueList->sum('cash_transfert');
             //->sum('cash_transfert');
             $SubRow->put('realizedValue', $realizedValue);
             // $amountCalled
             $operationList = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->fromShare($share)->toShare($toShare)->filter();
             $amountCalledList = $operationList->where('cash_transfert', '<', 0);
             $amountCalled = null;
             $amountCalled_formul = '';
             foreach ($amountCalledList->get() as $operation) {
                 $amountCalled += $operation->cash_transfert * $operation->spot_currency;
                 $amountCalled_formul .= $operation->cash_transfert . ' x ' . $operation->spot_currency . ' +';
             }
             $amountCalled_formul = rtrim($amountCalled_formul, '+');
             // prendre le spot_currendy ///////
             $SubRow->put('amountCalled_operations', $amountCalledList->get());
             // $amountCalled = $amountCalledList->sum('cash_transfert');
             $SubRow->put('amountCalled', $amountCalled);
             $SubRow->put('amountCalled_formul', $amountCalled_formul);
             // $unrealisedValue : somme des number of shares ($shareSum) * derniere valorisation de l'action($latestShareValue)
             $operationList = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->fromShare($share)->toShare($toShare)->filter();
             $latestShareValue = ShareValuation::where('share_id', $toShare->id)->orderBy('dateval', 'desc')->first();
             $shareSum = $operationList->sum('number_of_shares');
             $currencyRate = $this->currencyRate($share, $toShare, $latestShareValue->dateval);
             $unrealisedValue = isset($latestShareValue->value) ? $shareSum * $latestShareValue->value * $currencyRate : null;
             $SubRow->put('unrealisedValue', $unrealisedValue);
             $SubRow->put('unrealisedValue_details', $shareSum . ' x ' . $latestShareValue->value . ' x ' . $currencyRate);
             $SubRow->put('unrealisedValue_tooltip', 'shareSum x latestShareValue x tx change');
             // $totalValue
             $totalValue = $realizedValue + $unrealisedValue;
             $SubRow->put('totalValue', $totalValue);
             //  DPI  :: Realised Value / ammount Called
             $dpi = null;
             if (abs($amountCalled) > 0) {
                 $dpi = $realizedValue / abs($amountCalled);
             }
             $SubRow->put('DPI', $dpi);
             //  RVPI :: UnRealised Value / ammount Called
             $rvpi = null;
             if (abs($amountCalled) > 0) {
                 $rvpi = $unrealisedValue / abs($amountCalled);
             }
             $SubRow->put('RVPI', $rvpi);
             // TVPI
             $tvpi = null;
             if (abs($amountCalled) > 0) {
                 $tvpi = $totalValue / abs($amountCalled);
             }
             $SubRow->put('TVPI', $tvpi);
             //  echo "XIRR = ";
             //cash_transfert avec date // unrealized avec date de unrealized (dateval) (appliquer finction excel)
             //le premier cash transfert est negatif
             //  $serie = $operationList->get();
             $operationList = (new OperationFilter($this->request->all()))->fromVehicle($this->vehicle)->fromShare($share)->toShare($toShare)->filter()->get();
             $amountSerie = [];
             $dateSerie = [];
             foreach ($operationList as $operation) {
                 $amountSerie[] = $operation->cash_transfert * $operation->spot_currency;
                 $dateSerie[] = $operation->date->timestamp;
             }
             if (isset($latestShareValue->dateval)) {
                 ////$currencyRate = $this->currencyRate($share, $toShare, $latestShareValue->dateval);
                 $amountSerie[] = $latestShareValue->value * $currencyRate;
                 $dateSerie[] = $latestShareValue->dateval->timestamp;
             }
             $financial = new Financial();
             $XIRR = $financial->XIRR($amountSerie, $dateSerie, 0.1);
             $SubRow->put('XIRR', $XIRR);
             $toReturn->push($SubRow);
         }
         // $toReturn->push($total);
         //$toReturn->push($SubRow);
     }
     return $toReturn;
 }
コード例 #2
0
ファイル: HoldingList.php プロジェクト: thibaultvanc/organit
 public function generateDirectHoldingLine(Vehicle $vehicle = null, Share $fromShare = null, Share $toShare = null)
 {
     $SubRow = collect();
     //$toShare = Share::find($operationGrouped->to_share_id);
     $toVehicle = null;
     if ($toShare) {
         $toVehicle = $toShare->vehicle;
     }
     //$lineType =
     $lineType = $this->lineType($vehicle, $fromShare, $toShare);
     $SubRow->put('lineType', $lineType);
     $SubRow->put('fromVehicle', $vehicle);
     $SubRow->put('fromShare', $fromShare);
     $SubRow->put('toVehicle', $toVehicle);
     $SubRow->put('toShare', $toShare);
     // $commitmentsSum
     $operationList = $this->operationList($vehicle, $fromShare, $toShare);
     $SubRow->put('commitmentsSum_operations', $operationList->get());
     //to get the curtrency rate
     //1// take each operation.
     //2// 			=> take from_share cuurency && to_share cuurency
     //3// 			=> Apply the function $this->currencyRate($fromShare, $toShare, $this->request->toDate);
     //1//
     $commitmentsSum = '';
     $commitmentsSum_calcul = '';
     foreach ($operationList->get() as $operation) {
         $fromShare_item = Share::find($operation->from_share_id);
         $toShare_item = Share::find($operation->to_share_id);
         $currencyRate = $this->currencyRate($fromShare_item, $toShare_item, $this->request->toDate);
         $commitmentsSum += $operation->commitment * $currencyRate;
         $commitmentsSum_calcul .= '(' . $operation->commitment . ' * ' . $currencyRate . ') +';
     }
     $commitmentsSum_calcul = rtrim($commitmentsSum_calcul, '+');
     // $lastDateRegisteredShareValueBorned = $this->lastDateRegisteredShareValueBorned();
     // $currencyRate = $this->currencyRate($this->request->toDate);
     //$commitmentsSum= $operationList->sum('commitment');
     $SubRow->put('commitmentsSum', round($commitmentsSum, 1));
     $SubRow->put('commitmentsSum_calcul', $commitmentsSum_calcul);
     //$SubRow->put('commitmentsSum_formul','commitmentsSum x currencyRate');
     // $realizedValue
     $operationList = $this->operationList($vehicle, $fromShare, $toShare);
     $realizedValueList = $operationList->where('cash_transfert', '>', 0);
     //->sum('cash_transfert');
     $SubRow->put('realizedValue_operations', $realizedValueList->get());
     $realizedValue = $realizedValueList->sum('cash_transfert');
     //->sum('cash_transfert');
     $SubRow->put('realizedValue', round($realizedValue, 1));
     // $amountCalled
     $operationList = $this->operationList($vehicle, $fromShare, $toShare);
     $amountCalledList = $operationList->where('cash_transfert', '<', 0);
     $amountCalled = null;
     $amountCalled_formul = '';
     foreach ($amountCalledList->get() as $operation) {
         $amountCalled += $operation->cash_transfert * $operation->spot_currency;
         $amountCalled_formul .= $operation->cash_transfert . ' x ' . $operation->spot_currency . ' +';
     }
     $amountCalled_formul = rtrim($amountCalled_formul, '+');
     // prendre le spot_currendy ///////
     $SubRow->put('amountCalled_operations', $amountCalledList->get());
     // $amountCalled = $amountCalledList->sum('cash_transfert');
     $SubRow->put('amountCalled', round($amountCalled, 1));
     $SubRow->put('amountCalled_formul', $amountCalled_formul);
     /*
      **  $unrealisedValue
      */
     // $unrealisedValue : somme des number of shares ($shareSum) * derniere valorisation de l'action($latestShareValue)
     $operationList = $this->operationList($vehicle, $fromShare, $toShare);
     //ancien senario    $latestShareValue = ShareValuation::where('share_id', $toShare->id)->where('date', '<=', $this->request->toDate) ->orderBy('dateval', 'desc') ->first();
     $latestResidualValueOperation = $this->getLatestResidalValue($operationList);
     //    $unrealisedValue = $shareSum * $latestResidualValueOperation->total_valuation;
     //    $unrealisedValue = isset($latestResidualValueOperation->value)? $shareSum * $latestResidualValueOperation->total_valuation  :  null;
     //    $unrealisedValue = isset($latestShareValue->value)? $shareSum * $latestShareValue->value*$currencyRate  :  null;
     $unrealisedValue = $latestResidualValueOperation->total_valuation;
     $SubRow->put('unrealisedValue', round($unrealisedValue, 1));
     // $SubRow->put('unrealisedValue_operations',round($unrealisedValue,1));
     // $SubRow->put('unrealisedValue_details',$latestResidualValueOperation->total_valuation);
     $SubRow->put('unrealisedValue_tooltip', 'latestResidualValueOperation->total_valuation (la devise doit être deja appliquée lors de la soumission du formulaire operation typa residualVAlue)');
     // $totalValue
     $totalValue = $realizedValue + $unrealisedValue;
     $SubRow->put('totalValue', round($totalValue, 1));
     //  DPI  :: Realised Value / ammount Called
     $dpi = null;
     if (abs($amountCalled) > 0) {
         $dpi = $realizedValue / abs($amountCalled);
     }
     $SubRow->put('DPI', round($dpi, 1) . 'x');
     //  RVPI :: UnRealised Value / ammount Called
     $rvpi = null;
     if (abs($amountCalled) > 0) {
         $rvpi = $unrealisedValue / abs($amountCalled);
     }
     $SubRow->put('RVPI', round($rvpi, 1) . 'x');
     // TVPI
     $tvpi = null;
     if (abs($amountCalled) > 0) {
         $tvpi = $totalValue / abs($amountCalled);
     }
     $SubRow->put('TVPI', round($tvpi, 1) . 'x');
     //  echo "XIRR = ";
     //cash_transfert avec date // unrealized avec date de unrealized (dateval) (appliquer finction excel)
     //le premier cash transfert est negatif
     //  $serie = $operationList->get();
     $operationList = $this->operationList($vehicle, $fromShare, $toShare);
     $amountSerie = [];
     $dateSerie = [];
     foreach ($operationList->get() as $operation) {
         $amountSerie[] = $operation->cash_transfert * $operation->spot_currency;
         $dateSerie[] = $operation->date->timestamp;
     }
     if (isset($latestResidualValueOperation->date)) {
         ////$currencyRate = $this->currencyRate($share, $toShare, $latestShareValue->dateval);
         $amountSerie[] = $latestResidualValueOperation->total_valuation;
         $dateSerie[] = $latestResidualValueOperation->date->timestamp;
     }
     $financial = new Financial();
     $XIRR = $financial->XIRR($amountSerie, $dateSerie, 0.1);
     $SubRow->put('XIRR', round($XIRR * 100, 1) . '%');
     //$SubRow->put('XIRR_operations',$XIRR);
     return $SubRow;
 }