<?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é."); | |||||
} | |||||
} | |||||
} |
<?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> |
<?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> |
<?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> |
<?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> |
'icon' => 'clone', | 'icon' => 'clone', | ||||
'url' => ['/product/index'], | 'url' => ['/product/index'], | ||||
'visible' => $isUserCurrentGrantedAsProducer, | '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' => [ | 'items' => [ | ||||
['label' => 'Liste', 'icon' => 'th-list', 'url' => ['/product/index'], 'visible' => $isUserCurrentGrantedAsProducer], | ['label' => 'Liste', 'icon' => 'th-list', 'url' => ['/product/index'], 'visible' => $isUserCurrentGrantedAsProducer], | ||||
['label' => 'Catégories', 'icon' => 'book', 'url' => ['/product-category/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)], | ['label' => 'Import prix', 'icon' => 'upload', 'url' => ['/product/price-import'], 'visible' => $isUserCurrentGrantedAsProducer && $featureChecker->isEnabled(Feature::ALIAS_PRODUCT_PRICE_IMPORT)], | ||||
] | ] | ||||
], | ], |
$this->getUserModule(), | $this->getUserModule(), | ||||
$this->getUserMessageModule(), | $this->getUserMessageModule(), | ||||
$this->getPointSaleDistributionModule(), | $this->getPointSaleDistributionModule(), | ||||
$this->getAccessoryModule(), | |||||
$this->getProductDistributionModule(), | $this->getProductDistributionModule(), | ||||
$this->getProductCategoryModule(), | $this->getProductCategoryModule(), | ||||
$this->getProductPointSaleModule(), | $this->getProductPointSaleModule(), |
use domain\PointSale\UserPointSale\UserPointSaleModule; | use domain\PointSale\UserPointSale\UserPointSaleModule; | ||||
use domain\Producer\Producer\ProducerModule; | use domain\Producer\Producer\ProducerModule; | ||||
use domain\Producer\ProducerPriceRange\ProducerPriceRangeModule; | use domain\Producer\ProducerPriceRange\ProducerPriceRangeModule; | ||||
use domain\Product\Accessory\AccessoryModule; | |||||
use domain\Product\Product\ProductModule; | use domain\Product\Product\ProductModule; | ||||
use domain\Product\ProductCategory\ProductCategoryModule; | use domain\Product\ProductCategory\ProductCategoryModule; | ||||
use domain\Product\ProductPointSale\ProductPointSaleModule; | use domain\Product\ProductPointSale\ProductPointSaleModule; | ||||
trait BusinessLogicTrait | trait BusinessLogicTrait | ||||
{ | { | ||||
public function getAccessoryModule(): AccessoryModule | |||||
{ | |||||
return AccessoryModule::getInstance(); | |||||
} | |||||
public function getOrderStatusModule(): OrderStatusModule | public function getOrderStatusModule(): OrderStatusModule | ||||
{ | { | ||||
return OrderStatusModule::getInstance(); | return OrderStatusModule::getInstance(); |
<?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'); | |||||
} | |||||
} |
const ALIAS_BRIDGE_SUMUP = 'sumup_synchronization'; | const ALIAS_BRIDGE_SUMUP = 'sumup_synchronization'; | ||||
const ALIAS_SPONSORSHIP = 'sponsorship'; | const ALIAS_SPONSORSHIP = 'sponsorship'; | ||||
const ALIAS_BRIDGE_EVOLIZ = 'bridge_evoliz'; | const ALIAS_BRIDGE_EVOLIZ = 'bridge_evoliz'; | ||||
const ALIAS_PRODUCT_ACCESSORY = 'product_accessory'; | |||||
/** | /** | ||||
* @inheritdoc | * @inheritdoc |
Feature::ALIAS_SHARED_POINT_SALE => 'Points de vente partagés', | Feature::ALIAS_SHARED_POINT_SALE => 'Points de vente partagés', | ||||
Feature::ALIAS_SPONSORSHIP => "Parrainage producteurs", | Feature::ALIAS_SPONSORSHIP => "Parrainage producteurs", | ||||
Feature::ALIAS_BRIDGE_SUMUP => "Pont vers SumUp", | 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', | |||||
]; | ]; | ||||
} | } | ||||
} | } |
<?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']); | |||||
} | |||||
} |
<?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; | |||||
} | |||||
} |
<?php | |||||
namespace domain\Product\Accessory; | |||||
use domain\_\AbstractDefinition; | |||||
class AccessoryDefinition extends AbstractDefinition | |||||
{ | |||||
public function getEntityFqcn(): string | |||||
{ | |||||
return Accessory::class; | |||||
} | |||||
} |
<?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; | |||||
} | |||||
} |
<?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(); | |||||
} | |||||
} |
<?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(); | |||||
} | |||||
} |
<?php | |||||
namespace domain\Product\Accessory; | |||||
use domain\_\AbstractRepositoryQuery; | |||||
class AccessoryRepositoryQuery extends AbstractRepositoryQuery | |||||
{ | |||||
protected AccessoryDefinition $definition; | |||||
public function loadDependencies(): void | |||||
{ | |||||
$this->loadDefinition(AccessoryDefinition::class); | |||||
} | |||||
} |