Selaa lähdekoodia

Merge branch 'develop'

master
Guillaume Bourgeois 1 vuosi sitten
vanhempi
commit
1f0d13a72c
100 muutettua tiedostoa jossa 1226 lisäystä ja 530 poistoa
  1. +7
    -6
      backend/controllers/DistributionController.php
  2. +1
    -1
      backend/controllers/DocumentController.php
  3. +7
    -9
      backend/controllers/OrderController.php
  4. +4
    -3
      backend/controllers/UserController.php
  5. +1
    -1
      backend/views/user/_form.php
  6. +1
    -1
      backend/views/user/credit.php
  7. +32
    -2
      backend/web/js/vuejs/distribution-index.js
  8. +1
    -1
      common/components/BusinessLogic.php
  9. +1
    -1
      common/config/params.php
  10. +4
    -1
      common/logic/AbstractContainer.php
  11. +10
    -0
      common/logic/AbstractDefinition.php
  12. +44
    -0
      common/logic/AbstractRepository.php
  13. +70
    -1
      common/logic/AbstractRepositoryQuery.php
  14. +1
    -0
      common/logic/AbstractService.php
  15. +2
    -2
      common/logic/AbstractSingleton.php
  16. +12
    -10
      common/logic/Config/TaxRate/Repository/TaxRateRepository.php
  17. +6
    -0
      common/logic/Config/TaxRate/Repository/TaxRateRepositoryQuery.php
  18. +14
    -0
      common/logic/Config/TaxRate/Service/TaxRateDefinition.php
  19. +7
    -6
      common/logic/Config/TaxRate/Wrapper/TaxRateContainer.php
  20. +2
    -0
      common/logic/Config/TaxRate/Wrapper/TaxRateManager.php
  21. +1
    -1
      common/logic/ContainerInterface.php
  22. +8
    -0
      common/logic/DefinitionInterface.php
  23. +36
    -71
      common/logic/Distribution/Distribution/Repository/DistributionRepository.php
  24. +49
    -0
      common/logic/Distribution/Distribution/Repository/DistributionRepositoryQuery.php
  25. +2
    -2
      common/logic/Distribution/Distribution/Service/DistributionBuilder.php
  26. +14
    -0
      common/logic/Distribution/Distribution/Service/DistributionDefinition.php
  27. +7
    -6
      common/logic/Distribution/Distribution/Wrapper/DistributionContainer.php
  28. +2
    -0
      common/logic/Distribution/Distribution/Wrapper/DistributionManager.php
  29. +16
    -16
      common/logic/Distribution/PointSaleDistribution/Repository/PointSaleDistributionRepository.php
  30. +23
    -0
      common/logic/Distribution/PointSaleDistribution/Repository/PointSaleDistributionRepositoryQuery.php
  31. +14
    -0
      common/logic/Distribution/PointSaleDistribution/Service/PointSaleDistributionDefinition.php
  32. +7
    -6
      common/logic/Distribution/PointSaleDistribution/Wrapper/PointSaleDistributionContainer.php
  33. +2
    -0
      common/logic/Distribution/PointSaleDistribution/Wrapper/PointSaleDistributionManager.php
  34. +15
    -15
      common/logic/Distribution/ProductDistribution/Repository/ProductDistributionRepository.php
  35. +24
    -0
      common/logic/Distribution/ProductDistribution/Repository/ProductDistributionRepositoryQuery.php
  36. +14
    -0
      common/logic/Distribution/ProductDistribution/Service/ProductDistributionDefinition.php
  37. +7
    -5
      common/logic/Distribution/ProductDistribution/Wrapper/ProductDistributionContainer.php
  38. +2
    -0
      common/logic/Distribution/ProductDistribution/Wrapper/ProductDistributionManager.php
  39. +8
    -6
      common/logic/Document/DeliveryNote/Repository/DeliveryNoteRepository.php
  40. +6
    -0
      common/logic/Document/DeliveryNote/Repository/DeliveryNoteRepositoryQuery.php
  41. +14
    -0
      common/logic/Document/DeliveryNote/Service/DeliveryNoteDefinition.php
  42. +7
    -6
      common/logic/Document/DeliveryNote/Wrapper/DeliveryNoteContainer.php
  43. +2
    -0
      common/logic/Document/DeliveryNote/Wrapper/DeliveryNoteManager.php
  44. +14
    -0
      common/logic/Document/Document/Service/DocumentDefinition.php
  45. +8
    -6
      common/logic/Document/Document/Wrapper/DocumentContainer.php
  46. +2
    -0
      common/logic/Document/Document/Wrapper/DocumentManager.php
  47. +8
    -6
      common/logic/Document/Invoice/Repository/InvoiceRepository.php
  48. +6
    -0
      common/logic/Document/Invoice/Repository/InvoiceRepositoryQuery.php
  49. +14
    -0
      common/logic/Document/Invoice/Service/InvoiceDefinition.php
  50. +7
    -6
      common/logic/Document/Invoice/Wrapper/InvoiceContainer.php
  51. +2
    -0
      common/logic/Document/Invoice/Wrapper/InvoiceManager.php
  52. +8
    -6
      common/logic/Document/Quotation/Repository/QuotationRepository.php
  53. +8
    -0
      common/logic/Document/Quotation/Repository/QuotationRepositoryQuery.php
  54. +14
    -0
      common/logic/Document/Quotation/Service/QuotationDefinition.php
  55. +7
    -6
      common/logic/Document/Quotation/Wrapper/QuotationContainer.php
  56. +2
    -0
      common/logic/Document/Quotation/Wrapper/QuotationManager.php
  57. +75
    -89
      common/logic/Order/Order/Repository/OrderRepository.php
  58. +51
    -0
      common/logic/Order/Order/Repository/OrderRepositoryQuery.php
  59. +3
    -3
      common/logic/Order/Order/Service/OrderBuilder.php
  60. +14
    -0
      common/logic/Order/Order/Service/OrderDefinition.php
  61. +7
    -6
      common/logic/Order/Order/Wrapper/OrderContainer.php
  62. +2
    -0
      common/logic/Order/Order/Wrapper/OrderManager.php
  63. +5
    -5
      common/logic/Order/OrderStatusHistory/Repository/OrderStatusHistoryRepository.php
  64. +8
    -0
      common/logic/Order/OrderStatusHistory/Repository/OrderStatusHistoryRepositoryQuery.php
  65. +14
    -0
      common/logic/Order/OrderStatusHistory/Service/OrderStatusHistoryDefinition.php
  66. +7
    -6
      common/logic/Order/OrderStatusHistory/Wrapper/OrderStatusHistoryContainer.php
  67. +2
    -0
      common/logic/Order/OrderStatusHistory/Wrapper/OrderStatusHistoryManager.php
  68. +11
    -9
      common/logic/Order/ProductOrder/Repository/ProductOrderRepository.php
  69. +16
    -0
      common/logic/Order/ProductOrder/Repository/ProductOrderRepositoryQuery.php
  70. +14
    -0
      common/logic/Order/ProductOrder/Service/ProductOrderDefinition.php
  71. +7
    -6
      common/logic/Order/ProductOrder/Wrapper/ProductOrderContainer.php
  72. +2
    -0
      common/logic/Order/ProductOrder/Wrapper/ProductOrderManager.php
  73. +36
    -39
      common/logic/PointSale/PointSale/Repository/PointSaleRepository.php
  74. +36
    -0
      common/logic/PointSale/PointSale/Repository/PointSaleRepositoryQuery.php
  75. +14
    -0
      common/logic/PointSale/PointSale/Service/PointSaleDefinition.php
  76. +7
    -6
      common/logic/PointSale/PointSale/Wrapper/PointSaleContainer.php
  77. +2
    -0
      common/logic/PointSale/PointSale/Wrapper/PointSaleManager.php
  78. +14
    -13
      common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepository.php
  79. +28
    -0
      common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepositoryQuery.php
  80. +14
    -0
      common/logic/PointSale/UserPointSale/Service/UserPointSaleDefinition.php
  81. +7
    -6
      common/logic/PointSale/UserPointSale/Wrapper/UserPointSaleContainer.php
  82. +2
    -0
      common/logic/PointSale/UserPointSale/Wrapper/UserPointSaleManager.php
  83. +21
    -41
      common/logic/Producer/Producer/Repository/ProducerRepository.php
  84. +26
    -0
      common/logic/Producer/Producer/Repository/ProducerRepositoryQuery.php
  85. +14
    -0
      common/logic/Producer/Producer/Service/ProducerDefinition.php
  86. +7
    -6
      common/logic/Producer/Producer/Wrapper/ProducerContainer.php
  87. +2
    -0
      common/logic/Producer/Producer/Wrapper/ProducerManager.php
  88. +10
    -11
      common/logic/Producer/ProducerPriceRange/Repository/ProducerPriceRangeRepository.php
  89. +8
    -0
      common/logic/Producer/ProducerPriceRange/Repository/ProducerPriceRangeRepositoryQuery.php
  90. +14
    -0
      common/logic/Producer/ProducerPriceRange/Service/ProducerPriceRangeDefinition.php
  91. +7
    -6
      common/logic/Producer/ProducerPriceRange/Wrapper/ProducerPriceRangeContainer.php
  92. +2
    -0
      common/logic/Producer/ProducerPriceRange/Wrapper/ProducerPriceRangeManager.php
  93. +5
    -0
      common/logic/ProducerContextTrait.php
  94. +25
    -41
      common/logic/Product/Product/Repository/ProductRepository.php
  95. +34
    -0
      common/logic/Product/Product/Repository/ProductRepositoryQuery.php
  96. +14
    -0
      common/logic/Product/Product/Service/ProductDefinition.php
  97. +8
    -6
      common/logic/Product/Product/Wrapper/ProductContainer.php
  98. +2
    -0
      common/logic/Product/Product/Wrapper/ProductManager.php
  99. +14
    -22
      common/logic/Product/ProductCategory/Repository/ProductCategoryRepository.php
  100. +8
    -0
      common/logic/Product/ProductCategory/Repository/ProductCategoryRepositoryQuery.php

+ 7
- 6
backend/controllers/DistributionController.php Näytä tiedosto

@@ -457,12 +457,13 @@ class DistributionController extends BackendController
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$userManager = $this->getUserManager();
$orderManager = $this->getOrderManager();

$user = $userManager->findOneUserById($idUser);
$idFavoritePointSale = 0;

