예제 #1
0
 public function getLatestResidalValue($operationList)
 {
     //dd($operationList->type(9)->orderBy('date', 'desc')->first()->value); // 9 : Residual Value
     $to_share_id = $operationList->first()->to_share_id;
     $latestShareValue = $operationList->type(9)->orderBy('date', 'desc')->first();
     if (!$latestShareValue) {
         //il n'y a pas d'enregistrement opertaion 'ResidualValue' dans la collection. //on va chercher la derniere qu'on a en bdd pour le tosharID
         return Operation::where('to_share_id', $to_share_id)->where('type_id', 9)->orderBy('date', 'desc')->first();
     }
     return $latestShareValue;
     // else {
     // }
     // $baseClass = Currency::EUR;
     //
     //
     // if ($toShare->currency->id == $fromShare->currency->id) {
     // 	$currencyRate=1;
     // }else {
     // 	if ($toShare->currency->id == 2) {
     // 		$baseClass = Currency::USD;
     // 	}else{
     //
     // 	}
     // 	$currencyRate = Exchange::base($baseClass) ->historical($latestShareValue->dateval) ->get()['EUR'];
     // }
     // return $currencyRate;
 }
예제 #2
0
 public function get_indirectholdinglist()
 {
     $toReturn = collect();
     $operations = Operation::groupBy('to_share_id')->get();
     foreach ($operations as $operation) {
         $row = collect();
         // if ($operation->to_share_id!=10) { //just for test
         //     continue;
         // }
         $share = $operation->toShareId;
         $commitmentsSum = Operation::where('to_share_id', $operation->to_share_id)->sum('commitment');
         $row->put('commitmentsSum', $commitmentsSum);
         $realizedValue = Operation::where('to_share_id', $operation->to_share_id)->where('cash_transfert', '>', 0)->sum('cash_transfert');
         $row->put('realizedValue', $realizedValue);
         $amountCalled = Operation::where('to_share_id', $operation->to_share_id)->where('cash_transfert', '<', 0)->sum('cash_transfert');
         $row->put('amountCalled', $amountCalled);
         // Unrealised //
         //Unrealised Value = somme des number of shares ($shareSum) * derniere valorisation de l'action($latestShareValue)
         $shareSum = Operation::where('to_share_id', $operation->to_share_id)->sum('number_of_shares');
         $latestShareValue = ShareValuation::where('share_id', $operation->to_share_id)->orderBy('dateval', 'desc')->first();
         if (isset($latestShareValue->value)) {
             //echo $latestShareValue->value;
             $Unrealised_value = $shareSum * $latestShareValue->value;
         } else {
             $Unrealised_value = null;
         }
         $row->put('Unrealised_value', $Unrealised_value);
         $totalValue = $realizedValue + $Unrealised_value;
         $row->put('totalValue', $totalValue);
         if (abs($amountCalled) > 0) {
             $dpi = $realizedValue / abs($amountCalled);
         } else {
             $dpi = null;
         }
         $row->put('DPI', $dpi);
         if (abs($amountCalled) > 0) {
             $rvpi = $Unrealised_value / abs($amountCalled);
         } else {
             $rvpi = null;
         }
         $row->put('RVPI', $rvpi);
         if (abs($amountCalled) > 0) {
             $tvpi = $totalValue / abs($amountCalled);
         } else {
             $tvpi = null;
         }
         $row->put('TVPI', $tvpi);
         //  XIRR //
         //cash_transfert avec date // unrealized avec date de unrealized (dateval) (appliquer finction excel)
         //le premier cash transfert est negatif
         //la dernier value : share value (dernier valeur de l'action)
         $amountSerie = collect();
         $serie = Operation::where('to_share_id', $operation->to_share_id)->orderBy('date', 'asc')->get();
         foreach ($serie as $cash) {
             $amountSerie->push($cash->cash_transfert);
         }
         $dateSerie = collect();
         foreach ($serie as $cash) {
             $dateSerie->push($cash->date);
         }
         if (isset($latestShareValue->dateval)) {
             $dateSerie->push($latestShareValue->dateval);
         }
         $amounts = [];
         foreach ($amountSerie as $amount) {
             $amounts[] = $amount;
         }
         $dates = [];
         foreach ($dateSerie as $date) {
             $dates[] = $date->timestamp;
         }
         $financial = new \Organit\test\Financial();
         $XIRR = $financial->XIRR($amountSerie, $dateSerie, 0.1);
         $row->put('XIRR', $XIRR);
         $toReturn->push($row);
     }
     return $toReturn;
 }