diff --git a/app/Http/Transformers/DepreciationsTransformer.php b/app/Http/Transformers/DepreciationsTransformer.php index fe63aca69..717568f02 100644 --- a/app/Http/Transformers/DepreciationsTransformer.php +++ b/app/Http/Transformers/DepreciationsTransformer.php @@ -3,6 +3,7 @@ namespace App\Http\Transformers; use App\Helpers\Helper; +use App\Models\Depreciable; use App\Models\Depreciation; use Gate; use Illuminate\Database\Eloquent\Collection; @@ -19,13 +20,14 @@ class DepreciationsTransformer return (new DatatablesTransformer)->transformDatatables($array, $total); } - public function transformDepreciation(Depreciation $depreciation) + public function transformDepreciation(Depreciation $depreciation, Depreciable $monthly_depreciation) { $array = [ 'id' => (int) $depreciation->id, 'name' => e($depreciation->name), 'months' => $depreciation->months.' '.trans('general.months'), 'depreciation_min' => $depreciation->depreciation_min, + 'monthly_depreciation' => $monthly_depreciation->getMonthlyDepreciation(), 'created_at' => Helper::getFormattedDateObject($depreciation->created_at, 'datetime'), 'updated_at' => Helper::getFormattedDateObject($depreciation->updated_at, 'datetime') ]; diff --git a/app/Models/Depreciable.php b/app/Models/Depreciable.php index 0f3f73aa3..20a28af40 100644 --- a/app/Models/Depreciable.php +++ b/app/Models/Depreciable.php @@ -68,21 +68,33 @@ class Depreciable extends SnipeModel */ public function getLinearDepreciatedValue() // TODO - for testing it might be nice to have an optional $relative_to param here, defaulted to 'now' { - $months_remaining = $this->time_until_depreciated()->m + 12 * $this->time_until_depreciated()->y; //UGlY + $months_passed = $this->purchase_date->diff(now())->m; - $current_value = round(($months_remaining / $this->get_depreciation()->months) * $this->purchase_cost, 2); + if($months_passed >= $this->get_depreciation()->months){ + //if there is a floor use it + if($this->get_depreciation()->deprecation_min->isNotEmpty()) { - if($this->get_depreciation()->depreciation_min > $current_value) { + $current_value = $this->get_depreciation()->depreciation_min; - $current_value=round($this->get_depreciation()->depreciation_min,2); + }else{ + $current_value = 0; + } } - if ($current_value < 0) { - $current_value = 0; + else { + // The equation here is (Purchase_Cost-Floor_min)*(Months_passed/Months_til_depreciated) + $current_value = round(($this->purchase_cost-($this->purchase_cost - ($this->get_depreciation()->depreciation_min)) * ($months_passed / $this->get_depreciation()->months)), 2); + } return $current_value; } + public function getMonthlyDepreciation(){ + + return ($this->purchase_cost-$this->get_depreciation()->depreciation_min)/$this->get_depreciation()->months; + + } + /** * @param onlyHalfFirstYear Boolean always applied only second half of the first year * @return float|int