Browse Source

ManyToMany on ProductFamily/Section + gestion stock + adaptation import

packProduct
Fabien Normand 3 years ago
parent
commit
f0e78a2e2d
11 changed files with 75 additions and 23 deletions
  1. +8
    -6
      Builder/Credit/CreditHistoryBuilder.php
  2. +34
    -6
      Builder/Order/OrderShopBuilder.php
  3. +2
    -2
      Controller/ControllerTrait.php
  4. +1
    -1
      Controller/PointSale/PointSaleAdminController.php
  5. +1
    -1
      Controller/Site/PageAdminController.php
  6. +7
    -5
      Definition/Field/PointSale/PointSaleFieldDefinition.php
  7. +12
    -0
      Field/AssociationField.php
  8. +1
    -1
      Repository/Product/ProductCategoryRepositoryQuery.php
  9. +7
    -0
      Repository/Product/ProductCategoryStore.php
  10. +1
    -0
      Resources/translations/admin.fr.yaml
  11. +1
    -1
      Twig/StoreTwigExtension.php

+ 8
- 6
Builder/Credit/CreditHistoryBuilder.php View File

): CreditHistoryInterface { ): CreditHistoryInterface {
$creditHistory = $this->creditHistoryFactory->create($type, $userMerchant); $creditHistory = $this->creditHistoryFactory->create($type, $userMerchant);


$amount = isset($params['amount']) ?? null ;
$meanPayment = isset($params['meanPayment']) ?? null ;
$reference = isset($params['reference']) ?? null ;
$comment = isset($params['comment']) ?? null ;
$orderPayment = isset($params['orderPayment']) ?? null ;
$orderRefund = isset($params['orderRefund']) ?? null ;
$amount = isset($params['amount']) ? $params['amount'] : null ;
$meanPayment = isset($params['meanPayment']) ? $params['meanPayment'] : null ;
$reference = isset($params['reference']) ? $params['reference'] : null ;
$comment = isset($params['comment']) ? $params['comment'] : null ;
$orderPayment = isset($params['orderPayment']) ? $params['orderPayment'] : null ;
$orderRefund = isset($params['orderRefund']) ? $params['orderRefund'] : null ;


$creditHistory->setType($type); $creditHistory->setType($type);
$creditHistory->setUserMerchant($userMerchant); $creditHistory->setUserMerchant($userMerchant);
$creditHistory->setOrderPayment($orderPayment); $creditHistory->setOrderPayment($orderPayment);
$creditHistory->setOrderRefund($orderRefund); $creditHistory->setOrderRefund($orderRefund);


$this->save($creditHistory);

return $creditHistory; return $creditHistory;
} }



+ 34
- 6
Builder/Order/OrderShopBuilder.php View File



