diff --git a/application/Espo/Core/Formula/Functions/DatetimeGroup/HourType.php b/application/Espo/Core/Formula/Functions/DatetimeGroup/HourType.php new file mode 100644 index 0000000000..59d3f64b1e --- /dev/null +++ b/application/Espo/Core/Formula/Functions/DatetimeGroup/HourType.php @@ -0,0 +1,67 @@ +addDependency('dateTime'); + } + + public function process(\StdClass $item) + { + if (!property_exists($item, 'value')) { + return true; + } + + if (!is_array($item->value)) { + throw new Error(); + } + + if (count($item->value) < 1) { + throw new Error(); + } + + $value = $this->evaluate($item->value[0]); + + if (empty($value)) return -1; + + if (strlen($value) > 11) { + $resultString = $this->getInjection('dateTime')->convertSystemDateTime($value, null, 'H'); + } else { + return 0; + } + + return intval($resultString); + } +} \ No newline at end of file diff --git a/application/Espo/Core/Formula/Functions/DatetimeGroup/MinuteType.php b/application/Espo/Core/Formula/Functions/DatetimeGroup/MinuteType.php new file mode 100644 index 0000000000..00201359fc --- /dev/null +++ b/application/Espo/Core/Formula/Functions/DatetimeGroup/MinuteType.php @@ -0,0 +1,67 @@ +addDependency('dateTime'); + } + + public function process(\StdClass $item) + { + if (!property_exists($item, 'value')) { + return true; + } + + if (!is_array($item->value)) { + throw new Error(); + } + + if (count($item->value) < 1) { + throw new Error(); + } + + $value = $this->evaluate($item->value[0]); + + if (empty($value)) return -1; + + if (strlen($value) > 11) { + $resultString = $this->getInjection('dateTime')->convertSystemDateTime($value, null, 'm'); + } else { + return 0; + } + + return intval($resultString); + } +} \ No newline at end of file diff --git a/tests/unit/Espo/Core/Formula/FormulaTest.php b/tests/unit/Espo/Core/Formula/FormulaTest.php index 2570597df5..e11a1ee307 100644 --- a/tests/unit/Espo/Core/Formula/FormulaTest.php +++ b/tests/unit/Espo/Core/Formula/FormulaTest.php @@ -1251,6 +1251,68 @@ class FormulaTest extends \PHPUnit_Framework_TestCase $this->assertEquals(20, $actual); } + function testDatetimeHour() + { + $item = json_decode(' + { + "type": "datetime\\\\hour", + "value": [ + { + "type": "value", + "value": "2017-10-02 14:15" + } + ] + } + '); + $actual = $this->formula->process($item); + $this->assertEquals(14, $actual); + + $item = json_decode(' + { + "type": "datetime\\\\hour", + "value": [ + { + "type": "value", + "value": "2017-10-20" + } + ] + } + '); + $actual = $this->formula->process($item); + $this->assertEquals(0, $actual); + } + + function testDatetimeMinute() + { + $item = json_decode(' + { + "type": "datetime\\\\minute", + "value": [ + { + "type": "value", + "value": "2017-10-02 14:05" + } + ] + } + '); + $actual = $this->formula->process($item); + $this->assertEquals(5, $actual); + + $item = json_decode(' + { + "type": "datetime\\\\hour", + "value": [ + { + "type": "value", + "value": "2017-10-20" + } + ] + } + '); + $actual = $this->formula->process($item); + $this->assertEquals(0, $actual); + } + function testDatetimeDayOfWeek() { $item = json_decode('