Browse Source

Mise à jour des distributions (ProductDistribution) lors de l'ajout/modification de produits

dev
Guillaume Bourgeois 6 years ago
parent
commit
be713ce855
5 changed files with 81 additions and 50 deletions
  1. +8
    -14
      backend/controllers/ProductController.php
  2. +9
    -1
      backend/views/product/_form.php
  3. +60
    -32
      common/models/Distribution.php
  4. +3
    -2
      common/models/Product.php
  5. +1
    -1
      common/models/ProductDistribution.php

+ 8
- 14
backend/controllers/ProductController.php View File

Upload::uploadFile($model, 'photo'); Upload::uploadFile($model, 'photo');
$model->save(); $model->save();


// on ajoute un enregistrement ProductionProduit pour chaque production
$distributionsArray = Distribution::find()
->where('date > ' . date('Y-m-d'))
->andWhere(['id_producer' => Producer::getId()])
->all();
foreach ($distributionsArray as $distribution) {
$productDistribution = new ProductDistribution;
$productDistribution->id_distribution = $distribution->id;
$productDistribution->id_product = $model->id;
$productDistribution->active = 0;
$productDistribution->save();
}
// link product / distribution
Distribution::linkProductIncomingDistributions($model) ;
Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> ajouté'); Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> ajouté');


$model->photo = ''; $model->photo = '';
$model->save(); $model->save();
} }

if($model->apply_distributions) {
// link product / distribution
Distribution::linkProductIncomingDistributions($model) ;
}
Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> modifié'); Yii::$app->getSession()->setFlash('success', 'Produit <strong>'.Html::encode($model->name).'</strong> modifié');
return $this->redirect(['index']); return $this->redirect(['index']);
} else { } else {

+ 9
- 1
backend/views/product/_form.php View File

} }
?> ?>
<h2>Jours de production</h2>
<h2>Jours de distribution</h2>
<div id="days-production"> <div id="days-production">
<?= $form->field($model, 'monday')->checkbox() ?> <?= $form->field($model, 'monday')->checkbox() ?>
<?= $form->field($model, 'tuesday')->checkbox() ?> <?= $form->field($model, 'tuesday')->checkbox() ?>
<?= $form->field($model, 'id_producer')->hiddenInput()->label('') ?> <?= $form->field($model, 'id_producer')->hiddenInput()->label('') ?>
<?php
if(!$model->isNewRecord) {
echo $form->field($model, 'apply_distributions')
->checkbox()
->hint('Sélectionnez cette option si vous souhaitez que ces modifications soient répercutées dans les distributions à venir déjà initialisées.');
}
?>
<div class="form-group"> <div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> <?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div> </div>

+ 60
- 32
common/models/Distribution.php View File

$products = Product::searchAll(); $products = Product::searchAll();
if ($distribution) { if ($distribution) {
$dayDistribution = date('N', strtotime($distribution->date));
$productsDistribution = ProductDistribution::searchAll([ $productsDistribution = ProductDistribution::searchAll([
'id_distribution' => $distribution->id 'id_distribution' => $distribution->id
]) ; ]) ;

if (!count($productsDistribution)) { if (!count($productsDistribution)) {
foreach ($products as $product) { foreach ($products as $product) {
$productDistribution = new ProductDistribution();
$productDistribution->id_distribution = $distribution->id;
$productDistribution->id_product = $product->id;

$productDistribution->active = 0;
if ($product->active && $dayDistribution == 1 && $product->monday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 2 && $product->tuesday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 3 && $product->wednesday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 4 && $product->thursday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 5 && $product->friday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 6 && $product->saturday) {
$productDistribution->active = 1;
}
if ($product->active && $dayDistribution == 7 && $product->sunday) {
$productDistribution->active = 1;
}
$productDistribution->quantity_max = $product->quantity_max;

$productDistribution->save();
$distribution->linkProduct($product) ;
} }
} }
} }
return $distribution ; return $distribution ;
} }
/**
* Lie un produit aux jours de distribution futurs.
*
* @param Product $product
*/
public static function linkProductIncomingDistributions($product)
{
$distributionsArray = Distribution::find()
->where('date > ' . date('Y-m-d'))
->andWhere(['id_producer' => Producer::getId()])
->all();

foreach ($distributionsArray as $distribution) {
$distribution->linkProduct($product) ;
}
}
/**
* Lie un produit à la distribution.
*
* @param Product $product
*/
public function linkProduct($product)
{
$productDistribution = ProductDistribution::searchOne([
'id_distribution' => $this->id,
'id_product' => $product->id
]) ;
if(!$productDistribution) {
$productDistribution = new ProductDistribution();
$productDistribution->id_distribution = $this->id;
$productDistribution->id_product = $product->id;
}
$productDistribution->quantity_max = $product->quantity_max;
$dayDistribution = date('N', strtotime($this->date));
$daysArray = [
1 => 'monday',
2 => 'tuesday',
3 => 'wednesday',
4 => 'thursday',
5 => 'friday',
6 => 'saturday',
7 => 'sunday',
] ;
$productDistribution->active = 0;
$day = $daysArray[$dayDistribution] ;
if($product->active && $product->$day) {
$productDistribution->active = 1;
}

$productDistribution->save();
}


} }

+ 3
- 2
common/models/Product.php View File

class Product extends ActiveRecordCommon class Product extends ActiveRecordCommon
{ {
var $total = 0; var $total = 0;
var $test ;
var $apply_distributions = false ;
const SALE_MODE_UNIT = 'unit' ; const SALE_MODE_UNIT = 'unit' ;
const SALE_MODE_WEIGHT = 'weight' ; const SALE_MODE_WEIGHT = 'weight' ;
return [ return [
[['name', 'id_producer'], 'required'], [['name', 'id_producer'], 'required'],
[['active', 'order', 'quantity_max', 'id_producer'], 'integer'], [['active', 'order', 'quantity_max', 'id_producer'], 'integer'],
[['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'unavailable'], 'boolean'],
[['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'unavailable','apply_distributions'], 'boolean'],
[['price', 'weight'], 'number'], [['price', 'weight'], 'number'],
[[ 'photo'], 'file'], [[ 'photo'], 'file'],
[['name', 'description', 'photo'], 'string', 'max' => 255], [['name', 'description', 'photo'], 'string', 'max' => 255],
'order' => 'Ordre', 'order' => 'Ordre',
'quantity_max' => 'Quantité max par défaut', 'quantity_max' => 'Quantité max par défaut',
'unavailable' => 'Épuisé', 'unavailable' => 'Épuisé',
'apply_distributions' => 'Appliquer ces modifications dans les distributions futures'
]; ];
} }

+ 1
- 1
common/models/ProductDistribution.php View File



return $arrayProductsDistribution; return $arrayProductsDistribution;
} }
} }

Loading…
Cancel
Save