use App\Builder\Distribution\DistributionBuilder; use App\Builder\Distribution\DistributionBuilder;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Lc\CaracoleBundle\Builder\Credit\CreditHistoryBuilder;
use Lc\CaracoleBundle\Builder\File\DocumentBuilder; use Lc\CaracoleBundle\Builder\File\DocumentBuilder;
use Lc\CaracoleBundle\Event\Order\OrderShopChangeStatusEvent; use Lc\CaracoleBundle\Event\Order\OrderShopChangeStatusEvent;
use Lc\CaracoleBundle\Factory\Credit\CreditHistoryFactory;
use Lc\CaracoleBundle\Factory\File\DocumentFactory; use Lc\CaracoleBundle\Factory\File\DocumentFactory;
use Lc\CaracoleBundle\Factory\Order\OrderPaymentFactory; use Lc\CaracoleBundle\Factory\Order\OrderPaymentFactory;
use Lc\CaracoleBundle\Factory\Order\OrderProductFactory; use Lc\CaracoleBundle\Factory\Order\OrderProductFactory;
use Lc\CaracoleBundle\Factory\Order\OrderShopFactory; use Lc\CaracoleBundle\Factory\Order\OrderShopFactory;
use Lc\CaracoleBundle\Factory\Order\OrderStatusHistoryFactory; use Lc\CaracoleBundle\Factory\Order\OrderStatusHistoryFactory;
use Lc\CaracoleBundle\Model\Address\AddressInterface; use Lc\CaracoleBundle\Model\Address\AddressInterface;
use Lc\CaracoleBundle\Model\Credit\CreditHistoryModel;
use Lc\CaracoleBundle\Model\File\DocumentInterface; use Lc\CaracoleBundle\Model\File\DocumentInterface;
use Lc\CaracoleBundle\Model\File\DocumentModel; use Lc\CaracoleBundle\Model\File\DocumentModel;
use Lc\CaracoleBundle\Model\Order\OrderPaymentModel;
use Lc\CaracoleBundle\Model\Order\OrderProductInterface; use Lc\CaracoleBundle\Model\Order\OrderProductInterface;
use Lc\CaracoleBundle\Model\Order\OrderReductionCartInterface; use Lc\CaracoleBundle\Model\Order\OrderReductionCartInterface;
use Lc\CaracoleBundle\Model\Order\OrderReductionCreditInterface; use Lc\CaracoleBundle\Model\Order\OrderReductionCreditInterface;
use Lc\CaracoleBundle\Repository\Order\OrderShopStore; use Lc\CaracoleBundle\Repository\Order\OrderShopStore;
use Lc\CaracoleBundle\Repository\Order\OrderStatusStore; use Lc\CaracoleBundle\Repository\Order\OrderStatusStore;
use Lc\CaracoleBundle\Repository\Product\ProductFamilyStore; use Lc\CaracoleBundle\Repository\Product\ProductFamilyStore;
use Lc\CaracoleBundle\Resolver\MerchantResolver;
use Lc\CaracoleBundle\Resolver\OpeningResolver; use Lc\CaracoleBundle\Resolver\OpeningResolver;
use Lc\CaracoleBundle\Resolver\OrderShopResolver; use Lc\CaracoleBundle\Resolver\OrderShopResolver;
use Lc\CaracoleBundle\Solver\Order\OrderProductReductionCatalogSolver; use Lc\CaracoleBundle\Solver\Order\OrderProductReductionCatalogSolver;
use Lc\CaracoleBundle\Solver\Product\ProductSolver; use Lc\CaracoleBundle\Solver\Product\ProductSolver;
use Lc\CaracoleBundle\Statistic\Product\ProductsSalesStatistic; use Lc\CaracoleBundle\Statistic\Product\ProductsSalesStatistic;
use Lc\SovBundle\Model\User\UserInterface; use Lc\SovBundle\Model\User\UserInterface;
use Lc\SovBundle\Translation\FlashBagTranslator;
use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface; use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;


protected OrderShopResolver $orderShopResolver; protected OrderShopResolver $orderShopResolver;
protected OrderProductReductionCatalogSolver $orderProductReductionCatalogSolver; protected OrderProductReductionCatalogSolver $orderProductReductionCatalogSolver;
protected DistributionBuilder $distributionBuilder; protected DistributionBuilder $distributionBuilder;
protected MerchantResolver $merchantResolver;
protected CreditHistoryBuilder $creditHistoryBuilder;


public function __construct( public function __construct(
EntityManagerInterface $entityManager, EntityManagerInterface $entityManager,
ProductSolver $productSolver, ProductSolver $productSolver,
OrderShopResolver $orderShopResolver, OrderShopResolver $orderShopResolver,
OrderProductReductionCatalogSolver $orderProductReductionCatalogSolver, OrderProductReductionCatalogSolver $orderProductReductionCatalogSolver,
DistributionBuilder $distributionBuilder
DistributionBuilder $distributionBuilder,
MerchantResolver $merchantResolver,
CreditHistoryBuilder $creditHistoryBuilder
) { ) {
$this->entityManager = $entityManager; $this->entityManager = $entityManager;
$this->orderShopStore = $orderShopStore; $this->orderShopStore = $orderShopStore;
$this->orderShopResolver = $orderShopResolver; $this->orderShopResolver = $orderShopResolver;
$this->orderProductReductionCatalogSolver = $orderProductReductionCatalogSolver; $this->orderProductReductionCatalogSolver = $orderProductReductionCatalogSolver;
$this->distributionBuilder = $distributionBuilder; $this->distributionBuilder = $distributionBuilder;
$this->merchantResolver = $merchantResolver;
$this->creditHistoryBuilder = $creditHistoryBuilder;
} }


