I am writing a new ORM function to convert timezones by name. However, I can't figure out how to implement the instructions here regarding the creation of a custom function.
custom/Espo/Modules/Odyssey/Resources/metadata/app/orm.json
custom/Espo/Modules/Odyssey/Classes/ORM/ConvertTimezoneByName.php
It doesn't work when used in an ORM expression:
I've tried probably 20 different ways to call the function. Nothing works. Any advice would be greatly appreciated.
custom/Espo/Modules/Odyssey/Resources/metadata/app/orm.json
Code:
{
"platforms": {
"Mysql": {
"functionConverterClassNameMap": {
"convertTimezoneByName": "Espo\\Modules\\Odyssey\\Classes\\ORM\\ConvertTimezoneByName"
}
}
}
}
PHP Code:
<?php
namespace Espo\Modules\Odyssey\Classes\ORM;
use Espo\ORM\QueryComposer\Part\FunctionConverter;
class ConvertTimezoneByName implements FunctionConverter
{
public function convert(string ...$argumentList): string
{
...
return "CONVERT_TZ({$datetime}, {$fromTz}, {$toTz})";
}
}It doesn't work when used in an ORM expression:
PHP Code:
private function getQueryBuilder(?SearchParams $searchParams, ?User $user): QueryBuilder
{
...
$queryBuilder = $selectBuilder->buildQueryBuilder();
$queryBuilder->where(
Expr::or(
Expr::notEqual(
Expr::date(Expr::convertTimezoneByName(Expr::column('dateStart'), 'America/Denver')),
Expr::date(Expr::convertTimezoneByName(Expr::column('dateStartBill'), 'America/Denver')),
),
)
);
...
}
Code:
... ERROR: Slim Application Error Type: Error Code: 0 Message: Call to undefined method Espo\ORM\Query\Part\Expression::convertTimezoneByName()

Comment