8000 BB-4099: Remove paymentTerm field from Order entity (#4627) · oro-subtree/EntityExtendBundle@5942a0d · GitHub
[go: up one dir, main page]

Skip to content

Commit 5942a0d

Browse files 8000
authored
BB-4099: Remove paymentTerm field from Order entity (#4627)
- readonly fields - process grid config before datasource build - add scope extension
1 parent 8a9c1e1 commit 5942a0d

File tree

8 files changed

+711
-1041
lines changed

8 files changed

+711
-1041
lines changed

Grid/AbstractFieldsExtension.php

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@
22

33
namespace Oro\Bundle\EntityExtendBundle\Grid;
44

5-
use Doctrine\ORM\Query\Expr\From;
6-
use Doctrine\ORM\QueryBuilder;
7-
85
use Oro\Bundle\DataGridBundle\Datagrid\DatagridGuesser;
96
use Oro\Bundle\DataGridBundle\Datagrid\Common\DatagridConfiguration;
10-
use Oro\Bundle\DataGridBundle\Datasource\DatasourceInterface;
117
use Oro\Bundle\DataGridBundle\Datasource\Orm\OrmDatasource;
128
use Oro\Bundle\DataGridBundle\Extension\AbstractExtension;
139
use Oro\Bundle\DataGridBundle\Extension\Formatter\Configuration as FormatterConfiguration;
@@ -63,6 +59,10 @@ public function isApplicable(DatagridConfiguration $config)
6359
public function processConfigs(DatagridConfiguration $config)
6460
{
6561
$fields = $this->getFields($config);
62+
if (empty($fields)) {
63+
return;
64+
}
65+
6666
foreach ($fields as $field) {
6767
$fieldName = $field->getFieldName();
6868
$columnOptions =
@@ -83,48 +83,36 @@ public function processConfigs(DatagridConfiguration $config)
8383
$this->prepareColumnOptions($field, $columnOptions);
8484
$this->datagridGuesser->setColumnOptions($config, $field->getFieldName(), $columnOptions);
8585
}
86-
}
87-
88-
/**
89-
* {@inheritdoc}
90-
*/
91-
public function visitDatasource(DatagridConfiguration $config, DatasourceInterface $datasource)
92-
{
93-
$fields = $this->getFields($config);
94-
if (empty($fields)) {
95-
return;
96-
}
9786

9887
$entityClassName = $this->entityClassResolver->getEntityClass($this->getEntityName($config));
99-
100-
/** @var QueryBuilder $qb */
101-
$qb = $datasource->getQueryBuilder();
102-
$fromParts = $qb->getDQLPart('from');
10388
$alias = false;
104-
105-
/** @var From $fromPart */
106-
foreach ($fromParts as $fromPart) {
107-
if ($this->entityClassResolver->getEntityClass($fromPart->getFrom()) == $entityClassName) {
108-
$alias = $fromPart->getAlias();
89+
$from = $config->offsetGetByPath('[source][query][from]', []);
90+
if ($from) {
91+
foreach ($from as $part) {
92+
if ($part['table'] === $entityClassName) {
93+
$alias = $part['alias'];
94+
}
10995
}
11096
}
11197

11298
if ($alias === false) {
113-
// add entity if it not exists in from clause
11499
$alias = 'o';
115-
$qb->from($entityClassName, $alias);
100+
$from[] = [
101+
'table' => $entityClassName,
102+
'alias' => $alias
103+
];
104+
$config->offsetSetByPath('[source][query][from]', $from);
116105
}
117106

118-
$this->buildExpression($fields, $qb, $config, $alias);
107+
$this->buildExpression($fields, $config, $alias);
119108
}
120109

121110
/**
122111
* @param FieldConfigId[] $fields
123-
* @param QueryBuilder $qb
124112
* @param DatagridConfiguration $config
125113
* @param string $alias
126114
*/
127-
public function buildExpression(array $fields, QueryBuilder $qb, DatagridConfiguration $config, $alias)
115+
public function buildExpression(array $fields, DatagridConfiguration $config, $alias)
128116
{
129117
$relationIndex = 0;
130118
$relationTemplate = 'auto_rel_%d';
@@ -134,7 +122,10 @@ public function buildExpression(array $fields, QueryBuilder $qb, DatagridConfigu
134122
case 'enum':
135123
$extendFieldConfig = $this->getFieldConfig('extend', $field);
136124
$joinAlias = sprintf($relationTemplate, ++$relationIndex);
137-
$qb->leftJoin(sprintf('%s.%s', $alias, $fieldName), $joinAlias);
125+
$config->offsetAddToArrayByPath(
126+
'[source][query][join][left]',
127+
[['join' => sprintf('%s.%s', $alias, $fieldName), 'alias' => $joinAlias]]
128+
);
138129
$columnDataName = $fieldName;
139130
$sorterDataName = sprintf('%s.%s', $joinAlias, $extendFieldConfig->get('target_field'));
140131
$selectExpr = sprintf('IDENTITY(%s.%s) as %s', $alias, $fieldName, $fieldName);
@@ -148,15 +139,22 @@ public function buildExpression(array $fields, QueryBuilder $qb, DatagridConfigu
148139
break;
149140
case RelationType::MANY_TO_ONE:
150141
case RelationType::ONE_TO_ONE:
151-
case RelationType::TO_ONE:
152142
$extendFieldConfig = $this->getFieldConfig('extend', $field);
153-
$qb->leftJoin(sprintf('%s.%s', $alias, $fieldName), $fieldName);
143+
$config->offsetAddToArrayByPath(
144+
'[source][query][join][left]',
145+
[['join' => sprintf('%s.%s', $alias, $fieldName), 'alias' => $fieldName]]
146+
);
154147

155148
$dataName = $fieldName.'_data';
156-
$targetField = $extendFieldConfig->get('target_field');
149+
$targetField = $extendFieldConfig->get('target_field', false, 'id');
157150
$dataFieldName = sprintf('%s.%s', $fieldName, $targetField);
158-
if ($qb->getDQLPart('groupBy')) {
159-
$qb->addGroupBy($dataFieldName);
151+
152+
$groupBy = $config->offsetGetByPath('[source][query][groupBy]');
153+
if ($groupBy) {
154+
$config->offsetSetByPath(
155+
'[source][query][groupBy]',
156+
implode(',', [$groupBy, $dataFieldName])
157+
);
160158
}
161159
$selectExpr = sprintf('%s as %s', $dataFieldName, $dataName);
162160
$columnDataName = $sorterDataName = $dataName;
@@ -168,7 +166,7 @@ public function buildExpression(array $fields, QueryBuilder $qb, DatagridConfigu
168166
break;
169167
}
170168

171-
$qb->addSelect($selectExpr);
169+
$config->offsetAddToArrayByPath('[source][query][select]', [$selectExpr]);
172170

173171
// set real "data name" for filters and sorters
174172
$config->offsetSetByPath(

Migration/Extension/ExtendExtension.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,5 +1024,8 @@ protected function ensureExtendFieldSet(array &$options)
10241024
if (!isset($options['extend']['owner'])) {
10251025
$options['extend']['owner'] = ExtendScope::OWNER_SYSTEM;
10261026
}
1027+
if (!isset($options[ExtendOptionsManager::MODE_OPTION])) {
1028+
$options[ExtendOptionsManager::MODE_OPTION] = ConfigModel::MODE_READONLY;
1029+
}
10271030
}
10281031
}

Migrations/Schema/OroEntityExtendBundleInstaller.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class OroEntityExtendBundleInstaller extends RenameExtendTablesAndColumns implem
1616
*/
1717
public function getMigrationVersion()
1818
{
19-
return 'v1_8';
19+
return 'v1_9';
2020
}
2121

2222
/**
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Oro\Bundle\EntityExtendBundle\Migrations\Schema\v1_9;
4+
5+
use Doctrine\DBAL\Schema\Schema;
6+
use Oro\Bundle\EntityConfigBundle\Entity\ConfigModel;
7+
use Oro\Bundle\EntityExtendBundle\Extend\RelationType;
8+
use Oro\Bundle\MigrationBundle\Migration\Migration;
9+
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
10+
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
11+
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
12+
13+
class OroEntityExtendBundle implements Migration, ContainerAwareInterface
14+
{
15+
use ContainerAwareTrait;
16+
17+
/** {@inheritdoc} */
18+
public function up(Schema $schema, QueryBag $queries)
19+
{
20+
$query = "UPDATE oro_entity_config_field SET mode='%s' WHERE type='%s' and mode='default'";
21+
$queries->addQuery(sprintf($query, ConfigModel::MODE_READONLY, RelationType::ONE_TO_ONE));
22+
$queries->addQuery(sprintf($query, ConfigModel::MODE_READONLY, RelationType::MANY_TO_ONE));
23+
$queries->addQuery(sprintf($query, ConfigModel::MODE_READONLY, RelationType::ONE_TO_MANY));
24+
$queries->addQuery(sprintf($query, ConfigModel::MODE_READONLY, RelationType::MANY_TO_MANY));
25+
}
26+
}

0 commit comments

Comments
 (0)
0