public function create( public function create(
UserInterface $user = null, UserInterface $user = null,
VisitorInterface $visitor = null VisitorInterface $visitor = null
): OrderShopInterface { ): OrderShopInterface {
$cart = $this->orderShopStore
->setSection($section)
->getOneCartCurrent($user, $visitor);
$this->orderShopStore->setSection($section);

$cartUser = $this->orderShopStore->getOneCartCurrent($user);
$cartVisitor = $this->orderShopStore->getOneCartCurrent(null, $visitor);

if ($cartUser && $cartVisitor && $cartUser->getId() != $cartVisitor->getId()) {
$cart = $this->merge($cartUser, $cartVisitor);
} else {
$cart = $cartUser ?: $cartVisitor;
}


if (!$cart) { if (!$cart) {
$cart = $this->create($section, $user, $visitor); $cart = $this->create($section, $user, $visitor);
} }


// @TODO : obligé de faire ça sinon le panier ne se met pas à jour quand on ajoute des produits. Pourquoi ?
$this->entityManager->refresh($cart);

return $cart; return $cart;
} }


); );


if ($persist) { if ($persist) {
$this->entityManager->persist($orderProduct);
$this->entityManager->update($orderProduct);
} }


$updated = true; $updated = true;
): OrderShopInterface { ): OrderShopInterface {
if ($orderShop1 && $orderShop2) { if ($orderShop1 && $orderShop2) {
foreach ($orderShop2->getOrderProducts() as $orderProduct) { foreach ($orderShop2->getOrderProducts() as $orderProduct) {
$orderProductAlreadyInCart = $orderShop1->hasOrderProductAlreadyInCart($orderProduct);
$orderProductAlreadyInCart = $this->orderShopSolver->hasOrderProductAlreadyInCart($orderShop1, $orderProduct);


if ($orderProductAlreadyInCart) { if ($orderProductAlreadyInCart) {
if ($orderProduct->getQuantityOrder() > $orderProductAlreadyInCart->getQuantityOrder()) { if ($orderProduct->getQuantityOrder() > $orderProductAlreadyInCart->getQuantityOrder()) {


$orderShop->addOrderPayment($orderPayment); $orderShop->addOrderPayment($orderPayment);


if($meanPayment == OrderPaymentModel::MEAN_PAYMENT_CREDIT) {
$this->creditHistoryBuilder->create(CreditHistoryModel::TYPE_DEBIT, $this->merchantResolver->getUserMerchant(), [
'orderPayment' => $orderPayment
]);
}

if ($this->orderShopResolver->isPaid($orderShop)) { if ($this->orderShopResolver->isPaid($orderShop)) {
$nextStatus = OrderStatusModel::ALIAS_PAID; $nextStatus = OrderStatusModel::ALIAS_PAID;
} else { } else {

+ 2
- 2
Controller/ControllerTrait.php View File

return $this->get(SectionResolver::class)->getCurrent(); return $this->get(SectionResolver::class)->getCurrent();
} }


public function getSectionCurrentDevAlias(): string
public function getSectionCurrentSlug(): string
{ {
return $this->getSectionCurrent()->getDevAlias();
return $this->getSectionCurrent()->getSlug();
} }


public function getCartCurrent(): OrderShopInterface public function getCartCurrent(): OrderShopInterface

+ 1
- 1
Controller/PointSale/PointSaleAdminController.php View File

{ {
return $this->getPointSaleContainer() return $this->getPointSaleContainer()
->getFieldDefinition() ->getFieldDefinition()
->getFieldList($pageName);
->getFields($pageName);
} }


public function createEntity(string $entityFqcn) public function createEntity(string $entityFqcn)

+ 1
- 1
Controller/Site/PageAdminController.php View File



public function createEntity(string $entityFqcn) public function createEntity(string $entityFqcn)
{ {
return $this->get(PageContainer::class)
return $this->getPageContainer()
->getFactory() ->getFactory()
->setSection($this->get(SectionResolver::class)->getCurrent()) ->setSection($this->get(SectionResolver::class)->getCurrent())
->create(); ->create();

+ 7
- 5
Definition/Field/PointSale/PointSaleFieldDefinition.php View File

class PointSaleFieldDefinition extends AbstractFieldDefinition class PointSaleFieldDefinition extends AbstractFieldDefinition
{ {


public function configureFieldsIndex(): array
public function configureIndex(): array
{ {
return [ return [
'id', 'id',
'main', 'main',
'address', 'address',
'seo', 'seo',
'conf'
'conf',
]; ];
} }


public function configureFieldsPanelMain(): array
public function configurePanelMain(): array
{ {
return [ return [
'title', 'title',
]; ];
} }


public function configureFieldsPanelAddress(): array
public function configurePanelAddress(): array
{ {
return ['address'];
return [
'address'
];
} }


public function configureFields(): array public function configureFields(): array

+ 12
- 0
Field/AssociationField.php View File

return $this; return $this;
} }


public function setFilterOnMerchantViaSection(MerchantInterface $merchant): self
{
$this->queryBuilderParameters['merchantViaSection'] = $merchant;

return $this;
}

public function setFilterOnDevAlias(string $devAlias): self public function setFilterOnDevAlias(string $devAlias): self
{ {
$this->queryBuilderParameters['devAlias'] = $devAlias; $this->queryBuilderParameters['devAlias'] = $devAlias;
$qb->andWhereMerchantManyToMany('e', $param['merchantManyToMany']); $qb->andWhereMerchantManyToMany('e', $param['merchantManyToMany']);
} }


if (isset($param['merchantViaSection'])) {
$qb->leftJoin('e.section', 's');
$qb->andWhereMerchant('s', $param['merchantViaSection']);
}

if (isset($param['status'])) { if (isset($param['status'])) {
$qb->andWhere('e.status = :status')->setParameter('status', $param['status']); $qb->andWhere('e.status = :status')->setParameter('status', $param['status']);
} }

+ 1
- 1
Repository/Product/ProductCategoryRepositoryQuery.php View File



use Knp\Component\Pager\PaginatorInterface; use Knp\Component\Pager\PaginatorInterface;
use Lc\CaracoleBundle\Repository\SectionRepositoryQueryTrait; use Lc\CaracoleBundle\Repository\SectionRepositoryQueryTrait;
use Lc\SovBundle\Doctrine\EntityInterface;
use Lc\SovBundle\Repository\AbstractRepositoryQuery; use Lc\SovBundle\Repository\AbstractRepositoryQuery;


class ProductCategoryRepositoryQuery extends AbstractRepositoryQuery class ProductCategoryRepositoryQuery extends AbstractRepositoryQuery
return $this->andWhere('pf.status = 1'); return $this->andWhere('pf.status = 1');
} }



} }

+ 7
- 0
Repository/Product/ProductCategoryStore.php View File

{ {
return $query; return $query;
} }

public function getOneParent(): ?ProductCategoryInterface
{
$query = $this->createDefaultQuery();
$query->filterIsParent();
return $query->findOne();
}
} }

+ 1
- 0
Resources/translations/admin.fr.yaml View File

fields: fields:
cycle: Cycle de vente cycle: Cycle de vente
isDefault: Section par défaut isDefault: Section par défaut
cycleType: Cycle
TaxRate: TaxRate:
label: Règle de taxe label: Règle de taxe
label_plurial: Règles de taxes label_plurial: Règles de taxes

+ 1
- 1
Twig/StoreTwigExtension.php View File

return $this->settingSolver->getSettingValue($this->getMerchantCurrent(), $settingName); return $this->settingSolver->getSettingValue($this->getMerchantCurrent(), $settingName);
} }


public function getSectionSetting(SectionInterface $section, string $settingName): string
public function getSectionSetting(SectionInterface $section, string $settingName): ?string
{ {
return $this->settingSolver->getSettingValue($section, $settingName); return $this->settingSolver->getSettingValue($section, $settingName);
} }

Loading…
Cancel
Save