@@ -0,0 +1,142 @@ | |||
<?php | |||
/** | |||
* Copyright Souke (2018) | |||
* | |||
* contact@souke.fr | |||
* | |||
* Ce logiciel est un programme informatique servant à aider les producteurs | |||
* à distribuer leur production en circuits courts. | |||
* | |||
* Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
* respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
* utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
* sur le site "http://www.cecill.info". | |||
* | |||
* En contrepartie de l'accessibilité au code source et des droits de copie, | |||
* de modification et de redistribution accordés par cette licence, il n'est | |||
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
* seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
* titulaire des droits patrimoniaux et les concédants successifs. | |||
* | |||
* A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
* associés au chargement, à l'utilisation, à la modification et/ou au | |||
* développement et à la reproduction du logiciel par l'utilisateur étant | |||
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
* manipuler et qui le réserve donc à des développeurs et des professionnels | |||
* avertis possédant des connaissances informatiques approfondies. Les | |||
* utilisateurs sont donc invités à charger et tester l'adéquation du | |||
* logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
* | |||
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
* pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
* termes. | |||
*/ | |||
namespace backend\controllers; | |||
use domain\Product\Accessory\Accessory; | |||
use yii\base\Response; | |||
use yii\db\StaleObjectException; | |||
use yii\filters\AccessControl; | |||
use yii\web\NotFoundHttpException; | |||
class AccessoryController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
'access' => [ | |||
'class' => AccessControl::class, | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return $this->getUserModule() | |||
->getAuthorizationChecker() | |||
->isGrantedAsProducer($this->getUserCurrent()); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
public function actionIndex() | |||
{ | |||
$accessoryModule = $this->getAccessoryModule(); | |||
return $this->render('index', [ | |||
'searchModel' => $accessoryModule->getBuilder()->instanciateAccessory($this->getProducerCurrent()), | |||
'dataProvider' => $accessoryModule->getRepository()->queryAll()->getDataProvider(20), | |||
]); | |||
} | |||
public function actionCreate() | |||
{ | |||
$accessoryModule = $this->getAccessoryModule(); | |||
$accessory = $accessoryModule->getBuilder()->instanciateAccessory($this->getProducerCurrent()); | |||
if ($accessory->load(\Yii::$app->request->post()) && $accessory->validate()) { | |||
$accessory = $accessoryModule->getManager()->createAccessory( | |||
$this->getProducerCurrent(), | |||
$accessory->getName(), | |||
$accessory->getQuantity() | |||
); | |||
$this->setFlash('success', "Accessoire ajouté"); | |||
return $this->redirectAfterSave('accessory', $accessory->getId()); | |||
} | |||
return $this->render('create', [ | |||
'accessory' => $accessory, | |||
]); | |||
} | |||
/** | |||
* @throws NotFoundHttpException | |||
*/ | |||
public function actionUpdate(int $id) | |||
{ | |||
$accessory = $this->findAccessory($id); | |||
if ($accessory->load(\Yii::$app->request->post()) && $accessory->validate() && $accessory->save()) { | |||
$this->setFlash('success', "Accessoire modifié"); | |||
return $this->redirectAfterSave('accessory', $accessory->getId()); | |||
} | |||
return $this->render('update', [ | |||
'accessory' => $accessory, | |||
]); | |||
} | |||
/** | |||
* @throws \Throwable | |||
* @throws StaleObjectException | |||
* @throws NotFoundHttpException | |||
*/ | |||
public function actionDelete(int $id): Response | |||
{ | |||
$accessory = $this->findAccessory($id); | |||
if($accessory->delete()) { | |||
$this->setFlash('success', "Accessoire supprimé"); | |||
} | |||
return $this->redirect('index'); | |||
} | |||
/** | |||
* @throws NotFoundHttpException | |||
*/ | |||
protected function findAccessory($id): Accessory | |||
{ | |||
if (($accessory = $this->getAccessoryModule()->getRepository()->findOneAccessoryById($id)) !== null) { | |||
return $accessory; | |||
} else { | |||
throw new NotFoundHttpException("L'accessoire n'a pas été trouvé."); | |||
} | |||
} | |||
} |
@@ -0,0 +1,63 @@ | |||
<?php | |||
/** | |||
* Copyright Souke (2018) | |||
* | |||
* contact@souke.fr | |||
* | |||
* Ce logiciel est un programme informatique servant à aider les producteurs | |||
* à distribuer leur production en circuits courts. | |||
* | |||
* Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
* respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
* utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
* sur le site "http://www.cecill.info". | |||
* | |||
* En contrepartie de l'accessibilité au code source et des droits de copie, | |||
* de modification et de redistribution accordés par cette licence, il n'est | |||
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
* seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
* titulaire des droits patrimoniaux et les concédants successifs. | |||
* | |||
* A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
* associés au chargement, à l'utilisation, à la modification et/ou au | |||
* développement et à la reproduction du logiciel par l'utilisateur étant | |||
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
* manipuler et qui le réserve donc à des développeurs et des professionnels | |||
* avertis possédant des connaissances informatiques approfondies. Les | |||
* utilisateurs sont donc invités à charger et tester l'adéquation du | |||
* logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
* | |||
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
* pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
* termes. | |||
*/ | |||
use yii\widgets\ActiveForm; | |||
?> | |||
<div class="accessory-form"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<div class="col-md-8"> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
<i class="fa fa-th-list"></i> | |||
Général | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<?= $form->field($accessory, 'name')->textInput() ?> | |||
<?= $form->field($accessory, 'quantity')->textInput() ?> | |||
</div> | |||
</div> | |||
</div> | |||
<?= $this->render('@backend/views/_include/form_actions.php',[ | |||
'model' => $accessory, | |||
]); ?> | |||
<?php ActiveForm::end(); ?> | |||
</div> |
@@ -0,0 +1,49 @@ | |||
<?php | |||
/** | |||
Copyright Souke (2018) | |||
contact@souke.fr | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
$this->setTitle("Ajouter un accessoire") ; | |||
$this->addBreadcrumb(['label' => "Accessoires", 'url' => ['index']]) ; | |||
$this->addBreadcrumb('Ajouter') ; | |||
?> | |||
<div class="accessory-create"> | |||
<?= $this->render('_form', [ | |||
'accessory' => $accessory, | |||
]) ?> | |||
</div> |
@@ -0,0 +1,79 @@ | |||
<?php | |||
/** | |||
* Copyright Souke (2018) | |||
* | |||
* contact@souke.fr | |||
* | |||
* Ce logiciel est un programme informatique servant à aider les producteurs | |||
* à distribuer leur production en circuits courts. | |||
* | |||
* Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
* respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
* utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
* sur le site "http://www.cecill.info". | |||
* | |||
* En contrepartie de l'accessibilité au code source et des droits de copie, | |||
* de modification et de redistribution accordés par cette licence, il n'est | |||
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
* seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
* titulaire des droits patrimoniaux et les concédants successifs. | |||
* | |||
* A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
* associés au chargement, à l'utilisation, à la modification et/ou au | |||
* développement et à la reproduction du logiciel par l'utilisateur étant | |||
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
* manipuler et qui le réserve donc à des développeurs et des professionnels | |||
* avertis possédant des connaissances informatiques approfondies. Les | |||
* utilisateurs sont donc invités à charger et tester l'adéquation du | |||
* logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
* | |||
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
* pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
* termes. | |||
*/ | |||
use common\components\View; | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
/** | |||
* @var View $this | |||
*/ | |||
$this->setTitle('Accessoires'); | |||
$this->addBreadcrumb($this->getTitle()); | |||
$this->addButton(['label' => 'Nouvel accessoire <span class="glyphicon glyphicon-plus"></span>', 'url' => 'accessory/create', 'class' => 'btn btn-primary']); | |||
?> | |||
<div class="accessory-index"> | |||
<?= GridView::widget([ | |||
'filterModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
'name', | |||
[ | |||
'class' => 'yii\grid\ActionColumn', | |||
'template' => '{update} {delete}', | |||
'headerOptions' => ['class' => 'column-actions'], | |||
'contentOptions' => ['class' => 'column-actions'], | |||
'buttons' => [ | |||
'update' => function ($url, $model) { | |||
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [ | |||
'title' => 'Modifier', 'class' => 'btn btn-default' | |||
]); | |||
}, | |||
'delete' => function ($url, $model) { | |||
return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [ | |||
'title' => 'Supprimer', 'class' => 'btn btn-default' | |||
]); | |||
} | |||
], | |||
], | |||
], | |||
]); ?> | |||
</div> |
@@ -0,0 +1,52 @@ | |||
<?php | |||
/** | |||
Copyright Souke (2018) | |||
contact@souke.fr | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use yii\helpers\Html; | |||
$this->setTitle("Modifier un accessoire") ; | |||
$this->addBreadcrumb(['label' => "Accessoires", 'url' => ['index']]) ; | |||
$this->addBreadcrumb(['label' => Html::encode($accessory->getName()), 'url' => ['update', 'id' => $accessory->getId()]]) ; | |||
$this->addBreadcrumb('Modifier') ; | |||
?> | |||
<div class="accessory-update"> | |||
<?= $this->render('_form', [ | |||
'accessory' => $accessory, | |||
]) ?> | |||
</div> |
@@ -207,10 +207,11 @@ $isUserCurrentGrantedAsProducer = $userModule->getAuthorizationChecker()->isGran | |||
'icon' => 'clone', | |||
'url' => ['/product/index'], | |||
'visible' => $isUserCurrentGrantedAsProducer, | |||
'active' => Yii::$app->controller->id == 'product' || Yii::$app->controller->id == 'product-category', | |||
'active' => Yii::$app->controller->id == 'product' || Yii::$app->controller->id == 'product-category' || Yii::$app->controller->id == 'accessory', | |||
'items' => [ | |||
['label' => 'Liste', 'icon' => 'th-list', 'url' => ['/product/index'], 'visible' => $isUserCurrentGrantedAsProducer], | |||
['label' => 'Catégories', 'icon' => 'book', 'url' => ['/product-category/index'], 'visible' => $isUserCurrentGrantedAsProducer], | |||
['label' => 'Accessoires', 'icon' => 'cutlery', 'url' => ['/accessory/index'], 'visible' => $isUserCurrentGrantedAsProducer && $featureChecker->isEnabled(Feature::ALIAS_PRODUCT_ACCESSORY)], | |||
['label' => 'Import prix', 'icon' => 'upload', 'url' => ['/product/price-import'], 'visible' => $isUserCurrentGrantedAsProducer && $featureChecker->isEnabled(Feature::ALIAS_PRODUCT_PRICE_IMPORT)], | |||
] | |||
], |
@@ -28,6 +28,7 @@ class BusinessLogic | |||
$this->getUserModule(), | |||
$this->getUserMessageModule(), | |||
$this->getPointSaleDistributionModule(), | |||
$this->getAccessoryModule(), | |||
$this->getProductDistributionModule(), | |||
$this->getProductCategoryModule(), | |||
$this->getProductPointSaleModule(), |
@@ -24,6 +24,7 @@ use domain\PointSale\SharedPointSale\SharedPointSaleModule; | |||
use domain\PointSale\UserPointSale\UserPointSaleModule; | |||
use domain\Producer\Producer\ProducerModule; | |||
use domain\Producer\ProducerPriceRange\ProducerPriceRangeModule; | |||
use domain\Product\Accessory\AccessoryModule; | |||
use domain\Product\Product\ProductModule; | |||
use domain\Product\ProductCategory\ProductCategoryModule; | |||
use domain\Product\ProductPointSale\ProductPointSaleModule; | |||
@@ -42,6 +43,11 @@ use domain\User\UserUserGroup\UserUserGroupModule; | |||
trait BusinessLogicTrait | |||
{ | |||
public function getAccessoryModule(): AccessoryModule | |||
{ | |||
return AccessoryModule::getInstance(); | |||
} | |||
public function getOrderStatusModule(): OrderStatusModule | |||
{ | |||
return OrderStatusModule::getInstance(); |
@@ -0,0 +1,34 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
/** | |||
* Class m240619_195454_create_table_accessory | |||
*/ | |||
class m240619_195454_create_table_accessory extends Migration | |||
{ | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeUp() | |||
{ | |||
$this->createTable('accessory', [ | |||
'id' => 'pk', | |||
'id_producer' => Schema::TYPE_INTEGER.' NOT NULl', | |||
'name' => Schema::TYPE_STRING.' NOT NULl', | |||
'quantity' => Schema::TYPE_INTEGER | |||
]); | |||
$this->addForeignKey('fk_accessory_id_producer', 'accessory', 'id_producer', 'producer', 'id'); | |||
} | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeDown() | |||
{ | |||
$this->dropTable('accessory'); | |||
$this->dropForeignKey('fk_accessory_id_producer', 'accessory'); | |||
} | |||
} |
@@ -54,6 +54,7 @@ class Feature extends ActiveRecordCommon | |||
const ALIAS_BRIDGE_SUMUP = 'sumup_synchronization'; | |||
const ALIAS_SPONSORSHIP = 'sponsorship'; | |||
const ALIAS_BRIDGE_EVOLIZ = 'bridge_evoliz'; | |||
const ALIAS_PRODUCT_ACCESSORY = 'product_accessory'; | |||
/** | |||
* @inheritdoc |
@@ -23,7 +23,8 @@ class FeatureDefinition extends AbstractDefinition | |||
Feature::ALIAS_SHARED_POINT_SALE => 'Points de vente partagés', | |||
Feature::ALIAS_SPONSORSHIP => "Parrainage producteurs", | |||
Feature::ALIAS_BRIDGE_SUMUP => "Pont vers SumUp", | |||
Feature::ALIAS_BRIDGE_EVOLIZ => "Pont vers Evoliz" | |||
Feature::ALIAS_BRIDGE_EVOLIZ => "Pont vers Evoliz", | |||
Feature::ALIAS_PRODUCT_ACCESSORY => 'Accessoires produits', | |||
]; | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use common\components\ActiveRecordCommon; | |||
use domain\Producer\Producer\Producer; | |||
use yii\db\ActiveQuery; | |||
class Accessory extends ActiveRecordCommon | |||
{ | |||
public static function tableName() | |||
{ | |||
return 'accessory'; | |||
} | |||
public function rules() | |||
{ | |||
return [ | |||
[['name', 'id_producer'], 'required'], | |||
[['name'], 'string', 'max' => 255], | |||
[['quantity', 'id_producer'], 'integer'], | |||
]; | |||
} | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'quantity' => 'Quantité', | |||
]; | |||
} | |||
/* Getters / Setters */ | |||
public function getId(): ?int | |||
{ | |||
return $this->id; | |||
} | |||
public function getProducer(): Producer | |||
{ | |||
return $this->producerRelation; | |||
} | |||
public function setProducer(Producer $producer): self | |||
{ | |||
$this->populateFieldObject('id_producer', 'producerRelation', $producer); | |||
return $this; | |||
} | |||
public function getName(): string | |||
{ | |||
return $this->name; | |||
} | |||
public function setName(string $name): self | |||
{ | |||
$this->name = $name; | |||
return $this; | |||
} | |||
public function getQuantity(): ?int | |||
{ | |||
return $this->quantity; | |||
} | |||
public function setQuantity(?int $quantity): self | |||
{ | |||
$this->quantity = $quantity; | |||
return $this; | |||
} | |||
/* Relations */ | |||
public function getProducerRelation(): ActiveQuery | |||
{ | |||
return $this->hasOne(Producer::class, ['id' => 'id_producer']); | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractBuilder; | |||
use domain\Producer\Producer\Producer; | |||
class AccessoryBuilder extends AbstractBuilder | |||
{ | |||
public function instanciateAccessory(Producer $producer): Accessory | |||
{ | |||
$accessory = new Accessory(); | |||
$accessory->setProducer($producer); | |||
return $accessory; | |||
} | |||
} |
@@ -0,0 +1,13 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractDefinition; | |||
class AccessoryDefinition extends AbstractDefinition | |||
{ | |||
public function getEntityFqcn(): string | |||
{ | |||
return Accessory::class; | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractManager; | |||
use domain\Producer\Producer\Producer; | |||
class AccessoryManager extends AbstractManager | |||
{ | |||
protected AccessoryBuilder $accessoryBuilder; | |||
public function loadDependencies(): void | |||
{ | |||
$this->accessoryBuilder = $this->loadService(AccessoryBuilder::class); | |||
} | |||
public function createAccessory(Producer $producer, string $name, ?int $quantity): Accessory | |||
{ | |||
$accessory = $this->accessoryBuilder->instanciateAccessory($producer); | |||
$accessory->setName($name); | |||
$accessory->setQuantity($quantity); | |||
$accessory->save(); | |||
return $accessory; | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractModule; | |||
class AccessoryModule extends AbstractModule | |||
{ | |||
public function getServices(): array | |||
{ | |||
return [ | |||
AccessoryDefinition::class, | |||
AccessoryBuilder::class, | |||
AccessoryRepository::class, | |||
AccessoryManager::class | |||
]; | |||
} | |||
public function getDefinition(): AccessoryDefinition | |||
{ | |||
return AccessoryDefinition::getInstance(); | |||
} | |||
public function getBuilder(): AccessoryBuilder | |||
{ | |||
return AccessoryBuilder::getInstance(); | |||
} | |||
public function getRepository(): AccessoryRepository | |||
{ | |||
return AccessoryRepository::getInstance(); | |||
} | |||
public function getManager(): AccessoryManager | |||
{ | |||
return AccessoryManager::getInstance(); | |||
} | |||
} |
@@ -0,0 +1,32 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractRepository; | |||
class AccessoryRepository extends AbstractRepository | |||
{ | |||
protected AccessoryRepositoryQuery $query; | |||
public function loadDependencies(): void | |||
{ | |||
$this->loadQuery(AccessoryRepositoryQuery::class); | |||
} | |||
public function getDefaultOptionsSearch(): array | |||
{ | |||
return [ | |||
self::WITH => [], | |||
self::JOIN_WITH => [], | |||
self::ORDER_BY => 'accessory.name ASC', | |||
self::ATTRIBUTE_ID_PRODUCER => 'accessory.id_producer' | |||
]; | |||
} | |||
public function findOneAccessoryById(int $id): ?Accessory | |||
{ | |||
return $this->createDefaultQuery() | |||
->filterById($id) | |||
->findOne(); | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
<?php | |||
namespace domain\Product\Accessory; | |||
use domain\_\AbstractRepositoryQuery; | |||
class AccessoryRepositoryQuery extends AbstractRepositoryQuery | |||
{ | |||
protected AccessoryDefinition $definition; | |||
public function loadDependencies(): void | |||
{ | |||
$this->loadDefinition(AccessoryDefinition::class); | |||
} | |||
} |