&& $model->save()) | && $model->save()) | ||||
{ | { | ||||
Yii::$app->getSession()->setFlash('success', 'Abonnement ajouté'); | 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', [ | return $this->render('create', [ | ||||
return $this->redirect(['subscription/index']); | 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 | |||||
]) ; | |||||
} | |||||
} | } |
<?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']) ?> |
$order->origin = Order::ORIGIN_AUTO; | $order->origin = Order::ORIGIN_AUTO; | ||||
$order->id_point_sale = $this->id_point_sale; | $order->id_point_sale = $this->id_point_sale; | ||||
$order->id_distribution = $distribution->id; | $order->id_distribution = $distribution->id; | ||||
$order->id_subscription = $this->id; | |||||
$order->auto_payment = $this->auto_payment ; | $order->auto_payment = $this->auto_payment ; | ||||
$userPointSale = UserPointSale::searchOne([ | $userPointSale = UserPointSale::searchOne([ | ||||
return $arrSubscriptions; | 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 ; | |||||
} | |||||
} | } |
public function rules() | public function rules() | ||||
{ | { | ||||
return [ | 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'], | [['date_begin', 'date_end'], 'date', 'format' => 'php:d/m/Y'], | ||||
[['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'auto_payment'], 'boolean'], | [['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'auto_payment'], 'boolean'], | ||||
[['id_point_sale', 'id_producer', 'date_begin'], 'required', 'message' => 'Champs obligatoire'], | [['id_point_sale', 'id_producer', 'date_begin'], 'required', 'message' => 'Champs obligatoire'], | ||||
$subscriptionProduct->save(); | $subscriptionProduct->save(); | ||||
} | } | ||||
} | } | ||||
if(!$this->id) { | |||||
$this->id = $subscription->id ; | |||||
} | |||||
} | } | ||||
return true; | return true; | ||||
} | } |