N°7145 - UI - Init Value DateTime and Date with Day Time (use OQL syntax for default value)

This commit is contained in:
Eric Espie
2025-01-09 10:49:35 +01:00
parent 0e8ddf990c
commit 886db5d6ad
3 changed files with 21 additions and 42 deletions

View File

@@ -6346,13 +6346,6 @@ class AttributeDateTime extends AttributeDBField
$oFormField = parent::MakeFormField($oObject, $oFormField); $oFormField = parent::MakeFormField($oObject, $oFormField);
// After call to the parent as it sets the current value
$oValue = $oObject->Get($this->GetCode());
if ($oValue === $this->GetNullValue()) {
$oValue = $this->GetDefaultValue($oObject);
}
$oFormField->SetCurrentValue($this->GetFormat()->Format($oValue));
return $oFormField; return $oFormField;
} }
@@ -6438,18 +6431,8 @@ class AttributeDateTime extends AttributeDBField
public function GetDefaultValue(DBObject $oHostObject = null) public function GetDefaultValue(DBObject $oHostObject = null)
{ {
$sDefaultValue = $this->Get('default_value'); $sDefaultValue = $this->Get('default_value');
if (!$this->IsNullAllowed() && utils::IsNotNullOrEmptyString($sDefaultValue)) { if (utils::IsNotNullOrEmptyString($sDefaultValue)) {
try { $oDate = new DateTimeImmutable(Expression::FromOQL($sDefaultValue)->Evaluate([]));
$oDate = new DateTimeImmutable($sDefaultValue);
}
catch (Exception $e) {
IssueLog::Error($e->getMessage(), null, [
'class' => get_class($this),
'name' => $this->GetCode(),
'stack' => $e->getTraceAsString()]);
return $this->GetNullValue();
}
return $oDate->format($this->GetInternalFormat()); return $oDate->format($this->GetInternalFormat());
} }
return $this->GetNullValue(); return $this->GetNullValue();

View File

@@ -39,7 +39,7 @@ class Event extends DBObject implements iDisplay
MetaModel::Init_Params($aParams); MetaModel::Init_Params($aParams);
//MetaModel::Init_InheritAttributes(); //MetaModel::Init_InheritAttributes();
MetaModel::Init_AddAttribute(new AttributeText("message", array("allowed_values"=>null, "sql"=>"message", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeText("message", array("allowed_values"=>null, "sql"=>"message", "default_value"=>null, "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"now", "is_null_allowed"=>false, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeDateTime("date", array("allowed_values"=>null, "sql"=>"date", "default_value"=>"NOW()", "is_null_allowed"=>false, "depends_on"=>array())));
MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array()))); MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));
// MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array()))); // MetaModel::Init_AddAttribute(new AttributeString("userinfo", array("allowed_values"=>null, "sql"=>"userinfo", "default_value"=>null, "is_null_allowed"=>true, "depends_on"=>array())));

View File

@@ -246,15 +246,12 @@ PHP
// Given // Given
$oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
self::assertNull($defaultValue, 'Empty default value for DateTime attribute should give null default value'); self::assertNull($defaultValue, 'Empty default value for DateTime attribute should give null default value');
self::assertEmpty($oField->GetCurrentValue(), 'Empty default value for DateTime attribute should give empty form field');
} }
public function testDateEmptyDefaultReturnsNullAsDefaultValue() public function testDateEmptyDefaultReturnsNullAsDefaultValue()
@@ -262,87 +259,86 @@ PHP
// Given // Given
$oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
self::assertNull($defaultValue, 'Empty default value for Date attribute should give null default value'); self::assertNull($defaultValue, 'Empty default value for Date attribute should give null default value');
self::assertEmpty($oField->GetCurrentValue(), 'Empty default value for DateTime attribute should give empty form field');
} }
public function testDateTimeNowAsDefaultGivesCurrentDateAsDefaultValue() public function testDateTimeNowAsDefaultGivesCurrentDateAsDefaultValue()
{ {
// Given // Given
$oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'now', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDateTime('start_date', [
'sql' => 'start_date',
'is_null_allowed' => false,
'default_value' => 'NOW()',
'allowed_values' => null,
'depends_on' => [],
'always_load_in_tables' => false
]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
$sNow = date($oDateAttribute->GetInternalFormat()); $sNow = date($oDateAttribute->GetInternalFormat());
self::assertEquals($sNow, $defaultValue, 'Now as default value for DateTime attribute should give current date as default value'); self::assertEquals($sNow, $defaultValue, 'Now as default value for DateTime attribute should give current date as default value');
self::assertEquals($sNow, $oField->GetCurrentValue(), 'Now as default value for DateTime attribute should give current date as form field');
} }
public function testDateNowAsDefaultGivesCurrentDateAsDefaultValue() public function testDateNowAsDefaultGivesCurrentDateAsDefaultValue()
{ {
// Given // Given
$oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'now', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDate('start_date', [
'sql' => 'start_date',
'is_null_allowed' => false,
'default_value' => 'NOW()',
'allowed_values' => null,
'depends_on' => [],
'always_load_in_tables' => false
]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
$sNow = date($oDateAttribute->GetInternalFormat()); $sNow = date($oDateAttribute->GetInternalFormat());
self::assertEquals($sNow, $defaultValue, 'Now as default value for Date attribute should give current date as default value'); self::assertEquals($sNow, $defaultValue, 'Now as default value for Date attribute should give current date as default value');
self::assertEquals($sNow, $oField->GetCurrentValue(), 'Now as default value for Date attribute should give current date as form field');
} }
public function testDateTimeIntervalAsDefaultGivesCorrectDateAsDefaultValue() public function testDateTimeIntervalAsDefaultGivesCorrectDateAsDefaultValue()
{ {
// Given // Given
$oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '+1day', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDateTime('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'DATE_ADD(NOW(), INTERVAL 1 DAY)', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
$oDate = new \DateTimeImmutable('+1day'); $oDate = new \DateTimeImmutable('+1day');
$sExpected = $oDate->format($oDateAttribute->GetInternalFormat()); $sExpected = $oDate->format($oDateAttribute->GetInternalFormat());
self::assertEquals($sExpected, $defaultValue, 'Interval as default value for DateTime attribute should give correct date as default value'); self::assertEquals($sExpected, $defaultValue, 'Interval as default value for DateTime attribute should give correct date as default value');
self::assertEquals($sExpected, $oField->GetCurrentValue(), 'Interval as default value for DateTime attribute should give correct date as form field');
} }
public function testDateIntervalAsDefaultGivesCorrectDateAsDefaultValue() public function testDateIntervalAsDefaultGivesCorrectDateAsDefaultValue()
{ {
// Given // Given
$oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => '+1day', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]); $oDateAttribute = new AttributeDate('start_date', ['sql' => 'start_date', 'is_null_allowed' => false, 'default_value' => 'DATE_ADD(NOW(), INTERVAL 1 DAY)', 'allowed_values' => null, 'depends_on' => [], 'always_load_in_tables' => false]);
$oDateAttribute->SetHostClass('WorkOrder'); $oDateAttribute->SetHostClass('WorkOrder');
$oWorkOrder = MetaModel::NewObject('WorkOrder');
//When //When
$defaultValue = $oDateAttribute->GetDefaultValue(); $defaultValue = $oDateAttribute->GetDefaultValue();
$oField = $oDateAttribute->MakeFormField($oWorkOrder);
// Then // Then
$oDate = new \DateTimeImmutable('+1day'); $oDate = new \DateTimeImmutable('+1day');
$sExpected = $oDate->format($oDateAttribute->GetInternalFormat()); $sExpected = $oDate->format($oDateAttribute->GetInternalFormat());
self::assertEquals($sExpected, $defaultValue, 'Interval as default value for Date attribute should give correct date as default value'); self::assertEquals($sExpected, $defaultValue, 'Interval as default value for Date attribute should give correct date as default value');
self::assertEquals($sExpected, $oField->GetCurrentValue(), 'Interval as default value for Date attribute should give correct date as form field');
} }
} }