5 * Copyright 2017, Stéphane-Eymeric Bredthauer - TrivialDev
7 * This file is part of FusionForge. FusionForge is free software;
8 * you can redistribute it and/or modify it under the terms of the
9 * GNU General Public License as published by the Free Software
10 * Foundation; either version 2 of the Licence, or (at your option)
13 * FusionForge is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License along
19 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 require_once $gfcommon.'include/FFError.class.php';
24 require_once $gfcommon.'tracker/EffortUnitFactory.class.php';
26 class Effort extends FFError {
34 * @var EffortUnit Effort Unit
39 * Effort - Effort object constructor
44 function __construct($value,$effortUnit) {
45 parent::__construct();
47 $this->value = $value;
48 $this->effortUnit = $effortUnit;
53 function getEffortUnit(){
54 return $this->effortUnit;
61 function add(Effort $effort) {
62 $thisFactor = $this->getEffortUnit()->getConversionFactorForBaseUnit();
63 $effortFactor = $effort->getEffortUnit()->getConversionFactorForBaseUnit();
64 $add = $this->value*$thisFactor+ $effort->getValue()*$effortFactor;
65 if ($thisFactor >= $effortFactor) {
66 $unit = $this->getEffortUnit();
68 $unit = $effort->getEffortUnit();
70 if ($add % $unit->getConversionFactorForBaseUnit() != 0) {
71 $effortUnitSet = $effort->getEffortUnit()->getEffortUnitSet();
72 $effortUnitFactory = new EffortUnitFactory($effortUnitSet);
73 $unitsObj = $effortUnitFactory->getUnits();
75 foreach ($unitsObj as $unitObj) {
76 $unitFactor = $unitObj->getConversionFactorForBaseUnit();
77 if ($unitFactor> $maxFactor && $add % $unitFactor== 0) {
78 $maxFactor = $thisFactor;
83 return new Effort($add/$unit->getConversionFactorForBaseUnit(), $unit);
86 function sub(Effort $effort) {
87 $thisFactor = $this->getEffortUnit()->getConversionFactorForBaseUnit();
88 $effortFactor = $effort->getEffortUnit()->getConversionFactorForBaseUnit();
89 $sub = $this->value*$thisFactor - $effort->getValue()*$effortFactor;
90 if ($thisFactor >= $effortFactor) {
91 $unit = $this->getEffortUnit();
93 $unit = $effort->getEffortUnit();
95 if ($sub% $unit->getConversionFactorForBaseUnit() != 0) {
96 $effortUnitSet = $effort->getEffortUnit()->getEffortUnitSet();
97 $effortUnitFactory = new EffortUnitFactory($effortUnitSet);
98 $unitsObj = $effortUnitFactory->getUnits();
100 foreach ($unitsObj as $unitObj) {
101 $unitFactor = $unitObj->getConversionFactorForBaseUnit();
102 if ($unitFactor> $maxFactor && $sub % $unitFactor== 0) {
103 $maxFactor = $thisFactor;
108 return new Effort($sub/$unit->getConversionFactorForBaseUnit(), $unit);
110 function toEncoded() {
111 return $this->value*$this->effortUnit->getConversionFactorForBaseUnit().'U'.$this->effortUnit->getID();
115 function encodedEffortToEffort($encoded) {
116 if (preg_match('/^(\d+)U(\d+)$/',$encoded,$matches)) {
117 $unit = getEffortUnitById($matches[2]);
118 $value = intval(intval($matches[1])/$unit->getConversionFactorForBaseUnit());
119 $effort = new Effort($value, $unit);