@@ -133,7 +133,15 @@ class SubscriptionController extends BackendController | |||
&& $model->save()) | |||
{ | |||
Yii::$app->getSession()->setFlash('success', 'Abonnement ajouté'); | |||
return $this->redirect(['subscription/index']); | |||
$subscription = Subscription::findOne($model->id) ; | |||
$matchedDistributionsArray = $subscription->searchMatchedIncomingDistributions() ; | |||
if(count($matchedDistributionsArray)) { | |||
return $this->redirect(['subscription/update-distributions', 'idSubscription' => $subscription->id]); | |||
} | |||
else { | |||
return $this->redirect(['subscription/index']); | |||
} | |||
} | |||
return $this->render('create', [ | |||
@@ -220,4 +228,24 @@ class SubscriptionController extends BackendController | |||
return $this->redirect(['subscription/index']); | |||
} | |||
public function actionUpdateDistributions($idSubscription, $generate = false) | |||
{ | |||
$subscription = Subscription::findOne($idSubscription) ; | |||
$matchedDistributionsArray = $subscription->searchMatchedIncomingDistributions() ; | |||
if($generate) { | |||
foreach($matchedDistributionsArray as $distribution) { | |||
$subscription->add($distribution->date) ; | |||
} | |||
Yii::$app->getSession()->setFlash('success', 'Commandes ajoutées dans les distributions futures.'); | |||
return $this->redirect(['subscription/index']) ; | |||
} | |||
return $this->render('update_distributions',[ | |||
'matchedDistributionsArray' => $matchedDistributionsArray, | |||
'idSubscription' => $idSubscription | |||
]) ; | |||
} | |||
} |
@@ -0,0 +1,67 @@ | |||
<?php | |||
/** | |||
Copyright La boîte à pain (2018) | |||
contact@laboiteapain.net | |||
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('Mise à jour des distributions') ; | |||
$this->addBreadcrumb(['label' => 'Abonnements', 'url' => ['index']]) ; | |||
$this->addBreadcrumb($this->getTitle()) ; | |||
?> | |||
<p> | |||
Souhaitez-vous générer les commandes de cet abonnement pour les distributions futures ? | |||
</p> | |||
<p> | |||
<?php | |||
$cpt = 0 ; | |||
foreach($matchedDistributionsArray as $distribution) { | |||
$cpt ++ ; | |||
echo date('d/m/Y',strtotime($distribution->date)) ; | |||
if($cpt < count($matchedDistributionsArray)) { | |||
echo ', ' ; | |||
} | |||
} | |||
?> | |||
</p> | |||
<?= Html::a('Non', ['subscription/index'], ['class' => 'btn btn-default']) ?> | |||
<?= Html::a('Oui, générer les commandes', ['subscription/update-distributions', 'idSubscription' => $idSubscription, 'generate' => true], ['class' => 'btn btn-primary']) ?> |
@@ -188,6 +188,7 @@ class Subscription extends ActiveRecordCommon | |||
$order->origin = Order::ORIGIN_AUTO; | |||
$order->id_point_sale = $this->id_point_sale; | |||
$order->id_distribution = $distribution->id; | |||
$order->id_subscription = $this->id; | |||
$order->auto_payment = $this->auto_payment ; | |||
$userPointSale = UserPointSale::searchOne([ | |||
@@ -296,4 +297,51 @@ class Subscription extends ActiveRecordCommon | |||
return $arrSubscriptions; | |||
} | |||
/** | |||
* Recherche les distributions futures où l'abonnement peut s'appliquer. | |||
* | |||
* @return array | |||
*/ | |||
public function searchMatchedIncomingDistributions() | |||
{ | |||
$params = [ | |||
':date_begin' => date('Y-m-d', strtotime($this->date_begin)), | |||
':id_producer' => Producer::getId() | |||
] ; | |||
$incomingDistributions = Distribution::find() | |||
->where('id_producer = :id_producer') | |||
->andWhere('date > :date_begin') ; | |||
if($this->date_end) { | |||
$incomingDistributions->andWhere('date < :date_end') ; | |||
$params[':date_end'] = date('Y-m-d', strtotime($this->date_end)) ; | |||
} | |||
$incomingDistributions->orderBy('date ASC') ; | |||
$incomingDistributions->params($params) ; | |||
$incomingDistributionsArray = $incomingDistributions->all() ; | |||
$matchedIncomingDistributionsArray = [] ; | |||
$arrayDays = [ | |||
1 => 'monday', | |||
2 => 'tuesday', | |||
3 => 'wednesday', | |||
4 => 'thursday', | |||
5 => 'friday', | |||
6 => 'saturday', | |||
7 => 'sunday' | |||
] ; | |||
foreach($incomingDistributionsArray as $incomingDistribution) { | |||
$numDay = date('N', strtotime($incomingDistribution->date)) ; | |||
$day = $arrayDays[$numDay] ; | |||
if($this->$day) { | |||
$matchedIncomingDistributionsArray[] = $incomingDistribution ; | |||
} | |||
} | |||
return $matchedIncomingDistributionsArray ; | |||
} | |||
} |
@@ -73,7 +73,7 @@ class SubscriptionForm extends Model | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_producer', 'week_frequency', 'id_point_sale'], 'integer'], | |||
[['id_producer', 'week_frequency', 'id_point_sale','id'], 'integer'], | |||
[['date_begin', 'date_end'], 'date', 'format' => 'php:d/m/Y'], | |||
[['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'auto_payment'], 'boolean'], | |||
[['id_point_sale', 'id_producer', 'date_begin'], 'required', 'message' => 'Champs obligatoire'], | |||
@@ -164,6 +164,10 @@ class SubscriptionForm extends Model | |||
$subscriptionProduct->save(); | |||
} | |||
} | |||
if(!$this->id) { | |||
$this->id = $subscription->id ; | |||
} | |||
} | |||
return true; | |||
} |