Skip to content

Commit 9ac3f06

Browse files
MM-29: Add functionality to map relation between website and sales_channel on the integration form (#54)
1 parent 7bd2784 commit 9ac3f06

File tree

6 files changed

+52
-31
lines changed

6 files changed

+52
-31
lines changed

src/Marello/Bundle/SalesBundle/Autocomplete/GroupSalesChannelHandler.php

+5-24
Original file line numberDiff line numberDiff line change
@@ -22,45 +22,26 @@ protected function checkAllDependenciesInjected()
2222

2323
/**
2424
* @param string $searchTerm
25-
* @param int $firstResult
26-
* @param int $maxResults
25+
* @param int $firstResult
26+
* @param int $maxResults
2727
* @return QueryBuilder
2828
*/
2929
protected function prepareQueryBuilder($searchTerm, $firstResult, $maxResults)
3030
{
31-
$queryBuilder = $this->entityRepository->createQueryBuilder('scg');
31+
$queryBuilder = $this->entityRepository->getNonSystemSalesChannelBySearchTermQB($searchTerm);
3232
$queryBuilder
33-
->where($queryBuilder->expr()->like('LOWER(scg.name)', ':searchTerm'))
34-
->andWhere(($queryBuilder->expr()->eq('scg.system', $queryBuilder->expr()->literal(false))))
35-
->setParameter('searchTerm', '%' . mb_strtolower($searchTerm) . '%')
36-
->orderBy('scg.name', 'ASC')
3733
->setFirstResult($firstResult)
3834
->setMaxResults($maxResults);
3935

4036
return $queryBuilder;
4137
}
4238

4339
/**
44-
* {@inheritdoc}
40+
* {@inheritDoc}
4541
*/
4642
protected function searchEntities($search, $firstResult, $maxResults)
4743
{
4844
$queryBuilder = $this->prepareQueryBuilder($search, $firstResult, $maxResults);
49-
$query = $this->aclHelper->apply($queryBuilder, 'VIEW');
50-
51-
return $query->getResult();
52-
}
53-
54-
/**
55-
* {@inheritdoc}
56-
*/
57-
protected function findById($query)
58-
{
59-
$parts = explode(';', $query);
60-
$id = $parts[0];
61-
62-
$criteria = [$this->idFieldName => $id];
63-
64-
return [$this->entityRepository->findOneBy($criteria, null)];
45+
return $this->aclHelper->apply($queryBuilder->getQuery())->getResult();
6546
}
6647
}

src/Marello/Bundle/SalesBundle/Entity/Repository/SalesChannelGroupRepository.php

+17
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Marello\Bundle\SalesBundle\Entity\Repository;
44

55
use Doctrine\ORM\EntityRepository;
6+
use Doctrine\ORM\QueryBuilder;
67
use Marello\Bundle\SalesBundle\Entity\SalesChannelGroup;
78
use Oro\Bundle\IntegrationBundle\Entity\Channel as IntegrationChannel;
89
use Oro\Bundle\SecurityBundle\ORM\Walker\AclHelper;
@@ -60,4 +61,20 @@ public function hasAttachedIntegration(int $salesChannelGroupId): bool
6061

6162
return (bool) $qb->getQuery()->getResult();
6263
}
64+
65+
/**
66+
* @param string $searchTerm
67+
* @return QueryBuilder
68+
*/
69+
public function getNonSystemSalesChannelBySearchTermQB(string $searchTerm): QueryBuilder
70+
{
71+
$qb = $this->createQueryBuilder('scg');
72+
$qb
73+
->where($qb->expr()->like('LOWER(scg.name)', ':searchTerm'))
74+
->andWhere(($qb->expr()->eq('scg.system', $qb->expr()->literal(false))))
75+
->setParameter('searchTerm', '%' . mb_strtolower($searchTerm) . '%')
76+
->orderBy('scg.name', 'ASC');
77+
78+
return $qb;
79+
}
6380
}

src/Marello/Bundle/SalesBundle/Entity/Repository/SalesChannelRepository.php

+28
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,34 @@ public function setAclHelper(AclHelper $aclHelper)
2323
$this->aclHelper = $aclHelper;
2424
}
2525

26+
/**
27+
* @param string $searchTerm
28+
* @param int $groupId
29+
* @param array $skippedSalesChannelIds
30+
* @return QueryBuilder
31+
*/
32+
public function getActiveSalesChannelBySearchTermLimitedWithGroupIdQB(
33+
string $searchTerm,
34+
int $groupId,
35+
array $skippedSalesChannelIds = []
36+
): QueryBuilder {
37+
$qb = $this->getActiveChannelsQuery();
38+
$qb
39+
->andWhere($qb->expr()->like('LOWER(sc.name)', ':searchTerm'))
40+
->andWhere($qb->expr()->eq('sc.group', ':salesChannelGroupId'))
41+
->setParameter('searchTerm', '%' . mb_strtolower($searchTerm) . '%')
42+
->setParameter('salesChannelGroupId', $groupId)
43+
->orderBy('sc.name', 'ASC');
44+
45+
if (!empty($skippedSalesChannelIds)) {
46+
$qb
47+
->andWhere($qb->expr()->notIn('sc.id', ':skippedSalesChannelIds'))
48+
->setParameter('skippedSalesChannelIds', $skippedSalesChannelIds);
49+
}
50+
51+
return $qb;
52+
}
53+
2654
/**
2755
* Return product prices for specified channel and productId
2856
*

src/Marello/Bundle/SalesBundle/Form/Type/SalesChannelType.php

-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use Marello\Bundle\PricingBundle\Form\EventListener\CurrencySubscriber;
66
use Marello\Bundle\SalesBundle\Entity\SalesChannel;
77
use Oro\Bundle\CurrencyBundle\Form\Type\CurrencyType;
8-
use Oro\Bundle\FormBundle\Utils\FormUtils;
98
use Oro\Bundle\LocaleBundle\Form\Type\LocalizationSelectType;
109
use Symfony\Component\Form\AbstractType;
1110
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
@@ -70,10 +69,6 @@ public function preSetDataListener(FormEvent $event)
7069
'label' => 'marello.sales.saleschannel.create_own_group.label'
7170
]);
7271
}
73-
74-
if ($channel->getId()) {
75-
FormUtils::replaceField($form, 'code', ['disabled' => true]);
76-
}
7772
}
7873

7974
/**

src/Marello/Bundle/SalesBundle/Resources/config/form.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ services:
1111
class: 'Marello\Bundle\SalesBundle\Form\Type\SalesChannelGroupType'
1212
tags:
1313
- { name: form.type }
14-
14+
1515
marello_sales_form_type.saleschannel_multi_select:
1616
class: 'Marello\Bundle\SalesBundle\Form\Type\SalesChannelMultiSelectType'
1717
arguments:

src/Marello/Bundle/SalesBundle/Resources/config/services.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ services:
4747
- 'Marello\Bundle\SalesBundle\Entity\SalesChannelGroup'
4848
- ['name']
4949
tags:
50-
- { name: oro_form.autocomplete.search_handler, alias: group_saleschannels }
50+
- { name: oro_form.autocomplete.search_handler, alias: group_saleschannels, acl_resource: marello_product_view }
5151

5252
marello_sales.active_saleschannels.form.autocomplete.search_handler:
5353
class: 'Marello\Bundle\SalesBundle\Autocomplete\ActiveSalesChannelHandler'

0 commit comments

Comments
 (0)