@@ -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 |
@@ -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( |
@@ -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, |
@@ -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; |
@@ -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 /> |
@@ -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> |
@@ -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') ; |
@@ -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(), |
@@ -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,5 +4,8 @@ namespace common\logic; | |||
abstract class AbstractContainer extends AbstractSingleton implements ContainerInterface | |||
{ | |||
public function getEntityFqcn(): string | |||
{ | |||
return $this->getDefinition()->getEntityFqcn(); | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
<?php | |||
namespace common\logic; | |||
use yii\db\ActiveRecord; | |||
abstract class AbstractDefinition extends AbstractService implements DefinitionInterface | |||
{ | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -11,6 +11,7 @@ abstract class AbstractService extends AbstractSingleton implements ServiceInter | |||
protected function getHierarchy(): array | |||
{ | |||
return [ | |||
DefinitionInterface::class, | |||
SolverInterface::class, | |||
RepositoryQueryInterface::class, | |||
RepositoryInterface::class, |
@@ -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 | |||
{ |
@@ -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; | |||
} | |||
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -4,6 +4,6 @@ namespace common\logic; | |||
interface ContainerInterface | |||
{ | |||
public function getEntityFqcn(): string; | |||
public function getServices(): array; | |||
public function getDefinition(): DefinitionInterface; | |||
} |
@@ -0,0 +1,8 @@ | |||
<?php | |||
namespace common\logic; | |||
interface DefinitionInterface | |||
{ | |||
public function getEntityFqcn(): string; | |||
} |
@@ -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)) { |
@@ -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; | |||
} | |||
} |
@@ -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( |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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(); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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(); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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(); | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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 => '' | |||
]; | |||
} | |||
} |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -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(); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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) |
@@ -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); | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 | |||
*/ |
@@ -24,4 +24,9 @@ trait ProducerContextTrait | |||
return $this->producerContext; | |||
} | |||
public function getProducerContextId() | |||
{ | |||
return $this->getProducerContext()->id; | |||
} | |||
} |
@@ -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 |
@@ -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; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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(); |
@@ -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 |
@@ -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(); |
@@ -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); | |||
} | |||
} |