if($user) {
$favoritePointSale = $userManager->getUserFavoritePointSale($user);
$favoritePointSale = $orderManager->getUserFavoritePointSale($user);
if ($favoritePointSale) {
$idFavoritePointSale = $favoritePointSale->id;
}
@@ -548,7 +549,7 @@ class DistributionController extends BackendController
if ($order && $order->distribution->id_producer == GlobalParam::getCurrentProducerId()) {
$userProducer = null;
if ($order->id_user) {
$userProducer = $userProducerManager->findOneUserProducer($order->user, $this->getProducerCurrent());
$userProducer = $userProducerManager->findOneUserProducer($order->user);
}
foreach ($order->productOrder as $productOrder) {
$invoicePrice = $productManager->getPrice($productOrder->product, [
@@ -1238,7 +1239,7 @@ class DistributionController extends BackendController
$productDistributionManager = $this->getProductDistributionManager();
$productDistribution = $this->getProductDistribution($idProduct, $idDistribution);

$productDistribution->quantity_max = (!$quantityMax) ? null : (float)$quantityMax;
$productDistribution->quantity_max = ($quantityMax == -1) ? null : (float) abs($quantityMax);
$productDistributionManager->saveUpdate($productDistribution);

return ['success'];
@@ -1609,7 +1610,7 @@ class DistributionController extends BackendController

// init invoice prices
$user = $userManager->findOneUserById($deliveryNote->id_user);
$userProducer = $userProducerManager->findOneUserProducer($user, $producerCurrent);
$userProducer = $userProducerManager->findOneUserProducer($user);
$orderManager->updateOrderInvoicePrices($order, [
'user' => $user,
'user_producer' => $userProducer,
@@ -1703,7 +1704,7 @@ class DistributionController extends BackendController
if ($firstOrder->pointSale->id_user) {
$deliveryNote->id_user = $firstOrder->pointSale->id_user;
$user = $userManager->findOneUserById($deliveryNote->id_user);
$userProducer = $userProducerManager->findOneUserProducer($user, $producerCurrent);
$userProducer = $userProducerManager->findOneUserProducer($user);
} else {
$user = new User();
$user->type = User::TYPE_LEGAL_PERSON;
@@ -1744,7 +1745,7 @@ class DistributionController extends BackendController

if (!isset($user) || !$user) {
$user = $userManager->findOneUserById($deliveryNote->id_user);
$userProducer = $userProducerManager->findOneUserProducer($user, $producerCurrent);
$userProducer = $userProducerManager->findOneUserProducer($user);
}

// affectation du BL aux commandes

+ 1
- 1
backend/controllers/DocumentController.php Näytä tiedosto

@@ -573,7 +573,7 @@ class DocumentController extends BackendController
);
}

$userProducer = $userProducerManager->findOneUserProducer($document->user, $this->getProducerCurrent());
$userProducer = $userProducerManager->findOneUserProducer($document->user);
$pointSale = $pointSaleManager->findOnePointSaleByIdUser($document->user->id);

$productsArray = yii\helpers\ArrayHelper::map(

+ 7
- 9
backend/controllers/OrderController.php Näytä tiedosto

@@ -423,7 +423,7 @@ class OrderController extends BackendController
$productManager = $this->getProductManager();
$productDistributionManager = $this->getProductDistributionManager();

$distribution = $distributionManager->findOneDistributionByDate($date);
$distribution = $distributionManager->findOneDistribution($date);
$selectedProductsArray = $productDistributionManager->findProductDistributionsByDistribution($distribution);
$productsArray = $productManager->findProducts();
$ordersArray = $orderManager->findOrdersByDate($date);
@@ -549,7 +549,7 @@ class OrderController extends BackendController
$data = [];
$filename = 'summary_' . $date;

$distribution = $distributionManager->findOneDistributionByDate($date);
$distribution = $distributionManager->findOneDistribution($date);
$selectedProductsArray = $productDistributionManager->findProductDistributionsByDistribution($distribution);

// head
@@ -608,7 +608,7 @@ class OrderController extends BackendController
$productDistributionManager = $this->getProductDistributionManager();

$data = [];
$distribution = $distributionManager->findOneDistributionByDate($date);
$distribution = $distributionManager->findOneDistribution($date);
$selectedProductsArray = $productDistributionManager->findProductDistributionsByDistribution($distribution);

// datas
@@ -782,7 +782,7 @@ class OrderController extends BackendController

$products = json_decode($products);
$pointSale = $pointSaleManager->findOnePointSaleById($idPointSale);
$distribution = $distributionManager->findOneDistributionByDate($date);
$distribution = $distributionManager->findOneDistribution($date);
$producerCurrent = $this->getProducerCurrent();

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)
@@ -821,10 +821,7 @@ class OrderController extends BackendController
if (isset($order->user) && $order->user) {
$user = $order->user;

$userProducer = $userProducerManager->findOneUserProducer(
$user,
$producerManager->findOneProducerById($order->distribution->id_producer)
);
$userProducer = $userProducerManager->findOneUserProducer($user);
}

foreach ($products as $key => $dataProductOrder) {
@@ -891,6 +888,7 @@ class OrderController extends BackendController
$pointSaleManager = $this->getPointSaleManager();
$userPointSaleManager = $this->getUserPointSaleManager();
$creditHistoryManager = $this->getCreditHistoryManager();
$productManager = $this->getProductManager();

$request = \Yii::$app->request;
$date = $request->post('date');
@@ -968,7 +966,7 @@ class OrderController extends BackendController
if ($dataProductOrder->price) {
$productOrder->price = $dataProductOrder->price;
} else {
$productOrder->price = $product->getPrice([
$productOrder->price = $productManager->getPrice($product, [
'user' => $user,
'user_producer' => $userProducer,
'point_sale' => $order->pointSale,

+ 4
- 3
backend/controllers/UserController.php Näytä tiedosto

@@ -146,7 +146,7 @@ class UserController extends BackendController
$model->user_groups[] = $userUserGroup->id_user_group;
}
}
$userProducer = $userProducerManager->findOneUserProducer($model, $producerCurrent);
$userProducer = $userProducerManager->findOneUserProducer($model);
$model->product_price_percent = $userProducer->product_price_percent;
}

@@ -178,6 +178,7 @@ class UserController extends BackendController
{
$userManager = $this->getUserManager();
$producerManager = $this->getProducerManager();
$pointSaleManager = $this->getPointSaleManager();

$producerCurrent = $this->getProducerCurrent();
$model = $userManager->instanciateUser();
@@ -374,7 +375,7 @@ class UserController extends BackendController

$user = $userManager->findOneUserById($id);
$producer = $this->getProducerCurrent();
$userProducer = $userProducerManager->findOneUserProducer($user, $producer);
$userProducer = $userProducerManager->findOneUserProducer($user);

if ($userProducer) {
$userProducer->active = 0;
@@ -552,7 +553,7 @@ class UserController extends BackendController

$user = $userManager->findOneUserById($idUser);
$producerCurrent = $this->getproducerCurrent();
$userProducer = $userProducerManager->findOneUserProducer($user,$producerCurrent);
$userProducer = $userProducerManager->findOneUserProducer($user);

if ($userProducer) {
$userProducer->credit_active = $state;

+ 1
- 1
backend/views/user/_form.php Näytä tiedosto

@@ -102,7 +102,7 @@ $producerManager = $this->getProducerManager();

<div class="col-md-4">

<?php if($pointSaleBillingArray && count($pointSaleBillingArray) > 0): ?>
<?php if(isset($pointSaleBillingArray) && $pointSaleBillingArray && count($pointSaleBillingArray) > 0): ?>
<h3>Facturation</h3>
<?php foreach($pointSaleBillingArray as $pointSale): ?>
<a href="<?= Yii::$app->urlManager->createUrl(['point-sale/update', 'id' => $pointSale->id]) ?>"><?= $pointSale->name ?></a><br />

+ 1
- 1
backend/views/user/credit.php Näytä tiedosto

@@ -112,7 +112,7 @@ $this->addBreadcrumb('Créditer') ;
</div>
<div class="col-md-8">
<h2>Historique <span class="the-credit"><?= number_format($userManager->getCredit($user, $producer), 2); ?> €</span></h2>
<h2>Historique <span class="the-credit"><?= number_format($userManager->getCredit($user), 2); ?> €</span></h2>
<table class="table table-bordered">
<thead>
<tr>

+ 32
- 2
backend/web/js/vuejs/distribution-index.js Näytä tiedosto

@@ -155,6 +155,7 @@ var app = new Vue({
axios.get("ajax-infos",{params: {date : this.getDate()}})
.then(function(response) {
app.calendar.attrs = [];
app.distribution = response.data.distribution ;
app.producer = response.data.producer ;
app.products = response.data.products ;
@@ -202,13 +203,25 @@ var app = new Vue({
app.calendar.attrs = [] ;
var distributions = response.data.distributions ;
var dayCurrentIsDistributionActive = false;
var dateFormatCompare = false;
if(app.date) {
dateFormatCompare = app.date.getFullYear() + '-'
+ ('0' + (app.date.getMonth() +1)).slice(-2) + '-'
+ ('0' + app.date.getDate()).slice(-2);
}

if(distributions.length) {
for(var i= 0; i < distributions.length; i++) {
app.calendar.attrs.push({
key: distributions[i].date,
highlight: true,
dates: distributions[i].date
}) ;

if(distributions[i].date == dateFormatCompare) {
dayCurrentIsDistributionActive = true;
}
}
}
@@ -226,6 +239,22 @@ var app = new Vue({
}

setTimeout("opendistrib_popover();", 500);

var highlightStyle = {
color: 'orange',
fillMode: 'light'
}
if(dayCurrentIsDistributionActive) {
highlightStyle = {
color: 'orange',
fillMode: 'solid'
}
}
app.calendar.attrs.push({
key: 'current',
highlight: highlightStyle,
dates: app.date
});
}) ;
},
initCountActiveProducts: function() {
@@ -268,14 +297,15 @@ var app = new Vue({
this.init() ;
},
productQuantityMaxChange: function(event) {
var quantityMax = event.currentTarget.value;
axios.get("ajax-process-product-quantity-max",{params: {
idDistribution: this.distribution.id,
idProduct: event.currentTarget.getAttribute('data-id-product'),
quantityMax: event.currentTarget.value
quantityMax: (!quantityMax || quantityMax.length === 0) ? -1 : quantityMax
}})
.then(function(response) {

}) ;
});
},
productActiveClick: function(event) {
var idProduct = event.currentTarget.getAttribute('data-id-product') ;

+ 1
- 1
common/components/BusinessLogic.php Näytä tiedosto

@@ -18,6 +18,7 @@ class BusinessLogic
$this->getCreditHistoryContainer(),
$this->getProducerPriceRangeContainer(),
$this->getUserProducerContainer(),
$this->getUserPointSaleContainer(),
$this->getUserContainer(),
$this->getOrderSatusHistoryContainer(),
$this->getPointSaleDistributionContainer(),
@@ -27,7 +28,6 @@ class BusinessLogic
$this->getProductOrderContainer(),
$this->getProductPriceContainer(),
$this->getProductSubscriptionContainer(),
$this->getUserPointSaleContainer(),
$this->getQuotationContainer(),
$this->getInvoiceContainer(),
$this->getDeliveryNoteContainer(),

+ 1
- 1
common/config/params.php Näytä tiedosto

@@ -37,7 +37,7 @@
*/

return [
'version' => '23.6.B',
'version' => '23.7.A',
'adminEmail' => 'contact@opendistrib.net',
'supportEmail' => 'contact@opendistrib.net',
'user.passwordResetTokenExpire' => 3600,

+ 4
- 1
common/logic/AbstractContainer.php Näytä tiedosto

@@ -4,5 +4,8 @@ namespace common\logic;

abstract class AbstractContainer extends AbstractSingleton implements ContainerInterface
{

public function getEntityFqcn(): string
{
return $this->getDefinition()->getEntityFqcn();
}
}

+ 10
- 0
common/logic/AbstractDefinition.php Näytä tiedosto

@@ -0,0 +1,10 @@
<?php

namespace common\logic;

use yii\db\ActiveRecord;

abstract class AbstractDefinition extends AbstractService implements DefinitionInterface
{

}

+ 44
- 0
common/logic/AbstractRepository.php Näytä tiedosto

@@ -4,5 +4,49 @@ namespace common\logic;

abstract class AbstractRepository extends AbstractService implements RepositoryInterface
{
const WITH = 'with';
const JOIN_WITH = 'join_with';
const ORDER_BY = 'orderby';
const ATTRIBUTE_ID_PRODUCER = 'attribute_id_producer';

public function loadQuery(string $serviceClass)
{
$this->query = $this->loadService($serviceClass);
}

public function createQuery()
{
$this->query->createQuery();

return $this->query;
}

public function createDefaultQuery(): RepositoryQueryInterface
{
$this->createQuery();

$defaultOptions = $this->getDefaultOptionsSearch();

// with
if (is_array($defaultOptions['with']) && count($defaultOptions['with'])) {
$this->query->with($defaultOptions['with']);
}

// join with
if (is_array($defaultOptions['join_with']) && count($defaultOptions['join_with'])) {
$this->query->joinWith($defaultOptions['join_with']);
}

// id producer contexte
if(isset($defaultOptions['attribute_id_producer']) && $defaultOptions['attribute_id_producer']) {
$this->query->andWhere([$defaultOptions['attribute_id_producer'] => $this->getProducerContextId()]);
}

// order by
if(isset($defaultOptions['orderby']) && $defaultOptions['orderby']) {
$this->query->orderBy($defaultOptions['orderby']);
}

return $this->query;
}
}

+ 70
- 1
common/logic/AbstractRepositoryQuery.php Näytä tiedosto

@@ -2,7 +2,76 @@

namespace common\logic;

class AbstractRepositoryQuery extends AbstractService implements RepositoryQueryInterface
use common\components\ActiveRecordCommon;
use common\logic\Distribution\Distribution\Service\DistributionDefinition;
use yii\db\ActiveQuery;

abstract class AbstractRepositoryQuery extends AbstractService implements RepositoryQueryInterface
{
protected ActiveQuery $query;

public function loadDefinition(string $serviceClass): void
{
$this->definition = $this->loadService($serviceClass);
}

public function baseQuery(): ActiveQuery
{
$class = $this->definition->getEntityFqcn();
return $class::find();
}

public function createQuery(): self
{
$this->query = $this->baseQuery();

return $this;
}

public function __call(string $name, $params): self
{
call_user_func_array([$this->query, $name], $params);

return $this;
}

public function query()
{
return $this->query;
}

public function count()
{
$class = $this->definition->getEntityFqcn();
$class::groupByPrimaryKey($class, $this->query);

return $this->query->count();
}

public function find()
{
return $this->query->all();
}

public function findOne()
{
return $this->query->one();
}

public function filterById(int $id): self
{
$class = $this->definition->getEntityFqcn();
$this->query->andWhere([$class::tableName().'.id' => $id]);

return $this;
}

public function filterByCondition(string $condition = ''): self
{
if($condition && strlen($condition) > 0) {
$this->andWhere($condition);
}

return $this;
}
}

+ 1
- 0
common/logic/AbstractService.php Näytä tiedosto

@@ -11,6 +11,7 @@ abstract class AbstractService extends AbstractSingleton implements ServiceInter
protected function getHierarchy(): array
{
return [
DefinitionInterface::class,
SolverInterface::class,
RepositoryQueryInterface::class,
RepositoryInterface::class,

+ 2
- 2
common/logic/AbstractSingleton.php Näytä tiedosto

@@ -10,10 +10,10 @@ abstract class AbstractSingleton
{
}

final public function __clone()
/*final public function __clone()
{
trigger_error("Le clonage n'est pas autorisé.", E_USER_ERROR);
}
}*/

final public static function getInstance(): self
{

+ 12
- 10
common/logic/Config/TaxRate/Repository/TaxRateRepository.php Näytä tiedosto

@@ -11,36 +11,38 @@ class TaxRateRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(TaxRateRepositoryQuery::class);
$this->loadQuery(TaxRateRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => 'pourcent ASC',
'attribute_id_producer' => ''
] ;
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => 'pourcent ASC',
self::ATTRIBUTE_ID_PRODUCER => ''
];
}

public function findOneTaxRateById(int $id): ?TaxRate
{
return TaxRate::searchOne(['id' => $id]);
return $this->createQuery()
->filterById($id)
->findOne();
}

public function findTaxRates(): array
{
return TaxRate::find()->all();
return $this->createQuery()
->find();
}

// getTaxRateArray
public function findTaxRatesAsArray(): array
{
$taxRateArrayReturn = [];
$taxRateArray = $this->findTaxRates();

foreach($taxRateArray as $taxRate) {
foreach ($taxRateArray as $taxRate) {
$taxRateArrayReturn[$taxRate->id] = $taxRate;
}


+ 6
- 0
common/logic/Config/TaxRate/Repository/TaxRateRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,14 @@
namespace common\logic\Config\TaxRate\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Config\TaxRate\Service\TaxRateDefinition;

class TaxRateRepositoryQuery extends AbstractRepositoryQuery
{
protected TaxRateDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(TaxRateDefinition::class);
}
}

+ 14
- 0
common/logic/Config/TaxRate/Service/TaxRateDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Config\TaxRate\Service;

use common\logic\AbstractDefinition;
use common\logic\Config\TaxRate\Model\TaxRate;

class TaxRateDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return TaxRate::class;
}
}

+ 7
- 6
common/logic/Config/TaxRate/Wrapper/TaxRateContainer.php Näytä tiedosto

@@ -3,25 +3,26 @@
namespace common\logic\Config\TaxRate\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Config\TaxRate\Model\TaxRate;
use common\logic\Config\TaxRate\Repository\TaxRateRepository;
use common\logic\Config\TaxRate\Service\TaxRateBuilder;
use common\logic\Config\TaxRate\Service\TaxRateDefinition;

class TaxRateContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return TaxRate::class;
}

public function getServices(): array
{
return [
TaxRateDefinition::class,
TaxRateBuilder::class,
TaxRateRepository::class,
];
}

public function getDefinition(): TaxRateDefinition
{
return TaxRateDefinition::getInstance();
}

public function getBuilder(): TaxRateBuilder
{
return TaxRateBuilder::getInstance();

+ 2
- 0
common/logic/Config/TaxRate/Wrapper/TaxRateManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Config\TaxRate\Wrapper;
use common\logic\AbstractManager;
use common\logic\Config\TaxRate\Repository\TaxRateRepository;
use common\logic\Config\TaxRate\Service\TaxRateBuilder;
use common\logic\Config\TaxRate\Service\TaxRateDefinition;

/**
* @mixin TaxRateDefinition
* @mixin TaxRateRepository
* @mixin TaxRateBuilder
*/

+ 1
- 1
common/logic/ContainerInterface.php Näytä tiedosto

@@ -4,6 +4,6 @@ namespace common\logic;

interface ContainerInterface
{
public function getEntityFqcn(): string;
public function getServices(): array;
public function getDefinition(): DefinitionInterface;
}

+ 8
- 0
common/logic/DefinitionInterface.php Näytä tiedosto

@@ -0,0 +1,8 @@
<?php

namespace common\logic;

interface DefinitionInterface
{
public function getEntityFqcn(): string;
}

+ 36
- 71
common/logic/Distribution/Distribution/Repository/DistributionRepository.php Näytä tiedosto

@@ -2,11 +2,10 @@

namespace common\logic\Distribution\Distribution\Repository;

use common\helpers\GlobalParam;
use common\logic\AbstractRepository;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Distribution\Distribution\Service\DistributionSolver;
use common\logic\Producer\Producer\Model\Producer;
use common\logic\RepositoryQueryInterface;
use common\logic\Subscription\Subscription\Model\Subscription;
use common\logic\Subscription\Subscription\Service\SubscriptionSolver;

@@ -18,7 +17,7 @@ class DistributionRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(DistributionRepositoryQuery::class);
$this->loadQuery(DistributionRepositoryQuery::class);
$this->distributionSolver = $this->loadService(DistributionSolver::class);
$this->subscriptionSolver = $this->loadService(SubscriptionSolver::class);
}
@@ -26,62 +25,50 @@ class DistributionRepository extends AbstractRepository
public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => 'date ASC',
'attribute_id_producer' => 'distribution.id_producer'
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => 'date ASC',
self::ATTRIBUTE_ID_PRODUCER => 'distribution.id_producer'
];
}

public function findOneDistributionById(int $id): ?Distribution
{
return Distribution::searchOne([
'id' => $id
]);
return $this->createQuery()
->filterById($id)
->findOne();
}

public function findOneDistribution(string $date, bool $active = null): ?Distribution
{
$paramsDistribution = [
'date' => $date,
'distribution.id_producer' => $this->getProducerContext()->id
];

$query = $this->createDefaultQuery();
$query->filterByDate($date);
if(!is_null($active)) {
$paramsDistribution['active'] = $active;
$query->filterByActive($active);
}

return Distribution::searchOne($paramsDistribution);
}

public function findOneDistributionByDate(string $date): ?Distribution
{
return Distribution::searchOne([
'distribution.date' => $date
]);
return $query->findOne();
}

public function findOneFirstDistribution(): ?Distribution
{
return Distribution::searchOne([], [
'orderby' => 'date ASC'
]);
return $this->createDefaultQuery()
->orderBy('date ASC')
->findOne();
}

public function findOneLastDistribution(): ?Distribution
{
return Distribution::searchOne([], [
'orderby' => 'date DESC'
]);
return $this->createDefaultQuery()
->orderBy('date DESC')
->findOne();
}

public function findDistributionsActive(): array
{
return Distribution::searchAll([
'active' => 1
], [
'orderby' => 'date ASC',
]);
return $this->createDefaultQuery()
->filterByActive(true)
->orderBy('date ASC')
->find();
}

/**
@@ -89,51 +76,34 @@ class DistributionRepository extends AbstractRepository
*/
public function findDistributionsIncoming($ignoreActive = false): array
{
$paramsWhere = [
'id_producer' => $this->getProducerContext()->id,
];
$query = $this->createDefaultQuery();

if(!$ignoreActive) {
$paramsWhere['active'] = 1;
$query->filterByActive(true);
}

$distributionsArray = Distribution::find()
->where('date > \'' . date('Y-m-d') . '\'')
->andWhere($paramsWhere)
->orderBy('date ASC')
->all();
$query
->filterByDateBetterThanToday()
->orderBy('date ASC');

return $distributionsArray;
return $query->find();
}

/**
* Recherche les distributions futures où l'abonnement peut s'appliquer.
*/
// searchMatchedIncomingDistributions
public function findDistributionsIncomingMatchWithSubscrtiption(Subscription $subscription, bool $filterByOrderDeadline = false): array
{
$params = [
':date_earliest_order' => date('Y-m-d'),
':date_begin' => date('Y-m-d', strtotime($subscription->date_begin)),
':id_producer' => GlobalParam::getCurrentProducerId()
];

$incomingDistributions = Distribution::find()
->where('id_producer = :id_producer')
->andWhere('date >= :date_begin')
->andWhere('date > :date_earliest_order');
$incomingDistributionsArray = $this->createDefaultQuery()
->filterByDateBetterThanToday()
->filterBySubscriptionDates($subscription)
->find();

if ($subscription->date_end) {
$incomingDistributions->andWhere('date <= :date_end');
$params[':date_end'] = date('Y-m-d', strtotime($subscription->date_end));
if($filterByOrderDeadline) {
$incomingDistributionsArray = $this->distributionSolver
->filterDistributionsByDateDelay($incomingDistributionsArray);
}

$incomingDistributions->orderBy('date ASC');

$incomingDistributions->params($params);
$incomingDistributionsArray = $incomingDistributions->all();
$this->distributionSolver->filterDistributionsByDateDelay($incomingDistributionsArray);

$matchedIncomingDistributionsArray = [];
foreach ($incomingDistributionsArray as $incomingDistribution) {
if ($this->subscriptionSolver->isSubscriptionMatchWith($subscription, $incomingDistribution->date)) {
@@ -141,14 +111,9 @@ class DistributionRepository extends AbstractRepository
}
}

if($filterByOrderDeadline) {
$matchedIncomingDistributionsArray = $this->distributionSolver->filterDistributionsByDateDelay($matchedIncomingDistributionsArray);
}

return $matchedIncomingDistributionsArray;
}

// isDateAvailable
public function isDistributionDateAvailable(string $date = null): bool
{
if($date && strlen($date)) {

+ 49
- 0
common/logic/Distribution/Distribution/Repository/DistributionRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,57 @@
namespace common\logic\Distribution\Distribution\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Distribution\Distribution\Service\DistributionDefinition;
use common\logic\Subscription\Subscription\Model\Subscription;

class DistributionRepositoryQuery extends AbstractRepositoryQuery
{
protected DistributionDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(DistributionDefinition::class);
}

public function filterByDate(string $date): self
{
$this->query->andWhere(['date' => $date]);

return $this;
}

public function filterByActive(bool $active): self
{
$this->query->andWhere(['active' => $active]);

return $this;
}

public function filterByDateBetterThanToday(): self
{
$this->query
->andWhere('date > :date')
->addParams(['date' => date('Y-m-d') ]);

return $this;
}

public function filterBySubscriptionDates(Subscription $subscription): self
{
$this->query
->andWhere('date >= :date_begin')
->addParams([
'date_begin' => date('Y-m-d', strtotime($subscription->date_begin)),
]);

if($subscription->date_end) {
$this->query
->andWhere('date <= :date_end')
->addParams([
'date_end' => date('Y-m-d', strtotime($subscription->date_end))
]);
}

return $this;
}
}

+ 2
- 2
common/logic/Distribution/Distribution/Service/DistributionBuilder.php Näytä tiedosto

@@ -152,7 +152,7 @@ class DistributionBuilder extends AbstractBuilder

public function updateOrderProductPrices(Distribution $distribution, Product $product): void
{
$ordersArray = $this->orderRepository->findOrdersByDistribution($distribution, 'AND origin != "user"');
$ordersArray = $this->orderRepository->findOrdersByDistribution($distribution, 'origin != "user"');

if ($ordersArray) {
foreach ($ordersArray as $order) {
@@ -163,7 +163,7 @@ class DistributionBuilder extends AbstractBuilder
$userProducer = null;
if (isset($order->user) && $order->user) {
$user = $order->user;
$userProducer = $this->userProducerRepository->findOneUserProducer($user, $distribution->producer);
$userProducer = $this->userProducerRepository->findOneUserProducer($user);
}

$this->productOrderBuilder->updateProductOrderPrice(

+ 14
- 0
common/logic/Distribution/Distribution/Service/DistributionDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Distribution\Distribution\Service;

use common\logic\AbstractDefinition;
use common\logic\Distribution\Distribution\Model\Distribution;

class DistributionDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Distribution::class;
}
}

+ 7
- 6
common/logic/Distribution/Distribution/Wrapper/DistributionContainer.php Näytä tiedosto

@@ -3,27 +3,28 @@
namespace common\logic\Distribution\Distribution\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Distribution\Distribution\Repository\DistributionRepository;
use common\logic\Distribution\Distribution\Service\DistributionBuilder;
use common\logic\Distribution\Distribution\Service\DistributionDefinition;
use common\logic\Distribution\Distribution\Service\DistributionSolver;

class DistributionContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Distribution::class;
}

public function getServices(): array
{
return [
DistributionDefinition::class,
DistributionSolver::class,
DistributionRepository::class,
DistributionBuilder::class
];
}

public function getDefinition(): DistributionDefinition
{
return DistributionDefinition::getInstance();
}

public function getSolver(): DistributionSolver
{
return DistributionSolver::getInstance();

+ 2
- 0
common/logic/Distribution/Distribution/Wrapper/DistributionManager.php Näytä tiedosto

@@ -5,9 +5,11 @@ namespace common\logic\Distribution\Distribution\Wrapper;
use common\logic\AbstractManager;
use common\logic\Distribution\Distribution\Repository\DistributionRepository;
use common\logic\Distribution\Distribution\Service\DistributionBuilder;
use common\logic\Distribution\Distribution\Service\DistributionDefinition;
use common\logic\Distribution\Distribution\Service\DistributionSolver;

/**
* @mixin DistributionDefinition
* @mixin DistributionSolver
* @mixin DistributionRepository
* @mixin DistributionBuilder

+ 16
- 16
common/logic/Distribution/PointSaleDistribution/Repository/PointSaleDistributionRepository.php Näytä tiedosto

@@ -13,38 +13,38 @@ class PointSaleDistributionRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(PointSaleDistributionRepositoryQuery::class);
$this->loadQuery(PointSaleDistributionRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => ['distribution', 'pointSale'],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
] ;
self::WITH => ['distribution', 'pointSale'],
self::JOIN_WITH => [],
self::ORDER_BY => '',
self::ATTRIBUTE_ID_PRODUCER => ''
];
}

public function findOnePointSaleDistribution(Distribution $distribution, PointSale $pointSale): ?PointSaleDistribution
{
return PointSaleDistribution::searchOne([
'id_distribution' => $distribution->id,
'id_point_sale' => $pointSale->id
]);
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->filterByPointSale($pointSale)
->findOne();
}

public function findPointSaleDistributionsByDistribution(Distribution $distribution): array
{
return PointSaleDistribution::searchAll([
'id_distribution' => $distribution->id
]) ;
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->find();
}

public function countPointSaleDistributionsByDistribution(Distribution $distribution): int
{
return PointSaleDistribution::searchCount([
'id_distribution' => $distribution->id
]);
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->count();
}
}

+ 23
- 0
common/logic/Distribution/PointSaleDistribution/Repository/PointSaleDistributionRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,31 @@
namespace common\logic\Distribution\PointSaleDistribution\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Distribution\PointSaleDistribution\Service\PointSaleDistributionDefinition;
use common\logic\PointSale\PointSale\Model\PointSale;
use yii\db\ActiveQuery;

class PointSaleDistributionRepositoryQuery extends AbstractRepositoryQuery
{
protected PointSaleDistributionDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(PointSaleDistributionDefinition::class);
}

public function filterByDistribution(Distribution $distribution): self
{
$this->andWhere(['id_distribution' => $distribution->id]);

return $this;
}

public function filterByPointSale(PointSale $pointSale): self
{
$this->andWhere(['id_point_sale' => $pointSale->id]);

return $this;
}
}

+ 14
- 0
common/logic/Distribution/PointSaleDistribution/Service/PointSaleDistributionDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Distribution\PointSaleDistribution\Service;

use common\logic\AbstractDefinition;
use common\logic\Distribution\PointSaleDistribution\Model\PointSaleDistribution;

class PointSaleDistributionDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return PointSaleDistribution::class;
}
}

+ 7
- 6
common/logic/Distribution/PointSaleDistribution/Wrapper/PointSaleDistributionContainer.php Näytä tiedosto

@@ -3,25 +3,26 @@
namespace common\logic\Distribution\PointSaleDistribution\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Distribution\PointSaleDistribution\Model\PointSaleDistribution;
use common\logic\Distribution\PointSaleDistribution\Repository\PointSaleDistributionRepository;
use common\logic\Distribution\PointSaleDistribution\Service\PointSaleDistributionBuilder;
use common\logic\Distribution\PointSaleDistribution\Service\PointSaleDistributionDefinition;

class PointSaleDistributionContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return PointSaleDistribution::class;
}

public function getServices(): array
{
return [
PointSaleDistributionDefinition::class,
PointSaleDistributionRepository::class,
PointSaleDistributionBuilder::class,
];
}

public function getDefinition(): PointSaleDistributionDefinition
{
return PointSaleDistributionDefinition::getInstance();
}

public function getRepository(): PointSaleDistributionRepository
{
return PointSaleDistributionRepository::getInstance();

+ 2
- 0
common/logic/Distribution/PointSaleDistribution/Wrapper/PointSaleDistributionManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Distribution\PointSaleDistribution\Wrapper;
use common\logic\AbstractManager;
use common\logic\Distribution\PointSaleDistribution\Repository\PointSaleDistributionRepository;
use common\logic\Distribution\PointSaleDistribution\Service\PointSaleDistributionBuilder;
use common\logic\Distribution\PointSaleDistribution\Service\PointSaleDistributionDefinition;

/**
* @mixin PointSaleDistributionDefinition
* @mixin PointSaleDistributionRepository
* @mixin PointSaleDistributionBuilder
*/

+ 15
- 15
common/logic/Distribution/ProductDistribution/Repository/ProductDistributionRepository.php Näytä tiedosto

@@ -13,38 +13,38 @@ class ProductDistributionRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProductDistributionRepositoryQuery::class);
$this->loadQuery(ProductDistributionRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => ['product','distribution'],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
self::WITH => ['product','distribution'],
self::JOIN_WITH => [],
self::ORDER_BY => '',
self::ATTRIBUTE_ID_PRODUCER => ''
] ;
}

public function findOneProductDistribution(Distribution $distribution, Product $product): ?ProductDistribution
{
return ProductDistribution::searchOne([
'id_distribution' => $distribution->id,
'id_product' => $product->id
]);
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->filterByProduct($product)
->findOne();
}

public function findProductDistributionsByDistribution(Distribution $distribution): array
{
return ProductDistribution::searchAll([
'id_distribution' => $distribution->id
]) ;
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->find();
}

public function countProductDistributionsByDistribution(Distribution $distribution): int
{
return ProductDistribution::searchCount([
'id_distribution' => $distribution->id
]);
return $this->createDefaultQuery()
->filterByDistribution($distribution)
->count();
}
}

+ 24
- 0
common/logic/Distribution/ProductDistribution/Repository/ProductDistributionRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,32 @@
namespace common\logic\Distribution\ProductDistribution\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Distribution\ProductDistribution\Model\ProductDistribution;
use common\logic\Distribution\ProductDistribution\Service\ProductDistributionDefinition;
use common\logic\Product\Product\Model\Product;
use yii\db\ActiveQuery;

class ProductDistributionRepositoryQuery extends AbstractRepositoryQuery
{
protected ProductDistributionDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProductDistributionDefinition::class);
}

public function filterByDistribution(Distribution $distribution): self
{
$this->andWhere(['id_distribution' => $distribution->id]);

return $this;
}

public function filterByProduct(Product $product): self
{
$this->andWhere(['id_product' => $product->id]);

return $this;
}
}

+ 14
- 0
common/logic/Distribution/ProductDistribution/Service/ProductDistributionDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Distribution\ProductDistribution\Service;

use common\logic\AbstractDefinition;
use common\logic\Distribution\ProductDistribution\Model\ProductDistribution;

class ProductDistributionDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return ProductDistribution::class;
}
}

+ 7
- 5
common/logic/Distribution/ProductDistribution/Wrapper/ProductDistributionContainer.php Näytä tiedosto

@@ -6,22 +6,24 @@ use common\logic\AbstractContainer;
use common\logic\Distribution\ProductDistribution\Model\ProductDistribution;
use common\logic\Distribution\ProductDistribution\Repository\ProductDistributionRepository;
use common\logic\Distribution\ProductDistribution\Service\ProductDistributionBuilder;
use common\logic\Distribution\ProductDistribution\Service\ProductDistributionDefinition;

class ProductDistributionContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return ProductDistribution::class;
}

public function getServices(): array
{
return [
ProductDistributionDefinition::class,
ProductDistributionRepository::class,
ProductDistributionBuilder::class,
];
}

public function getDefinition(): ProductDistributionDefinition
{
return ProductDistributionDefinition::getInstance();
}

public function getRepository(): ProductDistributionRepository
{
return ProductDistributionRepository::getInstance();

+ 2
- 0
common/logic/Distribution/ProductDistribution/Wrapper/ProductDistributionManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Distribution\ProductDistribution\Wrapper;
use common\logic\AbstractManager;
use common\logic\Distribution\ProductDistribution\Repository\ProductDistributionRepository;
use common\logic\Distribution\ProductDistribution\Service\ProductDistributionBuilder;
use common\logic\Distribution\ProductDistribution\Service\ProductDistributionDefinition;

/**
* @mixin ProductDistributionDefinition
* @mixin ProductDistributionRepository
* @mixin ProductDistributionBuilder
*/

+ 8
- 6
common/logic/Document/DeliveryNote/Repository/DeliveryNoteRepository.php Näytä tiedosto

@@ -11,21 +11,23 @@ class DeliveryNoteRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(DeliveryNoteRepositoryQuery::class);
$this->loadQuery(DeliveryNoteRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => ['user AS user_delivery_note', 'producer'],
'orderby' => 'date ASC',
'attribute_id_producer' => 'delivery_note.id_producer'
self::WITH => [],
self::JOIN_WITH => ['user AS user_delivery_note', 'producer'],
self::ORDER_BY => 'date ASC',
self::ATTRIBUTE_ID_PRODUCER => 'delivery_note.id_producer'
];
}

public function findOneDeliveryNoteById(int $id): ?DeliveryNote
{
return DeliveryNote::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}
}

+ 6
- 0
common/logic/Document/DeliveryNote/Repository/DeliveryNoteRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,14 @@
namespace common\logic\Document\DeliveryNote\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteDefinition;

class DeliveryNoteRepositoryQuery extends AbstractRepositoryQuery
{
protected DeliveryNoteDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(DeliveryNoteDefinition::class);
}
}

+ 14
- 0
common/logic/Document/DeliveryNote/Service/DeliveryNoteDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Document\DeliveryNote\Service;

use common\logic\AbstractDefinition;
use common\logic\Document\DeliveryNote\Model\DeliveryNote;

class DeliveryNoteDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return DeliveryNote::class;
}
}

+ 7
- 6
common/logic/Document/DeliveryNote/Wrapper/DeliveryNoteContainer.php Näytä tiedosto

@@ -3,27 +3,28 @@
namespace common\logic\Document\DeliveryNote\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Document\DeliveryNote\Model\DeliveryNote;
use common\logic\Document\DeliveryNote\Repository\DeliveryNoteRepository;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteBuilder;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteDefinition;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteSolver;

class DeliveryNoteContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return DeliveryNote::class;
}

public function getServices(): array
{
return [
DeliveryNoteDefinition::class,
DeliveryNoteSolver::class,
DeliveryNoteRepository::class,
DeliveryNoteBuilder::class,
];
}

public function getDefinition(): DeliveryNoteDefinition
{
return DeliveryNoteDefinition::getInstance();
}

public function getSolver(): DeliveryNoteSolver
{
return DeliveryNoteSolver::getInstance();

+ 2
- 0
common/logic/Document/DeliveryNote/Wrapper/DeliveryNoteManager.php Näytä tiedosto

@@ -4,10 +4,12 @@ namespace common\logic\Document\DeliveryNote\Wrapper;

use common\logic\Document\DeliveryNote\Repository\DeliveryNoteRepository;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteBuilder;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteDefinition;
use common\logic\Document\DeliveryNote\Service\DeliveryNoteSolver;
use common\logic\Document\Document\Wrapper\DocumentManager;

/**
* @mixin DeliveryNoteDefinition
* @mixin DeliveryNoteSolver
* @mixin DeliveryNoteRepository
* @mixin DeliveryNoteBuilder

+ 14
- 0
common/logic/Document/Document/Service/DocumentDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Document\Document\Service;

use common\logic\AbstractDefinition;
use common\logic\Document\Document\Model\Document;

class DocumentDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Document::class;
}
}

+ 8
- 6
common/logic/Document/Document/Wrapper/DocumentContainer.php Näytä tiedosto

@@ -3,22 +3,19 @@
namespace common\logic\Document\Document\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Document\Document\Model\Document;
use common\logic\DefinitionInterface;
use common\logic\Document\Document\Repository\DocumentRepository;
use common\logic\Document\Document\Service\DocumentBuilder;
use common\logic\Document\Document\Service\DocumentDefinition;
use common\logic\Document\Document\Service\DocumentSolver;
use common\logic\Document\Document\Service\DocumentUtils;

class DocumentContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Document::class;
}

public function getServices(): array
{
return [
DocumentDefinition::class,
DocumentSolver::class,
DocumentRepository::class,
DocumentBuilder::class,
@@ -26,6 +23,11 @@ class DocumentContainer extends AbstractContainer
];
}

public function getDefinition(): DefinitionInterface
{
return DocumentDefinition::getInstance();
}

public function getSolver(): DocumentSolver
{
return DocumentSolver::getInstance();

+ 2
- 0
common/logic/Document/Document/Wrapper/DocumentManager.php Näytä tiedosto

@@ -4,10 +4,12 @@ namespace common\logic\Document\Document\Wrapper;

use common\logic\AbstractManager;
use common\logic\Document\Document\Service\DocumentBuilder;
use common\logic\Document\Document\Service\DocumentDefinition;
use common\logic\Document\Document\Service\DocumentSolver;
use common\logic\Document\Document\Service\DocumentUtils;

/**
* @mixin DocumentDefinition
* @mixin DocumentSolver
* @mixin DocumentBuilder
* @mixin DocumentUtils

+ 8
- 6
common/logic/Document/Invoice/Repository/InvoiceRepository.php Näytä tiedosto

@@ -11,21 +11,23 @@ class InvoiceRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(InvoiceRepositoryQuery::class);
$this->loadQuery(InvoiceRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => ['user AS user_invoice', 'producer'],
'orderby' => 'date ASC',
'attribute_id_producer' => 'invoice.id_producer'
self::WITH => [],
self::JOIN_WITH => ['user AS user_invoice', 'producer'],
self::ORDER_BY => 'date ASC',
self::ATTRIBUTE_ID_PRODUCER => 'invoice.id_producer'
];
}

public function findOneInvoiceById(int $id): ?Invoice
{
return Invoice::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}
}

+ 6
- 0
common/logic/Document/Invoice/Repository/InvoiceRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,14 @@
namespace common\logic\Document\Invoice\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Document\Invoice\Service\InvoiceDefinition;

class InvoiceRepositoryQuery extends AbstractRepositoryQuery
{
protected InvoiceDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(InvoiceDefinition::class);
}
}

+ 14
- 0
common/logic/Document/Invoice/Service/InvoiceDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Document\Invoice\Service;

use common\logic\AbstractDefinition;
use common\logic\Document\Invoice\Model\Invoice;

class InvoiceDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Invoice::class;
}
}

+ 7
- 6
common/logic/Document/Invoice/Wrapper/InvoiceContainer.php Näytä tiedosto

@@ -4,26 +4,27 @@ namespace common\logic\Document\Invoice\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Document\Document\Service\DocumentSolver;
use common\logic\Document\Invoice\Model\Invoice;
use common\logic\Document\Invoice\Repository\InvoiceRepository;
use common\logic\Document\Invoice\Service\InvoiceBuilder;
use common\logic\Document\Invoice\Service\InvoiceDefinition;

class InvoiceContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Invoice::class;
}

public function getServices(): array
{
return [
InvoiceDefinition::class,
DocumentSolver::class,
InvoiceRepository::class,
InvoiceBuilder::class,
];
}

public function getDefinition(): InvoiceDefinition
{
return InvoiceDefinition::getInstance();
}

public function getSolver(): DocumentSolver
{
return DocumentSolver::getInstance();

+ 2
- 0
common/logic/Document/Invoice/Wrapper/InvoiceManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Document\Invoice\Wrapper;
use common\logic\Document\Document\Wrapper\DocumentManager;
use common\logic\Document\Invoice\Repository\InvoiceRepository;
use common\logic\Document\Invoice\Service\InvoiceBuilder;
use common\logic\Document\Invoice\Service\InvoiceDefinition;

/**
* @mixin InvoiceDefinition
* @mixin InvoiceRepository
* @mixin InvoiceBuilder
*/

+ 8
- 6
common/logic/Document/Quotation/Repository/QuotationRepository.php Näytä tiedosto

@@ -11,21 +11,23 @@ class QuotationRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(QuotationRepositoryQuery::class);
$this->loadQuery(QuotationRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => ['user AS user_quotation', 'producer'],
'orderby' => 'date ASC',
'attribute_id_producer' => 'quotation.id_producer'
self::WITH => [],
self::JOIN_WITH => ['user AS user_quotation', 'producer'],
self::ORDER_BY => 'date ASC',
self::ATTRIBUTE_ID_PRODUCER => 'quotation.id_producer'
];
}

public function findOneQuotationById(int $id): ?Quotation
{
return Quotation::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}
}

+ 8
- 0
common/logic/Document/Quotation/Repository/QuotationRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,16 @@
namespace common\logic\Document\Quotation\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Document\Quotation\Model\Quotation;
use common\logic\Document\Quotation\Service\QuotationDefinition;
use yii\db\ActiveQuery;

class QuotationRepositoryQuery extends AbstractRepositoryQuery
{
protected QuotationDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(QuotationDefinition::class);
}
}

+ 14
- 0
common/logic/Document/Quotation/Service/QuotationDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Document\Quotation\Service;

use common\logic\AbstractDefinition;
use common\logic\Document\Quotation\Model\Quotation;

class QuotationDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Quotation::class;
}
}

+ 7
- 6
common/logic/Document/Quotation/Wrapper/QuotationContainer.php Näytä tiedosto

@@ -4,26 +4,27 @@ namespace common\logic\Document\Quotation\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Document\Document\Service\DocumentSolver;
use common\logic\Document\Quotation\Model\Quotation;
use common\logic\Document\Quotation\Repository\QuotationRepository;
use common\logic\Document\Quotation\Service\QuotationBuilder;
use common\logic\Document\Quotation\Service\QuotationDefinition;

class QuotationContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Quotation::class;
}

public function getServices(): array
{
return [
QuotationDefinition::class,
DocumentSolver::class,
QuotationRepository::class,
QuotationBuilder::class,
];
}

public function getDefinition(): QuotationDefinition
{
return QuotationDefinition::getInstance();
}

public function getSolver(): DocumentSolver
{
return DocumentSolver::getInstance();

+ 2
- 0
common/logic/Document/Quotation/Wrapper/QuotationManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Document\Quotation\Wrapper;
use common\logic\Document\Document\Wrapper\DocumentManager;
use common\logic\Document\Quotation\Repository\QuotationRepository;
use common\logic\Document\Quotation\Service\QuotationBuilder;
use common\logic\Document\Quotation\Service\QuotationDefinition;

/**
* @mixin QuotationDefinition
* @mixin QuotationRepository
* @mixin QuotationBuilder
*/

+ 75
- 89
common/logic/Order/Order/Repository/OrderRepository.php Näytä tiedosto

@@ -2,21 +2,23 @@

namespace common\logic\Order\Order\Repository;

use common\helpers\GlobalParam;
use common\helpers\MeanPayment;
use common\logic\AbstractRepository;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Distribution\Distribution\Repository\DistributionRepository;
use common\logic\Distribution\ProductDistribution\Repository\ProductDistributionRepository;
use common\logic\Order\Order\Model\Order;
use common\logic\Order\Order\Service\OrderBuilder;
use common\logic\Order\Order\Service\OrderSolver;
use common\logic\Order\ProductOrder\Repository\ProductOrderRepository;
use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\PointSale\Repository\PointSaleRepository;
use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository;
use common\logic\Producer\Producer\Model\Producer;
use common\logic\Producer\Producer\Repository\ProducerRepository;
use common\logic\Product\Product\Model\Product;
use common\logic\Product\Product\Service\ProductSolver;
use common\logic\User\User\Model\User;
use common\logic\User\UserProducer\Model\UserProducer;
use common\logic\User\UserProducer\Repository\UserProducerRepository;
use yii\helpers\Html;

class OrderRepository extends AbstractRepository
@@ -27,120 +29,82 @@ class OrderRepository extends AbstractRepository
protected OrderSolver $orderSolver;
protected ProductDistributionRepository $productDistributionRepository;
protected ProductSolver $productSolver;
protected UserProducerRepository $userProducerRepository;
protected DistributionRepository $distributionRepository;
protected PointSaleRepository $pointSaleRepository;
protected UserPointSaleRepository $userPointSaleRepository;

public function loadDependencies(): void
{
$this->query = $this->loadService(OrderRepositoryQuery::class);
$this->loadQuery(OrderRepositoryQuery::class);
$this->productOrderRepository = $this->loadService(ProductOrderRepository::class);
$this->producerRepository = $this->loadService(ProducerRepository::class);
$this->orderSolver = $this->loadService(OrderSolver::class);
$this->productDistributionRepository = $this->loadService(ProductDistributionRepository::class);
$this->productSolver = $this->loadService(ProductSolver::class);
$this->userProducerRepository = $this->loadService(UserProducerRepository::class);
$this->distributionRepository = $this->loadService(DistributionRepository::class);
$this->pointSaleRepository = $this->loadService(PointSaleRepository::class);
$this->userPointSaleRepository = $this->loadService(UserPointSaleRepository::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [
self::WITH => [
'productOrder',
'productOrder.product',
'creditHistory',
'creditHistory.userAction',
'pointSale'
],
'join_with' => [
self::JOIN_WITH => [
'distribution',
'user',
'user.userProducer'
],
'orderby' => 'order.date ASC',
'attribute_id_producer' => 'distribution.id_producer'
self::ORDER_BY => 'order.date ASC',
self::ATTRIBUTE_ID_PRODUCER => 'distribution.id_producer'
];
}

public function findOneOrderById(int $id)
{
return Order::searchOne(['order.id' => $id]);;
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function findOrdersByDate(string $date): array
{
return Order::searchAll([
'distribution.date' => $date
]);
return $this->createDefaultQuery()
->filterByDistributionDate($date)
->find();
}

/**
* Recherche et initialise des commandes.
*/
// searchBy
// findBy
public function findOrdersBy(array $params = [], array $options = [])
{
$orderBuilder = OrderBuilder::getInstance();
$orders = Order::searchBy($params, $options);

/*
* Initialisation des commandes
*/
if (is_array($orders)) {
if (count($orders)) {
foreach ($orders as $order) {
if (is_a($order, 'common\logic\Order\Order\Model\Order')) {
$orderBuilder->initOrder($order);
}
}
return $orders;
}
} else {
$order = $orders;
if (is_a($order, 'common\logic\Order\Order\Model\Order')) {
$orderBuilder->initOrder($order);
return $order;
} // count
else {
return $order;
}
}

return false;
}

// findByDistribution
public function findOrdersByDistribution(Distribution $distribution, string $conditionAppend = '')
{
return Order::searchAll([
'distribution.date' => $distribution->date,
'distribution.id_producer' => $distribution->id_producer
],
[
'conditions' => 'date_delete IS NULL ' . $conditionAppend
]);
return $this->createDefaultQuery()
->filterByDistributionDate($distribution->date)
->filterIsValid()
->filterByCondition($conditionAppend)
->find();
}

// queryHistory
public function queryOrdersHistory(Producer $producer, User $user)
{
$query = Order::find()
->with('productOrder', 'pointSale', 'creditHistory')
->joinWith('distribution', 'distribution.producer')
->where([
'id_user' => $user->id,
'distribution.id_producer' => $producer->id
])
->params([':date_today' => date('Y-m-d')]);

$queryIncoming = clone $query;
$queryIncoming
->andWhere('distribution.date >= :date_today')
->orderBy('distribution.date ASC');

$queryPassed = clone $query;
$queryPassed
->andWhere('distribution.date < :date_today')
->orderBy('distribution.date DESC');

return ['incoming' => $queryIncoming, 'passed' => $queryPassed];
$queryIncoming = clone $this->createDefaultQuery()
->filterByUser($user)
->filterIsIncoming();

$queryPassed = clone $this->createDefaultQuery()
->filterByUser($user)
->filterIsPassed();

return [
'incoming' => $queryIncoming,
'passed' => $queryPassed
];
}

/**
@@ -274,17 +238,14 @@ class OrderRepository extends AbstractRepository

public function findOneOrderLastOfYear(Producer $producer)
{
return Order::find()->innerJoinWith('distribution', true)
return $this->createDefaultQuery()
->innerJoinWith('distribution', true)
->where(['>=', 'distribution.date', date('Y') . '-01-01'])
->andWhere([
'distribution.id_producer' => $producer->id
])
->andWhere(['not', ['order.reference' => null]])
->orderBy('order.reference DESC')
->one();
->findOne();
}

// searchByDistribution
public function findProductDistributionsByDistribution(Distribution $distribution): array
{
$orderArray = $this->findOrdersByDistribution($distribution);
@@ -307,8 +268,8 @@ class OrderRepository extends AbstractRepository

public function isCreditAutoPayment(Order $order)
{
$pointSale = PointSale::findOne($order->id_point_sale);
$distribution = Distribution::findOne($order->id_distribution);
$pointSale = $this->pointSaleRepository->findOnePointSaleById($order->id_point_sale);
$distribution = $this->distributionRepository->findOneDistributionById($order->id_distribution);

if($pointSale) {
$creditFunctioning = $this->producerRepository->getPointSaleCreditFunctioning($pointSale);
@@ -321,10 +282,7 @@ class OrderRepository extends AbstractRepository
return 0;
}
elseif ($creditFunctioning == Producer::CREDIT_FUNCTIONING_USER) {
$userProducer = UserProducer::searchOne([
'id_user' => $order->id_user,
'id_producer' => $distribution->id_producer
]);
$userProducer = $this->userProducerRepository->findOneUserProducer($order->user);
if ($userProducer) {
return $userProducer->credit_active;
}
@@ -335,4 +293,32 @@ class OrderRepository extends AbstractRepository
return 0;
}

public function findOneOrderLastByUser(User $user)
{
return $this->createDefaultQuery()
->filterByUser($user)
->orderBy('order.id DESC')
->findOne();
}

/**
* Retourne le point de vente favoris d'un utilisateur : le point de vente auquel le client est lié,
* le point de vente de la dernière commande sinon.
*/
public function getUserFavoritePointSale(User $user): ?PointSale
{
$pointSale = null;
$arrayUserPointSale = $this->userPointSaleRepository->findUserPointSalesByUser($user);

if (count($arrayUserPointSale) == 1) {
$pointSale = $this->pointSaleRepository->findOnePointSaleById($arrayUserPointSale[0]->id_point_sale);
} else {
$lastOrder = $this->findOneOrderLastByUser($user);
if ($lastOrder) {
$pointSale = $this->pointSaleRepository->findOnePointSaleById($lastOrder->id_point_sale);
}
}

return $pointSale;
}
}

+ 51
- 0
common/logic/Order/Order/Repository/OrderRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,59 @@
namespace common\logic\Order\Order\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Order\Order\Service\OrderDefinition;
use common\logic\User\User\Model\User;

class OrderRepositoryQuery extends AbstractRepositoryQuery
{
protected OrderDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(OrderDefinition::class);
}

public function filterById(int $id): self
{
$this->andWhere(['order.id' => $id]);

return $this;
}

public function filterByDistributionDate(string $date): self
{
$this->andWhere(['distribution.date' => $date]);

return $this;
}

public function filterIsValid(): self
{
$this->andWhere('date_delete IS NULL');

return $this;
}

public function filterByUser(User $user): self
{
$this->andWhere(['order.id_user' => $user->id]);

return $this;
}

public function filterIsIncoming(): self
{
$this->andWhere('distribution.date >= :date_today')
->params([':date_today' => date('Y-m-d')]);

return $this;
}

public function filterIsPassed(): self
{
$this->andWhere('distribution.date < :date_today')
->params([':date_today' => date('Y-m-d')]);

return $this;
}
}

+ 3
- 3
common/logic/Order/Order/Service/OrderBuilder.php Näytä tiedosto

@@ -112,7 +112,7 @@ class OrderBuilder extends AbstractBuilder
{
$now = date('Y-m-d');
$distributionDate = date('Y-m-d', strtotime($date));
$distribution = $this->distributionRepository->findOneDistributionByDate($distributionDate);
$distribution = $this->distributionRepository->findOneDistribution($distributionDate);

if ($distribution
&& $distribution->active
@@ -137,7 +137,7 @@ class OrderBuilder extends AbstractBuilder
public function createAllOrdersFromSubscriptions(string $date, bool $force = false): array
{
$orderArray = [];
$distribution = $this->distributionRepository->findOneDistributionByDate(date('Y-m-d', strtotime($date)));
$distribution = $this->distributionRepository->findOneDistribution(date('Y-m-d', strtotime($date)));

if ($distribution) {
$orderArray = $this->orderRepository->findOrdersByDistribution($distribution);
@@ -297,7 +297,7 @@ class OrderBuilder extends AbstractBuilder
$order->auto_payment = 1;
} elseif ($creditFunctioning == Producer::CREDIT_FUNCTIONING_USER) {

$userProducer = $this->userProducerRepository->findOneUserProducer($order->user, $subscription->producer);
$userProducer = $this->userProducerRepository->findOneUserProducer($order->user);

if ($userProducer) {
$order->auto_payment = $userProducer->credit_active;

+ 14
- 0
common/logic/Order/Order/Service/OrderDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Order\Order\Service;

use common\logic\AbstractDefinition;
use common\logic\Order\Order\Model\Order;

class OrderDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Order::class;
}
}

+ 7
- 6
common/logic/Order/Order/Wrapper/OrderContainer.php Näytä tiedosto

@@ -3,22 +3,18 @@
namespace common\logic\Order\Order\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Order\Order\Model\Order;
use common\logic\Order\Order\Repository\OrderRepository;
use common\logic\Order\Order\Service\OrderBuilder;
use common\logic\Order\Order\Service\OrderDefinition;
use common\logic\Order\Order\Service\OrderSolver;
use common\logic\Order\Order\Service\OrderUtils;

class OrderContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Order::class;
}

public function getServices(): array
{
return [
OrderDefinition::class,
OrderSolver::class,
OrderRepository::class,
OrderBuilder::class,
@@ -26,6 +22,11 @@ class OrderContainer extends AbstractContainer
];
}

public function getDefinition(): OrderDefinition
{
return OrderDefinition::getInstance();
}

public function getSolver(): OrderSolver
{
return OrderSolver::getInstance();

+ 2
- 0
common/logic/Order/Order/Wrapper/OrderManager.php Näytä tiedosto

@@ -5,9 +5,11 @@ namespace common\logic\Order\Order\Wrapper;
use common\logic\AbstractManager;
use common\logic\Order\Order\Repository\OrderRepository;
use common\logic\Order\Order\Service\OrderBuilder;
use common\logic\Order\Order\Service\OrderDefinition;
use common\logic\Order\Order\Service\OrderSolver;

/**
* @mixin OrderDefinition
* @mixin OrderSolver
* @mixin OrderRepository
* @mixin OrderBuilder

+ 5
- 5
common/logic/Order/OrderStatusHistory/Repository/OrderStatusHistoryRepository.php Näytä tiedosto

@@ -10,16 +10,16 @@ class OrderStatusHistoryRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(OrderStatusHistoryRepositoryQuery::class);
$this->loadQuery(OrderStatusHistoryRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => ['order', 'orderStatus'],
'orderby' => 'date ASC',
'attribute_id_producer' => ''
self::WITH => [],
self::JOIN_WITH => ['order', 'orderStatus'],
self::ORDER_BY => 'date ASC',
self::ATTRIBUTE_ID_PRODUCER => ''
];
}
}

+ 8
- 0
common/logic/Order/OrderStatusHistory/Repository/OrderStatusHistoryRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,16 @@
namespace common\logic\Order\OrderStatusHistory\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Order\OrderStatusHistory\Model\OrderStatusHistory;
use common\logic\Order\OrderStatusHistory\Service\OrderStatusHistoryDefinition;
use yii\db\ActiveQuery;

class OrderStatusHistoryRepositoryQuery extends AbstractRepositoryQuery
{
protected OrderStatusHistoryDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(OrderStatusHistoryDefinition::class);
}
}

+ 14
- 0
common/logic/Order/OrderStatusHistory/Service/OrderStatusHistoryDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Order\OrderStatusHistory\Service;

use common\logic\AbstractDefinition;
use common\logic\Order\OrderStatusHistory\Model\OrderStatusHistory;

class OrderStatusHistoryDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return OrderStatusHistory::class;
}
}

+ 7
- 6
common/logic/Order/OrderStatusHistory/Wrapper/OrderStatusHistoryContainer.php Näytä tiedosto

@@ -3,25 +3,26 @@
namespace common\logic\Order\OrderStatusHistory\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Order\OrderStatusHistory\Model\OrderStatusHistory;
use common\logic\Order\OrderStatusHistory\Repository\OrderStatusHistoryRepository;
use common\logic\Order\OrderStatusHistory\Service\OrderStatusHistoryBuilder;
use common\logic\Order\OrderStatusHistory\Service\OrderStatusHistoryDefinition;

class OrderStatusHistoryContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return OrderStatusHistory::class;
}

public function getServices(): array
{
return [
OrderStatusHistoryDefinition::class,
OrderStatusHistoryRepository::class,
OrderStatusHistoryBuilder::class
];
}

public function getDefinition(): OrderStatusHistoryDefinition
{
return OrderStatusHistoryDefinition::getInstance();
}

public function getRepository(): OrderStatusHistoryRepository
{
return OrderStatusHistoryRepository::getInstance();

+ 2
- 0
common/logic/Order/OrderStatusHistory/Wrapper/OrderStatusHistoryManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Order\OrderStatusHistory\Wrapper;
use common\logic\AbstractManager;
use common\logic\Order\OrderStatusHistory\Repository\OrderStatusHistoryRepository;
use common\logic\Order\OrderStatusHistory\Service\OrderStatusHistoryBuilder;
use common\logic\Order\OrderStatusHistory\Service\OrderStatusHistoryDefinition;

/**
* @mixin OrderStatusHistoryDefinition
* @mixin OrderStatusHistoryRepository
* @mixin OrderStatusHistoryBuilder
*/

+ 11
- 9
common/logic/Order/ProductOrder/Repository/ProductOrderRepository.php Näytä tiedosto

@@ -12,28 +12,30 @@ class ProductOrderRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProductOrderRepositoryQuery::class);
$this->loadQuery(ProductOrderRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => ['taxRate'],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
self::WITH => ['taxRate'],
self::JOIN_WITH => [],
self::ORDER_BY => '',
self::ATTRIBUTE_ID_PRODUCER => ''
];
}

public function findOneProductOrderById(int $id)
{
return $productOrder = ProductOrder::searchOne([
'id' => $id
]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function findProductOrdersByOrder(Order $order): array
{
return ProductOrder::find()->where(['id_order' => $order->id])->all();
return $this->createDefaultQuery()
->filterByOrder($order)
->find();
}
}

+ 16
- 0
common/logic/Order/ProductOrder/Repository/ProductOrderRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,24 @@
namespace common\logic\Order\ProductOrder\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Order\Order\Model\Order;
use common\logic\Order\ProductOrder\Model\ProductOrder;
use common\logic\Order\ProductOrder\Service\ProductOrderDefinition;
use yii\db\ActiveQuery;

class ProductOrderRepositoryQuery extends AbstractRepositoryQuery
{
protected ProductOrderDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProductOrderDefinition::class);
}

public function filterByOrder(Order $order): self
{
$this->andWhere(['id_order' => $order->id]);

return $this;
}
}

+ 14
- 0
common/logic/Order/ProductOrder/Service/ProductOrderDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Order\ProductOrder\Service;

use common\logic\AbstractDefinition;
use common\logic\Order\ProductOrder\Model\ProductOrder;

class ProductOrderDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return ProductOrder::class;
}
}

+ 7
- 6
common/logic/Order/ProductOrder/Wrapper/ProductOrderContainer.php Näytä tiedosto

@@ -3,27 +3,28 @@
namespace common\logic\Order\ProductOrder\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Order\ProductOrder\Model\ProductOrder;
use common\logic\Order\ProductOrder\Repository\ProductOrderRepository;
use common\logic\Order\ProductOrder\Service\ProductOrderBuilder;
use common\logic\Order\ProductOrder\Service\ProductOrderDefinition;
use common\logic\Order\ProductOrder\Service\ProductOrderSolver;

class ProductOrderContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return ProductOrder::class;
}

