Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Modules\Report\Service;
|
||||
|
||||
use Xentral\Components\Util\StringUtil;
|
||||
use Xentral\Modules\Report\Data\ReportColumn;
|
||||
|
||||
class ReportColumnFormatter
|
||||
{
|
||||
/**
|
||||
* @param ReportColumn $column
|
||||
* @param string $targetColumn
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatColumnExpression(ReportColumn $column, string $targetColumn): string
|
||||
{
|
||||
switch ($column->getFormatType()) {
|
||||
case ReportColumn::FORMAT_SUM_MONEY_DE:
|
||||
$template = 'FORMAT(`%1$s`, 2, \'de_DE\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_SUM_MONEY_EN:
|
||||
$template = 'FORMAT(`%1$s`, 2, \'en_EN\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_DATE_DMY:
|
||||
$template = 'DATE_FORMAT(`%1$s`, \'%%d.%%m.%%Y\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_DATE_YMD:
|
||||
$template = 'DATE_FORMAT(`%1$s`, \'%%Y.%%m.%%d\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_DATE_DMYHIS:
|
||||
$template = 'DATE_FORMAT(`%1$s`, \'%%d.%%m.%%Y %%H:%%i:%%s\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_DATE_YMDHIS:
|
||||
$template = 'DATE_FORMAT(`%1$s`, \'%%Y.%%m.%%d %%H:%%i:%%s\') AS `%1$s`';
|
||||
break;
|
||||
|
||||
case ReportColumn::FORMAT_CUSTOM:
|
||||
return $this->resolveCustomFormat($column->getFormatStatement(), $targetColumn);
|
||||
|
||||
default:
|
||||
$template = '`%1$s`';
|
||||
}
|
||||
|
||||
return sprintf($template, $targetColumn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $formatStatement
|
||||
* @param string $targetColumn
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function resolveCustomFormat(string $formatStatement, string $targetColumn): string
|
||||
{
|
||||
$customFormat = $formatStatement;
|
||||
if (preg_match('/(.*)\s?as\s?.+$/i', $formatStatement, $matches)) {
|
||||
$customFormat = rtrim($matches[1]);
|
||||
}
|
||||
$statement = preg_replace('/{VALUE}/i', sprintf('`%s`', $targetColumn), $customFormat);
|
||||
$statement .= sprintf(' AS `%s`', $targetColumn);
|
||||
|
||||
if (StringUtil::startsWith($statement, ' AS ')) {
|
||||
return sprintf('`%s`', $targetColumn);
|
||||
}
|
||||
|
||||
return $statement;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user