@@ -0,0 +1,136 @@ | |||
<?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 backend\controllers\BackendController; | |||
use domain\Communication\AutomaticEmail\AutomaticEmail; | |||
use domain\Feature\Feature\Feature; | |||
use domain\Product\Accessory\Accessory; | |||
use yii\base\Response; | |||
use yii\db\StaleObjectException; | |||
use yii\filters\AccessControl; | |||
use yii\web\NotFoundHttpException; | |||
class AutomaticEmailController 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()) | |||
&& $this->getFeatureModule()->getChecker() | |||
->isEnabled(Feature::ALIAS_AUTOMATIC_EMAIL); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
public function actionIndex() | |||
{ | |||
return $this->render('index', [ | |||
'dataProvider' => $this->getAutomaticEmailModule()->getRepository() | |||
->queryAutomaticEmails()->getDataProvider(20), | |||
]); | |||
} | |||
public function actionCreate() | |||
{ | |||
$automaticEmailModule = $this->getAutomaticEmailModule(); | |||
$automaticEmailModel = $automaticEmailModule->getBuilder()->instanciateAutomaticEmail($this->getProducerCurrent()); | |||
if ($automaticEmailModel->load(\Yii::$app->request->post()) && $automaticEmailModel->validate()) { | |||
$automaticEmail = $automaticEmailModule->getManager()->createAutomaticEmail( | |||
$this->getProducerCurrent(), | |||
$automaticEmailModel->getDay(), | |||
$automaticEmailModel->getSubject(), | |||
$automaticEmailModel->getMessage(), | |||
$automaticEmailModel->getIntegrateProductList() | |||
); | |||
$this->setFlash('success', "Email automatique ajouté"); | |||
return $this->redirectAfterSave('automatic-email', $automaticEmail->getId()); | |||
} | |||
return $this->render('create', [ | |||
'automaticEmail' => $automaticEmailModel | |||
]); | |||
} | |||
public function actionUpdate(int $id) | |||
{ | |||
$automaticEmail = $this->findAutomaticEmail($id); | |||
if ($automaticEmail->load(\Yii::$app->request->post()) && $automaticEmail->validate() && $automaticEmail->save()) { | |||
$this->setFlash('success', "Email automatique modifié"); | |||
return $this->redirectAfterSave('automatic-email', $automaticEmail->getId()); | |||
} | |||
return $this->render('update', [ | |||
'automaticEmail' => $automaticEmail | |||
]); | |||
} | |||
public function actionDelete(int $id): Response | |||
{ | |||
$automaticEmail = $this->findAutomaticEmail($id); | |||
if($automaticEmail->delete()) { | |||
$this->setFlash('success', "Email automatique supprimé"); | |||
} | |||
return $this->redirect('index'); | |||
} | |||
protected function findAutomaticEmail($id): AutomaticEmail | |||
{ | |||
if (($automaticEmail = $this->getAutomaticEmailModule()->getRepository()->findOneAutomaticEmailById($id)) !== null) { | |||
return $automaticEmail; | |||
} else { | |||
throw new NotFoundHttpException("L'email automatique n'a pas été trouvé."); | |||
} | |||
} | |||
} |
@@ -0,0 +1,91 @@ | |||
<?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\Date; | |||
use common\helpers\Dropdown; | |||
use lo\widgets\Toggle; | |||
use yii\widgets\ActiveForm; | |||
?> | |||
<div class="automatic-email-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($automaticEmail, 'status')->widget(Toggle::class, | |||
[ | |||
'options' => [ | |||
'data-id' => $automaticEmail->id, | |||
'data-on' => 'Activé', | |||
'data-off' => 'Désactivé' | |||
], | |||
]); | |||
?> | |||
<?= $form->field($automaticEmail, 'day')->dropDownList(Date::getDaysOfWeekArray()) ?> | |||
<?= $form->field($automaticEmail, 'delay_before_distribution')->dropDownList(Dropdown::numberChoices(1, 7, false, ' jour(s) avant')); ?> | |||
<?= $form->field($automaticEmail, 'subject')->textInput() ?> | |||
<?= $form->field($automaticEmail, 'message')->widget(letyii\tinymce\Tinymce::class, [ | |||
'configs' => [ | |||
'plugins' => Yii::$app->parameterBag->get('tinyMcePlugins'), | |||
] | |||
]); ?> | |||
<?= $form->field($automaticEmail, 'integrate_product_list')->widget(Toggle::class, | |||
[ | |||
'options' => [ | |||
'data-id' => $automaticEmail->id, | |||
'data-on' => 'Oui', | |||
'data-off' => 'Non', | |||
'data-offstyle' => 'default', | |||
], | |||
]); | |||
?> | |||
</div> | |||
</div> | |||
</div> | |||
<?= $this->render('@backend/views/_include/form_actions.php',[ | |||
'model' => $automaticEmail, | |||
]); ?> | |||
<?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 email automatique") ; | |||
$this->addBreadcrumb(['label' => "Emails automatiques", 'url' => ['index']]) ; | |||
$this->addBreadcrumb('Ajouter') ; | |||
?> | |||
<div class="automatic-email-create"> | |||
<?= $this->render('_form', [ | |||
'automaticEmail' => $automaticEmail, | |||
]) ?> | |||
</div> |
@@ -0,0 +1,102 @@ | |||
<?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 domain\Communication\AutomaticEmail\AutomaticEmail; | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
/** | |||
* @var View $this | |||
*/ | |||
$this->setTitle('Emails automatiques'); | |||
$this->addBreadcrumb($this->getTitle()); | |||
$this->addButton(['label' => 'Nouvel email automatique <span class="glyphicon glyphicon-plus"></span>', 'url' => 'automatic-email/create', 'class' => 'btn btn-primary']); | |||
?> | |||
<div class="accessory-index"> | |||
<?= GridView::widget([ | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'day', | |||
'value' => function(AutomaticEmail $automaticEmail) { | |||
return $automaticEmail->getDayAsString(); | |||
} | |||
], | |||
[ | |||
'attribute' => 'delay_before_distribution', | |||
'value' => function(AutomaticEmail $automaticEmail) { | |||
return $automaticEmail->getDelayBeforeDistributionAsString(); | |||
} | |||
], | |||
'subject', | |||
[ | |||
'attribute' => 'message', | |||
'format' => 'raw', | |||
], | |||
[ | |||
'attribute' => 'status', | |||
'format' => 'raw', | |||
'value' => function(AutomaticEmail $automaticEmail) { | |||
return $automaticEmail->getStatusAsHtml(); | |||
} | |||
], | |||
[ | |||
'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 email automatique") ; | |||
$this->addBreadcrumb(['label' => "Emails automatiques", 'url' => ['index']]) ; | |||
$this->addBreadcrumb(['label' => Html::encode($automaticEmail->getSubject()), 'url' => ['update', 'id' => $automaticEmail->getId()]]) ; | |||
$this->addBreadcrumb('Modifier') ; | |||
?> | |||
<div class="automatic-email-update"> | |||
<?= $this->render('_form', [ | |||
'automaticEmail' => $automaticEmail, | |||
]) ?> | |||
</div> |
@@ -251,6 +251,7 @@ $isUserCurrentGrantedAsProducer = $userModule->getAuthorizationChecker()->isGran | |||
'visible' => $isUserCurrentGrantedAsProducer, | |||
'items' => [ | |||
['label' => 'Email', 'icon' => 'paper-plane', 'url' => ['/communicate/email'], 'visible' => $isUserCurrentGrantedAsProducer], | |||
['label' => 'Email automatique', 'icon' => 'paper-plane-o', 'url' => ['/automatic-email/index'], 'visible' => $isUserCurrentGrantedAsProducer && $featureChecker->isEnabled(Feature::ALIAS_AUTOMATIC_EMAIL)], | |||
['label' => 'Papier', 'icon' => 'print', 'url' => ['/communicate/paper'], 'visible' => $isUserCurrentGrantedAsProducer], | |||
] | |||
], |
@@ -3335,6 +3335,11 @@ termes. | |||
margin-top: 0px; | |||
} | |||
/* line 4, ../sass/automatic-email/_form.scss */ | |||
.automatic-email-form form label { | |||
display: block; | |||
} | |||
/** | |||
Copyright Souke (2018) | |||
@@ -0,0 +1,8 @@ | |||
.automatic-email-form { | |||
form { | |||
label { | |||
display: block; | |||
} | |||
} | |||
} |
@@ -1555,4 +1555,5 @@ a.btn, button.btn { | |||
@import "feature-admin/_index.scss"; | |||
@import "setting/_form.scss"; | |||
@import "dashboard-admin/_index.scss" ; | |||
@import "automatic-email/_form.scss" ; | |||
@import "_responsive.scss" ; |
@@ -26,6 +26,7 @@ class BusinessLogic | |||
$this->getUserProducerModule(), | |||
$this->getUserPointSaleModule(), | |||
$this->getUserModule(), | |||
$this->getAutomaticEmailModule(), | |||
$this->getUserMessageModule(), | |||
$this->getPointSaleDistributionModule(), | |||
$this->getProductAccessoryModule(), |
@@ -13,6 +13,7 @@ use domain\Document\Invoice\InvoiceModule; | |||
use domain\Document\Quotation\QuotationModule; | |||
use domain\Feature\Feature\FeatureModule; | |||
use domain\Feature\FeatureProducer\FeatureProducerModule; | |||
use domain\Communication\AutomaticEmail\AutomaticEmailModule; | |||
use domain\Opinion\OpinionModule; | |||
use domain\Order\Order\OrderModule; | |||
use domain\Order\OrderStatus\OrderStatusModule; | |||
@@ -44,6 +45,11 @@ use domain\User\UserUserGroup\UserUserGroupModule; | |||
trait BusinessLogicTrait | |||
{ | |||
public function getAutomaticEmailModule(): AutomaticEmailModule | |||
{ | |||
return AutomaticEmailModule::getInstance(); | |||
} | |||
public function getProductAccessoryModule(): ProductAccessoryModule | |||
{ | |||
return ProductAccessoryModule::getInstance(); |
@@ -0,0 +1,25 @@ | |||
<?php | |||
namespace common\components; | |||
class Date | |||
{ | |||
public static function getDaysOfWeekArray(): array | |||
{ | |||
return [ | |||
1 => 'Lundi', | |||
2 => 'Mardi', | |||
3 => 'Mercredi', | |||
4 => 'Jeudi', | |||
5 => 'Vendredi', | |||
6 => 'Samedi', | |||
7 => 'Dimanche' | |||
]; | |||
} | |||
public static function getDayOfWeekStringByNumber(int $dayOfWeekNumber): string | |||
{ | |||
$daysOfWeekArray = self::getDaysOfWeekArray(); | |||
return $daysOfWeekArray[$dayOfWeekNumber]; | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
/** | |||
* Class m240627_064315_create_table_automatic_email | |||
*/ | |||
class m240627_064315_create_table_automatic_email extends Migration | |||
{ | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeUp() | |||
{ | |||
$this->createTable('automatic_email', [ | |||
'id' => 'pk', | |||
'id_producer' => Schema::TYPE_INTEGER.' NOT NULL', | |||
'day' => Schema::TYPE_INTEGER.' NOT NULL', | |||
'delay_before_distribution' => Schema::TYPE_INTEGER.' NOT NULL', | |||
'subject' => Schema::TYPE_STRING.' NOT NULL', | |||
'message' => Schema::TYPE_TEXT.' NOT NULL', | |||
'integrate_product_list' => Schema::TYPE_BOOLEAN, | |||
'status' => Schema::TYPE_INTEGER.' NOT NULL', | |||
]); | |||
$this->addForeignKey('fk_automatic_email_id_producer', 'automatic_email', 'id_producer', 'producer', 'id'); | |||
} | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeDown() | |||
{ | |||
$this->dropTable('automatic_email'); | |||
} | |||
} |
@@ -0,0 +1,152 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use common\components\ActiveRecordCommon; | |||
use common\components\Date; | |||
use domain\Producer\Producer\Producer; | |||
use yii\db\ActiveQuery; | |||
class AutomaticEmail extends ActiveRecordCommon | |||
{ | |||
public static function tableName() | |||
{ | |||
return 'automatic_email'; | |||
} | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_producer', 'day', 'subject', 'message', 'status'], 'required'], | |||
[['subject', 'message'], 'string'], | |||
[['id_producer', 'day', 'delay_before_distribution', 'status'], 'integer'], | |||
[['integrate_product_list'], 'boolean'] | |||
]; | |||
} | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id_producer' => 'Producteur', | |||
'day' => 'Jour de distribution', | |||
'delay_before_distribution' => 'Envoi du message', | |||
'subject' => 'Sujet', | |||
'message' => 'Message', | |||
'integrate_product_list' => 'Intégrer la liste des produits au message', | |||
'status' => 'Statut' | |||
]; | |||
} | |||
/* 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 getDay(): int | |||
{ | |||
return $this->day; | |||
} | |||
public function setDay(int $day): self | |||
{ | |||
$this->day = $day; | |||
return $this; | |||
} | |||
public function getDelayBeforeDistribution(): int | |||
{ | |||
return $this->delay_before_distribution; | |||
} | |||
public function setDelayBeforeDistribution(int $delayBeforeDistribution): self | |||
{ | |||
$this->delay_before_distribution = $delayBeforeDistribution; | |||
return $this; | |||
} | |||
public function getSubject(): string | |||
{ | |||
return $this->subject; | |||
} | |||
public function setSubject(string $subject): self | |||
{ | |||
$this->subject = $subject; | |||
return $this; | |||
} | |||
public function getMessage(): string | |||
{ | |||
return $this->message; | |||
} | |||
public function setMessage(string $message): self | |||
{ | |||
$this->message = $message; | |||
return $this; | |||
} | |||
public function getIntegrateProductList(): ?bool | |||
{ | |||
return $this->integrate_product_list; | |||
} | |||
public function setIntegrateProductList(?bool $integrateProductList): self | |||
{ | |||
$this->integrate_product_list = $integrateProductList; | |||
return $this; | |||
} | |||
public function getStatus(): int | |||
{ | |||
return $this->status; | |||
} | |||
public function setStatus(int $status): self | |||
{ | |||
$this->status = $status; | |||
return $this; | |||
} | |||
/* Relations */ | |||
public function getProducerRelation(): ActiveQuery | |||
{ | |||
return $this->hasOne(Producer::class, ['id' => 'id_producer']); | |||
} | |||
/* Méthodes */ | |||
public function getDayAsString(): string | |||
{ | |||
return Date::getDayOfWeekStringByNumber($this->getDay()); | |||
} | |||
public function getDelayBeforeDistributionAsString(): string | |||
{ | |||
return $this->getDelayBeforeDistribution().' jour(s) avant'; | |||
} | |||
public function getStatusAsHtml(): string | |||
{ | |||
if($this->getStatus()) { | |||
return '<span class="label label-success">Activé</span>'; | |||
} | |||
else { | |||
return '<span class="label label-danger">Désactivé</span>'; | |||
} | |||
} | |||
} |
@@ -0,0 +1,19 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractBuilder; | |||
use domain\_\StatusInterface; | |||
use domain\Producer\Producer\Producer; | |||
class AutomaticEmailBuilder extends AbstractBuilder | |||
{ | |||
public function instanciateAutomaticEmail(Producer $producer): AutomaticEmail | |||
{ | |||
$automaticEmail = new AutomaticEmail(); | |||
$automaticEmail->setProducer($producer); | |||
$automaticEmail->setDelayBeforeDistribution(2); | |||
$automaticEmail->setStatus(StatusInterface::STATUS_ONLINE); | |||
return $automaticEmail; | |||
} | |||
} |
@@ -0,0 +1,13 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractDefinition; | |||
class AutomaticEmailDefinition extends AbstractDefinition | |||
{ | |||
public function getEntityFqcn(): string | |||
{ | |||
return AutomaticEmail::class; | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractManager; | |||
use domain\Producer\Producer\Producer; | |||
class AutomaticEmailManager extends AbstractManager | |||
{ | |||
protected AutomaticEmailBuilder $automaticEmailBuilder; | |||
public function loadDependencies(): void | |||
{ | |||
$this->automaticEmailBuilder = $this->loadService(AutomaticEmailBuilder::class); | |||
} | |||
public function createAutomaticEmail( | |||
Producer $producer, | |||
int $day, | |||
string $subject, | |||
string $message, | |||
bool $integrateProductList = null | |||
): AutomaticEmail | |||
{ | |||
$automaticEmail = $this->automaticEmailBuilder->instanciateAutomaticEmail($producer); | |||
$automaticEmail->setDay($day); | |||
$automaticEmail->setSubject($subject); | |||
$automaticEmail->setMessage($message); | |||
$automaticEmail->setIntegrateProductList($integrateProductList); | |||
$automaticEmail->save(); | |||
return $automaticEmail; | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractModule; | |||
class AutomaticEmailModule extends AbstractModule | |||
{ | |||
public function getServices(): array | |||
{ | |||
return [ | |||
AutomaticEmailDefinition::class, | |||
AutomaticEmailBuilder::class, | |||
AutomaticEmailRepository::class, | |||
AutomaticEmailManager::class | |||
]; | |||
} | |||
public function getDefinition(): AutomaticEmailDefinition | |||
{ | |||
return AutomaticEmailDefinition::getInstance(); | |||
} | |||
public function getBuilder(): AutomaticEmailBuilder | |||
{ | |||
return AutomaticEmailBuilder::getInstance(); | |||
} | |||
public function getRepository(): AutomaticEmailRepository | |||
{ | |||
return AutomaticEmailRepository::getInstance(); | |||
} | |||
public function getManager(): AutomaticEmailManager | |||
{ | |||
return AutomaticEmailManager::getInstance(); | |||
} | |||
} |
@@ -0,0 +1,38 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractRepository; | |||
use domain\_\RepositoryQueryInterface; | |||
class AutomaticEmailRepository extends AbstractRepository | |||
{ | |||
protected AutomaticEmailRepositoryQuery $query; | |||
public function loadDependencies(): void | |||
{ | |||
$this->loadQuery(AutomaticEmailRepositoryQuery::class); | |||
} | |||
public function getDefaultOptionsSearch(): array | |||
{ | |||
return [ | |||
self::WITH => [], | |||
self::JOIN_WITH => [], | |||
self::ORDER_BY => 'day ASC', | |||
self::ATTRIBUTE_ID_PRODUCER => 'automatic_email.id_producer' | |||
]; | |||
} | |||
public function findOneAutomaticEmailById(int $id): ?AutomaticEmail | |||
{ | |||
return $this->createDefaultQuery() | |||
->filterById($id) | |||
->findOne(); | |||
} | |||
public function queryAutomaticEmails(): RepositoryQueryInterface | |||
{ | |||
return $this->createDefaultQuery(); | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
<?php | |||
namespace domain\Communication\AutomaticEmail; | |||
use domain\_\AbstractRepositoryQuery; | |||
class AutomaticEmailRepositoryQuery extends AbstractRepositoryQuery | |||
{ | |||
protected AutomaticEmailDefinition $definition; | |||
public function loadDependencies(): void | |||
{ | |||
$this->loadDefinition(AutomaticEmailDefinition::class); | |||
} | |||
} |
@@ -56,6 +56,7 @@ class Feature extends ActiveRecordCommon | |||
const ALIAS_BRIDGE_EVOLIZ = 'bridge_evoliz'; | |||
const ALIAS_PRODUCT_ACCESSORY = 'product_accessory'; | |||
const ALIAS_FORUM = 'forum'; | |||
const ALIAS_AUTOMATIC_EMAIL = 'automatic_email'; | |||
/** | |||
* @inheritdoc |
@@ -26,6 +26,7 @@ class FeatureDefinition extends AbstractDefinition | |||
Feature::ALIAS_BRIDGE_EVOLIZ => "Pont vers Evoliz", | |||
Feature::ALIAS_PRODUCT_ACCESSORY => 'Accessoires produits', | |||
Feature::ALIAS_FORUM => 'Forum', | |||
Feature::ALIAS_AUTOMATIC_EMAIL => 'Emails automatiques' | |||
]; | |||
} | |||
} |