public function getServices(): array
{
return [
ProductOrderDefinition::class,
ProductOrderSolver::class,
ProductOrderRepository::class,
ProductOrderBuilder::class,
];
}

public function getDefinition(): ProductOrderDefinition
{
return ProductOrderDefinition::getInstance();
}

public function getSolver(): ProductOrderSolver
{
return ProductOrderSolver::getInstance();

+ 2
- 0
common/logic/Order/ProductOrder/Wrapper/ProductOrderManager.php Näytä tiedosto

@@ -5,9 +5,11 @@ namespace common\logic\Order\ProductOrder\Wrapper;
use common\logic\AbstractManager;
use common\logic\Order\ProductOrder\Repository\ProductOrderRepository;
use common\logic\Order\ProductOrder\Service\ProductOrderBuilder;
use common\logic\Order\ProductOrder\Service\ProductOrderDefinition;
use common\logic\Order\ProductOrder\Service\ProductOrderSolver;

/**
* @mixin ProductOrderDefinition
* @mixin ProductOrderSolver
* @mixin ProductOrderRepository
* @mixin ProductOrderBuilder

+ 36
- 39
common/logic/PointSale/PointSale/Repository/PointSaleRepository.php Näytä tiedosto

@@ -2,7 +2,6 @@

namespace common\logic\PointSale\PointSale\Repository;

use common\helpers\GlobalParam;
use common\logic\AbstractRepository;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\PointSale\PointSale\Model\PointSale;
@@ -15,75 +14,76 @@ class PointSaleRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(PointSaleRepositoryQuery::class);
$this->loadQuery(PointSaleRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => 'is_bread_box ASC, name ASC',
'attribute_id_producer' => 'point_sale.id_producer'
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => 'is_bread_box ASC, name ASC',
self::ATTRIBUTE_ID_PRODUCER => 'point_sale.id_producer'
];
}

public function findOnePointSaleById(int $id): ?PointSale
{
return PointSale::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function findOnePointSaleByIdUser(int $idUser): ?PointSale
{
return PointSale::searchOne([
'id_user' => $idUser
]);
return $this->createDefaultQuery()
->filterIsOnline()
->filterByIdUser($idUser)
->findOne();
}

public function findOnePointSaleByName(string $name): ?PointSale
{
return PointSale::searchOne([
'name' => $name
]);
return $this->createDefaultQuery()
->filterIsOnline()
->filterByName($name)
->fineOne();
}

public function findPointSalesByDistribution(Distribution $distribution)
{
return PointSale::find()
return $this->createDefaultQuery()
->filterIsOnline()
->with(['pointSaleDistribution' => function ($q) use ($distribution) {
$q->where(['id_distribution' => $distribution->id]);
}])
->where([
'id_producer' => $distribution->producer->id,
])
->all();
->find();
}

/**
* Retourne le nombre de points de vente pour le producteur courant.
*/
public static function countPointSales(): int
public function countPointSales(): int
{
return PointSale::searchCount(['id_producer' => GlobalParam::getCurrentProducerId()]);
return $this->createDefaultQuery()
->filterIsOnline()
->count();
}

public function findPointSales()
{
return PointSale::find()
->where('id_producer = ' . GlobalParam::getCurrentProducerId())
->all();;
return $this->createDefaultQuery()
->filterIsOnline()
->find();
}

public function queryPointSalesPublic(Producer $producer)
{
return PointSale::find()
->where([
'id_producer' => $producer->id,
'restricted_access' => 0,
'status' => 1
])->orderBy(
'code ASC, restricted_access ASC, is_bread_box ASC, `default` DESC, name ASC'
);
return $this->createDefaultQuery()
->filterIsOnline()
->filterByRestrictedAccess(0)
->orderBy('code ASC, restricted_access ASC, is_bread_box ASC, `default` DESC, name ASC')
->query();
}

public function populatePointSaleDropdownList(): array
@@ -100,13 +100,10 @@ class PointSaleRepository extends AbstractRepository

public function findByBillingUser(User $user)
{
return PointSale::find()
->where([
'id_producer' => GlobalParam::getCurrentProducerId(),
'status' => 1,
'id_user' => $user->id
])->orderBy(
'name ASC'
)->all();
return $this->createDefaultQuery()
->filterIsOnline()
->filterByIdUser($user->id)
->orderBy('name ASC')
->find();
}
}

+ 36
- 0
common/logic/PointSale/PointSale/Repository/PointSaleRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,44 @@
namespace common\logic\PointSale\PointSale\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\PointSale\Service\PointSaleDefinition;
use yii\db\ActiveQuery;

class PointSaleRepositoryQuery extends AbstractRepositoryQuery
{
protected PointSaleDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(PointSaleDefinition::class);
}

public function filterByIdUser(int $idUser): self
{
$this->andWhere(['id_user' => $idUser]);

return $this;
}

public function filterByName(string $name): self
{
$this->andWhere(['name' => $name]);

return $this;
}

public function filterIsOnline(): self
{
$this->andWhere(['status' => 1]);

return $this;
}

public function filterByRestrictedAccess(int $restrictedAccess): self
{
$this->andWhere(['restricted_access' => $restrictedAccess]);

return $this;
}
}

+ 14
- 0
common/logic/PointSale/PointSale/Service/PointSaleDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\PointSale\PointSale\Service;

use common\logic\AbstractDefinition;
use common\logic\PointSale\PointSale\Model\PointSale;

class PointSaleDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return PointSale::class;
}
}

+ 7
- 6
common/logic/PointSale/PointSale/Wrapper/PointSaleContainer.php Näytä tiedosto

@@ -3,27 +3,28 @@
namespace common\logic\PointSale\PointSale\Wrapper;

use common\logic\AbstractContainer;
use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\PointSale\Repository\PointSaleRepository;
use common\logic\PointSale\PointSale\Service\PointSaleBuilder;
use common\logic\PointSale\PointSale\Service\PointSaleDefinition;
use common\logic\PointSale\PointSale\Service\PointSaleSolver;

class PointSaleContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return PointSale::class;
}

public function getServices(): array
{
return [
PointSaleDefinition::class,
PointSaleSolver::class,
PointSaleRepository::class,
PointSaleBuilder::class,
];
}

public function getDefinition(): PointSaleDefinition
{
return PointSaleDefinition::getInstance();
}

public function getSolver(): PointSaleSolver
{
return PointSaleSolver::getInstance();

+ 2
- 0
common/logic/PointSale/PointSale/Wrapper/PointSaleManager.php Näytä tiedosto

@@ -5,9 +5,11 @@ namespace common\logic\PointSale\PointSale\Wrapper;
use common\logic\AbstractManager;
use common\logic\PointSale\PointSale\Repository\PointSaleRepository;
use common\logic\PointSale\PointSale\Service\PointSaleBuilder;
use common\logic\PointSale\PointSale\Service\PointSaleDefinition;
use common\logic\PointSale\PointSale\Service\PointSaleSolver;

/**
* @mixin PointSaleDefinition
* @mixin PointSaleSolver
* @mixin PointSaleRepository
* @mixin PointSaleBuilder

+ 14
- 13
common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepository.php Näytä tiedosto

@@ -13,24 +13,25 @@ class UserPointSaleRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(UserPointSaleRepositoryQuery::class);
$this->loadQuery(UserPointSaleRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => '',
self::ATTRIBUTE_ID_PRODUCER => 'point_sale.id_producer'
] ;
}

public function findUserPointSalesByUser(User $user): array
{
return UserPointSale::searchAll([
'id_user' => $user->id
]);
return $this->createDefaultQuery()
->joinPointSale()
->filterByUser($user)
->find();
}

public function findOneUserPointSale(User $user = null, PointSale $pointSale = null)
@@ -39,10 +40,10 @@ class UserPointSaleRepository extends AbstractRepository
return null;
}

return UserPointSale::find()
->where([
'id_user' => $user->id,
'id_point_sale' => $pointSale->id
])->one();
return $this->createDefaultQuery()
->joinPointSale()
->filterByUser($user)
->filterByPointSale($pointSale)
->findOne();
}
}

+ 28
- 0
common/logic/PointSale/UserPointSale/Repository/UserPointSaleRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,36 @@
namespace common\logic\PointSale\UserPointSale\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\PointSale\PointSale\Model\PointSale;
use common\logic\PointSale\UserPointSale\Model\UserPointSale;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleDefinition;
use common\logic\User\User\Model\User;
use yii\db\ActiveQuery;

class UserPointSaleRepositoryQuery extends AbstractRepositoryQuery
{
protected UserPointSaleDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(UserPointSaleDefinition::class);
}

public function joinPointSale(): self
{
$this->innerJoinWith('pointSale', true);
return $this;
}

public function filterByUser(User $user): self
{
$this->andWhere(['user_point_sale.id_user' => $user->id]);
return $this;
}

public function filterByPointSale(PointSale $pointSale): self
{
$this->andWhere(['id_point_sale' => $pointSale->id]);
return $this;
}
}

+ 14
- 0
common/logic/PointSale/UserPointSale/Service/UserPointSaleDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\PointSale\UserPointSale\Service;

use common\logic\AbstractDefinition;
use common\logic\PointSale\UserPointSale\Model\UserPointSale;

class UserPointSaleDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return UserPointSale::class;
}
}

+ 7
- 6
common/logic/PointSale/UserPointSale/Wrapper/UserPointSaleContainer.php Näytä tiedosto

@@ -3,25 +3,26 @@
namespace common\logic\PointSale\UserPointSale\Wrapper;

use common\logic\AbstractContainer;
use common\logic\PointSale\UserPointSale\Model\UserPointSale;
use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleBuilder;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleDefinition;

class UserPointSaleContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return UserPointSale::class;
}

public function getServices(): array
{
return [
UserPointSaleDefinition::class,
UserPointSaleRepository::class,
UserPointSaleBuilder::class,
];
}

public function getDefinition(): UserPointSaleDefinition
{
return UserPointSaleDefinition::getInstance();
}

public function getRepository(): UserPointSaleRepository
{
return UserPointSaleRepository::getInstance();

+ 2
- 0
common/logic/PointSale/UserPointSale/Wrapper/UserPointSaleManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\PointSale\UserPointSale\Wrapper;
use common\logic\AbstractManager;
use common\logic\PointSale\UserPointSale\Repository\UserPointSaleRepository;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleBuilder;
use common\logic\PointSale\UserPointSale\Service\UserPointSaleDefinition;

/**
* @mixin UserPointSaleDefinition
* @mixin UserPointSaleRepository
* @mixin UserPointSaleBuilder
*/

+ 21
- 41
common/logic/Producer/Producer/Repository/ProducerRepository.php Näytä tiedosto

@@ -24,7 +24,7 @@ class ProducerRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProducerRepositoryQuery::class);
$this->loadQuery(ProducerRepositoryQuery::class);
$this->producerPriceRangeRepository = $this->loadService(ProducerPriceRangeRepository::class);
$this->producerSolver = $this->loadService(ProducerSolver::class);
$this->documentSolver = $this->loadService(DocumentSolver::class);
@@ -37,52 +37,51 @@ class ProducerRepository extends AbstractRepository
public function getDefaultOptionsSearch(): array
{
return [
'with' => ['taxRate'],
'join_with' => [],
'orderby' => 'name ASC',
'attribute_id_producer' => 'id'
self::WITH => ['taxRate', 'contact'],
self::JOIN_WITH => [],
self::ORDER_BY => 'name ASC',
self::ATTRIBUTE_ID_PRODUCER => 'id'
];
}

public function findOneProducerById(int $id)
{
return Producer::searchOne(['id' => $id]);
return $this->createQuery()
->filterById($id)
->findOne();
}

public function findOneProducerBySlug(string $slug)
{
return Producer::searchOne(['slug' => $slug]);
return $this->createQuery()
->filterBySlug($slug)
->findOne();
}

public function queryProducersActive()
{
return Producer::find()
->where([
'active' => true,
])
->orderBy('name ASC');
return $this->createQuery()->filterIsActive();
}

/**
* Retourne le compte producteur de démonstration.
*
*/
public function findOneProducerDemoAccount()
{
return Producer::find()->where('name LIKE \'Démo\'')->one();
return $this->createQuery()
->filterIsDemoAccount()
->findOne();
}

/**
* Retourne la liste des établissements pour l'initialisation d'une listesélective.
*/
public static function populateProducerDropdown(): array
public function populateProducerDropdown(): array
{
$producers = Producer::find()
->where([
'active' => true,
])
$producers = $this->createQuery()
->filterIsActive()
->orderBy('postcode, city ASC')
->all();
->find();

$departments = Departments::get();
$dataProducers = [];
@@ -222,7 +221,6 @@ class ProducerRepository extends AbstractRepository

/**
* Retourne une configuration d'un producteur donné
*
*/
public function getConfig(string $config = '', int $idProducer = 0)
{
@@ -240,23 +238,6 @@ class ProducerRepository extends AbstractRepository
return null;
}

/**
* Retourne les établissements liés à l'utilisateur.
*/
// getBookmarked
public function findProducersBookmarked(User $user): array
{
$producers = (new \yii\db\Query())
->select('*')
->from(['user_producer', 'producer'])
->where('user_producer.id_producer = producer.id')
->andWhere(['user_producer.id_user' => $user->id])
->andWhere(['user_producer.active' => 1])
->all();

return $producers;
}

public function getNameProducer(User $user): string
{
$producer = $this->findOneProducerById($user->id_producer);
@@ -273,7 +254,6 @@ class ProducerRepository extends AbstractRepository
/**
* Retourne le mode de fonctionnement du crédit d'un point de vente.
*/
// getCreditFunctioning
public function getPointSaleCreditFunctioning(PointSale $pointSale): string
{
return strlen($pointSale->credit_functioning) > 0 ?
@@ -283,11 +263,11 @@ class ProducerRepository extends AbstractRepository

public function findProducersActive()
{
return Producer::find()->where(['producer.active' => 1])->with(['contact'])->all();
return $this->queryProducersActive()->find();
}

public function findProducers()
{
return Producer::find()->with(['contact'])->all();
return $this->createDefaultQuery()->find();
}
}

+ 26
- 0
common/logic/Producer/Producer/Repository/ProducerRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,34 @@
namespace common\logic\Producer\Producer\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Producer\Producer\Model\Producer;
use common\logic\Producer\Producer\Service\ProducerDefinition;
use yii\db\ActiveQuery;

class ProducerRepositoryQuery extends AbstractRepositoryQuery
{
protected ProducerDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProducerDefinition::class);
}

public function filterBySlug(string $slug): self
{
$this->andWhere(['slug' => $slug]);
return $this;
}

public function filterIsActive(): self
{
$this->andWhere(['producer.active' => true]);
return $this;
}

public function filterIsDemoAccount(): self
{
$this->andWhere('name LIKE \'Démo\'');
return $this;
}
}

+ 14
- 0
common/logic/Producer/Producer/Service/ProducerDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Producer\Producer\Service;

use common\logic\AbstractDefinition;
use common\logic\Producer\Producer\Model\Producer;

class ProducerDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Producer::class;
}
}

+ 7
- 6
common/logic/Producer/Producer/Wrapper/ProducerContainer.php Näytä tiedosto

@@ -3,22 +3,18 @@
namespace common\logic\Producer\Producer\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Producer\Producer\Model\Producer;
use common\logic\Producer\Producer\Repository\ProducerRepository;
use common\logic\Producer\Producer\Service\ProducerBuilder;
use common\logic\Producer\Producer\Service\ProducerDefinition;
use common\logic\Producer\Producer\Service\ProducerSolver;
use common\logic\Producer\Producer\Service\ProducerUtils;

class ProducerContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Producer::class;
}

public function getServices(): array
{
return [
ProducerDefinition::class,
ProducerSolver::class,
ProducerRepository::class,
ProducerBuilder::class,
@@ -26,6 +22,11 @@ class ProducerContainer extends AbstractContainer
];
}

public function getDefinition(): ProducerDefinition
{
return ProducerDefinition::getInstance();
}

public function getSolver(): ProducerSolver
{
return ProducerSolver::getInstance();

+ 2
- 0
common/logic/Producer/Producer/Wrapper/ProducerManager.php Näytä tiedosto

@@ -5,10 +5,12 @@ namespace common\logic\Producer\Producer\Wrapper;
use common\logic\AbstractManager;
use common\logic\Producer\Producer\Repository\ProducerRepository;
use common\logic\Producer\Producer\Service\ProducerBuilder;
use common\logic\Producer\Producer\Service\ProducerDefinition;
use common\logic\Producer\Producer\Service\ProducerSolver;
use common\logic\Producer\Producer\Service\ProducerUtils;

/**
* @mixin ProducerDefinition
* @mixin ProducerSolver
* @mixin ProducerRepository
* @mixin ProducerBuilder

+ 10
- 11
common/logic/Producer/ProducerPriceRange/Repository/ProducerPriceRangeRepository.php Näytä tiedosto

@@ -12,38 +12,37 @@ class ProducerPriceRangeRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProducerPriceRangeRepositoryQuery::class);
$this->loadQuery(ProducerPriceRangeRepositoryQuery::class);
}

/**
* Retourne les options de base nécessaires à la fonction de recherche.
*
*/
public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => ''
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => 'range_begin ASC',
self::ATTRIBUTE_ID_PRODUCER => ''
];
}

public function findOneProducerPriceRangeById(int $id)
{
return ProducerPriceRange::searchOne([
'id' => $id
]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function queryProducerPriceRanges()
{
return ProducerPriceRange::find()->orderBy('range_begin ASC');
return $this->createDefaultQuery();
}

public function findProducerPriceRanges()
{
return $this->queryProducerPriceRanges()->all();
return $this->queryProducerPriceRanges()->find();
}

public function getAmountToBeBilledByTurnover(float $turnover = null, $format = false)

+ 8
- 0
common/logic/Producer/ProducerPriceRange/Repository/ProducerPriceRangeRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,16 @@
namespace common\logic\Producer\ProducerPriceRange\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Producer\ProducerPriceRange\Model\ProducerPriceRange;
use common\logic\Producer\ProducerPriceRange\Service\ProducerPriceRangeDefinition;
use yii\db\ActiveQuery;

class ProducerPriceRangeRepositoryQuery extends AbstractRepositoryQuery
{
protected ProducerPriceRangeDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProducerPriceRangeDefinition::class);
}
}

+ 14
- 0
common/logic/Producer/ProducerPriceRange/Service/ProducerPriceRangeDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Producer\ProducerPriceRange\Service;

use common\logic\AbstractDefinition;
use common\logic\Producer\ProducerPriceRange\Model\ProducerPriceRange;

class ProducerPriceRangeDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return ProducerPriceRange::class;
}
}

+ 7
- 6
common/logic/Producer/ProducerPriceRange/Wrapper/ProducerPriceRangeContainer.php Näytä tiedosto

@@ -3,25 +3,26 @@
namespace common\logic\Producer\ProducerPriceRange\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Producer\ProducerPriceRange\Model\ProducerPriceRange;
use common\logic\Producer\ProducerPriceRange\Repository\ProducerPriceRangeRepository;
use common\logic\Producer\ProducerPriceRange\Service\ProducerPriceRangeBuilder;
use common\logic\Producer\ProducerPriceRange\Service\ProducerPriceRangeDefinition;

class ProducerPriceRangeContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return ProducerPriceRange::class;
}

public function getServices(): array
{
return [
ProducerPriceRangeDefinition::class,
ProducerPriceRangeRepository::class,
ProducerPriceRangeBuilder::class,
];
}

public function getDefinition(): ProducerPriceRangeDefinition
{
return ProducerPriceRangeDefinition::getInstance();
}

public function getRepository(): ProducerPriceRangeRepository
{
return ProducerPriceRangeRepository::getInstance();

+ 2
- 0
common/logic/Producer/ProducerPriceRange/Wrapper/ProducerPriceRangeManager.php Näytä tiedosto

@@ -5,8 +5,10 @@ namespace common\logic\Producer\ProducerPriceRange\Wrapper;
use common\logic\AbstractManager;
use common\logic\Producer\ProducerPriceRange\Repository\ProducerPriceRangeRepository;
use common\logic\Producer\ProducerPriceRange\Service\ProducerPriceRangeBuilder;
use common\logic\Producer\ProducerPriceRange\Service\ProducerPriceRangeDefinition;

/**
* @mixin ProducerPriceRangeDefinition
* @mixin ProducerPriceRangeRepository
* @mixin ProducerPriceRangeBuilder
*/

+ 5
- 0
common/logic/ProducerContextTrait.php Näytä tiedosto

@@ -24,4 +24,9 @@ trait ProducerContextTrait

return $this->producerContext;
}

public function getProducerContextId()
{
return $this->getProducerContext()->id;
}
}

+ 25
- 41
common/logic/Product/Product/Repository/ProductRepository.php Näytä tiedosto

@@ -23,7 +23,7 @@ class ProductRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProductRepositoryQuery::class);
$this->loadQuery(ProductRepositoryQuery::class);
$this->productSolver = $this->loadService(ProductSolver::class);
$this->productPriceSolver = $this->loadService(ProductPriceSolver::class);
$this->userProducerRepository = $this->loadService(UserProducerRepository::class);
@@ -32,53 +32,50 @@ class ProductRepository extends AbstractRepository
public function getDefaultOptionsSearch(): array
{
return [
'with' => ['taxRate', 'productPointSale'],
'join_with' => [],
'orderby' => 'order ASC',
'attribute_id_producer' => 'product.id_producer'
self::WITH => ['taxRate', 'productPointSale'],
self::JOIN_WITH => [],
self::ORDER_BY => 'product.order ASC',
self::ATTRIBUTE_ID_PRODUCER => 'product.id_producer'
];
}

public function findOneProductById(int $id): ?Product
{
return Product::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function findOneProductByName(string $name): ?Product
{
return Product::searchOne(['name' => $name]);
return $this->createDefaultQuery()
->filterByName($name)
->findOne();
}

public function findProducts(): array
{
return Product::searchAll([], [
'orderby' => 'product.order ASC'
]);
return $this->createDefaultQuery()->find();
}

/**
* Retourne le nombre de produits du producteur courant.
*/
public static function countProducts(): int
public function countProducts(): int
{
return Product::searchCount();
return $this->createDefaultQuery()->count();
}

/**
* Retourne les produits d'une production donnée.
*/
// searchByDistribution
// getByDistribution
public function findProductsByDistribution(Distribution $distribution)
{
$productArray = Product::find()
$productArray = $this->createDefaultQuery()
->leftJoin('product_distribution', 'product.id = product_distribution.id_product')
->where([
'id_producer' => GlobalParam::getCurrentProducerId(),
'product_distribution.id_distribution' => $distribution->id
])
->filterByDistribution($distribution)
->orderBy('product_distribution.active DESC, product.order ASC')
->all();
->find();

$productArrayById = [];
foreach($productArray as $product) {
@@ -88,32 +85,19 @@ class ProductRepository extends AbstractRepository
return $productArrayById;
}

// queryByProductCategory
public function queryProductsByProductCategory(ProductCategory $productCategory)
{
return Product::find()
->andWhere([
'id_producer' => $this->getProducerContext()->id,
'active' => true,
])
->andWhere(
'product.id_product_category = :id_product_category'
)
->params(
[':id_product_category' => $productCategory->id]
)
->orderBy(
'order ASC'
);
return $this->createDefaultQuery()
->filterIsActive()
->filterByProductCategory($productCategory);
}

public function countProductsWithoutCategory(Producer $producer): int
{
return Product::searchCount([
'id_producer' => $producer->id,
'product.active' => 1,
'product.id_product_category' => null
]);
return $this->createDefaultQuery()
->filterIsActive()
->filterByProductCategory(null)
->count();
}

public function getPriceArray(Product $product, User $user = null, PointSale $pointSale = null): array
@@ -121,7 +105,7 @@ class ProductRepository extends AbstractRepository
$priceArray = [];
$userProducer = null;
if ($user) {
$userProducer = $this->userProducerRepository->findOneUserProducer($user, GlobalParam::getCurrentProducer());
$userProducer = $this->userProducerRepository->findOneUserProducer($user);
}

// specific prices

+ 34
- 0
common/logic/Product/Product/Repository/ProductRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,42 @@
namespace common\logic\Product\Product\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Distribution\Distribution\Model\Distribution;
use common\logic\Product\Product\Service\ProductDefinition;
use common\logic\Product\ProductCategory\Model\ProductCategory;

class ProductRepositoryQuery extends AbstractRepositoryQuery
{
protected ProductDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProductDefinition::class);
}

public function filterByName(string $name): self
{
$this->andWhere(['name' => $name]);
return $this;
}

public function filterByDistribution(Distribution $distribution): self
{
$this->andWhere(['product_distribution.id_distribution' => $distribution->id]);
return $this;
}

public function filterIsActive(): self
{
$this->andWhere(['product.active' => true]);
return $this;
}

public function filterByProductCategory(ProductCategory $productCategory = null) : self
{
if($productCategory) {
$this->andWhere(['product.id_product_category' => $productCategory->id]);
}
return $this;
}
}

+ 14
- 0
common/logic/Product/Product/Service/ProductDefinition.php Näytä tiedosto

@@ -0,0 +1,14 @@
<?php

namespace common\logic\Product\Product\Service;

use common\logic\AbstractDefinition;
use common\logic\Product\Product\Model\Product;

class ProductDefinition extends AbstractDefinition
{
public function getEntityFqcn(): string
{
return Product::class;
}
}

+ 8
- 6
common/logic/Product/Product/Wrapper/ProductContainer.php Näytä tiedosto

@@ -3,27 +3,29 @@
namespace common\logic\Product\Product\Wrapper;

use common\logic\AbstractContainer;
use common\logic\Product\Product\Model\Product;
use common\logic\DefinitionInterface;
use common\logic\Product\Product\Repository\ProductRepository;
use common\logic\Product\Product\Service\ProductBuilder;
use common\logic\Product\Product\Service\ProductDefinition;
use common\logic\Product\Product\Service\ProductSolver;

class ProductContainer extends AbstractContainer
{
public function getEntityFqcn(): string
{
return Product::class;
}

public function getServices(): array
{
return [
ProductDefinition::class,
ProductSolver::class,
ProductBuilder::class,
ProductRepository::class,
];
}

public function getDefinition(): DefinitionInterface
{
return ProductDefinition::getInstance();
}

public function getSolver(): ProductSolver
{
return ProductSolver::getInstance();

+ 2
- 0
common/logic/Product/Product/Wrapper/ProductManager.php Näytä tiedosto

@@ -5,9 +5,11 @@ namespace common\logic\Product\Product\Wrapper;
use common\logic\AbstractManager;
use common\logic\Product\Product\Repository\ProductRepository;
use common\logic\Product\Product\Service\ProductBuilder;
use common\logic\Product\Product\Service\ProductDefinition;
use common\logic\Product\Product\Service\ProductSolver;

/**
* @mixin ProductDefinition
* @mixin ProductSolver
* @mixin ProductRepository
* @mixin ProductBuilder

+ 14
- 22
common/logic/Product/ProductCategory/Repository/ProductCategoryRepository.php Näytä tiedosto

@@ -11,47 +11,39 @@ class ProductCategoryRepository extends AbstractRepository

public function loadDependencies(): void
{
$this->query = $this->loadService(ProductCategoryRepositoryQuery::class);
$this->loadQuery(ProductCategoryRepositoryQuery::class);
}

public function getDefaultOptionsSearch(): array
{
return [
'with' => [],
'join_with' => [],
'orderby' => '',
'attribute_id_producer' => 'id_producer'
self::WITH => [],
self::JOIN_WITH => [],
self::ORDER_BY => 'product_category.position ASC',
self::ATTRIBUTE_ID_PRODUCER => 'id_producer'
];
}

public function findOneProductCategoryById(int $id)
{
return ProductCategory::searchOne(['id' => $id]);
return $this->createDefaultQuery()
->filterById($id)
->findOne();
}

public function findProductCategories()
{
return ProductCategory::searchAll([
'id_producer' => $this->getProducerContext()->id
],
[
'orderby' => 'product_category.position ASC'
]
);
return $this->createDefaultQuery()->find();
}

public function findProductCategoriesAsArray()
public function findProductCategoriesAsArray(): array
{
return ProductCategory::searchAll(
[],
[
'orderby' => 'product_category.position ASC',
'as_array' => true
]
);
return $this->createDefaultQuery()
->asArray()
->find();
}

public function populateProductCategoriesDropdownList()
public function populateProductCategoriesDropdownList(): array
{
$productCategoriesArrayDropdown = ['' => '--'];
$productCategoriesArray = $this->findProductCategories();

+ 8
- 0
common/logic/Product/ProductCategory/Repository/ProductCategoryRepositoryQuery.php Näytä tiedosto

@@ -3,8 +3,16 @@
namespace common\logic\Product\ProductCategory\Repository;

use common\logic\AbstractRepositoryQuery;
use common\logic\Product\ProductCategory\Model\ProductCategory;
use common\logic\Product\ProductCategory\Service\ProductCategoryDefinition;
use yii\db\ActiveQuery;

class ProductCategoryRepositoryQuery extends AbstractRepositoryQuery
{
protected ProductCategoryDefinition $definition;

public function loadDependencies(): void
{
$this->loadDefinition(ProductCategoryDefinition::class);
}
}

Some files were not shown because too many files changed in this diff

Loading…
Peruuta
Tallenna