mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-19 12:04:21 -08:00
Add half-year convention in depreciation for Models/Depreciable.php
This commit is contained in:
parent
2d0df24ef3
commit
49ecc08398
|
@ -60,6 +60,64 @@ class Depreciable extends SnipeModel
|
|||
return $current_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param onlyHalfFirstYear Boolean always applied only second half of the first year
|
||||
* @return float|int
|
||||
*/
|
||||
public function getHalfYearDepreciatedValue($onlyHalfFirstYear = false)
|
||||
{
|
||||
// @link http://www.php.net/manual/en/class.dateinterval.php
|
||||
$current_date = $this->getDateTime();
|
||||
$purchase_date = date_create($this->purchase_date);
|
||||
$currentYear = $this->get_fiscal_year( $current_date );
|
||||
$purchaseYear = $this->get_fiscal_year( $purchase_date );
|
||||
$yearsPast = $currentYear - $purchaseYear;
|
||||
$deprecationYears = ceil($this->get_depreciation()->months / 12);
|
||||
if( $onlyHalfFirstYear ) {
|
||||
$yearsPast -= 0.5;
|
||||
}
|
||||
else {
|
||||
if( !$this->is_first_half_of_year($purchase_date) ) {
|
||||
$yearsPast -= 0.5;
|
||||
}
|
||||
}
|
||||
if( !$this->is_first_half_of_year($current_date) ) {
|
||||
$yearsPast += 0.5;
|
||||
}
|
||||
|
||||
if($yearsPast >= $deprecationYears) {
|
||||
$yearsPast = $deprecationYears;
|
||||
}
|
||||
else if($yearsPast < 0) {
|
||||
$yearsPast = 0;
|
||||
}
|
||||
return $yearsPast / $deprecationYears * $this->purchase_cost;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTime $date
|
||||
* @return int
|
||||
*/
|
||||
protected function get_fiscal_year($date) {
|
||||
$year = intval($date->format('Y'));
|
||||
// also, maybe it'll have to set fiscal year date
|
||||
if($date->format('nj') === '1231') {
|
||||
return $year;
|
||||
}
|
||||
else {
|
||||
return $year - 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTime $date
|
||||
* @return bool
|
||||
*/
|
||||
protected function is_first_half_of_year($date) {
|
||||
$date0m0d = intval($date->format('md'));
|
||||
return ($date0m0d < 601) || ($date0m0d >= 1231);
|
||||
}
|
||||
|
||||
public function time_until_depreciated()
|
||||
{
|
||||
// @link http://www.php.net/manual/en/class.datetime.php
|
||||
|
@ -81,4 +139,10 @@ class Depreciable extends SnipeModel
|
|||
date_add($date, date_interval_create_from_date_string($this->get_depreciation()->months . ' months'));
|
||||
return $date; //date_format($date, 'Y-m-d'); //don't bake-in format, for internationalization
|
||||
}
|
||||
|
||||
// it's necessary for unit tests
|
||||
protected function getDateTime($time = null)
|
||||
{
|
||||
return new \DateTime($time);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue