# Conflicts: # backend/controllers/CommandeController.php # backend/web/js/lechatdesnoisettes.js # common/models/Commande.php # producer/controllers/CommandeController.php # producer/views/commande/_form.php # producer/views/order/history.phprefactoring
@@ -38,10 +38,13 @@ termes. | |||
namespace backend\controllers; | |||
use common\models\Producer ; | |||
use common\models\User ; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
class CommuniquerController extends BackendController | |||
class CommunicateController extends BackendController | |||
{ | |||
public function behaviors() { | |||
@@ -59,7 +62,7 @@ class CommuniquerController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN || Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
@@ -75,10 +78,10 @@ class CommuniquerController extends BackendController | |||
*/ | |||
public function actionIndex() | |||
{ | |||
$etablissement = Etablissement::findOne(['id' => Yii::$app->user->identity->id_etablissement]); | |||
$producer = Producer::searchOne() ; | |||
return $this->render('index', [ | |||
'etablissement' => $etablissement, | |||
'producer' => $producer, | |||
]); | |||
} | |||
@@ -88,15 +91,14 @@ class CommuniquerController extends BackendController | |||
* | |||
* @return string | |||
*/ | |||
public function actionModeemploi() | |||
public function actionInstructions() | |||
{ | |||
$etablissement = Etablissement::findOne(['id' => Yii::$app->user->identity->id_etablissement]); | |||
$producer = Producer::searchOne() ; | |||
// get your HTML raw content without any layouts or scripts | |||
$content = $this->renderPartial('mode_emploi_multi', [ | |||
$content = $this->renderPartial('instructions_multi', [ | |||
'pdf' => true, | |||
'etablissement' => $etablissement | |||
'producer' => $producer | |||
]); | |||
$pdf = new Pdf([ |
@@ -46,17 +46,17 @@ use yii\web\NotFoundHttpException; | |||
use yii\filters\VerbFilter; | |||
use yii\filters\AccessControl; | |||
use kartik\mpdf\Pdf; | |||
use common\models\Etablissement; | |||
use common\models\Commande; | |||
use common\models\CommandeAuto; | |||
use common\models\Production; | |||
use common\models\Producer; | |||
use common\models\Order; | |||
use common\models\Subscription; | |||
use common\models\Distribution; | |||
use common\models\CreditHistory ; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
class CronController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
@@ -84,11 +84,11 @@ class CronController extends BackendController | |||
* | |||
* @param string $key | |||
*/ | |||
public function actionInitBddDemo($key = '') | |||
public function actionInitDatabaseDemo($key = '') | |||
{ | |||
if ($key == '45432df6e842ac71aa0b5bb6b9f25d44' && YII_ENV == 'demo') { | |||
$arr_noms = [ | |||
$arrayLastnames = [ | |||
'Martin', 'Bernard', 'Thomas', 'Petit', 'Robert', 'Richard', 'Durand', 'Dubois', | |||
'Moreau', 'Laurent', 'Simon', 'Michel', 'Lefebvre', 'Leroy', 'Roux', 'David', | |||
'Bertrand', 'Morel', 'Fournier', 'Girard', 'Bonnet', 'Dupont', 'Lambert', 'Fontaine', | |||
@@ -110,7 +110,7 @@ class CronController extends BackendController | |||
'Poulain', 'Girondin', 'Gillet', 'Guichard' | |||
]; | |||
$arr_prenoms = [ | |||
$arrayNames = [ | |||
'Adel', 'Antonin', 'Armand', 'Arnaud', 'Aymeric', 'Baptiste', 'Barnabé', 'Bernard', 'Brice', 'Baudouin', | |||
'Camille', 'Cassandre', 'Célestin', 'Christian', 'Clément', 'Cyril', 'Claude', 'Damien', 'Daniel', 'David', | |||
'Delphin', 'Denis', 'Didier', 'Dimitri', 'Dorothée', 'Désiré', 'Edgard', 'Etienne', 'Eugène', 'Eudes', 'Eric', | |||
@@ -129,31 +129,30 @@ class CronController extends BackendController | |||
'Rose', 'Roseline', 'Renée', 'Sabine', 'Sophie', 'Suzanne', 'Sylvie', 'Thérèse', | |||
]; | |||
$arr_noms_checked = []; | |||
$arr_prenoms_checked = []; | |||
$arrayNamesChecked = []; | |||
$arrayLastnameschecked = []; | |||
$users = User::find() | |||
->joinWith('userEtablissement') | |||
->where('user_etablissement.id_etablissement = 1') | |||
->all(); | |||
$users = User::searchAll([ | |||
'user_etablissement.id_etablissement' => 1 | |||
]) ; | |||
foreach ($users as $u) { | |||
if ($u->email != 'boulanger@laboiteapain.net') { | |||
do { | |||
$i_nom = rand(0, count($arr_noms) - 1); | |||
$i_prenom = rand(0, count($arr_prenoms) - 1); | |||
} while (isset($arr_noms_checked[$i_nom]) || isset($arr_prenoms_checked[$i_prenom])); | |||
$indexLastname = rand(0, count($arrayLastnames) - 1); | |||
$indexName = rand(0, count($arrayNames) - 1); | |||
} while (isset($arrayLastnameschecked[$i_nom]) || isset($arrayNamesChecked[$i_prenom])); | |||
$arr_noms_checked[$i_nom] = true; | |||
$arr_prenoms_checked[$i_prenom] = true; | |||
$arrayLastnameschecked[$i_nom] = true; | |||
$arrayNamesChecked[$i_prenom] = true; | |||
$nom = $arr_noms[$i_nom]; | |||
$prenom = $arr_prenoms[$i_prenom]; | |||
$lastname = $arrayLastnameschecked[$indexLastname]; | |||
$name = $arrayNamesChecked[$indexName]; | |||
$u->nom = $nom; | |||
$u->prenom = $prenom; | |||
$u->name = $name; | |||
$u->lastname = $lastname; | |||
$email = strtolower($prenom) . '.' . strtolower($nom) . '@yopmail.com'; | |||
$email = strtolower($name) . '.' . strtolower($lastname) . '@yopmail.com'; | |||
$email = htmlentities($email, ENT_NOQUOTES, 'utf-8'); | |||
$email = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $email); | |||
$email = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $email); // pour les ligatures e.g. 'œ' | |||
@@ -175,29 +174,27 @@ class CronController extends BackendController | |||
$u->save(); | |||
} | |||
$commandes = Commande::find() | |||
$arrayOrders = Order::find() | |||
->where('username IS NOT NULL') | |||
->all(); | |||
foreach ($commandes as $c) { | |||
$nom = $arr_noms[rand(0, count($arr_noms) - 1)]; | |||
$prenom = $arr_prenoms[rand(0, count($arr_prenoms) - 1)]; | |||
foreach ($arrayOrders as $order) { | |||
$lastname = $arrayLastnames[rand(0, count($arrayLastnames) - 1)]; | |||
$name = $arrayNames[rand(0, count($arrayNames) - 1)]; | |||
$c->username = $prenom . ' ' . $nom; | |||
$c->username = $name . ' ' . $lastname; | |||
$c->save(); | |||
} | |||
$commandes_auto = CommandeAuto::find() | |||
->where('username IS NOT NULL') | |||
->all(); | |||
foreach ($commandes_auto as $c) { | |||
$nom = $arr_noms[rand(0, count($arr_noms) - 1)]; | |||
$prenom = $arr_prenoms[rand(0, count($arr_prenoms) - 1)]; | |||
$c->username = $prenom . ' ' . $nom; | |||
$arraySubscription = Subscription::find() | |||
->where('username IS NOT NULL') | |||
->all(); | |||
foreach ($arraySubscription as $subscription) { | |||
$lastname = $arrayLastnames[rand(0, count($arrayLastnames) - 1)]; | |||
$name = $arrayNames[rand(0, count($arrayNames) - 1)]; | |||
$c->username = $name . ' ' . $lastname; | |||
$c->save(); | |||
} | |||
} | |||
@@ -210,55 +207,51 @@ class CronController extends BackendController | |||
* @param string $key | |||
* @param string $force_date | |||
*/ | |||
public function actionProcessCommandes($key = '', $force_date = '') | |||
public function actionProcessOrders($key = '', $forceDate = '') | |||
{ | |||
if ($key == '64ac0bdab7e9f5e48c4d991ec5201d57') { | |||
if(strlen($force_date)) { | |||
$date = $force_date ; | |||
if(strlen($forceDate)) { | |||
$date = $forceDate ; | |||
} | |||
else { | |||
$heure = date('H'); | |||
$hour = date('H'); | |||
if ($heure == '00') { | |||
if ($hour == '00') { | |||
$date = date('Y-m-d'); | |||
} else { | |||
$date = date('Y-m-d', time() + 24 * 60 * 60); | |||
} | |||
} | |||
$etablissements = Etablissement::find()->all(); | |||
$arrayProducers = Producer::searchAll() ; | |||
foreach ($etablissements as $e) { | |||
$production = Production::findOne([ | |||
'date' => $date, | |||
'actif' => 1, | |||
'id_etablissement' => $e['id'], | |||
]); | |||
foreach ($arrayProducers as $producer) { | |||
$distribution = Distribution::findOne([ | |||
'date' => $date, | |||
'active' => 1, | |||
'id_producer' => $producer['id'], | |||
]); | |||
if ($production && ($heure == $e['heure_limite_commande'] || strlen($force_date))) { | |||
if ($distribution && ($hour == $producer['order_deadline'] || strlen($forceDate))) { | |||
/* | |||
* Paiement des commandes (paiement automatique) | |||
*/ | |||
$commandes = Commande::find() | |||
->with('commandeProduits', 'user') | |||
->joinWith('production') | |||
->where(['production.date' => $date]) | |||
->orderBy('date ASC') | |||
->all(); | |||
foreach($commandes as $c) { | |||
if($c->paiement_automatique && Etablissement::getConfig('credit_pain', $c->production->id_etablissement)) { | |||
$c->init() ; | |||
if ($c->getMontantRestant() > 0) { | |||
$c->creditHistorique( | |||
CreditHistorique::TYPE_PAIEMENT, | |||
$c->getMontantRestant(), | |||
$c->production->id_etablissement, | |||
$c->id_user, | |||
$arrayOrders = Order::searchAll([ | |||
'distribution.date' => $date | |||
]) ; | |||
foreach($arrayOrders as $order) { | |||
if($order->payment_auto && Producer::getConfig('credit', $order->distribution->id_producer)) { | |||
if ($order->getAmount(Order::AMOUNT_REMAINING) > 0) { | |||
$order->saveCreditHistory( | |||
CreditHistory::TYPE_PAYMENT, | |||
$order->getAmount(Order::AMOUNT_REMAINING), | |||
$order->distribution->id_producer, | |||
$order->id_user, | |||
User::ID_USER_SYSTEM | |||
); | |||
} | |||
@@ -268,43 +261,40 @@ class CronController extends BackendController | |||
/* | |||
* Envoi des commandes par email au producteur | |||
*/ | |||
if(!strlen($force_date)) { | |||
$commandes = Commande::find() | |||
->with('commandeProduits', 'user') | |||
->joinWith('production') | |||
->where(['production.date' => $date]) | |||
->andWhere(['production.id_etablissement' => $e['id']]) | |||
->orderBy('date ASC') | |||
->all(); | |||
$user = User::findOne([ | |||
'id_etablissement' => $e['id'], | |||
'status' => User::STATUS_BOULANGER | |||
]); | |||
if(!strlen($forceDate)) { | |||
$arrayOrders = Order::searchAll([ | |||
'distribution.date' => $date, | |||
'distribution.id_producer' => $producer['id'] | |||
]) ; | |||
$user = User::searchOne([ | |||
'id_producer' => $producer['id'], | |||
'status' => User::STATUS_PRODUCER | |||
]); | |||
$mail = Yii::$app->mailer->compose( | |||
[ | |||
'html' => 'cronRecapCommandes-html', | |||
'text' => 'cronRecapCommandes-text', | |||
], [ | |||
'date' => $date, | |||
'commandes' => $commandes | |||
] | |||
) | |||
->setTo($user->email) | |||
->setFrom([Yii::$app->params['adminEmail'] => 'La boîte à pain']); | |||
if (count($commandes)) { | |||
$sujet = '[La boîte à pain] Commandes du ' . date('d/m', strtotime($date)); | |||
[ | |||
'html' => 'cronOrdersSummary-html', | |||
'text' => 'cronOrdersSummary-text', | |||
], [ | |||
'date' => $date, | |||
'orders' => $arrayOrders | |||
] | |||
) | |||
->setTo($user->email) | |||
->setFrom([Yii::$app->params['adminEmail'] => 'La boîte à pain']); | |||
if (count($arrayOrders)) { | |||
$subject = '[La boîte à pain] Commandes du ' . date('d/m', strtotime($date)); | |||
// génération du pdf de commande | |||
Yii::$app->runAction('commande/report-cron', [ | |||
Yii::$app->runAction('order/report-cron', [ | |||
'date' => $date, | |||
'save' => true, | |||
'id_etablissement' => $e['id'], | |||
'id_producer' => $producer['id'], | |||
'key' => '64ac0bdab7e9f5e48c4d991ec5201d57' | |||
]); | |||
$mail->attach(Yii::getAlias('@app/web/pdf/Commandes-' . $date . '-' . $e['id'] . '.pdf')); | |||
$mail->attach(Yii::getAlias('@app/web/pdf/Orders-' . $date . '-' . $producer['id'] . '.pdf')); | |||
} else { | |||
$sujet = '[La boîte à pain] Aucune commande'; | |||
} |
@@ -40,8 +40,8 @@ namespace backend\controllers; | |||
use Yii; | |||
use common\models\User; | |||
use common\models\Developpement; | |||
use common\models\DeveloppementPriorite; | |||
use common\models\Development; | |||
use common\models\DevelopmentPriority; | |||
use yii\data\ActiveDataProvider; | |||
use yii\web\Controller; | |||
use yii\web\NotFoundHttpException; | |||
@@ -51,9 +51,8 @@ use yii\filters\AccessControl; | |||
/** | |||
* DeveloppementController implements the CRUD actions for Developpement model. | |||
*/ | |||
class DeveloppementController extends Controller | |||
class DevelopmentController extends Controller | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
@@ -66,7 +65,7 @@ class DeveloppementController extends Controller | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN || Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend() ; | |||
} | |||
] | |||
], | |||
@@ -79,15 +78,18 @@ class DeveloppementController extends Controller | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionIndex($statut = Developpement::STATUT_OPEN) | |||
public function actionIndex($status = Development::STATUS_OPEN) | |||
{ | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => Developpement::find()->with(['developpementPriorite', 'developpementPrioriteCurrentEtablissement'])->where(['statut' => $statut])->orderBy('date DESC'), | |||
'query' => Development::find() | |||
->with(['developmentPriority', 'developmentPriorityCurrentProducer']) | |||
->where(['status' => $status]) | |||
->orderBy('date DESC'), | |||
]); | |||
return $this->render('index', [ | |||
'dataProvider' => $dataProvider, | |||
'statut' => $statut | |||
'status' => $status | |||
]); | |||
} | |||
@@ -98,18 +100,18 @@ class DeveloppementController extends Controller | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new Developpement(); | |||
$model = new Development(); | |||
if ($model->load(Yii::$app->request->post())) { | |||
$model->date = date('Y-m-d H:i:s'); | |||
$model->setDateLivraison(); | |||
$model->setDateDelivery(); | |||
if ($model->save()) { | |||
Yii::$app->getSession()->setFlash('success', 'Développement ajouté'); | |||
return $this->redirect(['index']); | |||
} | |||
} else { | |||
return $this->render('create', [ | |||
'model' => $model, | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
@@ -117,6 +119,7 @@ class DeveloppementController extends Controller | |||
/** | |||
* Updates an existing Developpement model. | |||
* If update is successful, the browser will be redirected to the 'view' page. | |||
* | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
@@ -125,14 +128,14 @@ class DeveloppementController extends Controller | |||
$model = $this->findModel($id); | |||
if ($model->load(Yii::$app->request->post())) { | |||
$model->setDateLivraison(); | |||
$model->setDateDelivery(); | |||
if ($model->save()) { | |||
Yii::$app->getSession()->setFlash('success', 'Développement modifié'); | |||
return $this->redirect(['index']); | |||
} | |||
} else { | |||
return $this->render('update', [ | |||
'model' => $model, | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
@@ -154,34 +157,33 @@ class DeveloppementController extends Controller | |||
/** | |||
* Définit une priorité pour un développement. | |||
* | |||
* @param integer $id_developpement | |||
* @param integer $idDevelopment | |||
* @param string $priorite | |||
*/ | |||
public function actionPriorite($id_developpement, $priorite = null) | |||
public function actionPriority($idDevelopment, $priority = null) | |||
{ | |||
$develpmentPriority = DevelopmentPriority::searchOne([ | |||
'id_development' => $idDevelopment, | |||
]) ; | |||
$developpement_priorite = DeveloppementPriorite::find() | |||
->where(['id_developpement' => $id_developpement, 'id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->one(); | |||
if (in_array($priorite, [DeveloppementPriorite::PRIORITE_HAUTE, | |||
DeveloppementPriorite::PRIORITE_NORMALE, | |||
DeveloppementPriorite::PRIORITE_BASSE])) { | |||
if (in_array($priority, [DevelopmentPriority::PRIORITY_HIGH, | |||
DevelopmentPriority::PRIORITY_NORMAL, | |||
DevelopmentPriority::PRIORITY_LOW])) { | |||
if ($developpement_priorite) { | |||
$developpement_priorite->priorite = $priorite; | |||
$developpement_priorite->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
if ($develpmentPriority) { | |||
$develpmentPriority->priority = $priority; | |||
$develpmentPriority->id_producer = Producer::getId(); | |||
} else { | |||
$developpement_priorite = new DeveloppementPriorite; | |||
$developpement_priorite->id_developpement = $id_developpement; | |||
$developpement_priorite->priorite = $priorite; | |||
$developpement_priorite->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$develpmentPriority = new DevelopmentPriority; | |||
$develpmentPriority->id_development = $idDevelopment; | |||
$develpmentPriority->priority = $priority; | |||
$develpmentPriority->id_producer = Producer::getId(); | |||
} | |||
$developpement_priorite->save(); | |||
$develpmentPriority->save(); | |||
} else { | |||
if ($developpement_priorite) { | |||
$developpement_priorite->delete(); | |||
if ($develpmentPriority) { | |||
$develpmentPriority->delete(); | |||
} | |||
} | |||
@@ -197,7 +199,7 @@ class DeveloppementController extends Controller | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = Developpement::findOne($id)) !== null) { | |||
if (($model = Development::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); |
@@ -40,18 +40,18 @@ namespace backend\controllers; | |||
use Yii; | |||
use yii\filters\AccessControl; | |||
use common\models\PointVente; | |||
use common\models\PointSale; | |||
use yii\data\ActiveDataProvider; | |||
use yii\web\Controller; | |||
use yii\web\NotFoundHttpException; | |||
use yii\filters\VerbFilter; | |||
use common\models\User; | |||
use common\models\PointVenteUser; | |||
use common\models\UserPointSale; | |||
/** | |||
* PointVenteController implements the CRUD actions for PointVente model. | |||
*/ | |||
class PointVenteController extends BackendController | |||
class PointSaleController extends BackendController | |||
{ | |||
public function behaviors() | |||
@@ -69,8 +69,7 @@ class PointVenteController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend(); | |||
} | |||
], | |||
], | |||
@@ -86,11 +85,11 @@ class PointVenteController extends BackendController | |||
public function actionIndex() | |||
{ | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => PointVente::find()->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
'query' => PointSale::find()->where(['id_producer' => Producer::getId()]) | |||
]); | |||
return $this->render('index', [ | |||
'dataProvider' => $dataProvider, | |||
'dataProvider' => $dataProvider, | |||
]); | |||
} | |||
@@ -101,15 +100,15 @@ class PointVenteController extends BackendController | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new PointVente(); | |||
$model = new PointSale(); | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
$model->gestionPointFabrication(); | |||
$model->gestionAccesRestreint(); | |||
$model->processPointProduction(); | |||
$model->processRestrictedAccess(); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('update', array_merge($this->initForm(), [ | |||
'model' => $model, | |||
'model' => $model, | |||
])); | |||
} | |||
} | |||
@@ -122,23 +121,23 @@ class PointVenteController extends BackendController | |||
*/ | |||
public function actionUpdate($id) | |||
{ | |||
$model = PointVente::find() | |||
->with('pointVenteUser') | |||
$model = PointSale::find() | |||
->with('userPointSale') | |||
->where(['id' => $id]) | |||
->one(); | |||
foreach ($model->pointVenteUser as $u) { | |||
$model->users[] = $u->id_user; | |||
$model->users_commentaire[$u->id_user] = $u->commentaire; | |||
foreach ($model->userPointSale as $userPointSale) { | |||
$model->users[] = $userPointSale->id_user; | |||
$model->users_comment[$userPointSale->id_user] = $userPointSale->comment; | |||
} | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
$model->gestionPointFabrication(); | |||
$model->gestionAccesRestreint(); | |||
$model->processPointProduction(); | |||
$model->processRestrictedAccess(); | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('update', array_merge($this->initForm($id), [ | |||
'model' => $model, | |||
'model' => $model, | |||
])); | |||
} | |||
} | |||
@@ -152,8 +151,8 @@ class PointVenteController extends BackendController | |||
public function initForm($id = 0) | |||
{ | |||
$users = User::findBy() | |||
->orderBy('nom ASC') | |||
->all(); | |||
->orderBy('name ASC') | |||
->all(); | |||
return [ | |||
'users' => $users | |||
]; | |||
@@ -168,8 +167,8 @@ class PointVenteController extends BackendController | |||
public function actionDelete($id) | |||
{ | |||
$this->findModel($id)->delete(); | |||
PointVenteUser::deleteAll(['id_point_vente' => $id]); | |||
ProductionPointVente::deleteAll(['id_point_vente' => $id]) ; | |||
UserPointSale::deleteAll(['id_point_sale' => $id]); | |||
PointSaleDistribution::deleteAll(['id_point_sale' => $id]) ; | |||
return $this->redirect(['index']); | |||
} | |||
@@ -182,7 +181,7 @@ class PointVenteController extends BackendController | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = PointVente::findOne($id)) !== null) { | |||
if (($model = PointSale::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); |
@@ -44,14 +44,14 @@ use yii\web\NotFoundHttpException; | |||
use yii\filters\VerbFilter; | |||
use yii\filters\AccessControl; | |||
use common\helpers\Upload; | |||
use common\models\Etablissement; | |||
use common\models\Producer; | |||
use yii\data\ActiveDataProvider; | |||
use common\models\Facture; | |||
use common\models\Invoice; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
class EtablissementAdminController extends BackendController | |||
class ProducerAdminController extends BackendController | |||
{ | |||
public function behaviors() | |||
@@ -70,7 +70,7 @@ class EtablissementAdminController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN; | |||
return User::getCurrentStatus() == USER::STATUS_ADMIN; | |||
} | |||
] | |||
], | |||
@@ -85,9 +85,9 @@ class EtablissementAdminController extends BackendController | |||
*/ | |||
public function actionIndex() | |||
{ | |||
$datas_etablissements = new ActiveDataProvider([ | |||
'query' => Etablissement::find() | |||
->with('userEtablissement', 'user') | |||
$dataProviderProducer = new ActiveDataProvider([ | |||
'query' => Producer::find() | |||
->with('userProducer', 'user') | |||
->orderBy('date_creation DESC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
@@ -95,46 +95,46 @@ class EtablissementAdminController extends BackendController | |||
]); | |||
return $this->render('index', [ | |||
'datas_etablissements' => $datas_etablissements, | |||
'dataProviderProducer' => $dataProviderProducer, | |||
]); | |||
} | |||
/** | |||
* Génère la facture mensuelle d'un producteur. | |||
* | |||
* @param integer $id_etablissement | |||
* @param integer $idProducer | |||
*/ | |||
public function actionFacturer($id_etablissement) | |||
public function actionBill($idProducer) | |||
{ | |||
$etablissement = Etablissement::findOne($id_etablissement); | |||
$producer = Producer::findOne($idProducer); | |||
if ($etablissement) { | |||
$periode = date('Y-m', strtotime('-1 month')); | |||
if ($producer) { | |||
$period = date('Y-m', strtotime('-1 month')); | |||
$last_facture = Facture::getLastFacture(); | |||
if (!$last_facture) { | |||
$last_invoice = Invoice::getLastInvoice() ; | |||
if (!$last_invoice) { | |||
$reference = 'BAP000001'; | |||
} else { | |||
$reference = str_replace('BAP', '', $last_facture->reference); | |||
$reference = str_replace('BAP', '', $last_invoice->reference); | |||
$reference ++; | |||
$reference = 'BAP' . $reference; | |||
} | |||
$facture = new Facture; | |||
$facture->id_etablissement = $id_etablissement; | |||
$facture->date = date('Y-m-d H:i:s'); | |||
$facture->reference = $reference; | |||
$facture->ca = $etablissement->getCA($periode); | |||
$facture->montant_ht = $etablissement->getMontantFacturer($periode); | |||
$facture->libelle = 'Facture ' . date('m/Y', strtotime('-1 month')); | |||
$facture->texte = 'Utilisation de la plateforme <strong>La boîte à pain</strong> pour le mois : ' . date('m/Y', strtotime('-1 month')) . '<br />' | |||
$invoice = new Invoice; | |||
$invoice->id_producer = $idProducer; | |||
$invoice->date = date('Y-m-d H:i:s'); | |||
$invoice->reference = $reference; | |||
$invoice->turnover = $producer->getTurnover($period); | |||
$invoice->amount_ht = $producer->getFreePrice() ; | |||
$invoice->wording = 'Facture ' . date('m/Y', strtotime('-1 month')); | |||
$invoice->text = 'Utilisation de la plateforme <strong>La boîte à pain</strong> pour le mois : ' . date('m/Y', strtotime('-1 month')) . '<br />' | |||
. 'Chiffre d\'affaire réalisé sur la plateforme : <strong>' . number_format($facture->ca, 2) . ' €</strong> commissionné à <strong>1%</strong>.'; | |||
$facture->paye = 0; | |||
$facture->periode = $periode; | |||
$facture->save(); | |||
$invoice->paid = 0; | |||
$invoice->period = $period; | |||
$invoice->save(); | |||
} | |||
$this->redirect(['etablissement-admin/index']); | |||
$this->redirect(['producer-admin/index']); | |||
} | |||
/** | |||
@@ -142,19 +142,19 @@ class EtablissementAdminController extends BackendController | |||
* | |||
* @return mxied | |||
*/ | |||
public function actionFacturation() | |||
public function actionBilling() | |||
{ | |||
$datas_factures = new ActiveDataProvider([ | |||
'query' => Facture::find() | |||
->with('etablissement') | |||
$dataProviderInvoice = new ActiveDataProvider([ | |||
'query' => Invoice::find() | |||
->with('producer') | |||
->orderBy('reference DESC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
]); | |||
return $this->render('facturation', [ | |||
'datas_factures' => $datas_factures, | |||
return $this->render('billing', [ | |||
'dataProviderInvoice' => $dataProviderInvoice, | |||
]); | |||
} | |||
@@ -166,7 +166,7 @@ class EtablissementAdminController extends BackendController | |||
* @throws NotFoundHttpException | |||
*/ | |||
protected function findModel($id) { | |||
if (($model = Etablissement::findOne($id)) !== null) { | |||
if (($model = Producer::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); |
@@ -47,13 +47,13 @@ use yii\web\NotFoundHttpException; | |||
use yii\filters\VerbFilter; | |||
use yii\filters\AccessControl; | |||
use common\helpers\Upload; | |||
use common\models\Etablissement; | |||
use common\models\Facture; | |||
use common\models\Producer; | |||
use common\models\Invoice; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
class EtablissementController extends BackendController | |||
class ProducerController extends BackendController | |||
{ | |||
public $enableCsrfValidation = false; | |||
@@ -74,8 +74,7 @@ class EtablissementController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
@@ -84,29 +83,29 @@ class EtablissementController extends BackendController | |||
} | |||
/** | |||
* Modifie un établissement. | |||
* Modifie un producteur. | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionUpdate() | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel(Yii::$app->user->identity->id_etablissement); | |||
$logo_filename_old = $model->logo; | |||
$photo_filename_old = $model->photo; | |||
$model = $this->findModel(Producer::getId()); | |||
$logoFilenameOld = $model->logo; | |||
$photoFilenameOld = $model->photo; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Upload::uploadFile($model, 'logo', $logo_filename_old); | |||
Upload::uploadFile($model, 'photo', $photo_filename_old); | |||
Upload::uploadFile($model, 'logo', $logoFilenameOld); | |||
Upload::uploadFile($model, 'photo', $photoFilenameOld); | |||
$delete_logo = $request->post('delete_logo', 0); | |||
if ($delete_logo) { | |||
$deleteLogo = $request->post('delete_logo', 0); | |||
if ($deleteLogo) { | |||
$model->logo = ''; | |||
$model->save(); | |||
} | |||
$delete_photo = $request->post('delete_photo', 0); | |||
if ($delete_photo) { | |||
$deletePhoto = $request->post('delete_photo', 0); | |||
if ($deletePhoto) { | |||
$model->photo = ''; | |||
$model->save(); | |||
} | |||
@@ -114,7 +113,7 @@ class EtablissementController extends BackendController | |||
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); | |||
} else { | |||
return $this->render('update', [ | |||
'model' => $model, | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
@@ -125,30 +124,31 @@ class EtablissementController extends BackendController | |||
* | |||
* @return mixed | |||
*/ | |||
public function actionFacturation() | |||
public function actionBilling() | |||
{ | |||
$datas_factures = new ActiveDataProvider([ | |||
'query' => Facture::find() | |||
->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
$datasInvoices = new ActiveDataProvider([ | |||
'query' => Invoice::find() | |||
->where(['id_producer' => Producer::getId()]) | |||
->orderBy('reference DESC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
]); | |||
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement); | |||
$producer = Producer::findOne(Producer::getId()); | |||
if ($etablissement->load(Yii::$app->request->post())) { | |||
$etablissement->save(); | |||
if ($producer->load(Yii::$app->request->post())) { | |||
$producer->save(); | |||
if (!is_null($etablissement->prix_libre)) | |||
$alert_prix_libre = true; | |||
if (!is_null($producer->free_price)) { | |||
$alertFreeprice = true; | |||
} | |||
} | |||
return $this->render('facturation', [ | |||
'datas_factures' => $datas_factures, | |||
'etablissement' => $etablissement, | |||
'alert_prix_libre' => (isset($alert_prix_libre)) ? true : false | |||
return $this->render('billing', [ | |||
'datasInvoices' => $datasInvoices, | |||
'producer' => $producer, | |||
'alertFreePrice' => (isset($alertFreeprice)) ? true : false | |||
]); | |||
} | |||
@@ -161,7 +161,7 @@ class EtablissementController extends BackendController | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = Etablissement::findOne($id)) !== null) { | |||
if (($model = Producer::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); |
@@ -38,13 +38,13 @@ termes. | |||
namespace backend\controllers; | |||
use common\models\ProductionProduit; | |||
use common\models\ProductDistribution; | |||
use Yii; | |||
use yii\filters\AccessControl; | |||
use common\models\Produit; | |||
use common\models\Production; | |||
use common\models\Product; | |||
use common\models\Distribution; | |||
use common\models\User; | |||
use common\models\UserBoulangerie; | |||
use common\models\UserProducer; | |||
use yii\data\ActiveDataProvider; | |||
use yii\web\Controller; | |||
use yii\web\NotFoundHttpException; | |||
@@ -55,7 +55,7 @@ use common\helpers\Upload; | |||
/** | |||
* ProduitController implements the CRUD actions for Produit model. | |||
*/ | |||
class ProduitController extends BackendController | |||
class ProductController extends BackendController | |||
{ | |||
var $enableCsrfValidation = false; | |||
@@ -74,8 +74,7 @@ class ProduitController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
@@ -91,9 +90,8 @@ class ProduitController extends BackendController | |||
public function actionIndex() | |||
{ | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => Produit::find() | |||
->where('(vrac IS NULL OR vrac = 0)') | |||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
'query' => Product::find() | |||
->where(['id_producer' => Producer::getId()]) | |||
->orderBy('order ASC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
@@ -101,7 +99,7 @@ class ProduitController extends BackendController | |||
]); | |||
return $this->render('index', [ | |||
'dataProvider' => $dataProvider, | |||
'dataProvider' => $dataProvider, | |||
]); | |||
} | |||
@@ -113,33 +111,33 @@ class ProduitController extends BackendController | |||
*/ | |||
public function actionCreate() | |||
{ | |||
$model = new Produit(); | |||
$model->actif = 1; | |||
$model->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$model->saison = 'all'; | |||
$model = new Product(); | |||
$model->active = 1; | |||
$model->id_producer = Producer::getId(); | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Upload::uploadFile($model, 'illustration'); | |||
Upload::uploadFile($model, 'photo'); | |||
$model->save(); | |||
// on ajoute un enregistrement ProductionProduit pour chaque production | |||
$productions = Production::find() | |||
$distributionsArray = Distribution::find() | |||
->where('date > ' . date('Y-m-d')) | |||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->andWhere(['id_producer' => Producer::getId()]) | |||
->all(); | |||
foreach ($productions as $prod) { | |||
$production_produit = new ProductionProduit; | |||
$production_produit->id_production = $prod->id; | |||
$production_produit->id_produit = $model->id; | |||
$production_produit->actif = 0; | |||
$production_produit->save(); | |||
foreach ($distributionsArray as $distribution) { | |||
$productDistribution = new ProductDistribution; | |||
$productDistribution->id_distribution = $distribution->id; | |||
$productDistribution->id_product = $model->id; | |||
$productDistribution->active = 0; | |||
$productDistribution->save(); | |||
} | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('create', [ | |||
'model' => $model, | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
@@ -156,21 +154,14 @@ class ProduitController extends BackendController | |||
$request = Yii::$app->request; | |||
$model = $this->findModel($id); | |||
$illustration_filename_old = $model->illustration; | |||
$photo_filename_old = $model->photo; | |||
$photoFilenameOld = $model->photo; | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
Upload::uploadFile($model, 'illustration', $illustration_filename_old); | |||
Upload::uploadFile($model, 'photo', $photo_filename_old); | |||
Upload::uploadFile($model, 'photo', $photoFilenameOld); | |||
$delete_illustration = $request->post('delete_illustration', 0); | |||
if ($delete_illustration) { | |||
$model->illustration = ''; | |||
$model->save(); | |||
} | |||
$delete_photo = $request->post('delete_photo', 0); | |||
if ($delete_photo) { | |||
$deletePhoto = $request->post('delete_photo', 0); | |||
if ($deletePhoto) { | |||
$model->photo = ''; | |||
$model->save(); | |||
} | |||
@@ -178,7 +169,7 @@ class ProduitController extends BackendController | |||
return $this->redirect(['index']); | |||
} else { | |||
return $this->render('update', [ | |||
'model' => $model, | |||
'model' => $model, | |||
]); | |||
} | |||
} | |||
@@ -194,28 +185,24 @@ class ProduitController extends BackendController | |||
public function actionDelete($id) | |||
{ | |||
$this->findModel($id)->delete(); | |||
$productions_produits = ProductionProduit::find()->where(['id_produit' => $id])->all(); | |||
foreach ($productions_produits as $pp) { | |||
$pp->delete(); | |||
} | |||
ProductDistribution::deleteAll(['id_product' => $id]) ; | |||
return $this->redirect(['index']); | |||
} | |||
/** | |||
* Modifie l'ordre des produits. | |||
* | |||
* @param array $tab | |||
* @param array $array | |||
*/ | |||
public function actionOrdre($tab) | |||
public function actionOrder($array) | |||
{ | |||
$tab_ordre = json_decode(stripslashes($tab)); | |||
$orderArray = json_decode(stripslashes($array)); | |||
foreach ($tab_ordre as $id => $o) { | |||
$produit = $this->findModel($id); | |||
$produit->order = $o; | |||
$produit->save(); | |||
foreach($orderArray as $id => $order) { | |||
$product = $this->findModel($id); | |||
$product->order = $order; | |||
$product->save(); | |||
} | |||
} | |||
@@ -228,7 +215,7 @@ class ProduitController extends BackendController | |||
*/ | |||
protected function findModel($id) | |||
{ | |||
if (($model = Produit::findOne($id)) !== null) { | |||
if (($model = Product::findOne($id)) !== null) { | |||
return $model; | |||
} else { | |||
throw new NotFoundHttpException('The requested page does not exist.'); |
@@ -44,11 +44,11 @@ use yii\web\Controller; | |||
use common\models\LoginForm; | |||
use common\models\User; | |||
use yii\filters\VerbFilter; | |||
use common\models\Produit; | |||
use common\models\PointVente; | |||
use common\models\Etablissement; | |||
use common\models\Production; | |||
use common\models\Commande; | |||
use common\models\Product; | |||
use common\models\PointSale; | |||
use common\models\Producer; | |||
use common\models\Distribution; | |||
use common\models\Order; | |||
/** | |||
* Site controller | |||
@@ -74,8 +74,7 @@ class SiteController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend() ; | |||
} | |||
], | |||
[ | |||
@@ -83,7 +82,7 @@ class SiteController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN; | |||
return User::getCurrentStatus() == User::STATUS_ADMIN ; | |||
} | |||
], | |||
], | |||
@@ -119,48 +118,46 @@ class SiteController extends BackendController | |||
public function actionIndex() | |||
{ | |||
// commandes | |||
$productions = Production::find() | |||
->with('commande') | |||
->where(['>=', 'production.date', date('Y-m-d')]) | |||
$distributions = Distribution::find() | |||
->with('order') | |||
->where(['>=', 'distribution.date', date('Y-m-d')]) | |||
->andWhere([ | |||
'production.id_etablissement' => Yii::$app->user->identity->id_etablissement, | |||
'production.actif' => 1 | |||
'distribution.id_producer' => Producer::getId(), | |||
'distribution.active' => 1 | |||
]) | |||
->orderBy('date ASC') | |||
->limit(5) | |||
->all(); | |||
// dernières commandes | |||
$commandes = Commande::findBy([ | |||
$ordersArray = Order::searchAll([],[ | |||
'orderby' => 'date DESC', | |||
'condition' => 'production.date > \'' . date('Y-m-d 00:00:00') . '\' AND (type = \'' . Commande::TYPE_USER . '\' OR type = \'' . Commande::TYPE_ADMIN . '\' OR (type = \'' . Commande::TYPE_AUTO . '\' AND (date_update IS NOT NULL OR date_delete IS NOT NULL)))' | |||
'conditions' => 'distribution.date > :date AND (origin = \'' . Order::ORIGIN_USER . '\' OR origin = \'' . Order::ORIGIN_ADMIN . '\' OR (origin = \'' . Order::ORIGIN_AUTO . '\' AND (date_update IS NOT NULL OR date_delete IS NOT NULL)))', | |||
'params' => [':date' => date('Y-m-d 00:00:00')], | |||
]); | |||
foreach ($commandes as $c) | |||
$c->init(); | |||
// clients | |||
$nb_clients = User::findBy()->count(); | |||
$nbUsers = User::searchCount(); | |||
$clients = User::findBy() | |||
$usersArray = User::findBy() | |||
->orderBy('created_at DESC') | |||
->limit(5) | |||
->all(); | |||
$clients_credit_pain_negatif = User::findBy(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->andWhere('user_etablissement.credit < 0') | |||
$usersNegativeCredit = User::findBy(['id_producer' => Producer::getId()]) | |||
->andWhere('user_producer.credit < 0') | |||
->all(); | |||
// paramètres | |||
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement); | |||
$producer = Producer::get(); | |||
return $this->render('index', [ | |||
'productions' => $productions, | |||
'commandes' => $commandes, | |||
'clients' => $clients, | |||
'nb_clients' => $nb_clients, | |||
'clients_credit_pain_negatif' => $clients_credit_pain_negatif, | |||
'etablissement' => $etablissement, | |||
'distributionsArray' => $distributions, | |||
'ordersArray' => $ordersArray, | |||
'usersArray' => $usersArray, | |||
'nbUsers' => $nbUsers, | |||
'usersNegativeCredit' => $usersNegativeCredit, | |||
'producer' => $producer, | |||
]); | |||
} | |||
@@ -203,9 +200,9 @@ class SiteController extends BackendController | |||
* | |||
* @param integer $id | |||
*/ | |||
public function actionChangeEtablissement($id) | |||
public function actionChangeProducer($id) | |||
{ | |||
Yii::$app->user->identity->id_etablissement = $id; | |||
Yii::$app->user->identity->id_producer = $id; | |||
Yii::$app->user->identity->save(); | |||
$this->redirect(['site/index']); | |||
} |
@@ -42,7 +42,7 @@ use yii\web\Controller; | |||
use yii\filters\AccessControl; | |||
use Yii; | |||
use common\models\User; | |||
use common\models\Commande; | |||
use common\models\Order; | |||
use DateTime; | |||
use DateInterval; | |||
use DatePeriod; | |||
@@ -60,8 +60,7 @@ class StatsController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend() ; | |||
} | |||
] | |||
], | |||
@@ -80,55 +79,52 @@ class StatsController extends BackendController | |||
* Volume de commande de l'année passée (par mois) | |||
*/ | |||
$date_start = date('Y-m-d', time() - 60 * 60 * 24 * 365); | |||
$date_end = date('Y-m-d'); | |||
$dateStart = date('Y-m-d', time() - 60 * 60 * 24 * 365); | |||
$dateEnd = date('Y-m-d'); | |||
$data_pain = []; | |||
$data = []; | |||
// labels | |||
$data_labels = []; | |||
$dataLabels = []; | |||
$start = new DateTime($date_start); | |||
$start = new DateTime($dateStart); | |||
$interval = new DateInterval('P1M'); | |||
$end = new DateTime($date_end); | |||
$end = new DateTime($dateEnd); | |||
$period = new DatePeriod($start, $interval, $end); | |||
foreach ($period as $date) { | |||
$mois = date('m/Y', $date->getTimestamp()); | |||
$data_labels[] = $mois; | |||
$data_pain[$mois] = 0; | |||
$month = date('m/Y', $date->getTimestamp()); | |||
$dataLabels[] = $month; | |||
$data[$month] = 0; | |||
} | |||
// commandes | |||
$commandes = Commande::find() | |||
->with('commandeProduits') | |||
->joinWith('production') | |||
->where('production.date > ' . $date_start) | |||
->andWhere('production.id_etablissement = ' . Yii::$app->user->identity->id_etablissement) | |||
->all(); | |||
foreach ($commandes as $c) { | |||
$c->init(); | |||
$mois = date('m/Y', strtotime($c->production->date)); | |||
if (isset($data_pain[$mois])) { | |||
$data_pain[$mois] += $c->montant; | |||
$ordersArray = Order::searchAll([],[ | |||
'conditions' => 'distribution.date > :date', | |||
'params' => [':date' => $dateStart] | |||
]) ; | |||
foreach ($ordersArray as $order) { | |||
$month = date('m/Y', strtotime($order->distribution->date)); | |||
if (isset($data[$month])) { | |||
$data[$month] += $order->amount; | |||
} | |||
} | |||
// création d'un tableau sans index car chart.js n'accepte pas les index | |||
$data_pain_noindex = []; | |||
foreach ($data_pain as $key => $val) { | |||
$data_pain_noindex[] = $val; | |||
$dataNoIndex = []; | |||
foreach ($data as $key => $val) { | |||
$dataNoIndex[] = $val; | |||
} | |||
return $this->render('index', [ | |||
'data_labels' => $data_labels, | |||
'data_pain' => $data_pain_noindex, | |||
'dataLabels' => $dataLabels, | |||
'data' => $dataNoIndex, | |||
]); | |||
} | |||
const TOTAUX = 13 ; | |||
const TOTALS = 13 ; | |||
/** | |||
* Affiche un tableau avec les totaux (maximums, commandés) de chaque produit | |||
@@ -137,83 +133,83 @@ class StatsController extends BackendController | |||
* @param integer $year | |||
* @return mixed | |||
*/ | |||
public function actionProduits($year = 0) | |||
public function actionProducts($year = 0) | |||
{ | |||
if(!$year) $year = date('Y') ; | |||
$produits = Produit::find() | |||
->where('(vrac IS NULL OR vrac = 0)') | |||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->orderBy('order ASC') | |||
->all() ; | |||
$productsArray = Product::searchAll() ; | |||
$arr_produits = [] ; | |||
$dataProducts = [] ; | |||
$arr_produits[self::TOTAUX] = ['max' => [], 'commandes' => []] ; | |||
foreach($produits as $p) { | |||
$arr_produits[self::TOTAUX]['max'][$p['nom']] = 0 ; | |||
$arr_produits[self::TOTAUX]['commandes'][$p['nom']] = 0 ; | |||
$dataProducts[self::TOTALS] = ['max' => [], 'orders' => []] ; | |||
foreach($productsArray as $product) { | |||
$dataProducts[self::TOTALS]['max'][$product['name']] = 0 ; | |||
$dataProducts[self::TOTALS]['orders'][$product['name']] = 0 ; | |||
} | |||
$empty = true ; | |||
for($i = 1; $i <= 12; $i++) { | |||
// Maximums | |||
$res_maximums = Yii::$app->db->createCommand("SELECT produit.nom, SUM(IF(production_produit.actif,production_produit.quantite_max,0)) AS total | |||
FROM production, production_produit, produit | |||
WHERE production.id_etablissement = ".Yii::$app->user->identity->id_etablissement." | |||
AND production.date >= :date_begin | |||
AND production.date <= :date_end | |||
AND production.id = production_produit.id_production | |||
AND production_produit.id_produit = produit.id | |||
GROUP BY produit.id | |||
ORDER BY produit.nom") | |||
$resMaximums = Yii::$app->db->createCommand("SELECT product.name, SUM(IF(product_distribution.active, product_distribution.quantity_max,0)) AS total | |||
FROM distribution, product_distribution, product | |||
WHERE distribution.id_producer = ".Producer::getId()." | |||
AND distribution.date >= :date_begin | |||
AND distribution.date <= :date_end | |||
AND distribution.id = product_distribution.id_distribution | |||
AND product_distribution.id_product = product.id | |||
GROUP BY product.id | |||
ORDER BY product.name") | |||
->bindValue(':date_begin', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-01')) | |||
->bindValue(':date_end', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-31')) | |||
->queryAll(); | |||
$arr_produits[$i]['max'] = $res_maximums ; | |||
if(count($res_maximums)) $empty = false ; | |||
$dataProducts[$i]['max'] = $resMaximums ; | |||
if(count($resMaximums)) $empty = false ; | |||
foreach($res_maximums as $produit_max) { | |||
if(!isset($arr_produits[self::TOTAUX]['max'][$produit_max['nom']])) $arr_produits[self::TOTAUX]['max'][$produit_max['nom']] = 0 ; | |||
$arr_produits[self::TOTAUX]['max'][$produit_max['nom']] += $produit_max['total'] ; | |||
foreach($resMaximums as $productMax) { | |||
if(!isset($dataProducts[self::TOTALS]['max'][$productMax['name']])) { | |||
$dataProducts[self::TOTALS]['max'][$productMax['name']] = 0 ; | |||
} | |||
$dataProducts[self::TOTALS]['max'][$productMax['name']] += $productMax['total'] ; | |||
} | |||
// Commandés | |||
$res_commandes = Yii::$app->db->createCommand("SELECT produit.nom, SUM(commande_produit.quantite) AS total | |||
FROM production, commande, commande_produit, produit | |||
WHERE production.id_etablissement = ".Yii::$app->user->identity->id_etablissement." | |||
AND production.date >= :date_begin | |||
AND production.date <= :date_end | |||
AND production.id = commande.id_production | |||
AND commande.id = commande_produit.id_commande | |||
AND commande_produit.id_produit = produit.id | |||
GROUP BY produit.id | |||
ORDER BY produit.nom") | |||
$resOrders = Yii::$app->db->createCommand(' | |||
SELECT product.name, SUM(product_order.quantity) AS total | |||
FROM `distribution`, `order`, `product_order`, `product` | |||
WHERE distribution.id_producer = '.Producer::getId().' | |||
AND distribution.date >= :date_begin | |||
AND distribution.date <= :date_end | |||
AND distribution.id = `order`.id_distribution | |||
AND `order`.id = product_order.id_order | |||
AND product_order.id_product = product.id | |||
GROUP BY product.id | |||
ORDER BY product.name') | |||
->bindValue(':date_begin', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-01')) | |||
->bindValue(':date_end', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-31')) | |||
->queryAll(); | |||
$arr_produits[$i]['commandes'] = $res_commandes ; | |||
if(count($res_commandes)) $empty = false ; | |||
$dataProducts[$i]['orders'] = $resOrders; | |||
if(count($resOrders)) $empty = false ; | |||
foreach($res_commandes as $produit_commandes) { | |||
if(!isset($arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']])) $arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']] = 0 ; | |||
$arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']] += $produit_commandes['total'] ; | |||
foreach($resOrders as $productOrder) { | |||
if(!isset($dataProducts[self::TOTALS]['orders'][$productOrder['name']])) { | |||
$dataProducts[self::TOTALS]['orders'][$productOrder['name']] = 0 ; | |||
} | |||
$dataProducts[self::TOTALS]['orders'][$productOrder['name']] += $productOrder['total'] ; | |||
} | |||
} | |||
ksort($arr_produits) ; | |||
ksort($dataProducts) ; | |||
$arr_mois = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre','Totaux'] ; | |||
$monthArray = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre','Totaux'] ; | |||
return $this->render('produits', [ | |||
return $this->render('products', [ | |||
'year' => $year, | |||
'arr_mois' => $arr_mois, | |||
'produits' => $produits, | |||
'arr_produits' => $arr_produits, | |||
'monthArray' => $monthArray, | |||
'productsArray' => $productsArray, | |||
'dataProducts' => $dataProducts, | |||
'empty' => $empty | |||
]); | |||
} |
@@ -73,7 +73,7 @@ termes. | |||
namespace backend\controllers; | |||
class CommandeautoController extends BackendController | |||
class SubscriptionController extends BackendController | |||
{ | |||
var $enableCsrfValidation = false; | |||
@@ -87,7 +87,7 @@ class CommandeautoController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN || Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend() ; | |||
} | |||
] | |||
], | |||
@@ -103,11 +103,11 @@ class CommandeautoController extends BackendController | |||
public function actionIndex() | |||
{ | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => CommandeAuto::find() | |||
->with(['user', 'etablissement', 'pointVente', 'commandeAutoProduit']) | |||
'query' => Subscription::find() | |||
->with(['user', 'producer', 'pointSale', 'productSubscription']) | |||
->joinWith(['user']) | |||
->where(['commande_auto.id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->orderBy('commande_auto.id_point_vente ASC, CASE `commande_auto`.`username` WHEN "" THEN `user`.`nom` ELSE `commande_auto`.`username` END ASC'), | |||
->where(['subscription.id_producer' => Producer::getId()]) | |||
->orderBy('subscription.id_point_sale ASC, CASE `subscription`.`username` WHEN "" THEN `user`.`name` ELSE `subscription`.`username` END ASC'), | |||
'pagination' => [ | |||
'pageSize' => 1000, | |||
], | |||
@@ -126,25 +126,22 @@ class CommandeautoController extends BackendController | |||
public function actionCreate() | |||
{ | |||
// form | |||
$model = new CommandeAutoForm; | |||
$model->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$model = new SubscriptionForm; | |||
$model->id_producer = Producer::getId(); | |||
// produits | |||
$produits = Produit::find() | |||
->where(['id_etablissement' => $model->id_etablissement]) | |||
->orderBy('order ASC') | |||
->all(); | |||
$productsArray = Product::searchAll() ; | |||
if ($model->load(Yii::$app->request->post()) && $model->validate() | |||
&& $model->save()) | |||
{ | |||
$this->redirect(['commandeauto/index']); | |||
$this->redirect(['subscription/index']); | |||
} | |||
return $this->render('create', [ | |||
'model' => $model, | |||
'produits' => $produits | |||
]); | |||
'model' => $model, | |||
'productsArray' => $productsArray | |||
]); | |||
} | |||
/** | |||
@@ -157,56 +154,57 @@ class CommandeautoController extends BackendController | |||
public function actionUpdate($id) | |||
{ | |||
// form | |||
$model = new CommandeAutoForm; | |||
$commandeauto = CommandeAuto::findOne($id); | |||
if ($commandeauto) { | |||
$model = new SubscriptionForm; | |||
$subscription = Subscription::findOne($id); | |||
if ($subscription) { | |||
$model->id = $id; | |||
$model->id_etablissement = $commandeauto->id_etablissement; | |||
$model->id_user = $commandeauto->id_user; | |||
$model->username = $commandeauto->username; | |||
$model->id_point_vente = $commandeauto->id_point_vente; | |||
$model->date_debut = date('d/m/Y', strtotime($commandeauto->date_debut)); | |||
if (strlen($commandeauto->date_fin)) | |||
$model->date_fin = date('d/m/Y', strtotime($commandeauto->date_fin)); | |||
$model->lundi = $commandeauto->lundi; | |||
$model->lundi = $commandeauto->lundi; | |||
$model->mardi = $commandeauto->mardi; | |||
$model->mercredi = $commandeauto->mercredi; | |||
$model->jeudi = $commandeauto->jeudi; | |||
$model->vendredi = $commandeauto->vendredi; | |||
$model->samedi = $commandeauto->samedi; | |||
$model->dimanche = $commandeauto->dimanche; | |||
$model->paiement_automatique = $commandeauto->paiement_automatique; | |||
$model->periodicite_semaine = $commandeauto->periodicite_semaine; | |||
$model->id_producer = $subscription->id_producer; | |||
$model->id_user = $subscription->id_user; | |||
$model->username = $subscription->username; | |||
$model->id_point_sale = $subscription->id_point_sale; | |||
$model->date_begin = date('d/m/Y', strtotime($subscription->date_begin)); | |||
if (strlen($subscription->date_end)) { | |||
$model->date_end = date('d/m/Y', strtotime($subscription->date_end)); | |||
} | |||
$model->monday = $subscription->monday; | |||
$model->tuesday = $subscription->tuesday; | |||
$model->wednesday = $subscription->wednesday; | |||
$model->thursday = $subscription->thursday; | |||
$model->friday = $subscription->friday; | |||
$model->saturday = $subscription->saturday; | |||
$model->sunday = $subscription->sunday; | |||
$model->auto_payment = $subscription->auto_payment; | |||
$model->week_frequency = $subscription->week_frequency; | |||
// produits | |||
$commandeauto_produits = CommandeAutoProduit::find()->where(['id_commande_auto' => $model->id])->all(); | |||
foreach ($commandeauto_produits as $commandeauto_produit) { | |||
$model->produits['produit_' . $commandeauto_produit->id_produit] = $commandeauto_produit->quantite; | |||
$arrayProductsSubscription = ProductSubscription::searchAll([ | |||
'id_subscription' => $model->id | |||
]) ; | |||
foreach ($arrayProductsSubscription as $productSubscription) { | |||
$model->products['product_' . $productSubscription->id_product] = $productSubscription->quantity; | |||
} | |||
} else { | |||
throw new NotFoundHttpException('La commande récurrente est introuvable.', 404); | |||
throw new NotFoundHttpException('L\'abonnement est introuvable.', 404); | |||
} | |||
// produits | |||
$produits = Produit::find() | |||
->where(['id_etablissement' => $model->id_etablissement]) | |||
->orderBy('order ASC') | |||
->all(); | |||
$productsArray = Product::searchAll() ; | |||
if ($model->load(Yii::$app->request->post()) && $model->validate()) { | |||
if (!strlen($model->date_fin)) { | |||
$model->date_fin = null; | |||
if (!strlen($model->date_end)) { | |||
$model->date_end = null; | |||
} | |||
if ($model->save()) { | |||
$this->redirect(['commandeauto/index']); | |||
$this->redirect(['subscription/index']); | |||
} | |||
} | |||
return $this->render('update', [ | |||
'model' => $model, | |||
'produits' => $produits | |||
'productsArray' => $productsArray | |||
]); | |||
} | |||
@@ -217,9 +215,9 @@ class CommandeautoController extends BackendController | |||
*/ | |||
public function actionDelete($id) | |||
{ | |||
CommandeAutoProduit::deleteAll(['id_commande_auto' => $id]); | |||
CommandeAuto::findOne($id)->delete(); | |||
$this->redirect(['commandeauto/index']); | |||
ProductSubscription::deleteAll(['id_subscription' => $id]); | |||
Subscription::findOne($id)->delete(); | |||
$this->redirect(['subscription/index']); | |||
} | |||
} |
@@ -38,6 +38,8 @@ termes. | |||
namespace backend\controllers; | |||
use common\models\User ; | |||
/** | |||
* UserController implements the CRUD actions for User model. | |||
*/ | |||
@@ -59,8 +61,7 @@ class UserController extends BackendController | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER; | |||
return User::hasAccessBackend(); | |||
} | |||
] | |||
], | |||
@@ -74,32 +75,35 @@ class UserController extends BackendController | |||
* @return mixed | |||
*/ | |||
public function actionIndex( | |||
$id_point_vente = 0, $section_clients_inactifs = false) | |||
$idPointSale = 0, $sectionInactiveUsers = false) | |||
{ | |||
$params = Yii::$app->request->queryParams; | |||
if($id_point_vente) | |||
$params['id_point_vente'] = $id_point_vente ; | |||
if($section_clients_inactifs) | |||
$params['inactifs'] = true ; | |||
if($idPointSale) { | |||
$params['id_point_sale'] = $idPointSale ; | |||
} | |||
if($sectionInactiveUsers) { | |||
$params['inactive'] = true ; | |||
} | |||
$query = User::findBy($params); | |||
$dataProvider = new ActiveDataProvider([ | |||
'query' => $query, | |||
'sort' => ['attributes' => ['nom','prenom']], | |||
'sort' => ['attributes' => ['lastname','name']], | |||
]); | |||
$etablissement = Etablissement::find() | |||
->where(['id' => Yii::$app->user->identity->id_etablissement]) | |||
->one(); | |||
$producer = Producer::searchOne([ | |||
'id' => Producer::getId() | |||
]) ; | |||
$points_vente = PointVente::find()->where(['id_etablissement' => $etablissement->id])->all() ; | |||
$pointsSaleArray = PointSale::searchAll() ; | |||
return $this->render('index', [ | |||
'dataProvider' => $dataProvider, | |||
'etablissement' => $etablissement, | |||
'id_point_vente_active' => $id_point_vente, | |||
'points_vente' => $points_vente, | |||
'section_clients_inactifs' => $section_clients_inactifs, | |||
'producer' => $producer, | |||
'idPointSaleActive' => $idPointSale, | |||
'pointsSaleArray' => $pointsSaleArray, | |||
'sectionInactiveUsers' => $sectionInactiveUsers, | |||
]); | |||
} | |||
@@ -119,19 +123,19 @@ class UserController extends BackendController | |||
$model->setPassword($password); | |||
$model->generateAuthKey(); | |||
$model->username = $model->email; | |||
$model->confiance = 1; | |||
if (!strlen($model->email)) | |||
if (!strlen($model->email)) { | |||
$model->username = 'inconnu@laboiteapain.net'; | |||
} | |||
$model->save(); | |||
// liaison etablissement / user | |||
$user_etablissement = new UserEtablissement(); | |||
$user_etablissement->id_user = $model->id; | |||
$user_etablissement->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$user_etablissement->credit = 0; | |||
$user_etablissement->actif = 1; | |||
$user_etablissement->save(); | |||
$useProducer = new UserProducer(); | |||
$useProducer->id_user = $model->id; | |||
$useProducer->id_producer = Producer::getId(); | |||
$useProducer->credit = 0; | |||
$useProducer->active = 1; | |||
$useProducer->save(); | |||
$model->sendMailWelcome($password) ; | |||
@@ -153,15 +157,15 @@ class UserController extends BackendController | |||
{ | |||
$model = $this->findModel($id); | |||
$previous_mail = $model->email ; | |||
$previousMail = $model->email ; | |||
$user = User::find()->with('userEtablissement')->where(['id' => $model['id']])->one(); | |||
$user_appartient_etablissement = UserEtablissement::findOne(['id_user' => $id, 'id_etablissement' => Yii::$app->user->identity->id_etablissement]); | |||
if (($user_appartient_etablissement && count($user->userEtablissement) == 1) || Yii::$app->user->identity->status == USER::STATUS_ADMIN) { | |||
$user = User::find()->with('userProducer')->where(['id' => $model['id']])->one(); | |||
$userBelongToProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => Producer::getId()]); | |||
if (($userBelongToProducer && count($user->userProducer) == 1) || User::getCurrentStatus() == USER::STATUS_ADMIN) { | |||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | |||
// on envoie le mail de bienvenue si le mail vient d'être défini | |||
if(!strlen($previous_mail) && strlen($model->email)) { | |||
if(!strlen($previousMail) && strlen($model->email)) { | |||
$password = Password::generate(); | |||
$model->setPassword($password); | |||
$model->username = $model->email; | |||
@@ -186,17 +190,17 @@ class UserController extends BackendController | |||
*/ | |||
public function actionDelete($id) | |||
{ | |||
$user_etablissement = UserEtablissement::findOne([ | |||
$userProducer = UserProducer::findOne([ | |||
'id_user' => $id, | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
'id_producer' => Producer::getId() | |||
]) ; | |||
if($user_etablissement) { | |||
$user_etablissement->actif = 0 ; | |||
$user_etablissement->favoris = 0 ; | |||
$user_etablissement->save() ; | |||
if($userProducer) { | |||
$userProducer->active = 0 ; | |||
$userProducer->bookmark = 0 ; | |||
$userProducer->save() ; | |||
} | |||
else { | |||
throw new \yii\web\NotFoundHttpException('L\'enregistrement UserEtablissement est introuvable', 404) ; | |||
throw new \yii\web\NotFoundHttpException('L\'enregistrement UserProducer est introuvable', 404) ; | |||
} | |||
$params = Yii::$app->getRequest()->getQueryParams() ; | |||
@@ -209,33 +213,33 @@ class UserController extends BackendController | |||
* Affiche la liste des emails des utilisateurs liés à un point de vente | |||
* donné. | |||
* | |||
* @param integer $id_point_vente | |||
* @param integer $idPointSale | |||
* @return mixed | |||
*/ | |||
public function actionMail($id_point_vente = 0) | |||
public function actionMail($idPointSale = 0) | |||
{ | |||
$users = User::findBy([ | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement, | |||
'id_point_vente' => $id_point_vente | |||
'id_producer' => Producer::getId(), | |||
'id_point_sale' => $idPointSale | |||
])->all() ; | |||
$arr_users = []; | |||
foreach ($users as $u) { | |||
if (isset($u['email']) && strlen($u['email'])) | |||
$arr_users[] = $u['email']; | |||
$usersArray = []; | |||
foreach ($usersArray as $user) { | |||
if (isset($user['email']) && strlen($user['email'])) | |||
$usersArray[] = $user['email']; | |||
} | |||
$points_vente = PointVente::find()->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])->all() ; | |||
$pointsSaleArray = PointSale::find()->where(['id_producer' => Producer::getId()])->all() ; | |||
$point_vente = null ; | |||
if($id_point_vente) { | |||
$point_vente = PointVente::findOne(['id' => $id_point_vente, 'id_etablissement' => Yii::$app->user->identity->id_etablissement]) ; | |||
$pointSale = null ; | |||
if($idPointSale) { | |||
$pointSale = PointSale::findOne(['id' => $idPointSale, 'id_producer' => Producer::getId()]) ; | |||
} | |||
return $this->render('liste_mails', [ | |||
'users' => $arr_users, | |||
'points_vente' => $points_vente, | |||
'point_vente' => $point_vente | |||
return $this->render('emails', [ | |||
'usersArray' => $usersArray, | |||
'pointsSaleArray' => $pointsSaleArray, | |||
'pointSale' => $pointSale | |||
]); | |||
} | |||
@@ -249,31 +253,31 @@ class UserController extends BackendController | |||
*/ | |||
public function actionCredit($id) | |||
{ | |||
$user = User::find()->with('userEtablissement')->where(['id' => $id])->one(); | |||
$user_etablissement = UserEtablissement::findOne(['id_user' => $id, 'id_etablissement' => Yii::$app->user->identity->id_etablissement]); | |||
$user = User::find()->with('userProducer')->where(['id' => $id])->one(); | |||
$userProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => Producer::getId()]); | |||
if (($user_etablissement) || Yii::$app->user->identity->status == USER::STATUS_ADMIN) { | |||
if (($userProducer) || User::getCurrentStatus() == User::STATUS_ADMIN) { | |||
$credit_form = new CreditForm; | |||
if ($credit_form->load(Yii::$app->request->post()) && $credit_form->validate()) { | |||
$credit_form->id_user = $id ; | |||
$credit_form->save(); | |||
$credit_form = new CreditForm; | |||
$creditForm = new CreditForm; | |||
if ($creditForm->load(Yii::$app->request->post()) && $creditForm->validate()) { | |||
$creditForm->id_user = $id ; | |||
$creditForm->save(); | |||
$creditForm = new CreditForm; | |||
} | |||
$historique = CreditHistorique::find() | |||
->with(['commande', 'userAction']) | |||
$history = CreditHistory::find() | |||
->with(['order', 'userAction']) | |||
->where([ | |||
'id_user' => $user->id, | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement, | |||
'id_producer' => Producer::getId(), | |||
]) | |||
->orderBy('date DESC') | |||
->all(); | |||
return $this->render('credit', [ | |||
'user' => $user, | |||
'credit_form' => $credit_form, | |||
'historique' => $historique | |||
'creditForm' => $creditForm, | |||
'history' => $history | |||
]); | |||
} | |||
else { | |||
@@ -287,26 +291,16 @@ class UserController extends BackendController | |||
* @param integer $id | |||
* @return mixed | |||
*/ | |||
public function actionCommandes($id) | |||
public function actionOrders($id) | |||
{ | |||
$user = User::findOne($id); | |||
$commandes = Commande::find() | |||
->with('commandeProduits', 'pointVente', 'creditHistorique') | |||
->joinWith('production', 'production.etablissement') | |||
->where([ | |||
'id_user' => $id, | |||
'production.id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
]) | |||
->orderBy('production.date DESC') | |||
->all(); | |||
foreach ($commandes as $c) | |||
$c->init(); | |||
$orders = Order::searchAll([ | |||
'id_user' => $id | |||
], ['orderby' => 'distribution.date DESC']) ; | |||
return $this->render('commandes', [ | |||
'commandes' => $commandes, | |||
'ordersArray' => $ordersArray, | |||
'user' => $user | |||
]); | |||
} |
@@ -40,10 +40,10 @@ namespace backend\models; | |||
use Yii; | |||
use yii\base\Model; | |||
use common\models\CreditHistorique ; | |||
use common\models\CreditHistory ; | |||
use common\models\User ; | |||
use common\models\Etablissement ; | |||
use common\models\UserEtablissement ; | |||
use common\models\Prtoducer ; | |||
use common\models\UserProducer ; | |||
use common\helpers\Mail ; | |||
/** | |||
@@ -54,11 +54,11 @@ class CreditForm extends Model | |||
public $id_user ; | |||
public $id_user_action ; | |||
public $id_etablissement ; | |||
public $id_producer ; | |||
public $type ; | |||
public $montant ; | |||
public $moyen_paiement ; | |||
public $commentaire ; | |||
public $amount ; | |||
public $means_payment ; | |||
public $comment ; | |||
public $send_mail ; | |||
/** | |||
@@ -67,11 +67,11 @@ class CreditForm extends Model | |||
public function rules() | |||
{ | |||
return [ | |||
[['montant'], 'required'], | |||
[['id_user', 'id_user_action', 'id_etablissement'], 'integer'], | |||
[['amount'], 'required'], | |||
[['id_user', 'id_user_action', 'id_producer'], 'integer'], | |||
[['date','send_mail'], 'safe'], | |||
[['montant'], 'double'], | |||
[['type', 'moyen_paiement', 'commentaire'], 'string', 'max' => 255], | |||
[['amount'], 'double'], | |||
[['type', 'means_payment', 'comment'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -84,11 +84,11 @@ class CreditForm extends Model | |||
'id_user' => 'Utilisateur', | |||
'id_user_action' => 'Utilisateur', | |||
'date' => 'Date', | |||
'montant' => 'Montant', | |||
'amount' => 'Montant', | |||
'type' => 'Type', | |||
'id_etablissement' => 'Établissement', | |||
'moyen_paiement' => 'Moyen de paiement', | |||
'commentaire' => 'Commentaire', | |||
'id_producer' => 'Producteur', | |||
'means_payment' => 'Moyen de paiement', | |||
'comment' => 'Commentaire', | |||
'send_mail' => 'Prévenir l\'utilisateur', | |||
]; | |||
} | |||
@@ -99,27 +99,28 @@ class CreditForm extends Model | |||
public function save() | |||
{ | |||
if ($this->validate()) { | |||
$credit_historique = new CreditHistorique ; | |||
$credit_historique->id_user = $this->id_user; | |||
$credit_historique->id_user_action = Yii::$app->user->identity->id; | |||
$credit_historique->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$credit_historique->type = $this->type ; | |||
$credit_historique->commentaire = $this->commentaire ; | |||
$credit_historique->montant = $this->montant ; | |||
$credit_historique->moyen_paiement = $this->moyen_paiement ; | |||
$credit_historique->save(); | |||
$creditHistory = new CreditHistory; | |||
$creditHistory->id_user = $this->id_user; | |||
$creditHistory->id_user_action = Yii::$app->user->identity->id; | |||
$creditHistory->id_producer = Producer::getId() ; | |||
$creditHistory->type = $this->type ; | |||
$creditHistory->comment = $this->comment ; | |||
$creditHistory->amount = $this->amount ; | |||
$creditHistory->means_payment = $this->means_payment ; | |||
$creditHistory->save(); | |||
// on prévient l'utilisateur que son compte vient d'être crédité | |||
if($this->send_mail) { | |||
$user = User::findOne($this->id_user) ; | |||
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement) ; | |||
$user_etablissement = UserEtablissement::findOne(['id_user' => $this->id_user, 'id_etablissement' => Yii::$app->user->identity->id_etablissement]); | |||
$producer = Producer::get() ; | |||
$userProducer = UserProducer::searchOne([ | |||
'id_user' => $this->id_user | |||
]); | |||
Mail::send($user->email, 'Votre compte vient d\'être crédité','creditUser', [ | |||
'user' => $user, | |||
'etablissement' => $etablissement, | |||
'user_etablissement' => $user_etablissement, | |||
'credit_form' => $this | |||
'producer' => $producer, | |||
'userProducer' => $userProducer, | |||
'creditForm' => $this | |||
]) ; | |||
} | |||
} |
@@ -82,7 +82,7 @@ class MailForm extends Model | |||
{ | |||
return Yii::$app->mailer->compose() | |||
->setTo($email) | |||
->setFrom(['matthieu@lechatdesnoisettes.com' => 'Le Chat des Noisettes']) | |||
->setFrom(['contact@laboiteapain.net' => 'Laboîte à pain']) | |||
->setSubject($this->subject) | |||
->setTextBody($this->body) | |||
->send(); |
@@ -51,6 +51,6 @@ $this->title = 'Communiquer' ; | |||
<h1><?= Html::encode($this->title) ; ?></h1> | |||
<p>Imprimez ce petit encart pour expliquer à vos clients comment passer leurs commandes.</p> | |||
<?php echo $this->render('mode_emploi', ['etablissement' => $etablissement]) ; ?> | |||
<p><?php echo Html::a('<span class="glyphicon glyphicon-download-alt"></span> Télécharger', ['communiquer/modeemploi'], ['class'=>'btn btn-primary']) ?></p> | |||
<?php echo $this->render('instructions', ['producer' => $producer]) ; ?> | |||
<p><?php echo Html::a('<span class="glyphicon glyphicon-download-alt"></span> Télécharger', ['communicate/instructions'], ['class'=>'btn btn-primary']) ?></p> | |||
@@ -40,10 +40,10 @@ use yii\helpers\Html ; | |||
?> | |||
<div class="communiquer-mode-emploi<?php if(isset($pdf) && $pdf): ?> communiquer-mode-emploi-pdf<?php endif; ?><?php if(!isset($pdf)): ?> communiquer-mode-emploi-encart<?php endif; ?>"> | |||
<div class="communicate-instructions<?php if(isset($pdf) && $pdf): ?> communicate-instructions-pdf<?php endif; ?><?php if(!isset($pdf)): ?> communicate-instructions-inset<?php endif; ?>"> | |||
<div class="header"> | |||
<div class="logo"> | |||
<img src="./img/laboulange4.png" alt="Logo" /> | |||
<img src="../img/laboulange4.png" alt="Logo" /> | |||
</div> | |||
<h1>La boîte à pain</h1> | |||
<h2>Plateforme de réservation de pain</h2> | |||
@@ -54,10 +54,10 @@ use yii\helpers\Html ; | |||
<ol> | |||
<li>Inscrivez-vous sur <strong>www.laboiteapain.net</strong></li> | |||
<?php if(strlen($etablissement->code)): ?> | |||
<li>Ajoutez le producteur <strong><?= Html::encode($etablissement->nom); ?></strong><br />grâce au code : <span class="code"><strong><?= Html::encode($etablissement->code) ?></strong> <?php if(!isset($pdf)): echo Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['etablissement/update'], ['class'=> 'btn btn-default btn-xs']); endif; ?></span></li> | |||
<?php if(strlen($producer->code)): ?> | |||
<li>Ajoutez le producteur <strong><?= Html::encode($producer->name); ?></strong><br />grâce au code : <span class="code"><strong><?= Html::encode($producer->code) ?></strong> <?php if(!isset($pdf)): echo Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['producer/update'], ['class'=> 'btn btn-default btn-xs']); endif; ?></span></li> | |||
<?php else: ?> | |||
<li>Ajoutez la producteur <strong><?= Html::encode($etablissement->nom); ?></strong></li> | |||
<li>Ajoutez le producteur <strong><?= Html::encode($producer->name); ?></strong></li> | |||
<?php endif; ?> | |||
<li>Passez votre commande</li> | |||
</ol> |
@@ -39,7 +39,7 @@ termes. | |||
?> | |||
<?php for($i = 0; $i < 8; $i++): ?> | |||
<div class="bloc-mode-emploi-pdf<?php if($i%2 == 0): ?> bloc-mode-emploi-border<?php endif; ?><?php if($i == 6 || $i == 7): ?> bloc-mode-emploi-bottom<?php endif; ?>"> | |||
<?php echo $this->render('mode_emploi',['pdf' => true, 'etablissement' => $etablissement]) ; ?> | |||
<div class="block-instructions-pdf<?php if($i%2 == 0): ?> block-instructions-border<?php endif; ?><?php if($i == 6 || $i == 7): ?> block-instructions-bottom<?php endif; ?>"> | |||
<?php echo $this->render('instructions',['pdf' => true, 'producer' => $producer]) ; ?> | |||
</div> | |||
<?php endfor; ?> |
@@ -1,42 +0,0 @@ | |||
<?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. | |||
*/ | |||
?> | |||
<h1>Affiche</h1> |
@@ -45,29 +45,25 @@ use common\models\Developpement ; | |||
/* @var $form yii\widgets\ActiveForm */ | |||
?> | |||
<div class="developpement-form"> | |||
<div class="development-form"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($model, 'type')->dropDownList([ | |||
Developpement::TYPE_EVOLUTION => 'Évolution', | |||
Developpement::TYPE_BUG => 'Anomalie', | |||
Development::TYPE_EVOLUTION => 'Évolution', | |||
Development::TYPE_BUG => 'Anomalie', | |||
]) ?> | |||
<?= $form->field($model, 'statut')->dropDownList([ | |||
Developpement::STATUT_OPEN => 'Ouvert', | |||
Developpement::STATUT_CLOSED => 'Fermé', | |||
<?= $form->field($model, 'status')->dropDownList([ | |||
Development::STATUS_OPEN => 'Ouvert', | |||
Development::STATUS_CLOSED => 'Fermé', | |||
]) ?> | |||
<?= $form->field($model, 'objet')->textInput(['maxlength' => true]) ?> | |||
<?= $form->field($model, 'subject')->textInput(['maxlength' => true]) ?> | |||
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?> | |||
<?= $form->field($model, 'estimation_temps')->textInput() ?> | |||
<?= $form->field($model, 'avancement')->textInput() ?> | |||
<?= $form->field($model, 'date_livraison')->textInput() ?> | |||
<?= $form->field($model, 'time_estimate')->textInput() ?> | |||
<?= $form->field($model, 'progress')->textInput() ?> | |||
<?= $form->field($model, 'date_delivery')->textInput() ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
@@ -46,7 +46,7 @@ $this->title = 'Ajouter un développement'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Développement', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="developpement-create"> | |||
<div class="development-create"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -38,8 +38,8 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
use common\models\Developpement; | |||
use common\models\DeveloppementPriorite; | |||
use common\models\Development; | |||
use common\models\DevelopmentPriority; | |||
use common\models\User; | |||
use common\helpers\Url; | |||
@@ -49,7 +49,7 @@ use common\helpers\Url; | |||
$this->title = 'Développement'; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="developpement-index"> | |||
<div class="development-index"> | |||
<h1><?= Html::encode($this->title) ?> <?= Html::a('Ajouter', ['create'], ['class' => 'btn btn-success']) ?></h1> | |||
@@ -64,9 +64,9 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
?> | |||
<ul id="tabs-statuts-developpements" class="nav nav-tabs" role="tablist"> | |||
<li role="presentation" class="<?php if($statut == Developpement::STATUT_OPEN): ?>active<?php endif; ?>"><a href="<?= Yii::$app->urlManager->createUrl(['developpement/index','statut' => Developpement::STATUT_OPEN]); ?>" id="" aria-controls="" role="tab">Ouvert</a></li> | |||
<li role="presentation" class="<?php if($statut == Developpement::STATUT_CLOSED): ?>active<?php endif; ?>"><a href="<?= Yii::$app->urlManager->createUrl(['developpement/index','statut' => Developpement::STATUT_CLOSED]); ?>" id="" aria-controls="" role="tab">Fermé</a></li> | |||
<ul id="tab-status-developments" class="nav nav-tabs" role="tablist"> | |||
<li role="presentation" class="<?php if($status == Development::STATUS_OPEN): ?>active<?php endif; ?>"><a href="<?= Yii::$app->urlManager->createUrl(['development/index','status' => Development::STATUS_OPEN]); ?>" id="" aria-controls="" role="tab">Ouvert</a></li> | |||
<li role="presentation" class="<?php if($status == Development::STATUS_CLOSED): ?>active<?php endif; ?>"><a href="<?= Yii::$app->urlManager->createUrl(['development/index','status' => Development::STATUS_CLOSED]); ?>" id="" aria-controls="" role="tab">Fermé</a></li> | |||
</ul> | |||
<?php | |||
@@ -83,7 +83,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'header' => 'Type', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->type == Developpement::TYPE_EVOLUTION) { | |||
if($model->type == Development::TYPE_EVOLUTION) { | |||
return '<span class="label label-success">Évolution</span>' ; | |||
} | |||
else { | |||
@@ -94,7 +94,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
[ 'attribute' => 'sujet', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$html = '<strong>'.Html::encode($model->objet).'</strong>' ; | |||
$html = '<strong>'.Html::encode($model->subject).'</strong>' ; | |||
if(strlen($model->description)) | |||
$html .= '<br />'.nl2br(Html::encode($model->description)) ; | |||
return $html ; | |||
@@ -103,59 +103,57 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'header' => 'Estimation', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return intval($model->estimation_temps).' h' ; | |||
return intval($model->time_estimate).' h' ; | |||
}], | |||
[ 'attribute' => 'avancement', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->avancement) | |||
if($model->progress) | |||
return '<div class="progress"> | |||
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="'.intval($model->avancement).'" aria-valuemin="0" aria-valuemax="100" style="width: '.intval($model->avancement).'%;"> | |||
<span class="sr-only">'.intval($model->avancement).'% effectué</span> | |||
<div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="'.intval($model->progress).'" aria-valuemin="0" aria-valuemax="100" style="width: '.intval($model->progress).'%;"> | |||
<span class="sr-only">'.intval($model->progress).'% effectué</span> | |||
</div> | |||
</div> ' ; | |||
else | |||
return '' ; | |||
}], | |||
[ 'attribute' => 'date_livraison', | |||
[ 'attribute' => 'date_delivery', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(strlen($model->date_livraison)) | |||
return date('d/m/Y',strtotime($model->date_livraison)) ; | |||
if(strlen($model->date_delivery)) | |||
return date('d/m/Y',strtotime($model->date_delivery)) ; | |||
else | |||
return '' ; | |||
}], | |||
] ; | |||
if(Yii::$app->user->identity->status == USER::STATUS_ADMIN | |||
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER) { | |||
if(User::hasAccessBackend()) { | |||
$columns[] = [ | |||
'header' => 'Priorité', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$current_priorite = (isset($model->developpementPrioriteCurrentEtablissement)) ? $model->developpementPrioriteCurrentEtablissement->getStrPriorite() : 'Non' ; | |||
$style_bouton = (isset($model->developpementPrioriteCurrentEtablissement)) ? $model->developpementPrioriteCurrentEtablissement->getClassCssStyleBouton() : 'default' ; | |||
$currentPriority = (isset($model->developmentPrioritYCurrentProducer)) ? $model->developmentPriorityCurrentProducer->getStrPriority() : 'Non' ; | |||
$styleButton = (isset($model->developmentPriorityCurrentProducer)) ? $model->developmentPriorityCurrentProducer->getClassCssStyleButton() : 'default' ; | |||
$html = '<div class="btn-group btn-group-priorite"> | |||
<button type="button" class="btn btn-priorite btn-sm btn-'.$style_bouton.' dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||
'.$current_priorite.' <span class="caret"></span> | |||
<button type="button" class="btn btn-priorite btn-sm btn-'.$styleButton.' dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||
'.$currentPriority.' <span class="caret"></span> | |||
</button> | |||
<ul class="dropdown-menu"> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id]).'">Non</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_BASSE]).'">Basse</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_NORMALE]).'">Normale</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/priorite','id_developpement'=>$model->id, 'priorite' => DeveloppementPriorite::PRIORITE_HAUTE]).'">Haute</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/priority','idDevelopment' => $model->id]).'">Non</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/priority','idDevelopment' => $model->id, 'priority' => DevelopmentPriority::PRIORITY_LOW]).'">Basse</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/priority','idDevelopment' => $model->id, 'priority' => DevelopmentPriority::PRIORITY_NORMAL]).'">Normale</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/priority','idDevelopment' => $model->id, 'priority' => DevelopmentPriority::PRIORITY_HIGH]).'">Haute</a></li> | |||
</ul> | |||
</div><br />' ; | |||
if(isset($model->developpementPriorite) && count($model->developpementPriorite)) { | |||
foreach($model->developpementPriorite as $developpement_priorite) { | |||
if($developpement_priorite->id_etablissement != Yii::$app->user->identity->id_etablissement) | |||
$html .= '<div class="label label-priorite label-sm label-'.$developpement_priorite->getClassCssStyleBouton().'">'.Html::encode($developpement_priorite->etablissement->nom).'</div> ' ; | |||
if(isset($model->developmentPriority) && count($model->developmentPriority)) { | |||
foreach($model->developmentPriority as $developmentPriority) { | |||
if($developmentPriority->id_producer != Producer::getId()) | |||
$html .= '<div class="label label-priorite label-sm label-'.$developmentPriority->getClassCssStyleButton().'">'.Html::encode($developmentPriority->producer->name).'</div> ' ; | |||
} | |||
} | |||
@@ -164,7 +162,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
] ; | |||
} | |||
if(Yii::$app->user->identity->status == USER::STATUS_ADMIN) { | |||
if(User::getCurrentStatus() == USER::STATUS_ADMIN) { | |||
$columns[] = [ | |||
'class' => 'yii\grid\ActionColumn', | |||
'template' => '{update}', | |||
@@ -178,7 +176,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<span class="sr-only">Toggle Dropdown</span> | |||
</button> | |||
<ul class="dropdown-menu"> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['developpement/delete','id' => $model->id]).'" class=""><span class="glyphicon glyphicon-trash"></span> Supprimer</a></li> | |||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/delete','id' => $model->id]).'" class=""><span class="glyphicon glyphicon-trash"></span> Supprimer</a></li> | |||
</ul> | |||
</div>' ; | |||
}, | |||
@@ -190,7 +188,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<?= | |||
GridView::widget([ | |||
'id' => 'tab-developpements', | |||
'id' => 'tab-developments', | |||
'dataProvider' => $dataProvider, | |||
'columns' => $columns | |||
]); |
@@ -46,7 +46,7 @@ $this->params['breadcrumbs'][] = ['label' => 'Développement', 'url' => ['index' | |||
$this->params['breadcrumbs'][] = ['label' => '#'.$model->id, 'url' => ['update', 'id' => $model->id]]; | |||
$this->params['breadcrumbs'][] = 'Modifier'; | |||
?> | |||
<div class="developpement-update"> | |||
<div class="development-update"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -40,7 +40,7 @@ use yii\helpers\Html; | |||
use yii\bootstrap\Nav; | |||
use yii\bootstrap\NavBar; | |||
use yii\widgets\Breadcrumbs; | |||
use common\models\Etablissement; | |||
use common\models\Producer; | |||
use common\models\User; | |||
use yii\widgets\ActiveForm; | |||
use yii\helpers\ArrayHelper; | |||
@@ -53,8 +53,9 @@ use common\helpers\Url; | |||
\backend\assets\AppAsset::register($this); | |||
$producer = null ; | |||
if(!Yii::$app->user->isGuest) | |||
$producer = Etablissement::findOne(Yii::$app->user->identity->id_etablissement) ; | |||
if(!Yii::$app->user->isGuest) { | |||
$producer = Producer::findOne(Producer::getId()) ; | |||
} | |||
?> | |||
<?php $this->beginPage() ?> | |||
@@ -91,29 +92,29 @@ if(!Yii::$app->user->isGuest) | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Commandes', | |||
'url' => ['/commande/index'], | |||
'url' => ['/order/index'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
'items' => [ | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Toutes les commandes', | |||
'url' => ['/commande/index'], | |||
'url' => ['/order/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-repeat"></span> Commandes récurrentes', | |||
'url' => ['/commandeauto/index'], | |||
'label' => '<span class="glyphicon glyphicon-repeat"></span> Abonnements', | |||
'url' => ['/subscription/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
] | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-grain"></span> Produits', | |||
'url' => ['/produit/index'], | |||
'url' => ['/product/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-map-marker"></span> Points de vente', | |||
'url' => ['/point-vente/index'], | |||
'url' => ['/point-sale/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
[ | |||
@@ -123,22 +124,22 @@ if(!Yii::$app->user->isGuest) | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-plus"></span>', | |||
'url' => ['/etablissement/update'], | |||
'url' => ['/producer/update'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
'items' => [ | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-cog"></span> Paramètres', | |||
'url' => ['/etablissement/update'], | |||
'url' => ['/producer/update'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-bullhorn"></span> Communiquer', | |||
'url' => ['/communiquer/index'], | |||
'url' => ['/communicate/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-euro"></span> Mon abonnement', | |||
'url' => ['/etablissement/facturation'], | |||
'url' => ['/producer/billing'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
], | |||
[ | |||
@@ -148,12 +149,12 @@ if(!Yii::$app->user->isGuest) | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques produits', | |||
'url' => ['/stats/produits'], | |||
'url' => ['/stats/products'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-wrench"></span> Développement', | |||
'url' => ['/developpement/index'], | |||
'url' => ['/development/index'], | |||
'visible' => !Yii::$app->user->isGuest | |||
], | |||
], | |||
@@ -171,13 +172,13 @@ if(!Yii::$app->user->isGuest) | |||
'items' => [ | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-th-list"></span> Producteurs', | |||
'url' => ['etablissement-admin/index'], | |||
'url' => ['producer-admin/index'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
], | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-euro"></span> Facturation', | |||
'url' => ['etablissement-admin/facturation'], | |||
'visible' => !Yii::$app->user->isGuest, | |||
'url' => ['producer-admin/billing'], | |||
'visible' => false, | |||
], | |||
] | |||
]; | |||
@@ -207,27 +208,27 @@ if(!Yii::$app->user->isGuest) | |||
<div id="env-dev"><?php if (YII_ENV == 'dev'): ?>Dév.<?php elseif (YII_ENV == 'demo'): ?>Démo<?php endif; ?></div> | |||
<?php endif; ?> | |||
<?php if (!Yii::$app->user->isGuest): ?> | |||
<div class="nom-boulange"> | |||
<?php if (Yii::$app->user->identity->status == User::STATUS_BOULANGER): ?> | |||
<span><?= Html::encode(Yii::$app->user->identity->getNomMagasin()); ?></span> | |||
<?php elseif (Yii::$app->user->identity->status == User::STATUS_ADMIN): ?> | |||
<?php $form = ActiveForm::begin(['id' => 'select-etablissement']); ?> | |||
<div class="name-producer"> | |||
<?php if (User::getCurrentStatus() == User::STATUS_PRODUCER): ?> | |||
<span><?= Html::encode(Yii::$app->user->identity->getNameProducer()); ?></span> | |||
<?php elseif (User::getCurrentStatus() == User::STATUS_ADMIN): ?> | |||
<?php $form = ActiveForm::begin(['id' => 'select-producer']); ?> | |||
<?= | |||
Html::dropDownList('select_etablissement', Yii::$app->user->identity->id_etablissement, ArrayHelper::map(Etablissement::find()->orderBy('nom ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model->nom; | |||
})); | |||
Html::dropDownList('select_producer', Producer::getId(), ArrayHelper::map(Producer::find()->orderBy('name ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model->name; | |||
})); | |||
?> | |||
<?php ActiveForm::end(); ?> | |||
<?php endif; ?> | |||
<?php | |||
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement); | |||
if (!$etablissement->actif): | |||
$producer = Producer::findOne(Producer::getId()); | |||
if (!$producer->active): | |||
?> | |||
<span class="label label-danger" data-toggle="tooltip" data-placement="bottom" data-original-title="Activez votre établissement quand vous le souhaitez afin de la rendre visible à vos clients."> | |||
<?= Html::a('Hors-ligne', ['etablissement/update']); ?> | |||
<?= Html::a('Hors-ligne', ['producer/update']); ?> | |||
</span> | |||
<?php endif; ?> | |||
<?php endif; ?> | |||
<div class="clr"></div> | |||
</div> | |||
@@ -247,7 +248,7 @@ if(!Yii::$app->user->isGuest) | |||
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], | |||
]) | |||
?> | |||
<?= $content ?> | |||
<?= $content ?> | |||
</div> | |||
</div> | |||
@@ -35,7 +35,7 @@ pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use common\models\Commande ; | |||
use common\models\Order ; | |||
use yii\helpers\Html ; | |||
?> | |||
@@ -48,45 +48,47 @@ use yii\helpers\Html ; | |||
</div> | |||
<div class="panel-body"> | |||
<div class="alert alert-warning"> | |||
<strong>Potentiel :</strong> <?= number_format($ca_potentiel,2); ?> € (<?= $poids_total ?> kg) • | |||
<strong>Commandé :</strong> <?= number_format($recettes,2); ?> € (<?= $poids ?> kg) | |||
<strong>Potentiel :</strong> <?= number_format($potentialTurnover,2); ?> € (<?= $totalWeight ?> kg) • | |||
<strong>Commandé :</strong> <?= number_format($revenues,2); ?> € (<?= $weight ?> kg) | |||
</div> | |||
<table class="table table-bordered tab-content table-produits table-header-rotated"> | |||
<tbody> | |||
<tr> | |||
<?php | |||
foreach ($produits as $p) { | |||
if ((isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) || | |||
(!$produits_selec[$p->id]['actif'] && Commande::getQuantiteProduit($p->id, $commandes))) | |||
foreach ($arrayProducts as $p) { | |||
if ((isset($arrayProductsSelected[$p->id]['active']) && $arrayProductsSelected[$p->id]['active']) || | |||
(!$arrayProductsSelected[$p->id]['active'] && Order::getProductQuantity($p->id, $arrayOrders))) | |||
{ | |||
(!$produits_selec[$p->id]['actif']) ? $class_disabled = 'disabled' : $class_disabled = '' ; | |||
(!$arrayProductsSelected[$p->id]['active']) ? $class_disabled = 'disabled' : $class_disabled = '' ; | |||
echo '<th class="rotate-45 '.$class_disabled.'"><div><span>'.Html::encode($p->getLibelleAdmin()).'</span></div></th>' ; | |||
echo '<th class="rotate-45 '.$class_disabled.'"><div><span>'.Html::encode($p->getStrWordingAdmin()).'</span></div></th>' ; | |||
} | |||
} | |||
?> | |||
</tr> | |||
<tr> | |||
<?php | |||
foreach ($produits as $p) { | |||
$quantite = Commande::getQuantiteProduit($p->id, $commandes); | |||
if ((isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) || $quantite) | |||
foreach ($arrayProducts as $p) { | |||
$quantity = Order::getProductQuantity($p->id, $arrayOrders); | |||
if ((isset($arrayProductsSelected[$p->id]['active']) && $arrayProductsSelected[$p->id]['active']) || $quantity) | |||
{ | |||
$str_quantite = ''; | |||
if ($quantite) | |||
$str_quantite = $quantite; | |||
$classe = 'total'; | |||
if ($str_quantite > $produits_selec[$p->id]['quantite_max'] && !$produits_selec[$p->id]['vrac']) | |||
$strQuantity = ''; | |||
if ($quantity) { | |||
$strQuantity = $quantity ; | |||
} | |||
$class = 'total'; | |||
if ($strQuantity > $arrayProductsSelected[$p->id]['quantity_max']) | |||
{ | |||
$classe .= ' depasse'; | |||
$class .= ' depasse'; | |||
} | |||
echo '<td class="' . $classe . '"><strong>' . $str_quantite . '</strong> '; | |||
echo '<td class="' . $class . '"><strong>' . $strQuantity . '</strong> '; | |||
if ($produits_selec[$p->id]['quantite_max'] && $str_quantite) | |||
echo '<br /><span>' . $produits_selec[$p->id]['quantite_max'] . '</span>'; | |||
if ($arrayProductsSelected[$p->id]['quantity_max'] && $strQuantity) { | |||
echo '<br /><span>' . $arrayProductsSelected[$p->id]['quantity_max'] . '</span>'; | |||
} | |||
echo '</td>' ; | |||
} |
@@ -37,24 +37,16 @@ termes. | |||
*/ | |||
use yii\helpers\Html; | |||
use common\models\Commande; | |||
use common\models\Order; | |||
use common\models\User ; | |||
use yii\helpers\ArrayHelper ; | |||
use yii\widgets\ActiveForm; | |||
$this->title = 'Commande'; | |||
$cpt_non_vrac = 0; | |||
foreach ($produits as $p) { | |||
if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']) { | |||
if (!$p->vrac) { | |||
$cpt_non_vrac ++; | |||
} | |||
} | |||
} | |||
?> | |||
<div id="page-commande"> | |||
<div id="page-order"> | |||
<div class="col-md-3" id="col-left"> | |||
<div class="panel panel-default"> | |||
@@ -76,7 +68,7 @@ foreach ($produits as $p) { | |||
éditer un jour de production. | |||
</div> | |||
<?php else: ?> | |||
<a class="btn btn-sm btn-default btn-active-week" href="<?= Yii::$app->urlManager->createUrl(['commande/change-state-semaine', 'date' => $date, 'actif' => !$production_semaine_active, ]); ?>"><span class="glyphicon glyphicon-<?= $production_semaine_active ? 'remove' : 'ok' ?>"></span> <?= $production_semaine_active ? 'Désactiver' : 'Activer' ?> cette semaine de production</a> | |||
<a class="btn btn-sm btn-default btn-active-week" href="<?= Yii::$app->urlManager->createUrl(['order/change-state-week', 'date' => $date, 'active' => !$oneDistributionWeekActive, ]); ?>"><span class="glyphicon glyphicon-<?= $oneDistributionWeekActive ? 'remove' : 'ok' ?>"></span> <?= $oneDistributionWeekActive ? 'Désactiver' : 'Activer' ?> cette semaine de production</a> | |||
<?php endif; ?> | |||
</div> | |||
</div> | |||
@@ -84,34 +76,34 @@ foreach ($produits as $p) { | |||
<?php if ($date != ''): ?> | |||
<div id="bloc-production"> | |||
<input type="hidden" id="date-production" value="<?= $date ?>" /> | |||
<input type="hidden" id="id-production" value="<?= $production->id ?>" /> | |||
<input type="hidden" id="id-production" value="<?= $distribution->id ?>" /> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title">Production du <strong><?php echo date('d/m/Y', strtotime($date)); ?></strong></h3> | |||
<h3 class="panel-title">Distribution du <strong><?php echo date('d/m/Y', strtotime($date)); ?></strong></h3> | |||
</div> | |||
<div class="panel-body"> | |||
<strong>Production</strong><br /> | |||
<strong>Distribution</strong><br /> | |||
<div class="btn-group" role="group"> | |||
<a class="btn btn-default<?php if ($production->actif): ?> btn-success<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['commande/change-state', 'date' => $date, 'actif' => 1]); ?>">Activé</a> | |||
<a class="btn btn-default<?php if (!$production->actif): ?> btn-danger<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['commande/change-state', 'date' => $date, 'actif' => 0]); ?>">Désactivé</a> | |||
<a class="btn btn-default<?php if ($distribution->active): ?> btn-success<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['order/change-state', 'date' => $date, 'active' => 1]); ?>">Activé</a> | |||
<a class="btn btn-default<?php if (!$distribution->active): ?> btn-danger<?php endif; ?>" href="<?php echo Yii::$app->urlManager->createUrl(['order/change-state', 'date' => $date, 'active' => 0]); ?>">Désactivé</a> | |||
</div> | |||
<br /> | |||
<br /> | |||
<?php if (!$production->actif): ?> | |||
<?php if (!$distribution->active): ?> | |||
<div class="alert alert-info"> | |||
<span class="glyphicon glyphicon-share-alt"></span> Activez ici la production pour qu'elle soit visible au client. | |||
<span class="glyphicon glyphicon-share-alt"></span> Activez ici la distribution pour qu'elle soit visible au client. | |||
</div> | |||
<?php endif; ?> | |||
<?php if($production->livraison && count($arr_productions_point_vente)): ?> | |||
<?php if($distribution->delivery && count($arrayPointsSaleDistribution)): ?> | |||
<div id="productions-point-vente"> | |||
<strong>Points de vente : </strong> | |||
<div class="checkbox-list"> | |||
<?= Html::activeCheckboxList( | |||
$production_point_vente, | |||
'productions_point_vente', | |||
$arr_productions_point_vente , | |||
$pointSaleDistribution, | |||
'points_sale_distribution', | |||
$arrayPointsSaleDistribution , | |||
['encode' => false, 'class' => '']) ?> | |||
</div> | |||
</div> | |||
@@ -121,31 +113,30 @@ foreach ($produits as $p) { | |||
</div> | |||
<?php endif; ?> | |||
<?php if ($production): ?> | |||
<?php if ($distribution): ?> | |||
<div id="bloc-produits"> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title">Produits</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<!-- produits sélectionnés --> | |||
<form id="produits-production" action="<?php echo Yii::$app->urlManager->createUrl(['commande/index', 'date' => $date]); ?>" method="post"> | |||
<form id="produits-production" action="<?php echo Yii::$app->urlManager->createUrl(['order/index', 'date' => $date]); ?>" method="post"> | |||
<div class="overflow"> | |||
<table class="table table-condensed"> | |||
<thead> | |||
<tr> | |||
<th class="td-actif">Actif</th> | |||
<th class="td-active">Actif</th> | |||
<th class="td-produit">Produit</th> | |||
<th class="td-max">Max. <span class="glyphicon glyphicon-info-sign" data-toggle="tooltip" data-placement="top" data-original-title="Quantité disponible à la commande. Laisser vide si vous ne souhaitez pas avoir de limite de commande. La valeur par défaut est configurable dans vos produits."></span></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach ($produits as $p): ?> | |||
<tr<?php if ($p->vrac): ?> style="display:none;"<?php endif; ?> <?php if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']): ?>class="active"<?php endif; ?>> | |||
<td class="td-actif"><input id="produit-<?php echo $p->id; ?>" name="Produit[<?php echo $p->id; ?>][actif]" type="checkbox" <?php if (isset($produits_selec[$p->id]['actif']) && $produits_selec[$p->id]['actif']): ?>checked="checked"<?php endif; ?> /></td> | |||
<td class="td-produit"><label for="produit-<?php echo $p->id; ?>"><?= Html::encode($p->nom) ?></label></td> | |||
<td class="td-max"><input class="quantite-max" name="Produit[<?php echo $p->id; ?>][quantite_max]" type="text" value="<?php if (isset($produits_selec[$p->id])) echo $produits_selec[$p->id]['quantite_max']; ?>" /></td> | |||
<?php foreach ($arrayProducts as $p): ?> | |||
<tr <?php if (isset($selectedProducts[$p->id]['active']) && $selectedProducts[$p->id]['active']): ?>class="active"<?php endif; ?>> | |||
<td class="td-active"><input id="product-<?php echo $p->id; ?>" name="Product[<?php echo $p->id; ?>][active]" type="checkbox" <?php if (isset($selectedProducts[$p->id]['active']) && $selectedProducts[$p->id]['active']): ?>checked="checked"<?php endif; ?> /></td> | |||
<td class="td-produit"><label for="product-<?php echo $p->id; ?>"><?= Html::encode($p->name) ?></label></td> | |||
<td class="td-max"><input class="quantity-max" name="Product[<?php echo $p->id; ?>][quantity_max]" type="text" value="<?php if (isset($selectedProducts[$p->id])) echo $selectedProducts[$p->id]['quantity_max']; ?>" /></td> | |||
</tr> | |||
<?php endforeach; ?> | |||
</tbody> | |||
@@ -163,21 +154,21 @@ foreach ($produits as $p) { | |||
<div class="col-md-9" id="col-right"> | |||
<input type="hidden" value="<?php echo $date; ?>" id="current-date" /> | |||
<ul id="jours-production"> | |||
<?php foreach ($jours_production as $j) : ?> | |||
<li><?php echo $j->date; ?></li> | |||
<?php foreach ($arrayDistributionDays as $distributionDay) : ?> | |||
<li><?php echo $distributionDay->date; ?></li> | |||
<?php endforeach; ?> | |||
</ul> | |||
<?php if ($date != ''): ?> | |||
<div id="bloc-totaux"> | |||
<?= $this->render('_total_commandes.php',[ | |||
'produits' => $produits, | |||
'commandes' => $commandes, | |||
'produits_selec' => $produits_selec, | |||
'recettes' => $recettes, | |||
'poids' => $poids, | |||
'ca_potentiel' => $ca_potentiel, | |||
'poids_total' => $poids_total, | |||
<?= $this->render('_total_orders.php',[ | |||
'arrayProducts' => $arrayProducts, | |||
'arrayOrders' => $arrayOrders, | |||
'arrayProductsSelected' => $selectedProducts, | |||
'revenues' => $revenues, | |||
'weight' => $weight, | |||
'potentialTurnover' => $potentialTurnover, | |||
'totalWeight' => $totalWeight, | |||
]); ?> | |||
</div> | |||
@@ -192,20 +183,20 @@ foreach ($produits as $p) { | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
Commandes | |||
<?php if (!count($commandes)): ?><span class="label label-danger">0</span> | |||
<?php else: ?><span class="label label-success"><?= count($commandes) ?></span> | |||
<?php if (!count($arrayOrders)): ?><span class="label label-danger">0</span> | |||
<?php else: ?><span class="label label-success"><?= count($arrayOrders) ?></span> | |||
<?php endif; ?> | |||
<?php if (count($commandes)): ?> | |||
<a id="btn-export-commandes" class="btn btn-primary" href="<?php echo Yii::$app->urlManager->createUrl(['commande/report', 'date' => $date, 'id_point_vente' => 0, 'global' => 1]); ?>"><span class="glyphicon glyphicon-download-alt"></span> Exporter</a> | |||
<?php if (count($arrayOrders)): ?> | |||
<a id="btn-export-commandes" class="btn btn-primary" href="<?php echo Yii::$app->urlManager->createUrl(['order/report', 'date' => $date, 'idPointSale' => 0, 'global' => 1]); ?>"><span class="glyphicon glyphicon-download-alt"></span> Exporter</a> | |||
<?php endif; ?> | |||
<div id="btn-commandes-auto" class="btn-group"> | |||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||
<span class="glyphicon glyphicon-repeat"></span> Commandes récurrentes <span class="caret"></span> | |||
<span class="glyphicon glyphicon-repeat"></span> Abonnements <span class="caret"></span> | |||
</button> | |||
<ul class="dropdown-menu"> | |||
<li><a href="<?= Yii::$app->urlManager->createUrl(['commande/add-commandes-auto', 'date' => $date]); ?>">Importer toutes les commandes</a></li> | |||
<li><a href="<?= Yii::$app->urlManager->createUrl(['order/add-subscriptions', 'date' => $date]); ?>">Importer toutes les commandes</a></li> | |||
</ul> | |||
</div> | |||
@@ -219,65 +210,65 @@ foreach ($produits as $p) { | |||
<!-- Nav tabs --> | |||
<ul id="tabs-points-vente" class="nav nav-tabs" role="tablist"> | |||
<?php foreach($points_vente as $pv): ?> | |||
<li role="presentation" class="<?php if($pv->point_fabrication): ?>active<?php endif; ?>"> | |||
<a href="#point-vente-<?= $pv->id ?>" id="btn-point-vente-<?= $pv->id ?>" aria-controls="point-vente-<?= $pv->id ?>" role="tab" data-toggle="tab"><?= Html::encode($pv->nom) ?> <span class="badge badge-<?php if(count($pv->commandes)): ?>success<?php else: ?>danger<?php endif; ?>"><?php echo count($pv->commandes); ?></span></a> | |||
<?php foreach($arrayPointsSale as $pointSale): ?> | |||
<li role="presentation" class="<?php if($pointSale->point_production): ?>active<?php endif; ?>"> | |||
<a href="#point-vente-<?= $pointSale->id ?>" id="btn-point-vente-<?= $pointSale->id ?>" aria-controls="point-sale-<?= $pointSale->id ?>" role="tab" data-toggle="tab"><?= Html::encode($pointSale->name) ?> <span class="badge badge-<?php if(count($pointSale->orders)): ?>success<?php else: ?>danger<?php endif; ?>"><?php echo count($pointSale->orders); ?></span></a> | |||
</li> | |||
<?php endforeach; ?> | |||
</ul> | |||
<!-- Tab panes --> | |||
<div class="tab-content" id="commandes-points-vente"> | |||
<?php foreach($points_vente as $pv): ?> | |||
<div role="tabpanel" data-id-pv="<?= $pv->id ?>" class="bloc-point-vente tab-pane <?php if($pv->point_fabrication): ?> active<?php endif; ?>" id="point-vente-<?= $pv->id ?>"> | |||
<?php foreach($arrayPointsSale as $pointSale): ?> | |||
<div role="tabpanel" data-id-pv="<?= $pointSale->id ?>" class="bloc-point-vente tab-pane <?php if($pointSale->point_production): ?> active<?php endif; ?>" id="point-vente-<?= $pointSale->id ?>"> | |||
<div class="col-md-12"> | |||
<div class="alert alert-warning recap-pv <?php if(!count($pv->commandes)): ?>no-commande<?php endif; ?>"> | |||
<?php if(count($pv->commandes)): ?> | |||
<strong class="commandes"><?= count($pv->commandes) ?> commande<?php if(count($pv->commandes) > 1): ?>s<?php endif; ?></strong> | |||
<span class="recettes"><?= number_format($pv->recettes, 2) ?> €</span> | |||
<div class="alert alert-warning recap-pv <?php if(!count($pointSale->orders)): ?>no-order<?php endif; ?>"> | |||
<?php if(count($pointSale->orders)): ?> | |||
<strong class="commandes"><?= count($pointSale->orders) ?> commande<?php if(count($pointSale->orders) > 1): ?>s<?php endif; ?></strong> | |||
<span class="recettes"><?= number_format($pointSale->revenues, 2) ?> €</span> | |||
<?php else: ?> | |||
<strong class="commandes">Aucune commande</strong> | |||
<span class="recettes"></span> | |||
<?php endif; ?> | |||
</div> | |||
<ul class="liste-commandes btn-group-vertical<?php if(!count($pv->commandes)): ?> no-commande<?php endif; ?>"> | |||
<?php foreach($pv->commandes as $c): ?> | |||
<ul class="liste-commandes btn-group-vertical<?php if(!count($pointSale->orders)): ?> no-order<?php endif; ?>"> | |||
<?php foreach($pointSale->orders as $order): ?> | |||
<li> | |||
<a href="javascript:void(0);" class="btn btn-default" data-pv-id="<?= $pv->id ?>" data-id-commande="<?= $c->id ?>" data-commande='<?= $pv->data_options_commandes[$c->id]['data-commande'] ?>' data-commentaire="<?= Html::encode($c->commentaire) ?>" data-date="<?= date('d/m à H:i',strtotime($c->date)); ?>"> | |||
<span class="montant <?php if(number_format($c->montant_paye,2) >= number_format($c->montant,2)): ?>paye<?php endif; ?>"> | |||
<?= Html::encode(number_format($c->montant, 2)); ?> € | |||
<?php if($c->montant_paye - $c->montant > 0.01): ?><span class="glyphicon glyphicon-warning-sign"></span><?php endif; ?> | |||
<a href="javascript:void(0);" class="btn btn-default" data-pv-id="<?= $pointSale->id ?>" data-id-commande="<?= $order->id ?>" data-commande='<?= $pointSale->data_options_orders[$order->id]['data-order'] ?>' data-commentaire="<?= Html::encode($order->comment) ?>" data-date="<?= date('d/m à H:i',strtotime($order->date)); ?>"> | |||
<span class="montant <?php if(number_format($order->paid_amount,2) >= number_format($order->amount,2)): ?>paye<?php endif; ?>"> | |||
<?= Html::encode(number_format($order->amount, 2)); ?> € | |||
<?php if($order->paid_amount - $order->amount > 0.01): ?><span class="glyphicon glyphicon-warning-sign"></span><?php endif; ?> | |||
</span> | |||
<span class="user"> | |||
<?php if($c->type): ?> | |||
<?php if($c->type == Commande::TYPE_ADMIN): ?> | |||
<?php if($order->origin): ?> | |||
<?php if($order->origin == Order::ORIGIN_ADMIN): ?> | |||
<span class="label label-warning">vous</span> | |||
<?php elseif($c->type == Commande::TYPE_AUTO): ?> | |||
<?php elseif($order->origin == Order::ORIGIN_AUTO): ?> | |||
<span class="label label-default">auto</span> | |||
<?php elseif($c->type == Commande::TYPE_USER): ?> | |||
<?php elseif($order->origin == Order::ORIGIN_USER): ?> | |||
<span class="label label-success">client</span> | |||
<?php endif; ?> | |||
<?php endif; ?> | |||
<?php if(isset($c->user)): ?> | |||
<?= Html::encode($c->user->nom.' '.$c->user->prenom); ?> | |||
<?php if(isset($order->user)): ?> | |||
<?= Html::encode($order->user->lastname.' '.$order->user->name); ?> | |||
<?php else: ?> | |||
<?= Html::encode($c->username); ?> | |||
<?= Html::encode($order->username); ?> | |||
<?php endif; ?> | |||
<?php if(!is_null($c->date_delete)): ?> | |||
<?php if(!is_null($order->date_delete)): ?> | |||
(<span class="glyphicon glyphicon-remove"></span> Annulée) | |||
<?php endif; ?> | |||
</span> | |||
<?php if (strlen($c->commentaire)): ?> | |||
<?php if (strlen($order->comment)): ?> | |||
<span class="glyphicon glyphicon-comment"></span> | |||
<?php endif; ?> | |||
</a> | |||
</li> | |||
<?php endforeach; ?> | |||
</ul> | |||
<?= Html::a('<span class="glyphicon glyphicon-plus"></span> Créer une commande', 'javascript:void(0);', ['class' => 'btn btn-default creer-commande', 'data-pv-id' => $pv->id]) ?> | |||
<?= Html::a('<span class="glyphicon glyphicon-plus"></span> Créer une commande', 'javascript:void(0);', ['class' => 'btn btn-default creer-commande', 'data-pv-id' => $pointSale->id]) ?> | |||
</div> | |||
<div class="col-md-12 bloc-commande"> | |||
@@ -292,21 +283,21 @@ foreach ($produits as $p) { | |||
</span> | |||
<span class="the-title"></span> | |||
<span class="choix-user"> | |||
<?= Html::activeDropDownList(new User, 'id', ArrayHelper::map(User::find()->joinWith('userEtablissement')->where('user_etablissement.id_etablissement = '.Yii::$app->user->identity->id_etablissement)->andWhere('user_etablissement.actif = 1')->orderBy('user.nom ASC, user.prenom ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model['nom'].' '.$model['prenom']; | |||
<?= Html::activeDropDownList(new User, 'id', ArrayHelper::map(User::find()->joinWith('userProducer')->where('user_producer.id_producer = '.Producer::getId())->andWhere('user_producer.active = 1')->orderBy('user.lastname ASC, user.name ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model['lastname'].' '.$model['name']; | |||
}), ['prompt' => '--','class' => 'form-control user-id']) ?> | |||
OU <input type="text" class="form-control username" placeholder="Choisissez un nom" /> | |||
</span> | |||
</h2> | |||
<div class="commentaire alert alert-info"> | |||
</div> | |||
<textarea name="commentaire" class="form-control textarea-commentaire" placeholder="Commentaire"></textarea> | |||
<textarea name="comment" class="form-control textarea-commentaire" placeholder="Commentaire"></textarea> | |||
<table class="table table-bordered table-condensed tab-content table-produits"> | |||
<tbody> | |||
<?php foreach ($produits as $p): ?> | |||
<tr class="produit-<?= $p->id ?> <?php if(!$produits_selec[$p->id]['actif']): ?> disabled<?php endif; ?>" data-id-produit="<?= $p->id ?>"> | |||
<?php foreach ($arrayProducts as $p): ?> | |||
<tr class="produit-<?= $p->id ?> <?php if(!$selectedProducts[$p->id]['active']): ?> disabled<?php endif; ?>" data-id-produit="<?= $p->id ?>"> | |||
<td class="td-commande"></td> | |||
<td class="td-produit"><?php echo Html::encode($p->getLibelleAdmin()); ?></td> | |||
<td class="td-produit"><?php echo Html::encode($p->getStrWordingAdmin()); ?></td> | |||
</tr> | |||
<?php endforeach; ?> | |||
<tr class="tr-total"> |
@@ -36,24 +36,20 @@ pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use common\models\Commande ; | |||
use common\models\Order ; | |||
$num_jour_semaine = date('w', strtotime($date)); | |||
$arr_jour_semaine = [0 => 'dimanche', 1 => 'lundi', 2 => 'mardi', 3 => 'mercredi', 4 => 'jeudi', 5 => 'vendredi', 6 => 'samedi']; | |||
$champs_horaires_point_vente = 'horaires_' . $arr_jour_semaine[$num_jour_semaine]; | |||
$dayWeek = date('w', strtotime($date)); | |||
$dayWeekArray = [0 => 'sunday', 1 => 'monday', 2 => 'tuesday', 3 => 'wednesday', 4 => 'thursday', 5 => 'friday', 6 => 'saturday']; | |||
$fieldInfosPointSale = 'infos_' . $dayWeekArray[$dayWeek]; | |||
$html = '' ; | |||
// par point de vente | |||
foreach ($points_vente as $pv) { | |||
if (count($pv->commandes) && strlen($pv->$champs_horaires_point_vente)) { | |||
foreach ($pointsSaleArray as $pointSale) { | |||
if (count($pointSale->orders) && strlen($pointSale->$fieldInfosPointSale)) { | |||
$html .= '<h3>'.$pv->nom.'</h3>' ; | |||
$col_credit_pain = '' ; | |||
if($pv->credit_pain) { | |||
$col_credit_pain = '<th>Rappel crédit</th>' ; | |||
} | |||
$html .= '<h3>'.$pointSale->name.'</h3>' ; | |||
$colCredit = ($pointSale->credit) ? '<th>Rappel crédit</th>' : '' ; | |||
$html .= '<table class="table table-bordered">' | |||
. '<thead>' | |||
@@ -61,70 +57,70 @@ foreach ($points_vente as $pv) { | |||
. '<th>Client</th>' | |||
. '<th>Produits</th>' | |||
. '<th>Commentaire</th>' | |||
. $col_credit_pain | |||
. $colCredit | |||
. '<th>Montant</th>' | |||
. '</tr>' | |||
. '<tbody>'; | |||
foreach ($pv->commandes as $c) { | |||
foreach ($pointSale->orders as $order) { | |||
$html .= '<tr>' ; | |||
$str_user = ''; | |||
$strUser = ''; | |||
// username | |||
if ($c->user) { | |||
$str_user = $c->user->prenom . " " . $c->user->nom; //.' - '.date('d/m', strtotime($c->date)) ; | |||
if ($order->user) { | |||
$strUser = $order->user->name . " " . $order->user->lastname; | |||
} else { | |||
$str_user = $c->username; //.' - '.date('d/m', strtotime($c->date)) ; | |||
$strUser = $order->username; | |||
} | |||
if(strlen($c->commentaire_point_vente)) | |||
if(strlen($order->comment_point_sale)) | |||
{ | |||
$str_user .= '<br /><em>'.$c->commentaire_point_vente.'</em>' ; | |||
$strUser .= '<br /><em>'.$order->comment_point_sale.'</em>' ; | |||
} | |||
// téléphone | |||
if (isset($c->user) && strlen($c->user->telephone)) { | |||
$str_user .= '<br />' . $c->user->telephone . ''; | |||
if (isset($order->user) && strlen($order->user->phone)) { | |||
$strUser .= '<br />' . $order->user->phone . ''; | |||
} | |||
$html .= '<td>'.$str_user.'</td>'; | |||
$html .= '<td>'.$strUser.'</td>'; | |||
// produits | |||
$str_produits = ''; | |||
foreach ($produits as $p) { | |||
$strProducts = ''; | |||
foreach ($productsArray as $product) { | |||
$add = false; | |||
foreach ($c->commandeProduits as $cp) { | |||
if ($p->id == $cp->id_produit) { | |||
$str_produits .= $cp->quantite . ' ' . $p->nom . ', '; | |||
foreach ($order->productOrder as $productOrder) { | |||
if ($product->id == $productOrder->id_product) { | |||
$strProducts .= $productOrder->quantity . ' ' . $product->name . ', '; | |||
$add = true; | |||
} | |||
} | |||
} | |||
$html .= '<td>'.substr($str_produits, 0, strlen($str_produits) - 2).'</td>'; | |||
$html .= '<td>'.$c->commentaire.'</td>'; | |||
$html .= '<td>'.substr($strProducts, 0, strlen($strProducts) - 2).'</td>'; | |||
$html .= '<td>'.$order->comment.'</td>'; | |||
if($pv->credit_pain) { | |||
if($pointSale->credit) { | |||
$credit = '' ; | |||
if(isset($c->user) && isset($c->user->userEtablissement)) { | |||
$credit = number_format($c->user->userEtablissement[0]->credit,2).' €' ; | |||
if(isset($order->user) && isset($order->user->userProducer)) { | |||
$credit = number_format($order->user->userProducer[0]->credit,2).' €' ; | |||
} | |||
$html .= '<td>'.$credit.'</td>' ; | |||
} | |||
$html .= '<td><strong>'.number_format($c->montant, 2) . ' € '; | |||
$html .= '<td><strong>'.number_format($order->amount, 2) . ' € '; | |||
if($c->getStatutPaiement() == Commande::STATUT_PAYEE) | |||
if($order->getPaymentStatus() == Order::PAYMENT_PAID) | |||
{ | |||
$html .= '(payé)' ; | |||
} | |||
elseif($c->getStatutPaiement() == Commande::STATUT_IMPAYEE && $c->getMontantPaye()) | |||
elseif($order->getPaymentStatus() == Order::PAYMENT_UNPAID && $order->getAmount(Order::AMOUNT_PAID)) | |||
{ | |||
$html .= '(reste '.$c->getMontantRestant(true).' à payer)' ; | |||
$html .= '(reste '.$order->getAmount(Order::AMOUNT_REMAINING, true).' à payer)' ; | |||
} | |||
elseif($c->getStatutPaiement() == Commande::STATUT_SURPLUS) | |||
elseif($order->getPaymentStatus() == Order::PAYMENT_SURPLUS) | |||
{ | |||
$html .= '(surplus : '.$c->getMontantSurplus(true).' à rembourser)' ; | |||
$html .= '(surplus : '.$order->getAmount(Order::PAYMENT_SURPLUS, true).' à rembourser)' ; | |||
} | |||
$html .= '</strong></td>' ; | |||
@@ -135,25 +131,23 @@ foreach ($points_vente as $pv) { | |||
$html .= '<tr><td><strong>Total</strong></td>' ; | |||
$str_produits = ''; | |||
foreach ($produits as $p) { | |||
if (!$p->vrac) { | |||
$quantite = Commande::getQuantiteProduit($p->id, $pv->commandes); | |||
$str_quantite = ''; | |||
if ($quantite) { | |||
$str_quantite = $quantite; | |||
$str_produits .= $str_quantite .' '. $p->nom . ', '; | |||
} | |||
$strProducts = ''; | |||
foreach ($productsArray as $product) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders); | |||
$strQuantity = ''; | |||
if ($quantity) { | |||
$strQuantity = $quantity; | |||
$strProducts .= $strQuantity .' '. $product->name . ', '; | |||
} | |||
} | |||
$str_produits = substr($str_produits, 0, strlen($str_produits) - 2) ; | |||
$strProducts = substr($strProducts, 0, strlen($strProducts) - 2) ; | |||
$html .= '<td>'.$str_produits.'</td><td></td>' ; | |||
if($pv->credit_pain) { | |||
$html .= '<td>'.$strProducts.'</td><td></td>' ; | |||
if($pointSale->credit) { | |||
$html .= '<td></td>' ; | |||
} | |||
$html .= '<td><strong>'.number_format($pv->recettes, 2) . ' €</strong></td>'; | |||
$html .= '<td><strong>'.number_format($pointSale->revenues, 2) . ' €</strong></td>'; | |||
$html .= '</tbody></table><pagebreak>' ; | |||
} | |||
@@ -170,43 +164,41 @@ $html .= '<table class="table table-bordered">' | |||
. '</tr>' | |||
. '<tbody>'; | |||
$recettes = 0 ; | |||
foreach ($points_vente as $pv) | |||
$revenues = 0 ; | |||
foreach ($pointsSaleArray as $pointSale) | |||
{ | |||
if (count($pv->commandes) && strlen($pv->$champs_horaires_point_vente)) | |||
if (count($pointSale->orders) && strlen($pointSale->$fieldInfosPointSale)) | |||
{ | |||
$html .= '<tr><td>'.$pv->nom.'</td><td>' ; | |||
foreach ($produits as $p) { | |||
$quantite = Commande::getQuantiteProduit($p->id, $pv->commandes); | |||
$str_quantite = ''; | |||
if (!$p->vrac) { | |||
if ($quantite) | |||
$str_quantite = $quantite; | |||
$html .= '<tr><td>'.$pointSale->name.'</td><td>' ; | |||
foreach ($productsArray as $product) { | |||
$quantity = Order::getProductQuantity($product->id, $pointSale->orders); | |||
$strQuantity = ($quantity) ? $quantity : '' ; | |||
if(strlen($strQuantity)) { | |||
$html .= $strQuantity . ' '.$product->name.', ' ; | |||
} | |||
if(strlen($str_quantite)) | |||
$html .= $str_quantite . ' '.$p->nom.', ' ; | |||
} | |||
$html = substr($html, 0, strlen($html) - 2) ; | |||
$html .= '</td><td>'.number_format($pv->recettes, 2).' €</td></tr>' ; | |||
$recettes += $pv->recettes ; | |||
$html .= '</td><td>'.number_format($pointSale->revenues, 2).' €</td></tr>' ; | |||
$revenues += $pointSale->revenues ; | |||
} | |||
} | |||
// total | |||
$html .= '<tr><td><strong>Total</strong></td><td>' ; | |||
foreach ($produits as $p) { | |||
$quantite = Commande::getQuantiteProduit($p->id, $commandes); | |||
if(!$p->vrac && $quantite) | |||
$html .= $quantite . ' '.$p->nom.', ' ; | |||
foreach ($productsArray as $product) { | |||
$quantity = Order::getProductQuantity($product->id, $ordersArray); | |||
if($quantity) { | |||
$html .= $quantity . ' '.$product->name.', ' ; | |||
} | |||
} | |||
$html = substr($html, 0, strlen($html) - 2) ; | |||
$html .= '</td><td><strong>'.number_format($recettes, 2).' €</strong></td></tr>' ; | |||
$html .= '</td><td><strong>'.number_format($revenues, 2).' €</strong></td></tr>' ; | |||
$html .= '</tbody></table>' ; | |||
@@ -1,51 +0,0 @@ | |||
<?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 common\models\Etablissement ; | |||
/* | |||
* To change this license header, choose License Headers in Project Properties. | |||
* To change this template file, choose Tools | Templates | |||
* and open the template in the editor. | |||
*/ | |||
$this->title = 'Paiement'; | |||
?> | |||
<h1>Paiement</h1> |
@@ -1,42 +0,0 @@ | |||
<?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. | |||
*/ | |||
?> | |||
<h1>Paiement validé</h1> | |||
@@ -39,60 +39,60 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use yii\helpers\ArrayHelper ; | |||
use common\models\Etablissement ; | |||
use common\models\Producer ; | |||
/* @var $this yii\web\View */ | |||
/* @var $model backend\models\PointVente */ | |||
/* @var $form yii\widgets\ActiveForm */ | |||
?> | |||
<div class="point-vente-form"> | |||
<div class="point-sale-form"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<div class="col-md-8"> | |||
<?= $form->field($model, 'nom')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'localite')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'adresse')->textarea(['rows' => 6]) ?> | |||
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'locality')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'address')->textarea(['rows' => 6]) ?> | |||
<?= $form->field($model, 'point_fabrication') | |||
<?= $form->field($model, 'point_production') | |||
->checkbox() | |||
->hint('Cochez cette case si ce point de vente correspond à votre lieu de production.') ?> | |||
<?php | |||
$add_hint_credit_pain = '' ; | |||
if(!Etablissement::getConfig('credit_pain')): | |||
$add_hint_credit_pain = '<br /><strong>Attention, le système de Crédit Pain est désactivé au niveau des '.Html::a('paramètres globaux',['etablissement/update']).'.</strong>' ; | |||
$addHintCredit = '' ; | |||
if(!Producer::getConfig('credit')): | |||
$addHintCredit = '<br /><strong>Attention, le système de Crédit est désactivé au niveau des '.Html::a('paramètres globaux',['producer/update']).'.</strong>' ; | |||
endif; | |||
echo $form->field($model, 'credit_pain') | |||
echo $form->field($model, 'credit') | |||
->checkbox() | |||
->hint('Cochez cette case si le client peut régler ses commandes via son compte Crédit Pain pour ce point de vente.' | |||
.$add_hint_credit_pain); | |||
.$addHintCredit); | |||
?> | |||
<div id="jours-livraison"> | |||
<div id="delivery-days"> | |||
<h2>Jours de livraison</h2> | |||
<?= $form->field($model, 'livraison_lundi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_mardi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_mercredi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_jeudi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_vendredi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_samedi')->checkbox() ?> | |||
<?= $form->field($model, 'livraison_dimanche')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_monday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_tuesday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_wednesday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_thursday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_friday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_saturday')->checkbox() ?> | |||
<?= $form->field($model, 'delivery_sunday')->checkbox() ?> | |||
</div> | |||
<div class="clr"></div> | |||
<h2>Informations</h2> | |||
<?= $form->field($model, 'horaires_lundi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_mardi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_mercredi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_jeudi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_vendredi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_samedi')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'horaires_dimanche')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_monday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_tuesday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_wednesday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_thursday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_friday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_saturday')->textarea(['rows' => 3]) ?> | |||
<?= $form->field($model, 'infos_sunday')->textarea(['rows' => 3]) ?> | |||
</div> | |||
<div class="col-md-4"> | |||
@@ -102,20 +102,20 @@ use common\models\Etablissement ; | |||
?> | |||
<?= $form->field($model, 'acces_restreint') | |||
<?= $form->field($model, 'restricted_access') | |||
->checkbox() | |||
->hint('Cochez cette case si seulement un groupe restreint d\'utilisateurs peuvent accéder à ce point de vente.<br />' | |||
. 'Dans le cas des boîtes à pain, il vous est possible de spécifier un commentaire pour chaque utilisateur sélectionné afin de lui renseigner son numéro de boîte ou son code.') ?> | |||
<div id="users"> | |||
<?= Html::activeCheckboxList($model, 'users', ArrayHelper::map($users, 'user_id', function($model_user, $defaultValue) use ($model) { | |||
return Html::encode($model_user['nom'].' '.$model_user['prenom']).'<br />' | |||
return Html::encode($model_user['lastname'].' '.$model_user['name']).'<br />' | |||
.Html::activeTextInput( | |||
$model, | |||
'users_commentaire['.$model_user['user_id'].']', | |||
'users_comment['.$model_user['user_id'].']', | |||
[ | |||
'class' => 'form-control commentaire', | |||
'placeholder' => 'Commentaire', | |||
'value' => (isset($model->users_commentaire[$model_user['user_id']])) ? Html::encode($model->users_commentaire[$model_user['user_id']]) : '' | |||
'value' => (isset($model->users_comment[$model_user['user_id']])) ? Html::encode($model->users_comment[$model_user['user_id']]) : '' | |||
]); | |||
} ), ['encode' => false, 'class' => '']) ?> | |||
</div> |
@@ -46,7 +46,7 @@ $this->title = 'Ajouter un point de vente'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Points de vente', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = 'Ajouter'; | |||
?> | |||
<div class="point-vente-create"> | |||
<div class="point-sale-create"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -46,20 +46,20 @@ use common\models\PointVenteUser ; | |||
$this->title = 'Points de vente'; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="point-vente-index"> | |||
<div class="point-sale-index"> | |||
<h1><?= Html::encode($this->title) ?> <?= Html::a('Ajouter', ['create'], ['class' => 'btn btn-success']) ?></h1> | |||
<?= GridView::widget([ | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
'nom', | |||
'localite', | |||
'name', | |||
'locality', | |||
[ | |||
'attribute' => 'point_fabrication', | |||
'attribute' => 'point_production', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->point_fabrication) | |||
if($model->point_production) | |||
{ | |||
return '<span class="label label-success">Oui</span>' ; | |||
} | |||
@@ -72,16 +72,16 @@ $this->params['breadcrumbs'][] = $this->title; | |||
[ | |||
'label' => 'Livraison', | |||
'value' => function($model) { | |||
return $model->strJoursLivraison() ; | |||
return $model->getStrDeliveryDays() ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'acces_restreint', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$count = PointVenteUser::find()->where(['id_point_vente' => $model->id])->count(); | |||
$count = UserPointSale::find()->where(['id_point_sale' => $model->id])->count(); | |||
$html = '' ; | |||
if($model->acces_restreint) | |||
if($model->restricted_access) | |||
{ | |||
$html .= '<span class="glyphicon glyphicon-lock"></span> ' ; | |||
if($count == 1) | |||
@@ -104,12 +104,14 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'credit_pain', | |||
'label' => 'Crédit pain', | |||
'attribute' => 'credit', | |||
'label' => 'Crédit', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->credit_pain) | |||
if($model->credit) { | |||
return '<span class="glyphicon glyphicon-euro"></span>' ; | |||
} | |||
return '' ; | |||
} | |||
], |
@@ -43,10 +43,10 @@ use yii\helpers\Html; | |||
$this->title = 'Modifier un point de vente'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Points de vente', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($model->nom), 'url' => ['update', 'id' => $model->id]]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($model->name), 'url' => ['update', 'id' => $model->id]]; | |||
$this->params['breadcrumbs'][] = 'Modifier'; | |||
?> | |||
<div class="point-vente-update"> | |||
<div class="point-sale-update"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -57,26 +57,26 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'label' => 'Référence', | |||
], | |||
[ | |||
'attribute' => 'id_etablissement', | |||
'label' => 'Établissement', | |||
'attribute' => 'id_producer', | |||
'label' => 'Producteur', | |||
'value' => function($model) { | |||
return Html::encode($model->etablissement->nom) ; | |||
return Html::encode($model->producer->name) ; | |||
} | |||
], | |||
'libelle', | |||
[ | |||
'attribute' => 'montant_ht', | |||
'attribute' => 'amount_ht', | |||
'label' => 'Montant', | |||
'value' => function($model) { | |||
return number_format($model->montant_ht,2).' €' ; | |||
return number_format($model->amount_ht,2).' €' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'paye', | |||
'attribute' => 'paid', | |||
'label' => 'Payé', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->paye) | |||
if($model->paid) | |||
{ | |||
return '<span class="label label-success">Oui</span>' ; | |||
} |
@@ -39,7 +39,7 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Etablissement ; | |||
use common\models\Producer ; | |||
$this->title = 'Producteurs'; | |||
$this->params['breadcrumbs'][] = 'Administration' ; | |||
@@ -50,9 +50,9 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<h1>Producteurs</h1> | |||
<?= GridView::widget([ | |||
'dataProvider' => $datas_etablissements, | |||
'dataProvider' => $dataProviderProducer, | |||
'columns' => [ | |||
'nom', | |||
'name', | |||
[ | |||
'attribute' => 'date_creation', | |||
'format' => 'raw', | |||
@@ -64,22 +64,23 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'attribute' => 'Lieu', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return Html::encode($model->ville.' ('.$model->code_postal.')') ; | |||
return Html::encode($model->city.' ('.$model->postcode.')') ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Clients', | |||
'attribute' => 'Utilisateurs', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(!$model->userEtablissement || !count($model->userEtablissement)) | |||
if(!$model->userProducer || !count($model->userProducer)) | |||
{ | |||
return 'Aucun client' ; | |||
return 'Aucun utilisateur' ; | |||
} | |||
else { | |||
$clients = count($model->userEtablissement).' client' ; | |||
if(count($model->userEtablissement) > 1) | |||
$clients .= 's' ; | |||
return $clients ; | |||
$users = count($model->userProducer).' client' ; | |||
if(count($model->userProducer) > 1) { | |||
$users .= 's' ; | |||
} | |||
return $users ; | |||
} | |||
} | |||
@@ -95,11 +96,11 @@ $this->params['breadcrumbs'][] = $this->title; | |||
else { | |||
foreach($model->user as $u) | |||
{ | |||
if($u->status == User::STATUS_BOULANGER) | |||
if($u->status == User::STATUS_PRODUCER) | |||
{ | |||
return Html::encode($u->prenom.' '.$u->nom) | |||
return Html::encode($u->lastname.' '.$u->name) | |||
.'<br />'.Html::encode($u->email) | |||
.'<br />'.Html::encode($u->telephone) ; | |||
.'<br />'.Html::encode($u->phone) ; | |||
} | |||
} | |||
@@ -107,15 +108,17 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'actif', | |||
'attribute' => 'active', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$html = '' ; | |||
if($model->actif) | |||
if($model->active) { | |||
$html .= '<span class="label label-success">En ligne</span>' ; | |||
else | |||
} | |||
else { | |||
$html .= '<span class="label label-danger">Hors-ligne</span>' ; | |||
} | |||
if(strlen($model->code)) | |||
{ | |||
$html .= ' <span class="glyphicon glyphicon-lock" data-toggle="tooltip" data-placement="bottom" data-original-title="'.Html::encode($model->code).'"></span>' ; | |||
@@ -124,25 +127,18 @@ $this->params['breadcrumbs'][] = $this->title; | |||
return $html ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Gratuit', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->gratuit) | |||
return '<span class="label label-success">Compte gratuit</span>' ; | |||
else | |||
return '' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'Prix libre', | |||
'label' => 'Prix libre', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if(is_null($model->prix_libre)) | |||
if(is_null($model->free_price)) { | |||
return '' ; | |||
else | |||
return $model->getPrixLibre() ; | |||
} | |||
else { | |||
return $model->getFreePrice() ; | |||
} | |||
} | |||
], | |||
[ | |||
@@ -150,13 +146,8 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'label' => 'CA mois en cours', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$ca = $model->getCA(date('Y-m')) ; | |||
$html = '' ; | |||
$html .= 'CA : '.number_format($ca,2).' €<br />' ; | |||
return $html ; | |||
$turnover = $model->getTurnover(date('Y-m')) ; | |||
return 'CA : '.number_format($turnover,2).' €<br />' ; | |||
} | |||
], | |||
], |
@@ -39,7 +39,7 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Etablissement ; | |||
use common\models\Producer ; | |||
use yii\bootstrap\ActiveForm; | |||
$this->title = 'Mon abonnement'; | |||
@@ -55,21 +55,18 @@ $this->params['breadcrumbs'][] = $this->title; | |||
C'est pourquoi le modèle économique est basé sur un prix libre facturé mensuellement.<br /> | |||
</p> | |||
<div id="estimation-facture" class=""> | |||
<div id="free-price" class=""> | |||
<?php if($alert_prix_libre): ?> | |||
<?php if($alertFreePrice): ?> | |||
<div class="alert alert-success"> | |||
Le montant de votre abonnement a bien été mis à jour. | |||
<?php if($etablissement->prix_libre != 0): ?> | |||
Vos prochaines factures mensuelles auront un montant de <strong><?= number_format(Html::encode($etablissement->prix_libre),2).' € HT' ; ?></strong>. | |||
<?php if($producer->free_price != 0): ?> | |||
Vos prochaines factures mensuelles auront un montant de <strong><?= number_format(Html::encode($producer->free_price),2).' € HT' ; ?></strong>. | |||
<?php endif; ?> | |||
</div> | |||
<?php endif; ?> | |||
<?php $form = ActiveForm::begin([ | |||
//'layout' => 'vertical', | |||
'fieldConfig' => [ | |||
'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}", | |||
'horizontalCssClasses' => [ | |||
@@ -78,13 +75,12 @@ $this->params['breadcrumbs'][] = $this->title; | |||
], | |||
]); ?> | |||
<?= $form->field($etablissement, 'prix_libre',[ | |||
<?= $form->field($producer, 'free_price',[ | |||
'inputTemplate' => '<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span> HT / mois</span></div>', | |||
]) | |||
->label('Prix libre'); ?> | |||
<div class="form-group field-user-prix_libre"> | |||
<label class="control-label col-sm-2" for=""></label> | |||
<div class="col-sm-6"> | |||
<?= Html::submitButton('Valider', ['class' => 'btn btn-primary']) ?> | |||
</div> | |||
@@ -92,47 +88,4 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<?php ActiveForm::end(); ?> | |||
<div class="clr"></div> | |||
</div> | |||
<!-- | |||
<h2>Dernières factures</h2> | |||
<?= GridView::widget([ | |||
'dataProvider' => $datas_factures, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'reference', | |||
'label' => 'Référence', | |||
], | |||
[ | |||
'attribute' => 'date', | |||
'value' => function($model) { | |||
return date('d/m/Y', strtotime($model->date)) ; | |||
} | |||
], | |||
'libelle', | |||
[ | |||
'attribute' => 'montant_ht', | |||
'label' => 'Montant', | |||
'value' => function($model) { | |||
return number_format($model->montant_ht,2).' €' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'paye', | |||
'label' => 'Payé', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->paye) | |||
{ | |||
return '<span class="label label-success">Oui</span>' ; | |||
} | |||
else { | |||
return '<span class="label label-danger">Non</span>' ; | |||
} | |||
} | |||
] | |||
], | |||
]); ?> | |||
--> | |||
</div> |
@@ -51,26 +51,26 @@ $this->params['breadcrumbs'][] = 'Paramètres'; | |||
<div class="user-form"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<div class=""> | |||
<?= $form->field($model, 'actif') | |||
<?= $form->field($model, 'active') | |||
->dropDownList([ | |||
0 => 'Non', | |||
1 => 'Oui' | |||
], []) | |||
->label('Activer le producteur') | |||
->hint('Activez cette option pour rendre votre établissement visible à vos clients.') ; ?> | |||
<?= $form->field($model, 'nom') ?> | |||
<?= $form->field($model, 'name') ?> | |||
<?= $form->field($model, 'type') ?> | |||
<?= $form->field($model, 'description') | |||
->textarea(['rows' => 6]) | |||
->hint('Affiché sur la page d\'accueil') ?> | |||
<?= $form->field($model, 'code_postal') ?> | |||
<?= $form->field($model, 'ville') ?> | |||
<?= $form->field($model, 'postcode') ?> | |||
<?= $form->field($model, 'city') ?> | |||
<?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre boutique par un code, sinon laissez-le vide.<br />" | |||
. "Ce code est à communiquer à vos client pour qu'ils puissent ajouter votre établissement à leur tableau de bord.<br />" | |||
. "<a href=\"".Yii::$app->urlManager->createUrl(['communiquer/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?> | |||
. "<a href=\"".Yii::$app->urlManager->createUrl(['communicate/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?> | |||
<?= $form->field($model, 'delai_commande') | |||
<?= $form->field($model, 'order_delay') | |||
->dropDownList([ | |||
1 => '1 jour', | |||
2 => '2 jours', | |||
@@ -82,7 +82,7 @@ $this->params['breadcrumbs'][] = 'Paramètres'; | |||
], []) | |||
->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />' | |||
. 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.') ; ?> | |||
<?= $form->field($model, 'heure_limite_commande') | |||
<?= $form->field($model, 'order_deadline') | |||
->dropDownList([ | |||
24 => 'Minuit', | |||
23 => '23h', | |||
@@ -106,15 +106,15 @@ $this->params['breadcrumbs'][] = 'Paramètres'; | |||
. 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.') ; ?> | |||
<?= $form->field($model, 'credit_pain') | |||
<?= $form->field($model, 'credit') | |||
->dropDownList([ | |||
0 => 'Non', | |||
1 => 'Oui', | |||
], []) | |||
->label('Activer le système de Crédit Pain') | |||
->hint('Le système de Crédit Pain permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />' | |||
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur compte Crédit Pain en ligne.<br />' | |||
. 'Ceci fait, les clients paient leur commande directement via leur compte Crédit Pain.') ; ?> | |||
->label('Activer le système de Crédit') | |||
->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />' | |||
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur Crédit en ligne.<br />' | |||
. 'Ceci fait, les clients paient leur commande directement via leur Crédit.') ; ?> | |||
<?= $form->field($model, 'photo')->fileInput() ?> | |||
<?php | |||
@@ -125,7 +125,7 @@ $this->params['breadcrumbs'][] = 'Paramètres'; | |||
} | |||
?> | |||
<?= $form->field($model, 'infos_commande') | |||
<?= $form->field($model, 'order_infos') | |||
->textarea(['rows' => 6]) | |||
->hint('Affichées au client lors de sa commande')?> | |||
@@ -44,51 +44,41 @@ use yii\widgets\ActiveForm; | |||
/* @var $form yii\widgets\ActiveForm */ | |||
?> | |||
<div class="produit-form"> | |||
<div class="product-form"> | |||
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> | |||
<?= $form->field($model, 'actif')->radioList([1 => 'Oui',0 => 'Non' ]) ?> | |||
<?= $form->field($model, 'nom')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'active')->radioList([1 => 'Oui',0 => 'Non' ]) ?> | |||
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'description')->textInput(['maxlength' => 255]) ?> | |||
<?= $form->field($model, 'recette')->textarea() ?> | |||
<?= $form->field($model, 'prix')->textInput() ?> | |||
<?= $form->field($model, 'poids')->textInput() ?> | |||
<?= $form->field($model, 'quantite_max') | |||
<?= $form->field($model, 'recipe')->textarea() ?> | |||
<?= $form->field($model, 'price')->textInput() ?> | |||
<?= $form->field($model, 'weight')->textInput() ?> | |||
<?= $form->field($model, 'quantity_max') | |||
->hint('Renseignez ce champs si vous souhaitez limiter la quantité commandable pour ce produit.') | |||
->textInput() ?> | |||
<?= $form->field($model, 'photo')->fileInput() ?> | |||
<?php | |||
if(strlen($model->photo)) { | |||
echo '<img src="../../frontend/web/uploads/'.$model->photo.'" width="200px" /><br />' ; | |||
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />' ; | |||
echo '<img src="'.Yii::$app->urlManagerProducer->getBaseUrl().'/uploads/'.$model->photo.'" width="200px" /><br />' ; | |||
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />' ; | |||
} | |||
?> | |||
<?php if(Yii::$app->user->identity->id_etablissement == 1): ?> | |||
<?= $form->field($model, 'illustration')->fileInput() ?> | |||
<?php | |||
if(strlen($model->illustration)) { | |||
echo '<img src="../../frontend/web/uploads/'.$model->illustration.'" width="200px" /><br />' ; | |||
echo '<input type="checkbox" name="delete_illustration" id="delete_illustration" /> <label for="delete_illustration">Supprimer l\'illustration</label><br /><br />' ; | |||
} | |||
?> | |||
<?php endif; ?> | |||
<h2>Jours de production</h2> | |||
<div id="jours-production"> | |||
<?= $form->field($model, 'lundi')->checkbox() ?> | |||
<?= $form->field($model, 'mardi')->checkbox() ?> | |||
<?= $form->field($model, 'mercredi')->checkbox() ?> | |||
<?= $form->field($model, 'jeudi')->checkbox() ?> | |||
<?= $form->field($model, 'vendredi')->checkbox() ?> | |||
<?= $form->field($model, 'samedi')->checkbox() ?> | |||
<?= $form->field($model, 'dimanche')->checkbox() ?> | |||
<div id="days-production"> | |||
<?= $form->field($model, 'monday')->checkbox() ?> | |||
<?= $form->field($model, 'tuesday')->checkbox() ?> | |||
<?= $form->field($model, 'wednesday')->checkbox() ?> | |||
<?= $form->field($model, 'thursday')->checkbox() ?> | |||
<?= $form->field($model, 'friday')->checkbox() ?> | |||
<?= $form->field($model, 'saturday')->checkbox() ?> | |||
<?= $form->field($model, 'sunday')->checkbox() ?> | |||
</div> | |||
<div class="clr"></div> | |||
<?= $form->field($model, 'id_etablissement')->hiddenInput()->label('') ?> | |||
<?= $form->field($model, 'id_producer')->hiddenInput()->label('') ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
@@ -46,7 +46,7 @@ $this->title = 'Ajouter un produit'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Produits', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = 'Ajouter'; | |||
?> | |||
<div class="produit-create"> | |||
<div class="product-create"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -46,7 +46,7 @@ use common\helpers\Url ; | |||
$this->title = 'Produits'; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="produit-index"> | |||
<div class="product-index"> | |||
<h1><?= Html::encode($this->title) ?> <?= Html::a('Ajouter', ['create'], ['class' => 'btn btn-success']) ?></h1> | |||
@@ -67,21 +67,21 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'headerOptions' => ['class' => 'td-photo'], | |||
'value' => function($model) { | |||
if(strlen($model->photo)) { | |||
$url = Url::frontend() ; | |||
return '<img class="photo-produit" src="'.$url.'uploads/'.$model->photo.'" />' ; | |||
$url = Yii::$app->urlManagerProducer->getBaseUrl() ; | |||
return '<img class="photo-product" src="'.$url.'/uploads/'.$model->photo.'" />' ; | |||
} | |||
return '' ; | |||
} | |||
], | |||
'nom', | |||
'name', | |||
'description', | |||
[ | |||
'attribute' => 'actif', | |||
'headerOptions' => ['class' => 'actif'], | |||
'attribute' => 'active', | |||
'headerOptions' => ['class' => 'active'], | |||
'contentOptions' => ['class' => 'center'], | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->actif) | |||
if($model->active) | |||
{ | |||
return '<span class="label label-success">oui</span>' ; | |||
} |
@@ -43,10 +43,10 @@ use yii\helpers\Html; | |||
$this->title = 'Modifier un produit'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Produits', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = ['label' => $model->nom, 'url' => ['update', 'id' => $model->id]]; | |||
$this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['update', 'id' => $model->id]]; | |||
$this->params['breadcrumbs'][] = 'Modifier'; | |||
?> | |||
<div class="produit-update"> | |||
<div class="product-update"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
@@ -39,10 +39,11 @@ termes. | |||
use yii\helpers\Html ; | |||
$this->title = 'Tableau de bord'; | |||
?> | |||
<div class="site-index"> | |||
<?php if(Yii::$app->request->get('erreur_produits_points_vente')): ?> | |||
<?php if(Yii::$app->request->get('error_products_points_sale')): ?> | |||
<div class="alert alert-danger">Vous devez saisir vos produits et vos points de vente | |||
avant d'initialiser vos jours de production.</div> | |||
<?php endif; ?> | |||
@@ -54,12 +55,12 @@ $this->title = 'Tableau de bord'; | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
Commandes | |||
<?= Html::a('Voir', ['commande/index'], ['class' => 'btn btn-default btn-xs']) ; ?> | |||
<?= Html::a('Voir', ['order/index'], ['class' => 'btn btn-default btn-xs']) ; ?> | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<?php if(count($productions)): ?> | |||
<p>Prochaines productions : </p> | |||
<?php if(count($distributionsArray)): ?> | |||
<p>Prochaines distributions : </p> | |||
<table class="table table-bordered table-condensed"> | |||
<thead> | |||
<tr> | |||
@@ -69,13 +70,13 @@ $this->title = 'Tableau de bord'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach($productions as $p): ?> | |||
<?php foreach($distributionsArray as $distribution): ?> | |||
<tr> | |||
<td><?= date('d/m/Y',strtotime($p['date'])); ?></td> | |||
<td><?= count($p->commande); ?></td> | |||
<td><?= date('d/m/Y',strtotime($distribution['date'])); ?></td> | |||
<td><?= count($distribution->order); ?></td> | |||
<td> | |||
<?= Html::a('<span class="glyphicon glyphicon-eye-open"></span>', ['commande/index','date' => $p['date']], ['class' => 'btn btn-default btn-xs']) ; ?> | |||
<?php if(count($p->commande)): ?><?= Html::a('<span class="glyphicon glyphicon-download-alt"></span>', ['commande/report','date' => $p['date'],'global' => 1], ['class' => 'btn btn-default btn-xs']) ; ?><?php endif; ?> | |||
<?= Html::a('<span class="glyphicon glyphicon-eye-open"></span>', ['order/index','date' => $distribution['date']], ['class' => 'btn btn-default btn-xs']) ; ?> | |||
<?php if(count($distribution->order)): ?><?= Html::a('<span class="glyphicon glyphicon-download-alt"></span>', ['order/report','date' => $distribution['date'],'global' => 1], ['class' => 'btn btn-default btn-xs']) ; ?><?php endif; ?> | |||
</td> | |||
</tr> | |||
<?php endforeach; ?> | |||
@@ -93,13 +94,13 @@ $this->title = 'Tableau de bord'; | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
<?= $nb_clients; ?> client<?php if($nb_clients > 1): ?>s<?php endif; ?> | |||
<?= $nbUsers; ?> client<?php if($nbUsers > 1): ?>s<?php endif; ?> | |||
<?= Html::a('Ajouter',['user/create'],['class' => 'btn btn-success btn-xs margin-left']) ; ?> | |||
<?= Html::a('Liste', ['user/index'], ['class' => 'btn btn-default btn-xs']) ; ?> | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<?php if($nb_clients): ?> | |||
<?php if($nbUsers): ?> | |||
<p>Dernières inscriptions :</p> | |||
<table class="table table-bordered table-condensed"> | |||
<thead> | |||
@@ -110,11 +111,11 @@ $this->title = 'Tableau de bord'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach($clients as $c): ?> | |||
<?php foreach($usersArray as $user): ?> | |||
<tr> | |||
<td><?= Html::encode($c['prenom'].' '.$c['nom']) ?></td> | |||
<td><?= date('d/m/Y', $c['created_at']); ?></td> | |||
<td><?= Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['user/update','id' => $c['user_id']], ['class' => 'btn btn-default btn-xs']) ; ?></td> | |||
<td><?= Html::encode($user['lastname'].' '.$user['name']) ?></td> | |||
<td><?= date('d/m/Y', $user['created_at']); ?></td> | |||
<td><?= Html::a('<span class="glyphicon glyphicon-pencil"></span>', ['user/update','id' => $user['user_id']], ['class' => 'btn btn-default btn-xs']) ; ?></td> | |||
</tr> | |||
<?php endforeach; ?> | |||
</tbody> | |||
@@ -127,7 +128,7 @@ $this->title = 'Tableau de bord'; | |||
</div> | |||
<!-- Clients crédit pain négatif --> | |||
<!-- Clients crédit négatif --> | |||
<div class=""> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
@@ -136,7 +137,7 @@ $this->title = 'Tableau de bord'; | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<?php if(count($clients_credit_pain_negatif)): ?> | |||
<?php if(count($usersNegativeCredit)): ?> | |||
<table class="table table-bordered table-condensed"> | |||
<thead> | |||
<tr> | |||
@@ -145,11 +146,11 @@ $this->title = 'Tableau de bord'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach($clients_credit_pain_negatif as $c): ?> | |||
<?php foreach($usersNegativeCredit as $user): ?> | |||
<tr> | |||
<td><?= Html::encode($c['prenom'].' '.$c['nom']) ?></td> | |||
<td><?= number_format($c['credit'],2) ?></td> | |||
<td><?= Html::a('<span class="glyphicon glyphicon-euro"></span>', ['user/credit','id' => $c['user_id']], ['class' => 'btn btn-default btn-xs']) ; ?></td> | |||
<td><?= Html::encode($user['lastname'].' '.$user['name']) ?></td> | |||
<td><?= number_format($user['credit'],2) ?></td> | |||
<td><?= Html::a('<span class="glyphicon glyphicon-euro"></span>', ['user/credit','id' => $user['user_id']], ['class' => 'btn btn-default btn-xs']) ; ?></td> | |||
</tr> | |||
<?php endforeach; ?> | |||
</tbody> | |||
@@ -167,7 +168,7 @@ $this->title = 'Tableau de bord'; | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
Paramètres | |||
<?= Html::a('Configurer',['etablissement/update'],['class' => 'btn btn-default btn-xs']) ; ?> | |||
<?= Html::a('Configurer',['producer/update'],['class' => 'btn btn-default btn-xs']) ; ?> | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
@@ -180,9 +181,9 @@ $this->title = 'Tableau de bord'; | |||
</thead> | |||
<tbody> | |||
<tr> | |||
<td>Établissement activé</td> | |||
<td>Producteur activé</td> | |||
<td> | |||
<?php if($etablissement->actif): ?> | |||
<?php if($producer->active): ?> | |||
<span class="label label-success">Active</span> | |||
<?php else: ?> | |||
<span class="label label-danger">Hors-ligne</span> | |||
@@ -190,11 +191,11 @@ $this->title = 'Tableau de bord'; | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>Établissement protégé par un code</td> | |||
<td>Producteur protégé par un code</td> | |||
<td> | |||
<?php if(strlen($etablissement->code)): ?> | |||
<?php if(strlen($producer->code)): ?> | |||
<span class="label label-success">Oui</span><br /> | |||
<strong><?= Html::encode($etablissement->code) ?></strong> | |||
<strong><?= Html::encode($producer->code) ?></strong> | |||
<?php else: ?> | |||
<span class="label label-danger">Non</span> | |||
<?php endif; ?> | |||
@@ -202,16 +203,16 @@ $this->title = 'Tableau de bord'; | |||
</tr> | |||
<tr> | |||
<td>Délai de commande</td> | |||
<td><?= $etablissement->delai_commande ?> jour<?php if($etablissement->delai_commande > 1): ?>s<?php endif; ?></td> | |||
<td><?= $producer->order_delay ?> jour<?php if($producer->order_delay > 1): ?>s<?php endif; ?></td> | |||
</tr> | |||
<tr> | |||
<td>Heure limite de commande</td> | |||
<td><?= $etablissement->heure_limite_commande ?>h</td> | |||
<td><?= $producer->order_deadline ?>h</td> | |||
</tr> | |||
<tr> | |||
<td>Système de Crédit Pain activé</td> | |||
<td>Système de Crédit activé</td> | |||
<td> | |||
<?php if($etablissement->credit_pain): ?> | |||
<?php if($producer->credit): ?> | |||
<span class="label label-success">Oui</span><br /> | |||
<?php else: ?> | |||
<span class="label label-danger">Non</span> | |||
@@ -225,36 +226,23 @@ $this->title = 'Tableau de bord'; | |||
</div> | |||
<!-- Mon abonnement --> | |||
<div class="" id="facturation"> | |||
<div class="" id="billing"> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
Mon abonnement | |||
<?= Html::a('Voir',['etablissement/facturation'],['class' => 'btn btn-default btn-xs']) ; ?> | |||
<?= Html::a('Voir',['producer/billing'],['class' => 'btn btn-default btn-xs']) ; ?> | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<div class="col-md-12"> | |||
<?php if(is_null($etablissement->prix_libre)): ?> | |||
<?php if(is_null($producer->free_price)): ?> | |||
<h2>Prix libre</h2> | |||
<p>Le modèle économique de <em>La boîte à pain</em> est basé sur un système de prix libre. <?= Html::a('En savoir plus',['etablissement/facturation']); ?></p> | |||
<p>Le modèle économique de <em>La boîte à pain</em> est basé sur un système de prix libre. <?= Html::a('En savoir plus',['producer/billing']); ?></p> | |||
<?php else: ?> | |||
<h2><?= $etablissement->getPrixLibre() ?> / mois <?= Html::a('Modifier',['etablissement/facturation'],['class' => 'btn btn-xs btn-primary']) ?></h2> | |||
<h2><?= $producer->getFreePrice() ?> / mois <?= Html::a('Modifier',['producer/billing'],['class' => 'btn btn-xs btn-primary']) ?></h2> | |||
<?php endif; ?> | |||
</div> | |||
<!--<div class="col-md-6 mois-en-cours"> | |||
<h2>Chiffre d'affaire<br />du mois en cours</h2> | |||
<div class="montant"><span><?= number_format($etablissement->getCA(date('Y-m')), 2); ?> €</span></div> | |||
</div> | |||
<div class="col-md-6"> | |||
<?php $montant = $etablissement->getMontantFacturer(date('Y-m'), 0); ?> | |||
<h2>Participation<br /><em>La boîte à pain</em> (2%)</h2> | |||
<div class="montant"><span><?php if($montant): echo number_format($montant,2).' €' ; else: echo 'Gratuit' ; endif; ?></span></div> | |||
</div> | |||
<div class="clr"></div>--> | |||
</div> | |||
</div> | |||
</div> | |||
@@ -263,7 +251,7 @@ $this->title = 'Tableau de bord'; | |||
<div class="col-md-8"> | |||
<!-- dernières commandes --> | |||
<div id="dernieres-commandes" class=""> | |||
<div id="last-orders" class=""> | |||
<div class="panel panel-default"> | |||
<div class="panel-heading"> | |||
<h3 class="panel-title"> | |||
@@ -271,7 +259,7 @@ $this->title = 'Tableau de bord'; | |||
</h3> | |||
</div> | |||
<div class="panel-body"> | |||
<?php if(count($commandes)): ?> | |||
<?php if(count($ordersArray)): ?> | |||
<table class="table table-condensed table-bordered"> | |||
<thead> | |||
<tr> | |||
@@ -285,23 +273,23 @@ $this->title = 'Tableau de bord'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach($commandes as $c): ?> | |||
<tr class="<?= $c->getClassHistorique() ; ?>"> | |||
<td class="infos"><?= $c->getStrType(true); ?></td> | |||
<?php foreach($ordersArray as $order): ?> | |||
<tr class="<?= $order->getClassHistory() ; ?>"> | |||
<td class="infos"><?= $order->getStrOrigin(true); ?></td> | |||
<td class="date"> | |||
<div class="bloc-date"> | |||
<div class="jour"><?= strftime('%A', strtotime($c->production->date)) ?></div> | |||
<div class="num"><?= date('d', strtotime($c->production->date)) ?></div> | |||
<div class="mois"><?= strftime('%B', strtotime($c->production->date)) ?></div> | |||
<div class="block-date"> | |||
<div class="day"><?= strftime('%A', strtotime($order->distribution->date)) ?></div> | |||
<div class="num"><?= date('d', strtotime($order->distribution->date)) ?></div> | |||
<div class="month"><?= strftime('%B', strtotime($order->distribution->date)) ?></div> | |||
</div> | |||
</td> | |||
<td> | |||
<?= $c->getStrUser(); ?><br /> | |||
<?= $order->getStrUser(); ?><br /> | |||
</td> | |||
<td class="historique"><?= $c->getStrHistorique() ; ?></td> | |||
<td><?= $c->getResumePanier() ; ?></td> | |||
<td><?= $c->getResumePointVente() ; ?></td> | |||
<td><?= $c->getMontant(true) ; ?></td> | |||
<td class="history"><?= $order->getStrHistory() ; ?></td> | |||
<td><?= $order->getCartSummary() ; ?></td> | |||
<td><?= $order->getPointSaleSummary() ; ?></td> | |||
<td><?= $order->getAmount(Order::AMOUNT_TOTAL, true) ; ?></td> | |||
</tr> | |||
<?php endforeach; ?> | |||
</tbody> | |||
@@ -312,9 +300,5 @@ $this->title = 'Tableau de bord'; | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -53,7 +53,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
<div class="col-lg-5"> | |||
<?php if(YII_ENV == 'demo') : ?> | |||
<div class="alert alert-warning"> | |||
Identifiant : <strong>boulanger@laboiteapain.net</strong><br /> | |||
Identifiant : <strong>producteur@laboiteapain.net</strong><br /> | |||
Mot de passe : <strong>laboiteapain</strong> | |||
</div> | |||
<?php endif; ?> |
@@ -53,7 +53,7 @@ $this->params['breadcrumbs'][] = 'Statistiques'; | |||
'width' => 1100 | |||
], | |||
'data' => [ | |||
'labels' => $data_labels, | |||
'labels' => $dataLabels, | |||
'datasets' => [ | |||
[ | |||
'label' => 'Recettes commandes', | |||
@@ -61,7 +61,7 @@ $this->params['breadcrumbs'][] = 'Statistiques'; | |||
'borderColor' => "rgb(187,135,87,1)", | |||
'pointBackgroundColor' => "rgb(187,135,87,1)", | |||
'pointStrokeColor' => "#fff", | |||
'data' => $data_pain | |||
'data' => $data | |||
] | |||
] | |||
] |
@@ -42,12 +42,12 @@ $this->title = 'Statistiques produits' ; | |||
$this->params['breadcrumbs'][] = 'Statistiques produits'; | |||
?> | |||
<div class="stats-produits"> | |||
<div class="stats-products"> | |||
<h1>Statistiques produits <?= $year ?> | |||
<div id="nav-year"> | |||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/produits','year' => $year - 1]); ?>">< <?= ($year - 1) ?></a> | |||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/produits','year' => $year + 1]); ?>"><?= ($year + 1) ?> ></a> | |||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/products','year' => $year - 1]); ?>">< <?= ($year - 1) ?></a> | |||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/products','year' => $year + 1]); ?>"><?= ($year + 1) ?> ></a> | |||
</div> | |||
</h1> | |||
@@ -55,12 +55,12 @@ $this->params['breadcrumbs'][] = 'Statistiques produits'; | |||
<div class="alert alert-warning">Aucune statistique disponible pour cette période</div> | |||
<?php else: ?> | |||
<table id="table-stats-produits" class="table table-bordered table-hover header-fixed"> | |||
<table id="table-stats-products" class="table table-bordered table-hover header-fixed"> | |||
<thead> | |||
<tr class="mois"> | |||
<th></th> | |||
<?php foreach($arr_mois as $m): ?> | |||
<th colspan="2"><?= $m; ?></th> | |||
<?php foreach($monthArray as $month): ?> | |||
<th colspan="2"><?= $month; ?></th> | |||
<?php endforeach; ?> | |||
</tr> | |||
<tr class="sub-head"> | |||
@@ -72,64 +72,67 @@ $this->params['breadcrumbs'][] = 'Statistiques produits'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php foreach($produits as $produit_current): ?> | |||
<?php foreach($productsArray as $currentProduct): ?> | |||
<tr> | |||
<td class="nom"><?= Html::encode($produit_current['nom']) ?></td> | |||
<?php foreach($arr_produits as $mois => $arr_produit_mois): | |||
$find_max = false ; | |||
$find_commandes = false ; | |||
<td class="name"><?= Html::encode($currentProduct['name']) ?></td> | |||
<?php foreach($dataProducts as $month => $productsMonthArray): | |||
$findMax = false ; | |||
$findOrders = false ; | |||
?> | |||
<?php if($mois != StatsController::TOTAUX): ?> | |||
<?php if($month != StatsController::TOTALS): ?> | |||
<!-- max --> | |||
<?php foreach($arr_produit_mois['max'] as $produit): | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / '.$arr_mois[$mois - 1] .' '. $year.' / Maximum"' ; | |||
<?php | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($currentProduct['name']).' / '.$monthArray[$month - 1] .' '. $year.' / Maximum"' ; | |||
foreach($productsMonthArray['max'] as $product): | |||
?> | |||
<?php if($produit['nom'] == $produit_current['nom']): | |||
$find_max = true ; | |||
<?php if($product['name'] == $currentProduct['name']): | |||
$findMax = true ; | |||
?> | |||
<td class="align-center"> | |||
<div <?= $tooltip; ?>><?= $produit['total'] ?></div> | |||
<div <?= $tooltip; ?>><?= $product['total'] ?></div> | |||
</td> | |||
<?php endif; ?> | |||
<?php endforeach; ?> | |||
<?php if(!$find_max): ?><td class="align-center"><div <?= $tooltip; ?>>0</div></td><?php endif; ?> | |||
<?php if(!$findMax): ?><td class="align-center"><div <?= $tooltip; ?>>0</div></td><?php endif; ?> | |||
<!-- commandes --> | |||
<?php foreach($arr_produit_mois['commandes'] as $produit): | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / '. $arr_mois[$mois - 1] . ' '. $year .' / Commandés"' ; | |||
<?php | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($currentProduct['name']).' / '. $monthArray[$month - 1] . ' '. $year .' / Commandés"' ; | |||
foreach($productsMonthArray['orders'] as $product): | |||
?> | |||
<?php if($produit['nom'] == $produit_current['nom']): | |||
$find_commandes = true ; | |||
<?php if($product['name'] == $currentProduct['name']): | |||
$findOrders = true ; | |||
?> | |||
<td class="align-center"> | |||
<div <?= $tooltip ?> ><?= $produit['total'] ?></div> | |||
<div <?= $tooltip ?> ><?= $product['total'] ?></div> | |||
</td> | |||
<?php endif; ?> | |||
<?php endforeach; ?> | |||
<?php if(!$find_commandes): ?><td class="align-center"><div <?= $tooltip ?> >0</div></td><?php endif; ?> | |||
<?php if(!$findOrders): ?><td class="align-center"><div <?= $tooltip ?> >0</div></td><?php endif; ?> | |||
<?php else: ?> | |||
<!-- totaux max --> | |||
<?php foreach($arr_produits[StatsController::TOTAUX]['max'] as $nom_produit => $total_max): | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / Total '. $year .' / Maximums"' ; | |||
<?php | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($currentProduct['name']).' / Total '. $year .' / Maximums"' ; | |||
foreach($dataProducts[StatsController::TOTALS]['max'] as $productName => $totalMax): | |||
?> | |||
<?php if($nom_produit == $produit_current['nom']): ?> | |||
<?php if($productName == $currentProduct['name']): ?> | |||
<td class="align-center"> | |||
<div <?= $tooltip ?> ><?= $total_max ?></div> | |||
<div <?= $tooltip ?> ><?= $totalMax ?></div> | |||
</td> | |||
<?php endif; ?> | |||
<?php endforeach; ?> | |||
<!-- totaux commandés --> | |||
<?php foreach($arr_produits[StatsController::TOTAUX]['commandes'] as $nom_produit => $total_commandes): | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / Total '. $year .' / Commandés"' ; | |||
<?php | |||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($currentProduct['name']).' / Total '. $year .' / Commandés"' ; | |||
foreach($dataProducts[StatsController::TOTALS]['orders'] as $productName => $totalOrders): | |||
?> | |||
<?php if($nom_produit == $produit_current['nom']): ?> | |||
<?php if($productName == $currentProduct['name']): ?> | |||
<td class="align-center"> | |||
<div <?= $tooltip ?> ><?= $total_commandes ?></div> | |||
<div <?= $tooltip ?> ><?= $totalOrders ?></div> | |||
</td> | |||
<?php endif; ?> | |||
<?php endforeach; ?> |
@@ -40,15 +40,15 @@ use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use yii\helpers\ArrayHelper ; | |||
use common\models\User ; | |||
use common\models\PointVente ; | |||
use common\models\PointSale ; | |||
?> | |||
<div class="commandeauto-form"> | |||
<div class="subscription-form"> | |||
<?php $form = ActiveForm::begin(['enableClientValidation' => false]); ?> | |||
<div class="col-md-5" id="bloc-select-user"> | |||
<?= $form->field($model, 'id_user')->dropDownList( ArrayHelper::map(User::find()->joinWith('userEtablissement')->where('user_etablissement.id_etablissement = '.Yii::$app->user->identity->id_etablissement)->andWhere('user_etablissement.actif = 1')->orderBy('nom ASC, prenom ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model['nom'].' '.$model['prenom']; | |||
<?= $form->field($model, 'id_user')->dropDownList( ArrayHelper::map(User::find()->joinWith('userProducer')->where('user_producer.id_producer = '.Producer::getId())->andWhere('user_producer.active = 1')->orderBy('lastname ASC, name ASC')->all(), 'id', function($model, $defaultValue) { | |||
return $model['lastname'].' '.$model['name']; | |||
}), ['prompt' => '--','class' => 'form-control user-id', ]) ?> | |||
</div> | |||
<div class="col-md-1" id="or-user"> | |||
@@ -59,47 +59,47 @@ use common\models\PointVente ; | |||
</div> | |||
<div class="clr"></div> | |||
<?= $form->field($model, 'id_etablissement')->hiddenInput() ?> | |||
<?= $form->field($model, 'id_point_vente')->dropDownList( ArrayHelper::map(PointVente::find()->where('id_etablissement = '.Yii::$app->user->identity->id_etablissement)->all(), 'id', function($model, $defaultValue) { | |||
return $model['nom']; | |||
<?= $form->field($model, 'id_producer')->hiddenInput() ?> | |||
<?= $form->field($model, 'id_point_sale')->dropDownList(ArrayHelper::map(PointSale::find()->where('id_producer = '.Producer::getId())->all(), 'id', function($model, $defaultValue) { | |||
return $model['name']; | |||
}), ['prompt' => '--','class' => 'form-control user-id']) ?> | |||
<?= $form->field($model, 'date_debut') ?> | |||
<?= $form->field($model, 'date_fin')->hint('Laisser vide pour une durée indéterminée') ?> | |||
<div class="jours"> | |||
<?= $form->field($model, 'date_begin') ?> | |||
<?= $form->field($model, 'date_end')->hint('Laisser vide pour une durée indéterminée') ?> | |||
<div class="days"> | |||
<h2>Jours</h2> | |||
<?= $form->field($model, 'lundi')->checkbox() ?> | |||
<?= $form->field($model, 'mardi')->checkbox() ?> | |||
<?= $form->field($model, 'mercredi')->checkbox() ?> | |||
<?= $form->field($model, 'jeudi')->checkbox() ?> | |||
<?= $form->field($model, 'vendredi')->checkbox() ?> | |||
<?= $form->field($model, 'samedi')->checkbox() ?> | |||
<?= $form->field($model, 'dimanche')->checkbox() ?> | |||
<?= $form->field($model, 'monday')->checkbox() ?> | |||
<?= $form->field($model, 'tuesday')->checkbox() ?> | |||
<?= $form->field($model, 'wednesday')->checkbox() ?> | |||
<?= $form->field($model, 'thursday')->checkbox() ?> | |||
<?= $form->field($model, 'friday')->checkbox() ?> | |||
<?= $form->field($model, 'saturday')->checkbox() ?> | |||
<?= $form->field($model, 'sunday')->checkbox() ?> | |||
</div> | |||
<div class="clr"></div> | |||
<?= $form->field($model, 'periodicite_semaine')->dropDownList([1=>1, 2=>2, 3=>3, 4=>4]) ?> | |||
<?= $form->field($model, 'week_frequency')->dropDownList([1=>1, 2=>2, 3=>3, 4=>4]) ?> | |||
<?= $form->field($model, 'paiement_automatique') | |||
<?= $form->field($model, 'auto_payment') | |||
->checkbox() | |||
->hint('Cochez cette case si vous souhaitez que le crédit pain du client soit automatiquement débité lors de la création de la commande.<br />' | |||
. 'Attention, un compte client existant doit être spécifié en haut de ce formulaire.') ?> | |||
<div class="produits"> | |||
<div class="products"> | |||
<h2>Produits</h2> | |||
<?php if(isset($model->errors['produits']) && count($model->errors['produits'])) | |||
<?php if(isset($model->errors['products']) && count($model->errors['products'])) | |||
{ | |||
echo '<div class="alert alert-danger">'.$model->errors['produits'][0].'</div>' ; | |||
echo '<div class="alert alert-danger">'.$model->errors['products'][0].'</div>' ; | |||
} | |||
?> | |||
<table class="table table-bordered table-condensed table-hover"> | |||
<?php foreach ($produits as $p) : ?> | |||
<?php foreach ($productsArray as $p) : ?> | |||
<tr> | |||
<td><?= Html::encode($p->nom) ?></td> | |||
<td><?= Html::encode($p->name) ?></td> | |||
<td> | |||
<div class="input-group"> | |||
<span class="input-group-btn"> | |||
<button class="btn btn-default btn-moins" type="button"><span class="glyphicon glyphicon-minus"></span></button> | |||
</span> | |||
<?= Html::input('text', 'CommandeAutoForm[produits][produit_'.$p->id.']', (isset($model->produits['produit_'.$p->id])) ? $model->produits['produit_'.$p->id] : '', ['class' => 'form-control quantite']) ?> | |||
<?= Html::input('text', 'SubscriptionForm[products][product_'.$p->id.']', (isset($model->products['product_'.$p->id])) ? $model->products['product_'.$p->id] : '', ['class' => 'form-control quantity']) ?> | |||
<span class="input-group-btn"> | |||
<button class="btn btn-default btn-plus" type="button"><span class="glyphicon glyphicon-plus"></span></button> | |||
</span> |
@@ -41,17 +41,17 @@ use yii\helpers\Html; | |||
/* @var $this yii\web\View */ | |||
/* @var $model app\models\Produit */ | |||
$this->title = 'Ajouter une commande automatique'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Commandes automatiques', 'url' => ['index']]; | |||
$this->title = 'Ajouter un abonnement'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Abonnements', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = 'Ajouter'; | |||
?> | |||
<div class="commandeauto-create"> | |||
<div class="subscription-create"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
'produits' => $produits | |||
'productsArray' => $productsArray | |||
]) ?> | |||
</div> |
@@ -42,10 +42,10 @@ use yii\grid\GridView; | |||
/* @var $this yii\web\View */ | |||
/* @var $dataProvider yii\data\ActiveDataProvider */ | |||
$this->title = 'Commandes récurrentes'; | |||
$this->title = 'Abonnements'; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="commande-auto-index"> | |||
<div class="subscription-index"> | |||
<h1><?= Html::encode($this->title) ?> <?= Html::a('Ajouter', ['create'], ['class' => 'btn btn-success']) ?></h1> | |||
@@ -61,30 +61,31 @@ $this->params['breadcrumbs'][] = $this->title; | |||
return Html::encode($model->username) ; | |||
} | |||
else { | |||
if(isset($model->user)) | |||
return Html::encode($model->user->nom.' '.$model->user->prenom) ; | |||
if(isset($model->user)) { | |||
return Html::encode($model->user->lastname.' '.$model->user->name) ; | |||
} | |||
} | |||
} | |||
], | |||
[ | |||
'attribute' => 'id_point_vente', | |||
'attribute' => 'id_point_sale', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return Html::encode($model->pointVente->nom) ; | |||
return Html::encode($model->pointSale->name) ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'produits', | |||
'attribute' => 'products', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$html = '' ; | |||
foreach($model->commandeAutoProduit as $commande_produit) | |||
foreach($model->productSubscription as $productSubscription) | |||
{ | |||
$html .= $commande_produit->quantite . ' x '.Html::encode($commande_produit->produit->nom).'<br />' ; | |||
$html .= $productSubscription->quantity . ' x '.Html::encode($productSubscription->product->name).'<br />' ; | |||
} | |||
// aucun produit | |||
if(!count($model->commandeAutoProduit)) | |||
if(!count($model->productSubscription)) | |||
{ | |||
$html .= '<span class="glyphicon glyphicon-warning-sign"></span> Aucun produit' ; | |||
} | |||
@@ -93,39 +94,39 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'date_debut', | |||
'attribute' => 'date_begin', | |||
'value' => function($model) { | |||
return date('d/m/Y',strtotime($model->date_debut)) ; | |||
return date('d/m/Y',strtotime($model->date_begin)) ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'date_fin', | |||
'attribute' => 'date_end', | |||
'value' => function($model) { | |||
if($model->date_fin) | |||
return date('d/m/Y',strtotime($model->date_fin)) ; | |||
if($model->date_end) | |||
return date('d/m/Y',strtotime($model->date_end)) ; | |||
else | |||
return 'indéterminée' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'lundi', | |||
'attribute' => 'monday', | |||
'label' => 'Jours', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
$html = '' ; | |||
if($model->lundi) | |||
if($model->monday) | |||
$html .= 'lundi, ' ; | |||
if($model->mardi) | |||
if($model->tuesday) | |||
$html .= 'mardi, ' ; | |||
if($model->mercredi) | |||
if($model->wednesday) | |||
$html .= 'mercredi, ' ; | |||
if($model->jeudi) | |||
if($model->thursday) | |||
$html .= 'jeudi, ' ; | |||
if($model->vendredi) | |||
if($model->friday) | |||
$html .= 'vendredi, ' ; | |||
if($model->samedi) | |||
if($model->saturday) | |||
$html .= 'samedi, ' ; | |||
if($model->dimanche) | |||
if($model->sunday) | |||
$html .= 'dimanche, ' ; | |||
if(strlen($html)) | |||
@@ -135,19 +136,19 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'periodicite_semaine', | |||
'attribute' => 'week_frequency', | |||
'value' => function($model) { | |||
if($model->periodicite_semaine == 1) | |||
if($model->week_frequency == 1) | |||
return 'Toutes les semaines' ; | |||
else | |||
return 'Toutes les '.$model->periodicite_semaine.' semaines' ; | |||
return 'Toutes les '.$model->week_frequency.' semaines' ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'paiement_automatique', | |||
'attribute' => 'auto_payment', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->paiement_automatique) | |||
if($model->auto_payment) | |||
return '<span class="label label-success">Oui</span>' ; | |||
else | |||
return '<span class="label label-danger">Non</span>' ; |
@@ -41,15 +41,15 @@ use yii\helpers\Html; | |||
/* @var $this yii\web\View */ | |||
/* @var $model app\models\Produit */ | |||
$this->title = 'Modifier une commande récurrente'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Commandes récurrentes', 'url' => ['index']]; | |||
$this->title = 'Modifier un abonnement'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Abonnements', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = 'Modifier'; | |||
?> | |||
<div class="commandeauto-update"> | |||
<div class="subscription-update"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
<?= $this->render('_form', [ | |||
'model' => $model, | |||
'produits' => $produits | |||
'productsArray' => $productsArray | |||
]) ?> | |||
</div> |
@@ -48,11 +48,11 @@ use yii\widgets\ActiveForm; | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($model, 'nom')->textInput() ?> | |||
<?= $form->field($model, 'prenom')->textInput() ?> | |||
<?= $form->field($model, 'telephone')->textInput() ?> | |||
<?= $form->field($model, 'lastname')->textInput() ?> | |||
<?= $form->field($model, 'name')->textInput() ?> | |||
<?= $form->field($model, 'phone')->textInput() ?> | |||
<?= $form->field($model, 'email')->textInput() ?> | |||
<?= $form->field($model, 'adresse')->textarea() ?> | |||
<?= $form->field($model, 'address')->textarea() ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> |
@@ -38,12 +38,12 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use common\models\CreditHistorique; | |||
use common\models\Etablissement; | |||
use common\models\CreditHistory; | |||
use common\models\Producer; | |||
$this->title = 'Créditer <small>'.Html::encode($user->nom.' '.$user->prenom).'</small>'; | |||
$this->title = 'Créditer <small>'.Html::encode($user->lastname.' '.$user->name).'</small>'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Clients', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($user->nom.' '.$user->prenom)]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($user->lastname.' '.$user->name)]; | |||
$this->params['breadcrumbs'][] = 'Créditer'; | |||
?> | |||
@@ -51,12 +51,13 @@ $this->params['breadcrumbs'][] = 'Créditer'; | |||
<div class="user-credit"> | |||
<?php | |||
$etablissement = Etablissement::find() | |||
->where(['id' => Yii::$app->user->identity->id_etablissement]) | |||
->one() ; | |||
if(!$etablissement->credit_pain) | |||
$producer = Producer::searchOne([ | |||
'id' => Producer::getId() | |||
]); | |||
if(!$producer->credit) | |||
{ | |||
echo '<div class="alert alert-warning">Attention, la fonctionnalité <strong>Crédit Pain</strong> est désactivée dans vos <a href="'.Yii::$app->urlManager->createurl(['etablissement/update']).'">paramètres</a>.' | |||
echo '<div class="alert alert-warning">Attention, la fonctionnalité <strong>Crédit</strong> est désactivée dans vos <a href="'.Yii::$app->urlManager->createurl(['producer/update']).'">paramètres</a>.' | |||
. ' Pensez à l\'activer si vous souhaitez qu\'elle soit visible de vos clients.</div>' ; | |||
} | |||
?> | |||
@@ -64,19 +65,19 @@ $this->params['breadcrumbs'][] = 'Créditer'; | |||
<div class="col-md-12"> | |||
<h1><?= $this->title ?></h1> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($credit_form, 'type')->dropDownList([ | |||
CreditHistorique::TYPE_CREDIT => 'Crédit', | |||
CreditHistorique::TYPE_DEBIT => 'Débit', | |||
<?= $form->field($creditForm, 'type')->dropDownList([ | |||
CreditHistory::TYPE_CREDIT => 'Crédit', | |||
CreditHistory::TYPE_DEBIT => 'Débit', | |||
]) ?> | |||
<?= $form->field($credit_form, 'montant')->textInput() ?> | |||
<?= $form->field($credit_form, 'moyen_paiement')->dropDownList([ | |||
CreditHistorique::MOYEN_ESPECES => 'Espèces', | |||
CreditHistorique::MOYEN_CB => 'Carte bancaire', | |||
CreditHistorique::MOYEN_CHEQUE => 'Chèque', | |||
CreditHistorique::MOYEN_AUTRE => 'Autre', | |||
<?= $form->field($creditForm, 'amount')->textInput() ?> | |||
<?= $form->field($creditForm, 'mean_payment')->dropDownList([ | |||
CreditHistory::MEAN_PAYMENT_MONEYS => CreditHistory::getStrMeanPaymentBy(CreditHistory::MEAN_PAYMENT_MONEYS), | |||
CreditHistory::MOYEN_CB => CreditHistory::getStrMeanPaymentBy(CreditHistory::MOYEN_CB), | |||
CreditHistory::MOYEN_CHEQUE => CreditHistory::getStrMeanPaymentBy(CreditHistory::MOYEN_CHEQUE), | |||
CreditHistory::MOYEN_AUTRE => CreditHistory::getStrMeanPaymentBy(CreditHistory::MOYEN_AUTRE), | |||
]) ?> | |||
<?= $form->field($credit_form, 'commentaire')->textarea() ?> | |||
<?= $form->field($credit_form, 'send_mail')->checkbox() ?> | |||
<?= $form->field($creditForm, 'comment')->textarea() ?> | |||
<?= $form->field($creditForm, 'sendMail')->checkbox() ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton( 'Créditer', ['class' => 'btn btn-primary']) ?> | |||
@@ -85,7 +86,7 @@ $this->params['breadcrumbs'][] = 'Créditer'; | |||
</div> | |||
<div class="col-md-12"> | |||
<h2>Historique <span class="the-credit"><?= number_format($user->getCredit($etablissement->id), 2); ?> €</span></h2> | |||
<h2>Historique <span class="the-credit"><?= number_format($user->getCredit($producer->id), 2); ?> €</span></h2> | |||
<table class="table table-bordered"> | |||
<thead> | |||
<tr> | |||
@@ -99,28 +100,28 @@ $this->params['breadcrumbs'][] = 'Créditer'; | |||
</tr> | |||
</thead> | |||
<tbody> | |||
<?php if(count($historique)): ?> | |||
<?php foreach($historique as $ch): ?> | |||
<?php if(count($history)): ?> | |||
<?php foreach($history as $creditHistory): ?> | |||
<tr> | |||
<td><?= $ch->getDate(true) ; ?></td> | |||
<td><?= Html::encode($ch->strUserAction()); ?></td> | |||
<td><?= $ch->getStrLibelle(); ?></td> | |||
<td><?= $creditHistory->getDate(true) ; ?></td> | |||
<td><?= Html::encode($creditHistory->strUserAction()); ?></td> | |||
<td><?= $creditHistory->getStrWording(); ?></td> | |||
<td> | |||
<?php if($ch->isTypeDebit()): ?> | |||
- <?= $ch->getMontant(true); ?> | |||
<?php if($creditHistory->isTypeDebit()): ?> | |||
- <?= $creditHistory->getAmount(true); ?> | |||
<?php endif; ?> | |||
</td> | |||
<td> | |||
<?php if($ch->isTypeCredit()): ?> | |||
+ <?= $ch->getMontant(true); ?> | |||
<?php if($creditHistory->isTypeCredit()): ?> | |||
+ <?= $creditHistory->getAmount(true); ?> | |||
<?php endif; ?> | |||
</td> | |||
<td> | |||
<?= $ch->getStrMoyenPaiement() ?> | |||
<?= $creditHistory->getStrMeanPayment() ?> | |||
</td> | |||
<td> | |||
<?php if(strlen($ch->commentaire)): ?> | |||
<?= nl2br($ch->commentaire) ; ?> | |||
<?php if(strlen($creditHistory->comment)): ?> | |||
<?= nl2br($creditHistory->comment) ; ?> | |||
<?php endif; ?> | |||
</td> | |||
</tr> |
@@ -39,24 +39,24 @@ termes. | |||
use yii\helpers\Html ; | |||
$this->title = 'Liste des emails'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Clients', | |||
$this->params['breadcrumbs'][] = ['label' => 'Utilisateurs', | |||
'url' => ['user/index']] ; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<h1><?php if(isset($point_vente) && $point_vente): echo Html::encode($point_vente->nom).' : '; endif; ?><?= count($users); ?> clients</h1> | |||
<h1><?php if(isset($pointSale) && $pointSale): echo Html::encode($pointSale->name).' : '; endif; ?><?= count($usersArray); ?> utilisateurs</h1> | |||
<ul id="tabs-points-vente" class="nav nav-tabs" role="tablist"> | |||
<li class="<?php if(!isset($point_vente)): ?>active<?php endif; ?>"> | |||
<ul id="tabs-points-sale" class="nav nav-tabs" role="tablist"> | |||
<li class="<?php if(!isset($pointSale)): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/mail']); ?>">Tous</a> | |||
</li> | |||
<?php foreach($points_vente as $pv): ?> | |||
<li class="<?php if(isset($point_vente) && $point_vente->id == $pv->id): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/mail','id_point_vente'=>$pv->id]); ?>"><?= Html::encode($pv->nom) ?></a> | |||
<?php foreach($pointsSaleArray as $pointSale): ?> | |||
<li class="<?php if(isset($pointSale) && $pointSale->id == $pointSale->id): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/mail','idPointSale'=>$pointSale->id]); ?>"><?= Html::encode($pointSale->name) ?></a> | |||
</li> | |||
<?php endforeach; ?> | |||
</ul> | |||
<?= implode(', ', $users); ?> | |||
<?= implode(', ', $usersArray); ?> | |||
@@ -39,12 +39,12 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\grid\GridView; | |||
use common\models\User ; | |||
use common\models\Commande ; | |||
use common\models\Order ; | |||
/* @var $this yii\web\View */ | |||
/* @var $dataProvider yii\data\ActiveDataProvider */ | |||
$this->title = 'Clients'; | |||
$this->title = 'Utilisateurs'; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
@@ -56,49 +56,49 @@ $this->params['breadcrumbs'][] = $this->title; | |||
</h1> | |||
<ul id="tabs-points-vente" class="nav nav-tabs" role="tablist"> | |||
<li class="<?php if(!$id_point_vente_active && !$section_clients_inactifs): ?>active<?php endif; ?>"> | |||
<li class="<?php if(!$idPointSaleActive && !$sectionInactiveUsers): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/index']); ?>">Tous</a> | |||
</li> | |||
<?php foreach($points_vente as $pv): ?> | |||
<li class="<?php if($id_point_vente_active == $pv->id): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/index','id_point_vente'=>$pv->id]); ?>"><?= Html::encode($pv->nom) ?></a> | |||
<?php foreach($pointsSaleArray as $pointSale): ?> | |||
<li class="<?php if($idPointSaleActive == $pointSale->id): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/index','idPointSale' => $pointSale->id]); ?>"><?= Html::encode($pointSale->name) ?></a> | |||
</li> | |||
<?php endforeach; ?> | |||
<li class="<?php if($section_clients_inactifs): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/index','section_clients_inactifs' => 1]); ?>">Inactifs</a> | |||
<li class="<?php if($sectionInactiveUsers): ?>active<?php endif; ?>"> | |||
<a href="<?= Yii::$app->urlManager->createUrl(['user/index','sectionInactiveUsers' => 1]); ?>">Inactifs</a> | |||
</li> | |||
</ul> | |||
<?= Html::a('<span class="glyphicon glyphicon-envelope"></span> Liste des emails', ['mail', 'id_point_vente' => $id_point_vente_active], ['class' => 'btn btn-default btn-liste-emails']) ?> | |||
<?= Html::a('<span class="glyphicon glyphicon-envelope"></span> Liste des emails', ['mail', 'idPointSale' => $idPointSaleActive], ['class' => 'btn btn-default btn-liste-emails']) ?> | |||
<?= GridView::widget([ | |||
'dataProvider' => $dataProvider, | |||
'filterModel' => true, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'nom', | |||
'attribute' => 'lastname', | |||
'filter' => Html::input( | |||
'string', | |||
'nom', | |||
isset(Yii::$app->request->queryParams['nom']) ? Html::encode(Yii::$app->request->queryParams['nom']) : '', | |||
'lastname', | |||
isset(Yii::$app->request->queryParams['lastname']) ? Html::encode(Yii::$app->request->queryParams['lastname']) : '', | |||
[ 'class' => 'form-control'] | |||
) | |||
], | |||
[ | |||
'attribute' => 'prenom', | |||
'attribute' => 'name', | |||
'filter' => Html::input( | |||
'string', | |||
'prenom', | |||
isset(Yii::$app->request->queryParams['prenom']) ? Html::encode(Yii::$app->request->queryParams['prenom']) : '', | |||
'name', | |||
isset(Yii::$app->request->queryParams['name']) ? Html::encode(Yii::$app->request->queryParams['name']) : '', | |||
['class' => 'form-control'] | |||
) | |||
], | |||
[ | |||
'attribute' => 'telephone', | |||
'attribute' => 'phone', | |||
'filter' => Html::input( | |||
'string', | |||
'telephone', | |||
isset(Yii::$app->request->queryParams['telephone']) ? Html::encode(Yii::$app->request->queryParams['telephone']) : '', | |||
'phone', | |||
isset(Yii::$app->request->queryParams['phone']) ? Html::encode(Yii::$app->request->queryParams['phone']) : '', | |||
['class' => 'form-control'] | |||
) | |||
], | |||
@@ -120,35 +120,31 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
], | |||
[ | |||
'attribute' => 'date_derniere_connexion', | |||
'attribute' => 'date_last_connection', | |||
'label' => 'Dernière connexion', | |||
'value' => function($model) { | |||
if(isset($model['date_derniere_connexion'])) | |||
return date('d/m/Y à H:i', strtotime($model['date_derniere_connexion'])); | |||
if(isset($model['date_last_connection'])) | |||
return date('d/m/Y à H:i', strtotime($model['date_last_connection'])); | |||
else | |||
return '' ; | |||
} | |||
], | |||
[ | |||
'class' => 'yii\grid\ActionColumn', | |||
'template' => '{commandes}', | |||
'template' => '{orders}', | |||
'headerOptions' => ['class' => 'actions'], | |||
'buttons' => [ | |||
'commandes' => function ($url, $model) { | |||
$url = Yii::$app->urlManager->createUrl(['user/commandes','id' => $model['user_id']]) ; | |||
$count_commandes = Commande::find() | |||
->joinWith('production') | |||
->where([ | |||
'id_user' => $model['user_id'], | |||
'production.id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->andWhere('date_delete IS NULL') | |||
->count() ; | |||
'orders' => function ($url, $model) { | |||
$url = Yii::$app->urlManager->createUrl(['user/orders','id' => $model['user_id']]) ; | |||
$countOrders = Order::searchCount([ | |||
'id_user' => $model['user_id'] | |||
], ['conditions' => 'date_delete IS NULL']) ; | |||
$html = '' ; | |||
if($count_commandes) | |||
{ | |||
if($countOrders) { | |||
$s = '' ; | |||
if($count_commandes > 1) $s = 's' ; | |||
$html .= Html::a('<span class="glyphicon glyphicon-eye-open"></span> '.$count_commandes.' commande'.$s, $url, [ | |||
if($countOrders > 1) $s = 's' ; | |||
$html .= Html::a('<span class="glyphicon glyphicon-eye-open"></span> '.$countOrders.' commande'.$s, $url, [ | |||
'title' => Yii::t('app', 'Commandes'), 'class' => 'btn btn-default ' | |||
]); ; | |||
} | |||
@@ -163,11 +159,11 @@ $this->params['breadcrumbs'][] = $this->title; | |||
[ | |||
'attribute' => 'credit', | |||
'format' => 'raw', | |||
'value' => function($model) use($etablissement) { | |||
'value' => function($model) use($producer) { | |||
if(!isset($model['credit'])) $model['credit'] = 0 ; | |||
$user = User::findOne($model['user_id']) ; | |||
$html = '<div class="input-group"> | |||
<input type="text" class="form-control input-credit" readonly="readonly" value="'.number_format($user->getCredit($etablissement->id),2).' €" placeholder=""> | |||
<input type="text" class="form-control input-credit" readonly="readonly" value="'.number_format($user->getCredit($producer->id),2).' €" placeholder=""> | |||
<span class="input-group-btn"> | |||
'.Html::a( | |||
'<span class="glyphicon glyphicon-euro"></span> Crédit', | |||
@@ -189,8 +185,8 @@ $this->params['breadcrumbs'][] = $this->title; | |||
'buttons' => [ | |||
'update' => function ($url, $model) { | |||
$url = Yii::$app->urlManager->createUrl(['user/update','id' => $model['user_id']]) ; | |||
$user = User::find()->with('userEtablissement')->where(['id' => $model['user_id']])->one() ; | |||
if(count($user->userEtablissement) <= 1) | |||
$user = User::find()->with('userProducer')->where(['id' => $model['user_id']])->one() ; | |||
if(count($user->userProducer) <= 1) | |||
{ | |||
return Html::a('<span class="glyphicon glyphicon-pencil"></span> Modifier', $url, [ | |||
'title' => Yii::t('app', 'Modifier'), 'class' => 'btn btn-default' | |||
@@ -201,7 +197,7 @@ $this->params['breadcrumbs'][] = $this->title; | |||
} | |||
}, | |||
'delete' => function($url, $model) { | |||
if($model['actif']) { | |||
if($model['active']) { | |||
return Html::a('<span class="glyphicon glyphicon-trash"></span> Supprimer', Yii::$app->urlManager->createUrl(array_merge(['user/delete','id' => $model['user_id']], Yii::$app->getRequest()->getQueryParams())), [ | |||
'title' => Yii::t('app', 'Supprimer'), 'class' => 'btn btn-default' | |||
]); |
@@ -1,78 +0,0 @@ | |||
<?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; | |||
use yii\bootstrap\ActiveForm; | |||
/* | |||
* To change this license header, choose License Headers in Project Properties. | |||
* To change this template file, choose Tools | Templates | |||
* and open the template in the editor. | |||
*/ | |||
$this->title = 'Envoi d\'un email à tous les utilisateurs'; | |||
?> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
<?php | |||
$form = ActiveForm::begin(['id' => 'email-masse-form','enableClientValidation' => false]); ?> | |||
<?= $form->field($model, 'subject') ?> | |||
<?= $form->field($model, 'body')->textArea(['rows' => 6]) ?> | |||
<div class="form-group"> | |||
<label class="control-label">Envoyer à</label> | |||
<p>Cliquer sur les utilisateurs pour modifier leur état.<br /> | |||
Légende : <span class="label label-default">à envoyer</span> <span class="label label-danger">ne pas envoyer</span> <span class="label label-success">envoyé</span></p> | |||
<div id="ids-users"> | |||
<?php foreach($users as $u): ?> | |||
<a href="javascript:void(0);" class="label <?php if($u->no_mail): ?>label-danger<?php else: ?>label-default<?php endif; ?>" data-send="0" data-id="<?php echo $u->id; ?>"><?php echo Html::encode($u->prenom.' '.$u->nom); ?></a> | |||
<?php endforeach; ?> | |||
</div> | |||
<input name="id_user" type="hidden" value="" /> | |||
</div> | |||
<br /> | |||
<div class="form-group"> | |||
<?= Html::submitButton('Envoyer', ['class' => 'btn btn-default', 'name' => 'email-masse-button']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
@@ -38,18 +38,18 @@ termes. | |||
use yii\helpers\Html; | |||
use yii\widgets\ActiveForm; | |||
use common\models\CreditHistorique; | |||
use common\models\Etablissement; | |||
use common\models\Commande; | |||
use common\models\CreditHistory; | |||
use common\models\Producer; | |||
use common\models\Order; | |||
$this->title = 'Commandes <small>'.Html::encode($user->nom.' '.$user->prenom).'</small>'; | |||
$this->title = 'Commandes <small>'.Html::encode($user->lastname.' '.$user->name).'</small>'; | |||
$this->params['breadcrumbs'][] = ['label' => 'Clients', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($user->nom.' '.$user->prenom)]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($user->lastname.' '.$user->name)]; | |||
$this->params['breadcrumbs'][] = 'Créditer'; | |||
?> | |||
<div class="user-commandes"> | |||
<div class="user-orders"> | |||
<h1><?= $this->title ?> </h1> | |||
@@ -43,7 +43,7 @@ use yii\helpers\Html; | |||
$this->title = 'Modifier un client' ; | |||
$this->params['breadcrumbs'][] = ['label' => 'Clients', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($model->nom.' '.$model->prenom)]; | |||
$this->params['breadcrumbs'][] = ['label' => Html::encode($model->lastname.' '.$model->name)]; | |||
$this->params['breadcrumbs'][] = 'Modifier'; | |||
?> | |||
<div class="user-update"> |
@@ -1,83 +0,0 @@ | |||
<?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; | |||
use yii\widgets\DetailView; | |||
/* @var $this yii\web\View */ | |||
/* @var $model common\models\User */ | |||
$this->title = $model->id; | |||
$this->params['breadcrumbs'][] = ['label' => 'Clients', 'url' => ['index']]; | |||
$this->params['breadcrumbs'][] = $this->title; | |||
?> | |||
<div class="user-view"> | |||
<h1><?= Html::encode($this->title) ?></h1> | |||
<p> | |||
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?> | |||
<?= Html::a('Delete', ['delete', 'id' => $model->id], [ | |||
'class' => 'btn btn-danger', | |||
'data' => [ | |||
'confirm' => 'Are you sure you want to delete this item?', | |||
'method' => 'post', | |||
], | |||
]) ?> | |||
</p> | |||
<?= DetailView::widget([ | |||
'model' => $model, | |||
'attributes' => [ | |||
'id', | |||
'username', | |||
'auth_key', | |||
'password_hash', | |||
'password_reset_token', | |||
'email:email', | |||
'status', | |||
'created_at', | |||
'updated_at', | |||
'nom', | |||
'prenom', | |||
'telephone', | |||
'confiance', | |||
], | |||
]) ?> | |||
</div> |
@@ -75,9 +75,9 @@ function chat_nl2br(str, is_xhtml) { | |||
function chat_index_commandes_points_vente_livraison() { | |||
$('#productionpointvente-productions_point_vente input[type=checkbox]').change(function() { | |||
$('#pointsaledistribution-points_sale_distribution input[type=checkbox]').change(function() { | |||
var nb = $('#productionpointvente-productions_point_vente input[type=checkbox]:checked').size() ; | |||
var nb = $('#pointsaledistribution-points_sale_distribution input[type=checkbox]:checked').size() ; | |||
if(nb == 0) { | |||
$(this).prop('checked',true) ; | |||
@@ -91,10 +91,10 @@ function chat_index_commandes_points_vente_livraison() { | |||
if($(this).prop('checked')) | |||
livraison = 1 ; | |||
$.get(UrlManager.getBaseUrl()+'commande/ajax-point-vente-livraison',{ | |||
id_production: arr_val[0], | |||
id_point_vente: arr_val[1], | |||
bool_livraison: livraison | |||
$.get(UrlManager.getBaseUrl()+'order/ajax-point-sale-delivery',{ | |||
idDistribution: arr_val[0], | |||
idPointSale: arr_val[1], | |||
boolDelivery: livraison | |||
}, function(data) { | |||
chat_alert('success','Point de vente modifié') ; | |||
}) ; | |||
@@ -108,7 +108,7 @@ function chat_index_commandes_points_vente_livraison() { | |||
function chat_index_commandes_maj_points_vente() { | |||
if($('#productions-point-vente').size()) { | |||
var nb = $('#productionpointvente-productions_point_vente input[type=checkbox]:checked').size() ; | |||
var nb = $('#pointsaledistribution-points_sale_distribution input[type=checkbox]:checked').size() ; | |||
if(nb == 0) | |||
{ | |||
$('#panel-commandes #tabs-points-vente, #panel-commandes #commandes-points-vente').hide() ; | |||
@@ -123,10 +123,11 @@ function chat_index_commandes_maj_points_vente() { | |||
var id_production = $('#id-production').val() ; | |||
if(id_production) { | |||
$('#tabs-points-vente li').each(function() { | |||
var id_point_vente = $(this).find('a').attr('id').replace('btn-point-vente-','') ; | |||
var nb_commandes = parseInt($(this).find('.badge-success').html()) ; | |||
var checked = $('#productionpointvente-productions_point_vente input[value='+id_production+'-'+id_point_vente+']').prop('checked') ; | |||
var checked = $('#pointsaledistribution-points_sale_distribution input[value='+id_production+'-'+id_point_vente+']').prop('checked') ; | |||
if(checked || nb_commandes > 0) | |||
{ | |||
$(this).show() ; | |||
@@ -159,20 +160,20 @@ function chat_points_vente_jours_livraison_event() { | |||
function chat_points_vente_acces() { | |||
// affichage du bloc acces restreint | |||
$('#pointvente-acces_restreint').change(function() { | |||
$('#pointsale-restricted_access').change(function() { | |||
chat_points_vente_acces_event() ; | |||
}) ; | |||
chat_points_vente_acces_event() ; | |||
// affichage du champs commentaire | |||
$('#pointvente-users input[type=checkbox]').change(function() { | |||
$('#pointsale-users input[type=checkbox]').change(function() { | |||
chat_points_vente_commentaire_event() ; | |||
}) ; | |||
chat_points_vente_commentaire_event() ; | |||
} | |||
function chat_points_vente_commentaire_event() { | |||
$('#pointvente-users input[type=checkbox]').each(function() { | |||
$('#pointsale-users input[type=checkbox]').each(function() { | |||
if($(this).prop('checked')) { | |||
$(this).parent().find('.commentaire').fadeIn() ; | |||
} | |||
@@ -183,24 +184,24 @@ function chat_points_vente_commentaire_event() { | |||
} | |||
function chat_points_vente_acces_event() { | |||
if($('#pointvente-acces_restreint').prop('checked')) { | |||
$('#pointvente-users').fadeIn() ; | |||
if($('#pointsale-restricted_access').prop('checked')) { | |||
$('#pointsale-users').fadeIn() ; | |||
} | |||
else { | |||
$('#pointvente-users').hide() ; | |||
$('#pointsale-users').hide() ; | |||
} | |||
} | |||
function chat_select_etablissement() { | |||
$('select[name="select_etablissement"]').change(function() { | |||
window.location.href = UrlManager.getBaseUrlAbsolute()+'/site/change-etablissement?id='+$(this).val() ; | |||
$('select[name="select_producer"]').change(function() { | |||
window.location.href = UrlManager.getBaseUrlAbsolute()+'/site/change-producer?id='+$(this).val() ; | |||
}) ; | |||
} | |||
function chat_commandeauto() { | |||
// dates | |||
$('#commandeautoform-date_debut, #commandeautoform-date_fin').datepicker() ; | |||
$('#subscriptionform-date_begin, #subscriptionform-date_end').datepicker() ; | |||
} | |||
@@ -235,9 +236,9 @@ function chat_index_commandes_points_vente() { | |||
var id_commande = $(this).data('id-commande') ; | |||
$(this).attr('disabled', 'disabled') ; | |||
$.get(UrlManager.getBaseUrl()+'commande/ajax-delete',{ | |||
$.get(UrlManager.getBaseUrl()+'order/ajax-delete',{ | |||
date: $('#date-production').val(), | |||
id_commande: id_commande | |||
idOrder: id_commande | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .btn-remove').removeAttr('disabled') ; | |||
@@ -260,7 +261,7 @@ function chat_index_commandes_points_vente() { | |||
$('#point-vente-'+id_pv+' .creer-commande').trigger('click') ; | |||
} | |||
} | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_pv) ; | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_point_sale) ; | |||
chat_index_commandes_maj_total_commandes() ; | |||
chat_alert('success','Commande supprimée') ; | |||
}, 'json') ; | |||
@@ -293,22 +294,22 @@ function chat_index_commandes_points_vente() { | |||
$(this).attr('disabled', 'disabled') ; | |||
$.get(UrlManager.getBaseUrl()+'commande/ajax-create',{ | |||
$.get(UrlManager.getBaseUrl()+'order/ajax-create',{ | |||
date: $('#date-production').val(), | |||
id_pv: id_pv, | |||
id_user: $('#point-vente-'+id_pv+' .user-id').val(), | |||
idPointSale: id_pv, | |||
idUser: $('#point-vente-'+id_pv+' .user-id').val(), | |||
username: $('#point-vente-'+id_pv+' .username').val(), | |||
produits: JSON.stringify(tab_produits), | |||
commentaire: $('#point-vente-'+id_pv+' .textarea-commentaire').val() | |||
products: JSON.stringify(tab_produits), | |||
comment: $('#point-vente-'+id_pv+' .textarea-commentaire').val() | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .btn-save').removeAttr('disabled') ; | |||
$('#point-vente-'+id_pv+' .btn-save').removeClass('is-create') ; | |||
$('#point-vente-'+id_pv+' .liste-commandes').append(data.commande) ; | |||
$('#point-vente-'+id_pv+' .liste-commandes').append(data.order) ; | |||
chat_index_commandes_points_vente() ; | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_pv) ; | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_point_sale) ; | |||
$('#point-vente-'+id_pv+' .buttons-edit-remove').show() ; | |||
$('#point-vente-'+id_pv+' .buttons-save-cancel').hide() ; | |||
@@ -329,20 +330,20 @@ function chat_index_commandes_points_vente() { | |||
var id_commande = $(this).data('id-commande') ; | |||
$(this).attr('disabled', 'disabled') ; | |||
$.get(UrlManager.getBaseUrl()+'commande/ajax-update',{ | |||
id_commande: id_commande, | |||
produits: JSON.stringify(tab_produits), | |||
$.get(UrlManager.getBaseUrl()+'order/ajax-update',{ | |||
idOrder: id_commande, | |||
products: JSON.stringify(tab_produits), | |||
date: $('#date-production').val(), | |||
commentaire: $('#point-vente-'+id_pv+' .textarea-commentaire').val() | |||
comment: $('#point-vente-'+id_pv+' .textarea-commentaire').val() | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .btn-save').removeAttr('disabled') ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_commande); | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').html(data.json_commande.str_montant) ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_order); | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').html(data.json_order.str_amount) ; | |||
chat_index_commandes_affiche_commande(id_pv, id_commande) ; | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_pv) ; | |||
chat_index_commandes_maj_recap_pv(id_pv, data.total_point_sale) ; | |||
$('#point-vente-'+id_pv+' .buttons-edit-remove').show() ; | |||
$('#point-vente-'+id_pv+' .buttons-save-cancel').hide() ; | |||
@@ -361,6 +362,7 @@ function chat_index_commandes_points_vente() { | |||
// create | |||
$('.creer-commande').unbind('click').click(function() { | |||
var id_pv = $(this).data('pv-id') ; | |||
$('#point-vente-'+id_pv+' .bloc-commande').fadeIn() ; | |||
$('#point-vente-'+id_pv+' .liste-commandes a.active').removeClass('active') ; | |||
@@ -373,12 +375,6 @@ function chat_index_commandes_points_vente() { | |||
$('#point-vente-'+id_pv+' .choix-user .username').val('') ; | |||
$('#point-vente-'+id_pv+' .commentaire').hide() ; | |||
$('#point-vente-'+id_pv+' .btn-save').addClass('is-create'); | |||
/*if(!$('#point-vente-'+id_pv+' .btn-cancel').data('id-commande') && | |||
$('#point-vente-'+id_pv+' .liste-commandes li').size()) { | |||
$('#point-vente-'+id_pv+' .btn-cancel').data('id-commande',$('#point-vente-'+id_pv+' .liste-commandes li:first a').data('id-commande')) ; | |||
}*/ | |||
$('#point-vente-'+id_pv+' .btn-save').data('id-commande',0) ; | |||
chat_index_commandes_inputs_commande(id_pv, false) ; | |||
@@ -395,10 +391,10 @@ function chat_index_commandes_points_vente() { | |||
} | |||
function chat_index_commandes_maj_total_commandes() { | |||
$.get(UrlManager.getBaseUrl()+'commande/ajax-total-commandes',{ | |||
$.get(UrlManager.getBaseUrl()+'order/ajax-total-orders',{ | |||
date: $('#date-production').val() | |||
}, function(data) { | |||
$('#bloc-totaux').html(data.html_totaux) ; | |||
$('#bloc-totaux').html(data.html_totals) ; | |||
}, 'json') ; | |||
} | |||
@@ -517,22 +513,21 @@ function chat_index_commandes_affiche_commande(id_pv, id_commande) { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant .glyphicon').remove() ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').html() ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').html(commande.str_montant) ; | |||
if(commande.montant_paye >= commande.montant) { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').html(commande.str_amount) ; | |||
if(commande.paid_amount >= commande.amount) { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').addClass('paye') ; | |||
if(commande.montant_paye > commande.montant) { | |||
if(commande.paid_amount > commande.amount) { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .montant').append(' <span class="glyphicon glyphicon-warning-sign"></span>') ; | |||
} | |||
} | |||
// commentaire | |||
if(commande.commentaire && commande.commentaire.length) { | |||
if(commande.comment && commande.comment.length) { | |||
if(!$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .glyphicon-comment').size()) { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').append(' <span class="glyphicon glyphicon-comment"></span>') ; | |||
} | |||
console.log(id_pv+' '+commande.commentaire) ; | |||
$('#point-vente-'+id_pv+' .commentaire').html(chat_nl2br(commande.commentaire)).show() ; | |||
$('#point-vente-'+id_pv+' .commentaire').html(chat_nl2br(commande.comment)).show() ; | |||
} | |||
else { | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+'] .glyphicon-comment').remove() ; | |||
@@ -558,21 +553,13 @@ function chat_index_commandes_affiche_commande(id_pv, id_commande) { | |||
$('#point-vente-'+id_pv+' .td-total').html('') ; | |||
$('#point-vente-'+id_pv+' tr').removeClass('active') ; | |||
$.each(commande.produits, function(i, item) { | |||
$.each(commande.products, function(i, item) { | |||
$('#point-vente-'+id_pv+' .produit-'+i+' .td-commande').html(item) ; | |||
$('#point-vente-'+id_pv+' .produit-'+i).addClass('active') ; | |||
}) ; | |||
$('#point-vente-'+id_pv+' .td-total').html('<span>'+commande.str_montant+'</span>') ; | |||
$('#point-vente-'+id_pv+' .td-total').html('<span>'+commande.str_amount+'</span>') ; | |||
$('#point-vente-'+id_pv+' .tr-total').show() ; | |||
/*var commentaire = link.data('commentaire') ; | |||
if(commentaire) { | |||
$('#point-vente-'+id_pv+' .commentaire').html(commentaire).show() ; | |||
} | |||
else { | |||
$('#point-vente-'+id_pv+' .commentaire').hide() ; | |||
}*/ | |||
$('#point-vente-'+id_pv+' .title-user span.the-title').html(link.find('.user').html()+" <small>"+link.data('date')+"</small>") ; | |||
$('#point-vente-'+id_pv+' .bloc-commande').fadeIn() ; | |||
@@ -580,11 +567,11 @@ function chat_index_commandes_affiche_commande(id_pv, id_commande) { | |||
$('#point-vente-'+id_pv+' .tr-total').show() ; | |||
// paiement | |||
$.get(UrlManager.getBaseUrl()+'commande/statut-paiement',{ | |||
id_commande: id_commande | |||
$.get(UrlManager.getBaseUrl()+'order/payment-status',{ | |||
idOrder: id_commande | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .bloc-commande .td-paiement').html(data.html_statut_paiement) ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_commande) ; | |||
$('#point-vente-'+id_pv+' .bloc-commande .td-paiement').html(data.html_payment_status) ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_order) ; | |||
chat_index_commandes_boutons_paiement(id_pv, id_commande) ; | |||
},'json') ; | |||
} | |||
@@ -596,17 +583,17 @@ function chat_index_commandes_affiche_commande(id_pv, id_commande) { | |||
function chat_index_commandes_boutons_paiement(id_pv, id_commande) { | |||
// boutons paiement/remboursement | |||
$('#point-vente-'+id_pv+' .payer, #point-vente-'+id_pv+' .rembourser').click(function() { | |||
$(this).attr('disabled','disabled') ; | |||
$.get(UrlManager.getBaseUrl()+'commande/paiement',{ | |||
id_commande: id_commande, | |||
type: $(this).data('type'), | |||
montant: $(this).data('montant') | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .bloc-commande .td-paiement').html(data.html_statut_paiement) ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_commande) ; | |||
chat_index_commandes_affiche_commande(id_pv, id_commande) ; | |||
chat_index_commandes_boutons_paiement(id_pv, id_commande) ; | |||
}, 'json') ; | |||
$(this).attr('disabled','disabled') ; | |||
$.get(UrlManager.getBaseUrl()+'order/payment',{ | |||
idOrder: id_commande, | |||
type: $(this).data('type'), | |||
amount: $(this).data('montant') | |||
}, function(data) { | |||
$('#point-vente-'+id_pv+' .bloc-commande .td-paiement').html(data.html_payment_status) ; | |||
$('#point-vente-'+id_pv+' a[data-id-commande='+id_commande+']').attr('data-commande',data.json_order) ; | |||
chat_index_commandes_affiche_commande(id_pv, id_commande) ; | |||
chat_index_commandes_boutons_paiement(id_pv, id_commande) ; | |||
}, 'json') ; | |||
}) ; | |||
} | |||
@@ -723,7 +710,7 @@ function chat_datepicker() { | |||
function chat_calendar() { | |||
if($('#page-commande').size()) { | |||
if($('#page-order').size()) { | |||
var events = new Array ; | |||
$('ul#jours-production li').each(function() { | |||
var date = $(this).html() ; | |||
@@ -749,7 +736,7 @@ function chat_calendar() { | |||
dayClick: function(date, jsEvent, view) { | |||
var url = $(location).attr('href') ; | |||
var tab_url = url.split('?') ; | |||
$(location).attr('href',tab_url[0]+'?r=commande/index&date='+date.format()); | |||
$(location).attr('href',tab_url[0]+'?r=order/index&date='+date.format()); | |||
}, | |||
eventRender: function (event, element) { | |||
var dataToFind = moment(event.start).format('YYYY-MM-DD'); |
@@ -209,7 +209,7 @@ a { | |||
} | |||
} | |||
.nom-boulange { | |||
.name-producer { | |||
//font-family: 'Georgia' ; | |||
margin-bottom: 15px ; | |||
text-align: left ; | |||
@@ -228,23 +228,7 @@ a { | |||
border-bottom: solid 1px #e0e0e0 ; | |||
@include box-shadow(0px 0px 5px gray) ; | |||
#etat-paiement-etablissement { | |||
float: right ; | |||
text-align: right ; | |||
color: darken($color1,15) ; | |||
font-size: 16px ; | |||
.strong { | |||
background-color: white ; | |||
color: $color1 ; | |||
@include border-radius(10px) ; | |||
padding: 0px 10px ; | |||
} | |||
.btn { | |||
padding: 2px 5px ; | |||
} | |||
} | |||
#select-etablissement { | |||
#select-producer { | |||
float: left ; | |||
font-size: 15px ; | |||
} | |||
@@ -289,7 +273,6 @@ a { | |||
a { | |||
margin-right: 5px ; | |||
margin-left: 5px ; | |||
//text-transform: uppercase ; | |||
color: gray ; | |||
} | |||
} | |||
@@ -303,9 +286,9 @@ a { | |||
// liste de commandes | |||
.site-index, .user-commandes { | |||
#dernieres-commandes, #historique-commandes { | |||
#last-orders, #history-orders { | |||
tr.commande-update { | |||
tr.order-update { | |||
td { | |||
background-color: $color2 ; | |||
} | |||
@@ -314,7 +297,7 @@ a { | |||
} | |||
} | |||
tr.commande-delete { | |||
tr.order-delete { | |||
td { | |||
background-color: lighten(#C9302C, 40); | |||
} | |||
@@ -323,42 +306,34 @@ a { | |||
} | |||
} | |||
td.historique { | |||
td.history { | |||
min-width: 170px ; | |||
.small { | |||
margin-bottom: 7px ; | |||
} | |||
strong { | |||
//margin-left: 15px ; | |||
} | |||
/*.label { | |||
color: gray ; | |||
border: solid 1px gray ; | |||
}*/ | |||
} | |||
.small, .localite { | |||
.small, .locality { | |||
font-size: 12px ; | |||
color: gray ; | |||
} | |||
.commentaire { | |||
.comment { | |||
font-size: 12px ; | |||
} | |||
.date { | |||
text-align: center ; | |||
.bloc-date { | |||
.block-date { | |||
width: 50% ; | |||
margin: 0px auto ; | |||
padding-top: 0px ; | |||
} | |||
.jour { | |||
.day { | |||
text-transform: capitalize ; | |||
line-height: 13px ; | |||
font-size: 10px ; | |||
@@ -371,7 +346,7 @@ a { | |||
font-weight: bold ; | |||
} | |||
.mois { | |||
.month { | |||
text-transform: uppercase ; | |||
line-height: 13px ; | |||
font-size: 15px ; | |||
@@ -404,21 +379,21 @@ a { | |||
} | |||
} | |||
#facturation { | |||
#billing { | |||
h2 { | |||
font-size: 25px ; | |||
text-align: center ; | |||
} | |||
.mois-en-cours { | |||
.montant span { | |||
.current-month { | |||
.amount span { | |||
background-color: white ; | |||
color: #333 ; | |||
border: solid 1px gray ; | |||
} | |||
} | |||
.montant { | |||
.amount { | |||
margin-top: 35px ; | |||
text-align: center ; | |||
span { | |||
@@ -434,16 +409,16 @@ a { | |||
} | |||
#page-commande { | |||
#page-order { | |||
#row2 { | |||
} | |||
h1 { | |||
.btn-group { | |||
float: right ; | |||
} | |||
.btn-group { | |||
float: right ; | |||
} | |||
} | |||
#col-left, #col-right { | |||
@@ -459,7 +434,6 @@ a { | |||
} | |||
#calendar { | |||
h2 { | |||
font-size: 20px ; | |||
position: relative ; | |||
@@ -542,8 +516,6 @@ a { | |||
#produits-production { | |||
.overflow { | |||
//max-height: 400px ; | |||
//overflow-y: scroll ; | |||
table { | |||
width: 100%; | |||
@@ -561,7 +533,6 @@ a { | |||
thead th { | |||
height: 30px; | |||
/*text-align: left;*/ | |||
} | |||
tbody { | |||
@@ -585,19 +556,19 @@ a { | |||
.td-produit { | |||
width: 60% ; | |||
} | |||
.td-actif, .td-max { | |||
.td-active, .td-max { | |||
width: 20% ; | |||
text-align: center ; | |||
} | |||
thead { | |||
.td-produit { | |||
.td-product { | |||
width: 57% ; | |||
} | |||
} | |||
} | |||
input.quantite-max { | |||
input.quantity-max { | |||
background-color: white; | |||
border: 1px solid #e0e0e0; | |||
text-align: center; | |||
@@ -638,7 +609,7 @@ a { | |||
} | |||
#bloc-totaux { | |||
.table-produits { | |||
.table-products { | |||
.depasse { | |||
color: #b32815 ; | |||
} | |||
@@ -663,12 +634,11 @@ a { | |||
display: none; | |||
} | |||
} | |||
.recettes { | |||
float: right ; | |||
color: $color1 ; | |||
//background-color: $color1 ; | |||
border: solid 1px $color1 ; | |||
padding: 4px 10px ; | |||
@include border-radius(10px) ; | |||
font-weight: bold ; | |||
@@ -677,7 +647,7 @@ a { | |||
} | |||
} | |||
.alert.commentaire { | |||
.alert.comment { | |||
display: none ; | |||
} | |||
@@ -686,7 +656,6 @@ a { | |||
list-style-type: none ; | |||
height: 100% ; | |||
max-height: 400px ; | |||
//border: solid 1px #e0e0e0 ; | |||
margin-left: 0 ; | |||
padding-left: 0 ; | |||
margin-top: 0px ; | |||
@@ -705,7 +674,6 @@ a { | |||
@include border-radius(0px) ; | |||
display: block ; | |||
padding: 7px ; | |||
//border-bottom: solid 1px #e0e0e0 ; | |||
color: #333 ; | |||
.montant { | |||
@@ -725,10 +693,7 @@ a { | |||
&:hover, &:active, &.active { | |||
text-decoration: none ; | |||
//background-color: #F5F5F5 ; | |||
//background-color: lighten($color2,5) ; | |||
background-color: #FCF8E3 ; | |||
//border-right: solid 3px $color1 ; | |||
outline: none ; | |||
border-color: #ccc ; | |||
@include transition(all 0.1s) ; | |||
@@ -781,16 +746,15 @@ a { | |||
} | |||
table.table-produits { | |||
.td-commande { | |||
.td-order { | |||
text-align: center ; | |||
} | |||
input.form-control { | |||
//width: 100px ; | |||
text-align: center ; | |||
} | |||
tr.disabled { | |||
.td-produit { | |||
.td-product { | |||
color: gray ; | |||
} | |||
} | |||
@@ -834,14 +798,14 @@ a { | |||
} | |||
} | |||
.panel-commande-automatique { | |||
.field-commandeautoform-id_user, | |||
.field-commandeautoform-id_etablissement | |||
.panel-commande-auto { | |||
.field-subscriptionform-id_user, | |||
.field-subscriptionform-id_producer | |||
{ | |||
display: none ; | |||
} | |||
.jours { | |||
.days { | |||
.form-group { | |||
float: left ; | |||
margin-right: 10px ; | |||
@@ -863,7 +827,7 @@ a { | |||
border-bottom: solid 1px #e0e0e0 ; | |||
} | |||
.title-point-vente { | |||
.title-point-sale { | |||
background-color: lighten(#fdd44b, 30) ; | |||
border-left: solid 3px $color1 ; | |||
font-weight: bold ; | |||
@@ -871,7 +835,7 @@ a { | |||
padding: 10px ; | |||
} | |||
.title-totaux { | |||
.title-totals { | |||
text-align: center ; | |||
} | |||
@@ -883,19 +847,18 @@ a { | |||
border-right: solid 1px #e0e0e0 ; | |||
} | |||
input.quantite { | |||
//width: 50px ; | |||
input.quantity { | |||
width: 30px ; | |||
background-color: white ; | |||
border: solid 1px #e0e0e0 ; | |||
text-align: center ; | |||
} | |||
.td-produit { | |||
.td-product { | |||
text-align: center ; | |||
} | |||
.submit-pv { | |||
.submit-point-sale { | |||
float: right ; | |||
} | |||
@@ -904,7 +867,7 @@ a { | |||
border: solid 1px #e0e0e0 ; | |||
} | |||
.date-commande { | |||
.date-order { | |||
font-size: 12px ; | |||
} | |||
@@ -920,8 +883,6 @@ a { | |||
text-align: center ; | |||
} | |||
.depasse { | |||
color: #b32815 ; | |||
} | |||
@@ -930,15 +891,11 @@ a { | |||
font-weight: normal ; | |||
font-size: 13px ; | |||
} | |||
.vrac { | |||
display: none ; | |||
} | |||
td.client { | |||
td.user { | |||
text-align: left ; | |||
padding: 3px ; | |||
.date-commande { | |||
.date-order { | |||
color: gray ; | |||
} | |||
} | |||
@@ -1023,18 +980,8 @@ a { | |||
} | |||
#email-masse-form { | |||
#ids-users { | |||
line-height: 30px ; | |||
.label { | |||
text-transform: capitalize ; | |||
} | |||
} | |||
} | |||
.produit-create, .produit-update { | |||
#jours-production { | |||
.product-create, .product-update { | |||
#days-distribution { | |||
.form-group { | |||
float: left ; | |||
margin-right: 15px ; | |||
@@ -1044,7 +991,7 @@ a { | |||
} | |||
} | |||
} | |||
.field-produit-id_etablissement { | |||
.field-product-id_producer { | |||
display: none; | |||
} | |||
} | |||
@@ -1053,12 +1000,12 @@ a { | |||
background-color: white ; | |||
} | |||
.wrap .produit-index { | |||
.wrap .product-index { | |||
.td-photo { | |||
max-width: 100px ; | |||
width: 100px ; | |||
} | |||
.photo-produit { | |||
.photo-product { | |||
max-width: 100px ; | |||
} | |||
@@ -1070,7 +1017,8 @@ a { | |||
/* communiquer */ | |||
.communiquer-mode-emploi { | |||
.communicate-instructions { | |||
border: solid 1px #e0e0e0 ; | |||
padding: 10px ; | |||
@include border-radius(10px) ; | |||
@@ -1079,6 +1027,7 @@ a { | |||
.header { | |||
.logo { | |||
display: none ; | |||
float: left ; | |||
width: 75px ; | |||
padding-right: 20px ; | |||
@@ -1086,7 +1035,6 @@ a { | |||
img { | |||
width: 75px ; | |||
} | |||
} | |||
@@ -1112,14 +1060,14 @@ a { | |||
h3 { | |||
font-family: 'comfortaalight' ; | |||
font-family: 'myriadpro-regular' ; | |||
font-size: 25px ; | |||
font-size: 20px ; | |||
color: $color1 ; | |||
margin-top: 0px ; | |||
margin-bottom: 0px ; | |||
} | |||
} | |||
.communiquer-mode-emploi-encart { | |||
.communicate-instructions-inset { | |||
width: 420px ; | |||
margin-top: 20px ; | |||
.header { | |||
@@ -1149,18 +1097,18 @@ a { | |||
} | |||
} | |||
.bloc-mode-emploi-pdf { | |||
.block-instructions-pdf { | |||
width: 49.9% ; | |||
float: left; | |||
border-bottom: dotted 1px gray ; | |||
} | |||
.bloc-mode-emploi-border { | |||
.block-instructions-border { | |||
border-right: dotted 1px gray ; | |||
border-bottom: dotted 1px gray ; | |||
} | |||
.communiquer-mode-emploi-pdf { | |||
.communicate-instructions-pdf { | |||
border: 0px none ; | |||
//border-bottom: dotted 1px gray ; | |||
@include border-radius(0px) ; | |||
@@ -1191,17 +1139,17 @@ a { | |||
} | |||
} | |||
.bloc-mode-emploi-bottom { | |||
.block-instructions-bottom { | |||
border-bottom: 0px none ; | |||
border-bottom: solid 1px white; | |||
} | |||
/* commandes auto */ | |||
/* abonnements */ | |||
.commandeauto-form { | |||
.subscription-form { | |||
#bloc-select-user { | |||
#block-select-user { | |||
padding-left: 0px ; | |||
} | |||
@@ -1214,21 +1162,21 @@ a { | |||
} | |||
} | |||
.field-commandeautoform-id_etablissement { | |||
.field-subscriptionform-id_producer { | |||
display: none ; | |||
} | |||
.jours { | |||
.days { | |||
.form-group { | |||
float: left; | |||
margin-right: 20px ; | |||
} | |||
} | |||
.produits { | |||
.products { | |||
.table { | |||
width: 500px ; | |||
} | |||
.quantite { | |||
.quantity { | |||
text-align: center ; | |||
} | |||
} | |||
@@ -1236,8 +1184,8 @@ a { | |||
/* points de vente */ | |||
.point-vente-form { | |||
#pointvente-users { | |||
.point-sale-form { | |||
#pointsale-users { | |||
display: none ; | |||
height: 500px ; | |||
overflow-y: scroll ; | |||
@@ -1245,14 +1193,14 @@ a { | |||
font-weight: normal ; | |||
display: block ; | |||
} | |||
.commentaire { | |||
.comment { | |||
display: none ; | |||
margin-left: 17px ; | |||
width: 200px ; | |||
} | |||
} | |||
#jours-livraison { | |||
#delivery-days { | |||
.form-group { | |||
float: left ; | |||
margin-right: 15px ; | |||
@@ -1275,7 +1223,7 @@ a { | |||
} | |||
} | |||
#tabs-points-vente { | |||
#tabs-points-sale { | |||
margin-bottom: 20px ; | |||
} | |||
@@ -1302,14 +1250,14 @@ a { | |||
/* facturation */ | |||
#estimation-facture { | |||
#free-price { | |||
padding: 20px ; | |||
background-color: #F9F9F9 ; | |||
h2 { | |||
font-family: 'myriadpro-it' ; | |||
} | |||
.montant { | |||
.amount { | |||
span { | |||
font-size: 25px ; | |||
color: white ; | |||
@@ -1331,19 +1279,19 @@ a { | |||
} | |||
} | |||
.field-etablissement-prix_libre { | |||
.field-producer-free_price { | |||
.input-group { | |||
width: 200px ; | |||
} | |||
} | |||
.field-user-prix_libre { | |||
.field-user-free_price { | |||
label { | |||
display: none ; | |||
} | |||
} | |||
#etablissement-prix_libre { | |||
#producer-free_price { | |||
width: 100px ; | |||
height: 60px ; | |||
font-size: 30px ; | |||
@@ -1352,8 +1300,8 @@ a { | |||
} | |||
} | |||
.developpement-index { | |||
ul#tabs-statuts-developpements { | |||
.development-index { | |||
ul#tabs-status-developments { | |||
margin-bottom: 30px ; | |||
border-bottom: solid 3px $color1 ; | |||
@@ -1370,19 +1318,19 @@ a { | |||
} | |||
} | |||
#tab-developpements { | |||
.btn-group-priorite { | |||
#tab-developments { | |||
.btn-group-priority { | |||
width: 100% ; | |||
margin-bottom: 5px ; | |||
.btn-priorite { | |||
.btn-priority { | |||
display: block ; | |||
float: none ; | |||
width: 100% ; | |||
} | |||
} | |||
.label-priorite { | |||
.label-priority { | |||
display: block ; | |||
width: 100% ; | |||
margin-bottom: 2px ; | |||
@@ -1393,13 +1341,13 @@ a { | |||
/* stats */ | |||
.stats-produits { | |||
.stats-products { | |||
#nav-year { | |||
float: right ; | |||
} | |||
tr.mois { | |||
tr.month { | |||
th { | |||
text-align: center ; | |||
} | |||
@@ -1411,7 +1359,7 @@ a { | |||
} | |||
} | |||
td.nom { | |||
td.name { | |||
text-transform: uppercase ; | |||
} | |||
@@ -0,0 +1,214 @@ | |||
<?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. | |||
*/ | |||
namespace common\components ; | |||
class ActiveRecordCommon extends \yii\db\ActiveRecord | |||
{ | |||
const SEARCH_ALL = 'all' ; | |||
const SEARCH_ONE = 'one' ; | |||
const SEARCH_COUNT = 'count' ; | |||
/** | |||
* Méthode générique de recherche utilisée pour tous les modèles. Elle a | |||
* pour but de construire la requête et de retourner le résultat. | |||
* | |||
* @param array $params | |||
* @param array $options | |||
* @return mixed | |||
* @throws NotFoundHttpException | |||
*/ | |||
public static function search($params = [], $options = []) | |||
{ | |||
$class = get_called_class() ; | |||
if(is_callable([$class, 'defaultOptionsSearch'])) { | |||
$default_options = $class::defaultOptionsSearch() ; | |||
} | |||
else { | |||
throw new \ErrorException('La méthode "defaultOptionsSearch" n\'est ' | |||
. 'pas définie dans la classe "'.$class.'"'); | |||
} | |||
$options = array_merge($default_options, $options) ; | |||
$pk = $class::primaryKey() ; | |||
$pk = $class::tableName().'.'.$pk[0] ; | |||
if (isset($options['attribute_id_producer']) && strlen($options['attribute_id_producer']) | |||
&& !isset($params[$options['attribute_id_producer']]) && !Yii::$app->user->isGuest) | |||
{ | |||
if(Yii::$app->controller->module->id == 'app-producer') { | |||
$params[$options['attribute_id_producer']] = Yii::$app->controller->getProducer()->id ; | |||
} | |||
else { | |||
$params[$options['attribute_id_producer']] = Producer::getId() ; | |||
} | |||
} | |||
if(!isset($options['type_search'])) { | |||
$options['type_search'] = self::SEARCH_ALL ; | |||
} | |||
$records = $class::find() ; | |||
// With | |||
if(is_array($options['with']) && count($options['with'])) { | |||
$records = $records->with($options['with']) ; | |||
} | |||
// Join with | |||
if(is_array($options['join_with']) && count($options['join_with'])) { | |||
$records = $records->joinWith($options['join_with']) ; | |||
} | |||
// Conditions | |||
if(isset($options['conditions'])) { | |||
if(is_array($options['conditions'])) { | |||
if(count($options['conditions'])) { | |||
foreach($options['conditions'] as $condition) { | |||
$records = $records->andWhere($condition); | |||
} | |||
} | |||
} | |||
else { | |||
if(strlen($options['conditions'])) { | |||
$records = $records->andWhere($options['conditions']); | |||
} | |||
} | |||
} | |||
// Params | |||
if(isset($options['params']) && is_array($options['params']) && count($options['params'])) { | |||
$records = $records->params($options['params']) ; | |||
} | |||
// Paramètres | |||
if(is_array($params) && count($params)) { | |||
foreach($params as $key => $val) { | |||
if(strpos($key, '.') === false) { | |||
unset($params[$key]) ; | |||
$key = $class::tableName().'.'.$key ; | |||
$params[$key] = $val ; | |||
} | |||
$records = $records->andWhere([$key => $val]); | |||
} | |||
} | |||
if(!isset($params[$pk])) { | |||
// Orderby | |||
if (isset($options['orderby']) && strlen($options['orderby'])) { | |||
$records = $records->orderBy($options['orderby']); | |||
} | |||
// Limit | |||
if (isset($options['limit']) && is_numeric($options['limit']) | |||
&& $options['limit'] > 0) | |||
{ | |||
$records = $records->limit($options['limit']); | |||
} | |||
} | |||
if($options['type_search'] == self::SEARCH_ALL) { | |||
return $records->all(); | |||
} | |||
elseif($options['type_search'] == self::SEARCH_ONE) { | |||
$record = $records->one(); | |||
if($record) { | |||
return $record ; | |||
} | |||
} | |||
elseif($options['type_search'] == self::SEARCH_COUNT) { | |||
return $records->count() ; | |||
} | |||
return false ; | |||
} | |||
/** | |||
* Recherche un enregistrement. | |||
* | |||
* @param array $params | |||
* @param array $options | |||
* @return mixed | |||
*/ | |||
public static function searchOne($params = [], $options = []) | |||
{ | |||
$options['type_search'] = self::SEARCH_ONE ; | |||
return self::searchDispatch($params, $options) ; | |||
} | |||
/** | |||
* Recherche tous les enregistrements. | |||
* | |||
* @param array $params | |||
* @param array $options | |||
* @return mixed | |||
*/ | |||
public static function searchAll($params = [], $options = []) | |||
{ | |||
$options['type_search'] = self::SEARCH_ALL ; | |||
return self::searchDispatch($params, $options) ; | |||
} | |||
/** | |||
* Recherche et compte le nombre de résultats. | |||
* | |||
* @param array $params | |||
* @param array $options | |||
* @return integer | |||
*/ | |||
public static function searchCount($params = [], $options = []) | |||
{ | |||
$options['type_search'] = self::SEARCH_COUNT ; | |||
return self::searchDispatch($params, $options) ; | |||
} | |||
/** | |||
* Appelle la méthode 'search' de la classe appellante. | |||
* | |||
* @param array $params | |||
* @param array $options | |||
* @return mixed | |||
*/ | |||
public static function searchDispatch($params = [], $options = []) | |||
{ | |||
$class = get_called_class() ; | |||
return $class::search($params, $options) ; | |||
} | |||
} |
@@ -46,7 +46,7 @@ class CommonController extends \yii\web\Controller | |||
public function beforeAction($event) | |||
{ | |||
if (!Yii::$app->user->isGuest) { | |||
Yii::$app->user->identity->updateDerniereConnexion(); | |||
Yii::$app->user->identity->updateLastConnection(); | |||
} | |||
return parent::beforeAction($event); |
@@ -38,7 +38,7 @@ termes. | |||
namespace common\helpers; | |||
class Departements { | |||
class Departments { | |||
public static function get() | |||
{ |
@@ -40,6 +40,6 @@ use yii\helpers\Html; | |||
?> | |||
<p>Message de <strong><?= Html::encode($nom) ?></strong> :</p> | |||
<p>Message de <strong><?= Html::encode($name) ?></strong> :</p> | |||
<?= nl2br(Html::encode($content)); ?> |
@@ -38,6 +38,6 @@ termes. | |||
?> | |||
Message de <?= $nom ?> : | |||
Message de <?= $name ?> : | |||
<?= $content; ?> |
@@ -40,9 +40,9 @@ use yii\helpers\Html; | |||
?> | |||
<p>Bonjour <?= Html::encode($user->prenom); ?>,</p> | |||
<p>Bonjour <?= Html::encode($user->name); ?>,</p> | |||
<p>Votre producteur <strong><?= Html::encode($etablissement->nom); ?></strong> vient | |||
<p>Votre producteur <strong><?= Html::encode($producer->name); ?></strong> vient | |||
de créer un compte pour vous sur le site <a href="http://www.laboiteapain.net/">La boîte à pain</a>.</p> | |||
<p><strong>Ce compte vous permet de passer vos commandes dans cet établissement.</strong></p> |
@@ -38,9 +38,9 @@ termes. | |||
?> | |||
Bonjour <?= $user->prenom ?>, | |||
Bonjour <?= $user->name ?>, | |||
Votre producteur "<?= $etablissement->nom ?>" vient | |||
Votre producteur "<?= $producer->name ?>" vient | |||
de créer un compte pour vous sur le site http://www.laboiteapain.net/. | |||
Ce compte vous permet de passer vos commandes dans cet établissement. |
@@ -42,11 +42,11 @@ use common\models\CreditHistorique; | |||
?> | |||
<p>Bonjour <?= Html::encode($user->prenom); ?>,</p> | |||
<p>Bonjour <?= Html::encode($user->name); ?>,</p> | |||
<p>Votre producteur <strong><?= Html::encode($etablissement->nom); ?></strong> vient | |||
de <?php if($credit_form->type == CreditHistorique::TYPE_CREDIT): ?>créditer<?php else: ?>débiter<?php endif; ?> votre compte de <strong><?= Price::format($credit_form->montant); ?></strong> sur le site <a href="http://www.laboiteapain.net/">La boîte à pain</a>.</p> | |||
<p>Votre producteur <strong><?= Html::encode($producer->name); ?></strong> vient | |||
de <?php if($creditForm->type == CreditHistory::TYPE_CREDIT): ?>créditer<?php else: ?>débiter<?php endif; ?> votre compte de <strong><?= Price::format($creditForm->amount); ?></strong> sur le site <a href="http://www.laboiteapain.net/">La boîte à pain</a>.</p> | |||
<p>Votre compte est désormais à <strong><?= Price::format($user_etablissement->credit); ?></strong></p> | |||
<p>Votre compte est désormais à <strong><?= Price::format($userProducer->credit); ?></strong></p> | |||
<p>À bientôt.</p> |
@@ -40,10 +40,10 @@ use common\helpers\Price ; | |||
use common\models\CreditHistorique; | |||
?> | |||
Bonjour <?= $user->prenom; ?>,</p> | |||
Bonjour <?= $user->name; ?>,</p> | |||
Votre producteur <?= $etablissement->nom; ?> vient de <?php if($credit_form->type == CreditHistorique::TYPE_CREDIT): ?>créditer<?php else: ?>débiter<?php endif; ?> votre compte de <?= Price::format($credit_form->montant); ?> sur le site http://www.laboiteapain.net/ | |||
Votre producteur <?= $producer->name; ?> vient de <?php if($creditForm->type == CreditHistory::TYPE_CREDIT): ?>créditer<?php else: ?>débiter<?php endif; ?> votre compte de <?= Price::format($creditForm->amount); ?> sur le site http://www.laboiteapain.net/ | |||
Votre compte est désormais à : <?= Price::format($user_etablissement->credit); ?>. | |||
Votre compte est désormais à : <?= Price::format($userProducer->credit); ?>. | |||
À bientôt |
@@ -1,41 +0,0 @@ | |||
<?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. | |||
*/ | |||
?> | |||
Un nouveau producteur vient de s'inscrire : <?= $etablissement->nom; ?>. |
@@ -40,6 +40,6 @@ use yii\helpers\Html; | |||
?> | |||
<p>Un nouveau producteur vient de s'inscrire : <strong><?= Html::encode($etablissement->nom) ?></strong>.</p> | |||
<p>Un nouveau producteur vient de s'inscrire : <strong><?= Html::encode($producer->name) ?></strong>.</p> | |||
@@ -38,5 +38,4 @@ termes. | |||
?> | |||
<h1>Paiement annulé</h1> | |||
Un nouveau producteur vient de s'inscrire : <?= $producer->name; ?>. |
@@ -44,7 +44,7 @@ use yii\helpers\Html; | |||
$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]); | |||
?> | |||
<div class="password-reset"> | |||
<p>Bonjour <?= Html::encode($user->prenom) ?>,</p> | |||
<p>Bonjour <?= Html::encode($user->name) ?>,</p> | |||
<p>Suivez le lien suivant pour réinitialiser votre mot de passe :</p> | |||
@@ -41,7 +41,7 @@ termes. | |||
$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]); | |||
?> | |||
Bonjour <?= $user->prenom ?>, | |||
Bonjour <?= $user->name ?>, | |||
Suivez le lien suivant pour réinitialiser votre mot de passe : | |||
@@ -42,19 +42,19 @@ use common\helpers\Url ; | |||
?> | |||
<p>Bonjour <?= Html::encode($user->prenom) ?>,</p> | |||
<p>Bonjour <?= Html::encode($user->name) ?>,</p> | |||
<p>Votre inscription sur <strong>La boîte à pain</strong> a bien été prise en compte.</p> | |||
<p>Voici votre identifiant de connexion : <br /> | |||
<strong><?= Html::encode($user->email) ?></strong></p> | |||
<?php if($user->status == User::STATUS_BOULANGER): ?> | |||
<p>Vous pouvez dès maintenant vous connecter à votre <a href="<?= Url::backend(); ?>">Espace boulanger</a> pour mettre | |||
<?php if($user->status == User::STATUS_PRODUCER): ?> | |||
<p>Vous pouvez dès maintenant vous connecter à votre <a href="<?= Yii::$app->urlManagerBackend->createAbsoluteUrl(['site/index']); ?>">Espace producteur</a> pour mettre | |||
en place votre système de réservation.</p> | |||
<?php else: ?> | |||
<?php if(!is_null($etablissement)): ?> | |||
<p>Vous pouvez maintenant <a href="<?= Url::frontend().'index.php?r=commande/create&id_etablissement='.$etablissement->id ?>">passer commande</a> chez votre producteur <strong><?= Html::encode($etablissement->nom); ?></strong>.</p> | |||
<?php if(!is_null($producer)): ?> | |||
<p>Vous pouvez maintenant <a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index', 'slug_producer' => $producer->slug]); ?>">passer commande</a> chez votre producteur <strong><?= Html::encode($producer->name); ?></strong>.</p> | |||
<?php else: ?> | |||
<p>Vous pouvez maintenant passer commande chez votre producteur.</p> | |||
<?php endif; ?> |
@@ -41,20 +41,20 @@ use common\helpers\Url ; | |||
?> | |||
Bonjour <?= $user->prenom ?>, | |||
Bonjour <?= $user->name ?>, | |||
Votre inscription sur La boîte à pain a bien été prise en compte. | |||
Voici votre identifiant de connexion : | |||
<?= $user->email ?> | |||
<?php if($user->status == User::STATUS_BOULANGER): ?> | |||
<?php if($user->status == User::STATUS_PRODUCER): ?> | |||
Vous pouvez dès maintenant vous connecter à votre Espace boulanger pour mettre en place votre système de réservation : | |||
<?= Url::backend(); ?> | |||
<?= Yii::$app->urlManagerBackend->createAbsoluteUrl(['site/index']); ?> | |||
<?php else: ?> | |||
<?php if(!is_null($etablissement)): ?> | |||
Vous pouvez maintenant passer commande chez votre producteur "<?= $etablissement->nom ?>" : | |||
<?= Url::frontend().'index.php?r=commande/create&id_etablissement='.$etablissement->id ?> | |||
<?php if(!is_null($producer)): ?> | |||
Vous pouvez maintenant passer commande chez votre producteur "<?= $producer->name ?>" : | |||
<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index', 'slug_producer' => $producer->slug]) ; ?> | |||
<?php else: ?> | |||
Vous pouvez maintenant passer commande chez votre producteur. | |||
<?php endif; ?> |
@@ -1,622 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use yii\helpers\Html; | |||
use common\models\Etablissement; | |||
/** | |||
* This is the model class for table "commande". | |||
* | |||
* @property integer $id | |||
* @property integer $id_user | |||
* @property string $date | |||
* @property string $date_update | |||
* @property integer $id_point_vente | |||
* @property integer $id_production | |||
* @property boolean $paiement_automatique | |||
*/ | |||
class Commande extends \yii\db\ActiveRecord | |||
{ | |||
var $montant = 0 ; | |||
var $montant_paye = 0 ; | |||
var $poids = 0 ; | |||
const TYPE_AUTO = 'auto'; | |||
const TYPE_USER = 'user'; | |||
const TYPE_ADMIN = 'admin'; | |||
const STATUT_PAYEE = 'payee'; | |||
const STATUT_IMPAYEE = 'impayee'; | |||
const STATUT_SURPLUS = 'surplus'; | |||
const ETAT_MODIFIABLE = 'ouverte'; | |||
const ETAT_PREPARATION = 'preparation'; | |||
const ETAT_LIVREE = 'livree'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'commande'; | |||
} | |||
/* | |||
* relations | |||
*/ | |||
public function getUser() | |||
{ | |||
return $this->hasOne(User::className(), ['id' => 'id_user']); | |||
} | |||
public function getCommandeProduits() | |||
{ | |||
return $this->hasMany(CommandeProduit::className(),['id_commande' => 'id']) | |||
->with('produit'); | |||
} | |||
public function getProduction() | |||
{ | |||
return $this->hasOne(Production::className(), ['id' => 'id_production']) | |||
->with('etablissement'); | |||
} | |||
public function getPointVente() | |||
{ | |||
return $this->hasOne(PointVente::className(), ['id' => 'id_point_vente']) | |||
->with('pointVenteUser'); | |||
} | |||
public function getCreditHistorique() | |||
{ | |||
return $this->hasMany(CreditHistorique::className(), ['id_commande' => 'id']); | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_user', 'date', 'id_point_vente', 'id_production'], 'required', 'message' => ''], | |||
[['id_user', 'id_point_vente', 'id_production'], 'integer'], | |||
[['paiement_automatique'], 'boolean'], | |||
[['date', 'date_update', 'commentaire', 'commentaire_point_vente'], 'safe'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_user' => 'Id User', | |||
'date' => 'Date', | |||
'date_update' => 'Date Update', | |||
'id_point_vente' => 'Point de vente', | |||
'id_production' => 'Date de production', | |||
]; | |||
} | |||
/** | |||
* Initialise le montant total, le montant déjà payé et le poids de la | |||
* commande | |||
*/ | |||
public function init() | |||
{ | |||
// Montant | |||
if (isset($this->commandeProduits)) { | |||
foreach ($this->commandeProduits as $p) { | |||
if ($p->mode_vente == 'unite') { | |||
$this->montant += $p->prix * $p->quantite; | |||
if(isset($p->produit)) { | |||
$this->poids += ($p->quantite * $p->produit->poids) / 1000 ; | |||
} | |||
} | |||
elseif ($p->mode_vente == 'poids') { | |||
$this->montant += $p->prix * $p->quantite / 1000; | |||
} | |||
} | |||
} | |||
// Montant payé | |||
if (isset($this->creditHistorique) && !$this->montant_paye) { | |||
foreach ($this->creditHistorique as $ch) { | |||
if ($ch->type == CreditHistorique::TYPE_PAIEMENT) { | |||
$this->montant_paye += $ch->montant; | |||
} | |||
elseif ($ch->type == CreditHistorique::TYPE_REMBOURSEMENT) { | |||
$this->montant_paye -= $ch->montant; | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne la quantité d'un produit donné de plusieurs commandes. | |||
* | |||
* @param integer $id_produit | |||
* @param array $commandes | |||
* | |||
* @return integer | |||
*/ | |||
public static function getQuantiteProduit($id_produit, $commandes) | |||
{ | |||
$quantite = 0; | |||
if (isset($commandes) && is_array($commandes) && count($commandes)) { | |||
foreach ($commandes as $c) { | |||
if(is_null($c->date_delete)) { | |||
foreach ($c->commandeProduits as $cp) { | |||
if ($cp->id_produit == $id_produit) { | |||
$quantite += $cp->quantite; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return $quantite; | |||
} | |||
/** | |||
* Retourne le montant payé de la commande. | |||
* | |||
* @return float | |||
*/ | |||
public function getMontantPaye() | |||
{ | |||
if ($this->montant_paye) { | |||
return $this->montant_paye; | |||
} | |||
else { | |||
$historique = CreditHistorique::find() | |||
->where(['id_commande' => $this->id]) | |||
->all(); | |||
$montant = 0; | |||
foreach ($historique as $ch) { | |||
if ($ch->type == CreditHistorique::TYPE_PAIEMENT) { | |||
$montant += $ch->montant; | |||
} | |||
elseif ($ch->type == CreditHistorique::TYPE_REMBOURSEMENT) { | |||
$montant -= $ch->montant; | |||
} | |||
} | |||
return $montant; | |||
} | |||
} | |||
/** | |||
* Retourne le montant de la commande. | |||
* | |||
* @param boolean $format | |||
* @return float | |||
*/ | |||
public function getMontant($format = false) | |||
{ | |||
if ($format) { | |||
return number_format($this->getMontant(), 2) . ' €'; | |||
} | |||
else { | |||
return $this->montant; | |||
} | |||
} | |||
/** | |||
* Retourne le montant restant à payer. | |||
* | |||
* @param boolean $format | |||
* @return float | |||
*/ | |||
public function getMontantRestant($format = false) | |||
{ | |||
$montant_restant = $this->getMontant() - $this->getMontantPaye(); | |||
if ($format) { | |||
return number_format($montant_restant, 2) . ' €'; | |||
} | |||
else { | |||
return $montant_restant; | |||
} | |||
} | |||
/** | |||
* Retourne le montant payé en surplus. | |||
* | |||
* @param boolean $format | |||
* @return float | |||
*/ | |||
public function getMontantSurplus($format = false) | |||
{ | |||
$montant_surplus = $this->getMontantPaye() - $this->getMontant(); | |||
if ($format) { | |||
return number_format($montant_surplus, 2) . ' €'; | |||
} | |||
else { | |||
return $montant_surplus; | |||
} | |||
} | |||
/** | |||
* Retourne les informations relatives à la commande au format JSON. | |||
* | |||
* @return string | |||
*/ | |||
public function getDataJson() | |||
{ | |||
$commande = Commande::find()->with('commandeProduits')->where(['id' => $this->id])->one(); | |||
$commande->init(); | |||
$json_commande = [ | |||
'produits' => [], | |||
'montant' => $commande->montant, | |||
'str_montant' => $commande->getMontant(true), | |||
'montant_paye' => $commande->getMontantPaye(), | |||
'commentaire' => $commande->commentaire, | |||
]; | |||
foreach ($commande->commandeProduits as $commande_produit) { | |||
$json_commande['produits'][$commande_produit->id_produit] = $commande_produit->quantite; | |||
} | |||
return json_encode($json_commande); | |||
} | |||
/** | |||
* Enregistre un modèle de type CreditHistorique. | |||
* | |||
* @param string $type | |||
* @param float $montant | |||
* @param integer $id_etablissement | |||
* @param integer $id_user | |||
* @param integer $id_user_action | |||
*/ | |||
public function creditHistorique($type, $montant, $id_etablissement, $id_user, $id_user_action) | |||
{ | |||
$credit_historique = new CreditHistorique; | |||
$credit_historique->id_user = $this->id_user; | |||
$credit_historique->id_commande = $this->id; | |||
$credit_historique->montant = $montant; | |||
$credit_historique->type = $type; | |||
$credit_historique->id_etablissement = $id_etablissement; | |||
$credit_historique->id_user_action = $id_user_action; | |||
$credit_historique->populateRelation('commande', $this) ; | |||
$credit_historique->populateRelation('user', User::find()->where(['id' => $this->id_user])->one()) ; | |||
$credit_historique->save(); | |||
} | |||
/** | |||
* Retourne le statut de paiement de la commande (payée, surplus, ou impayée). | |||
* | |||
* @return string | |||
*/ | |||
public function getStatutPaiement() | |||
{ | |||
// payé | |||
if ($this->getMontant() - $this->getMontantPaye() < 0.01 && | |||
$this->getMontant() - $this->getMontantPaye() >= 0) | |||
{ | |||
return self::STATUT_PAYEE; | |||
} | |||
// à rembourser | |||
elseif ($this->getMontant() - $this->getMontantPaye() <= -0.01) { | |||
return self::STATUT_SURPLUS; | |||
} | |||
// reste à payer | |||
elseif ($this->getMontant() - $this->getMontantPaye() >= 0.01) { | |||
return self::STATUT_IMPAYEE; | |||
} | |||
} | |||
/** | |||
* Retourne le résumé du panier au format HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getResumePanier() | |||
{ | |||
if (!isset($this->commandeProduits)) { | |||
$this->commandeProduits = CommandeProduit::find()->where(['id_commande' => $this->id])->all(); | |||
} | |||
$html = ''; | |||
$count = count($this->commandeProduits); | |||
$i = 0; | |||
foreach ($this->commandeProduits as $p) { | |||
if (isset($p->produit)) { | |||
$html .= $p->quantite . ' x ' . Html::encode($p->produit->nom); | |||
if (++$i != $count) { | |||
$html .= '<br />'; | |||
} | |||
} | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne le résumé du point de vente lié à la commande au format HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getResumePointVente() | |||
{ | |||
$html = ''; | |||
if (isset($this->pointVente)) { | |||
$html .= '<span class="nom-point-vente">' . Html::encode($this->pointVente->nom) . '</span>' | |||
. '<br /><span class="localite">' . Html::encode($this->pointVente->localite) . '</span>'; | |||
if (strlen($this->commentaire_point_vente)) { | |||
$html .= '<div class="commentaire"><span>' . Html::encode($this->commentaire_point_vente) . '</span></div>'; | |||
} | |||
} else { | |||
$html .= 'Point de vente supprimé'; | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne le résumé du paiement (montant, statut). | |||
* | |||
* @return string | |||
*/ | |||
public function getResumeMontant() | |||
{ | |||
$html = ''; | |||
$html .= $this->getMontant(true) . '<br />'; | |||
if ($this->montant_paye) { | |||
if ($this->getStatutPaiement() == Commande::STATUT_PAYEE) { | |||
$html .= '<span class="label label-success">Payée</span>'; | |||
} elseif ($this->getStatutPaiement() == Commande::STATUT_IMPAYEE) { | |||
$html .= '<span class="label label-danger">Non payée</span><br /> | |||
Reste <strong>' . $this->getMontantRestant(true) . '</strong> à payer'; | |||
} elseif ($this->getStatutPaiement() == Commande::STATUT_SURPLUS) { | |||
$html .= '<span class="label label-success">Payée</span>'; | |||
} | |||
} | |||
else { | |||
$html .= '<span class="label label-default">À régler sur place</span>'; | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne une chaine de caractère décrivant l'utilisateur lié à la commande. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrUser() | |||
{ | |||
if (isset($this->user)) { | |||
return Html::encode($this->user->prenom . ' ' . $this->user->nom); | |||
} elseif (strlen($this->username)) { | |||
return Html::encode($this->username); | |||
} else { | |||
return 'Client introuvable'; | |||
} | |||
} | |||
/** | |||
* Recherche dans les commandes suivant les paramètres suivants : | |||
* - id_etablissement | |||
* - condition | |||
* - date | |||
* - type | |||
* - orderby | |||
* - limit | |||
* | |||
* @param array $params | |||
* @return array | |||
*/ | |||
public static function findBy($params = []) | |||
{ | |||
if (!isset($params['id_etablissement'])) | |||
$params['id_etablissement'] = Yii::$app->user->identity->id_etablissement; | |||
$commandes = Commande::find() | |||
->with('commandeProduits', 'creditHistorique', 'pointVente') | |||
->joinWith(['production', 'user','user.userEtablissement']) | |||
->where(['production.id_etablissement' => $params['id_etablissement']]); | |||
if (isset($params['condition'])) | |||
$commandes = $commandes->andWhere($params['condition']); | |||
if (isset($params['date'])) | |||
$commandes = $commandes->andWhere(['production.date' => $params['date']]); | |||
if (isset($params['date_delete'])) { | |||
if($params['date_delete'] == 'NULL') { | |||
$commandes = $commandes->andWhere('commande.date_delete IS NULL'); | |||
} | |||
else { | |||
$commandes = $commandes->andWhere(['commande.date_delete' => $params['date_delete']]); | |||
} | |||
} | |||
if (isset($params['date_update'])) { | |||
if($params['date_update'] == 'NULL') { | |||
$commandes = $commandes->andWhere('commande.date_update IS NULL'); | |||
} | |||
else { | |||
$commandes = $commandes->andWhere(['commande.date_update' => $params['date_update']]); | |||
} | |||
} | |||
if (isset($params['type'])) | |||
$commandes = $commandes->andWhere(['commande.type' => $params['type']]); | |||
if (isset($params['orderby'])) | |||
$commandes = $commandes->orderBy($params['orderby']); | |||
else | |||
$commandes = $commandes->orderBy('date ASC'); | |||
if (isset($params['limit'])) | |||
$commandes = $commandes->limit($params['limit']); | |||
$commandes = $commandes->all(); | |||
return $commandes; | |||
} | |||
/** | |||
* Retourne l'état de la commande (livrée, modifiable ou en préparation) | |||
* | |||
* @return string | |||
*/ | |||
public function getEtat() | |||
{ | |||
$delai_commande = Etablissement::getConfig('delai_commande', $this->production->id_etablissement); | |||
$heure_limite = Etablissement::getConfig('heure_limite_commande', $this->production->id_etablissement); | |||
$date_commande = strtotime($this->production->date); | |||
$date_today = strtotime(date('Y-m-d')); | |||
$heure_today = date('G'); | |||
$nb_jours = (int) (($date_commande - $date_today) / (24 * 60 * 60)); | |||
if ($nb_jours <= 0) { | |||
return self::ETAT_LIVREE; | |||
} | |||
elseif ($nb_jours >= $delai_commande && | |||
($nb_jours != $delai_commande || | |||
($nb_jours == $delai_commande && $heure_today < $heure_limite))) | |||
{ | |||
return self::ETAT_MODIFIABLE; | |||
} | |||
return self::ETAT_PREPARATION; | |||
} | |||
/** | |||
* Retourne le type de la commande (client, automatique ou admin) sous forme | |||
* texte ou HTML. | |||
* | |||
* @param boolean $with_label | |||
* @return string | |||
*/ | |||
public function getStrType($with_label = false) { | |||
$class_label = ''; | |||
$str = ''; | |||
if ($this->type == self::TYPE_USER) { | |||
$class_label = 'success'; | |||
$str = 'Client'; | |||
} elseif ($this->type == self::TYPE_AUTO) { | |||
$class_label = 'default'; | |||
$str = 'Auto'; | |||
} elseif ($this->type == self::TYPE_ADMIN) { | |||
$class_label = 'warning'; | |||
$str = 'Vous'; | |||
} | |||
if ($with_label) | |||
return '<span class="label label-' . $class_label . '">' . $str . '</span>'; | |||
else | |||
return $str; | |||
} | |||
/** | |||
* Retourne l'historique de la commande (ajoutée, modifiée, supprimée) au format | |||
* HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrHistorique() | |||
{ | |||
$arr = [ | |||
'class' => 'create', | |||
'glyphicon' => 'plus', | |||
'str' => 'Ajoutée', | |||
'date' => $this->date | |||
] ; | |||
if(!is_null($this->date_update)) { | |||
$arr = [ | |||
'class' => 'update', | |||
'glyphicon' => 'pencil', | |||
'str' => 'Modifiée', | |||
'date' => $this->date_update | |||
] ; | |||
} | |||
if(!is_null($this->date_delete)) { | |||
$arr = [ | |||
'class' => 'delete', | |||
'glyphicon' => 'remove', | |||
'str' => 'Annulée', | |||
'date' => $this->date_delete | |||
] ; | |||
} | |||
$html = '<div class="small"><span class="'.$arr['class'].'"><span class="glyphicon glyphicon-'.$arr['glyphicon'].'"></span> '.$arr['str'].'</span> le <strong>'.date('d/m/Y à G\hi', strtotime($arr['date'])).'</strong></div>' ; | |||
return $html ; | |||
} | |||
/** | |||
* Retourne une classe identifiant l'historique de la commande (ajoutée, | |||
* modifiée, supprimée). | |||
* | |||
* @return string | |||
*/ | |||
public function getClassHistorique() | |||
{ | |||
if(!is_null($this->date_delete)) { | |||
return 'commande-delete' ; | |||
} | |||
if(!is_null($this->date_update)) { | |||
return 'commande-update' ; | |||
} | |||
return 'commande-create' ; | |||
} | |||
} |
@@ -1,283 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\models\Etablissement; | |||
use common\models\PointVente; | |||
use common\models\PointVenteUser; | |||
use common\models\Commande; | |||
use common\models\CommandeProduit; | |||
/** | |||
* This is the model class for table "commande_auto". | |||
* | |||
* @property integer $id | |||
* @property integer $id_user | |||
* @property integer $id_etablissement | |||
* @property integer $id_point_vente | |||
* @property string $date_debut | |||
* @property string $date_fin | |||
* @property integer $lundi | |||
* @property integer $mardi | |||
* @property integer $mercredi | |||
* @property integer $jeudi | |||
* @property integer $vendredi | |||
* @property integer $samedi | |||
* @property integer $dimanche | |||
* @property integer $periodicite_semaine | |||
* @property string $username | |||
* @property string $paiement_automatique | |||
*/ | |||
class CommandeAuto extends \yii\db\ActiveRecord | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'commande_auto'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_etablissement', 'id_point_vente'], 'required'], | |||
[['id_user', 'id_etablissement', 'id_point_vente', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'periodicite_semaine'], 'integer'], | |||
[['paiement_automatique'], 'boolean'], | |||
[['date_debut', 'date_fin', 'username'], 'safe'], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_user' => 'Utilisateur', | |||
'id_etablissement' => 'Etablissement', | |||
'id_point_vente' => 'Point de vente', | |||
'date_debut' => 'Date de début', | |||
'date_fin' => 'Date de fin', | |||
'lundi' => 'Lundi', | |||
'mardi' => 'Mardi', | |||
'mercredi' => 'Mercredi', | |||
'jeudi' => 'Jeudi', | |||
'vendredi' => 'Vendredi', | |||
'samedi' => 'Samedi', | |||
'dimanche' => 'Dimanche', | |||
'periodicite_semaine' => 'Périodicité', | |||
'paiement_automatique' => 'Paiement automatique' | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getUser() | |||
{ | |||
return $this->hasOne(User::className(), ['id' => 'id_user']); | |||
} | |||
public function getEtablissement() | |||
{ | |||
return $this->hasOne(Etablissement::className(), ['id' => 'id_etablissement']); | |||
} | |||
public function getPointVente() | |||
{ | |||
return $this->hasOne(PointVente::className(), ['id' => 'id_point_vente']); | |||
} | |||
public function getCommandeAutoProduit() | |||
{ | |||
return $this->hasMany(CommandeAutoProduit::className(), ['id_commande_auto' => 'id'])->with('produit'); | |||
} | |||
/** | |||
* Retourne les commandes récurrentes pour une date donnée. | |||
* | |||
* @param string $date | |||
* @return array | |||
*/ | |||
public static function getAll($date) | |||
{ | |||
$date = date('Y-m-d', strtotime($date)); | |||
// commandes auto | |||
$commandes_auto = self::find() | |||
->with('commandeAutoProduit') | |||
->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->all(); | |||
$arr_commandes_auto = []; | |||
foreach ($commandes_auto as $c) { | |||
// vérif dates | |||
if ($date >= $c->date_debut && | |||
(!$c->date_fin || $date <= $c->date_fin)) | |||
{ | |||
// périodicite | |||
$nb_jours = (strtotime($date) - strtotime($c->date_debut)) / (24 * 60 * 60); | |||
if ($nb_jours % ($c->periodicite_semaine * 7) < 7) { | |||
// jour de la semaine | |||
$jour = date('N', strtotime($date)); | |||
switch ($jour) { | |||
case 1 : $jour = 'lundi'; | |||
break; | |||
case 2 : $jour = 'mardi'; | |||
break; | |||
case 3 : $jour = 'mercredi'; | |||
break; | |||
case 4 : $jour = 'jeudi'; | |||
break; | |||
case 5 : $jour = 'vendredi'; | |||
break; | |||
case 6 : $jour = 'samedi'; | |||
break; | |||
case 7 : $jour = 'dimanche'; | |||
break; | |||
} | |||
if ($c->$jour) { | |||
$arr_commandes_auto[] = $c; | |||
} | |||
} | |||
} | |||
} | |||
return $arr_commandes_auto; | |||
} | |||
/** | |||
* Ajoute les commandes pour une date donnée à partir des commnandes | |||
* récurrentes. | |||
* | |||
* @param string $date | |||
* @param boolean $force | |||
*/ | |||
public static function addAll($date, $force = false) | |||
{ | |||
// production | |||
$production = Production::findOne([ | |||
'date' => date('Y-m-d', strtotime($date)), | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
]); | |||
if ($production) { | |||
$count_commandes_prod = Commande::find() | |||
->where(['id_production' => $production->id]) | |||
->count(); | |||
if (!$count_commandes_prod || $force) { | |||
$commandes_auto = self::getAll($date); | |||
foreach ($commandes_auto as $c) { | |||
$c->add($date); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Ajoute la commande récurrente pour une date donnée. | |||
* | |||
* @param string $date | |||
*/ | |||
public function add($date) | |||
{ | |||
// production | |||
$production = Production::find() | |||
->where([ | |||
'date' => date('Y-m-d', strtotime($date)), | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
]) | |||
->with('productionProduit') | |||
->one(); | |||
if ($production && count($this->commandeAutoProduit)) { | |||
// commande | |||
$commande = new Commande; | |||
if (strlen($this->username)) { | |||
$commande->username = $this->username; | |||
$commande->id_user = 0; | |||
} else { | |||
$commande->id_user = $this->id_user; | |||
} | |||
$commande->date = date('Y-m-d H:i:s'); | |||
$commande->type = Commande::TYPE_AUTO; | |||
$commande->id_point_vente = $this->id_point_vente; | |||
$commande->id_production = $production->id; | |||
$commande->paiement_automatique = $this->paiement_automatique ; | |||
$point_vente_user = PointVenteUser::find() | |||
->where(['id_point_vente' => $this->id_point_vente, 'id_user' => $this->id_user]) | |||
->one(); | |||
if ($point_vente_user && strlen($point_vente_user->commentaire)) { | |||
$commande->commentaire_point_vente = $point_vente_user->commentaire; | |||
} | |||
$commande->save(); | |||
// produits | |||
$montant_total = 0; | |||
$produits_add = false; | |||
foreach ($this->commandeAutoProduit as $commande_auto_produit) { | |||
$commande_produit = new CommandeProduit; | |||
$commande_produit->id_commande = $commande->id; | |||
$commande_produit->id_produit = $commande_auto_produit->produit->id; | |||
$commande_produit->quantite = $commande_auto_produit->quantite; | |||
$commande_produit->prix = $commande_auto_produit->produit->prix; | |||
$commande_produit->save(); | |||
$produits_add = true; | |||
} | |||
if (!$produits_add) { | |||
$commande->delete(); | |||
} | |||
} | |||
} | |||
} |
@@ -1,171 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use yii\base\Model; | |||
use common\models\CommandeAuto; | |||
use common\models\CommandeAutoProduit; | |||
/** | |||
* Login form | |||
*/ | |||
class CommandeAutoForm extends Model | |||
{ | |||
public $id; | |||
public $id_user; | |||
public $username; | |||
public $id_etablissement; | |||
public $id_point_vente; | |||
public $date_debut; | |||
public $date_fin; | |||
public $lundi; | |||
public $mardi; | |||
public $mercredi; | |||
public $jeudi; | |||
public $vendredi; | |||
public $samedi; | |||
public $dimanche; | |||
public $periodicite_semaine; | |||
public $produits; | |||
public $paiement_automatique; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_etablissement', 'periodicite_semaine', 'id_point_vente'], 'integer'], | |||
[['date_debut', 'date_fin'], 'date', 'format' => 'php:d/m/Y'], | |||
[['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'paiement_automatique'], 'boolean'], | |||
[['id_point_vente', 'id_etablissement', 'date_debut'], 'required', 'message' => 'Champs obligatoire'], | |||
[['produits', 'id_user', 'username'], 'safe'], | |||
['id_user', function ($attribute, $params) { | |||
if (!$this->id_user && !strlen($this->username)) { | |||
$this->addError($attribute, 'Vous devez sélectionner ou saisir un utilisateur.'); | |||
} | |||
}, 'skipOnEmpty' => false], | |||
]; | |||
} | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_user' => 'Utilisateur', | |||
'id_etablissement' => 'ID Etablissement', | |||
'id_point_vente' => 'Point de vente', | |||
'date_debut' => 'Date de début', | |||
'date_fin' => 'Date de fin', | |||
'lundi' => 'Lundi', | |||
'mardi' => 'Mardi', | |||
'mercredi' => 'Mercredi', | |||
'jeudi' => 'Jeudi', | |||
'vendredi' => 'Vendredi', | |||
'samedi' => 'Samedi', | |||
'dimanche' => 'Dimanche', | |||
'periodicite_semaine' => 'Périodicité (semaines)', | |||
'username' => 'Nom d\'utilisateur', | |||
'paiement_automatique' => 'Paiement automatique' | |||
]; | |||
} | |||
/** | |||
* Enregistre la CommandeAuto. | |||
* | |||
* @return boolean | |||
*/ | |||
public function save() | |||
{ | |||
if ($this->id) { | |||
$commandeauto = CommandeAuto::findOne($this->id); | |||
} | |||
else { | |||
$commandeauto = new CommandeAuto; | |||
} | |||
if ($commandeauto) { | |||
$commandeauto->id_user = $this->id_user; | |||
$commandeauto->username = $this->username; | |||
$commandeauto->id_etablissement = $this->id_etablissement; | |||
$commandeauto->id_point_vente = $this->id_point_vente; | |||
$commandeauto->date_debut = date( | |||
'Y-m-d', | |||
strtotime(str_replace('/', '-', $this->date_debut) | |||
)); | |||
if (strlen($this->date_fin)) { | |||
$commandeauto->date_fin = date( | |||
'Y-m-d', | |||
strtotime(str_replace('/', '-', $this->date_fin) | |||
)); | |||
} | |||
$commandeauto->lundi = $this->lundi; | |||
$commandeauto->mardi = $this->mardi; | |||
$commandeauto->mercredi = $this->mercredi; | |||
$commandeauto->jeudi = $this->jeudi; | |||
$commandeauto->vendredi = $this->vendredi; | |||
$commandeauto->samedi = $this->samedi; | |||
$commandeauto->dimanche = $this->dimanche; | |||
$commandeauto->periodicite_semaine = $this->periodicite_semaine; | |||
$commandeauto->paiement_automatique = $this->paiement_automatique; | |||
$commandeauto->save(); | |||
// produits | |||
if ($this->id) { | |||
CommandeAutoProduit::deleteAll(['id_commande_auto' => $this->id]); | |||
} | |||
foreach ($this->produits as $name_input => $quantite) { | |||
if ($quantite) { | |||
$id_produit = str_replace('produit_', '', $name_input); | |||
$commandeauto_produit = new CommandeAutoProduit; | |||
$commandeauto_produit->id_commande_auto = $commandeauto->id; | |||
$commandeauto_produit->id_produit = $id_produit; | |||
$commandeauto_produit->quantite = $quantite; | |||
$commandeauto_produit->save(); | |||
} | |||
} | |||
} | |||
return true; | |||
} | |||
} |
@@ -94,7 +94,7 @@ class ContactForm extends Model | |||
return Yii::$app->mailer->compose([ | |||
'html' => 'contact-html', | |||
'text' => 'contact-text'], [ 'content' => $this->body, | |||
'nom' => $this->name | |||
'name' => $this->name | |||
]) | |||
->setTo($email) | |||
->setFrom([$this->email => $this->name]) |
@@ -39,9 +39,10 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
use yii\db\ActiveRecord; | |||
use common\models\User; | |||
use common\models\Commande; | |||
use common\models\Order; | |||
use yii\helpers\Html; | |||
/** | |||
@@ -49,33 +50,33 @@ use yii\helpers\Html; | |||
* | |||
* @property integer $id | |||
* @property integer $id_user | |||
* @property integer $id_commande | |||
* @property integer $id_order | |||
* @property string $date | |||
* @property double $montant | |||
* @property double $amount | |||
* @property string $type | |||
* @property integer $id_etablissement | |||
* @property string $moyen_paiement | |||
* @property integer $id_producer | |||
* @property string $mean_payement | |||
*/ | |||
class CreditHistorique extends ActiveRecord | |||
class CreditHistory extends ActiveRecordCommon | |||
{ | |||
const TYPE_CREDIT_INITIAL = 'credit-initial'; | |||
const TYPE_CREDIT = 'credit'; | |||
const TYPE_PAIEMENT = 'paiement'; | |||
const TYPE_REMBOURSEMENT = 'remboursement'; | |||
const TYPE_DEBIT = 'debit'; | |||
const TYPE_INITIAL_CREDIT = 'initial-credit'; | |||
const TYPE_CREDIT = 'credit'; | |||
const TYPE_PAYMENT = 'payment'; | |||
const TYPE_REFUND = 'refund'; | |||
const TYPE_DEBIT = 'debit'; | |||
const MOYEN_CB = 'cb'; | |||
const MOYEN_ESPECES = 'especes'; | |||
const MOYEN_CHEQUE = 'cheque'; | |||
const MOYEN_AUTRE = 'autre'; | |||
const MEAN_PAYMENT_CREDIT_CARD = 'credit-card'; | |||
const MEAN_PAYMENT_MONEY = 'money'; | |||
const MEAN_PAYMENT_CHEQUE = 'cheque'; | |||
const MEAN_PAYMENT_OTHER = 'other'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'credit_historique'; | |||
return 'credit_history'; | |||
} | |||
/** | |||
@@ -84,11 +85,11 @@ class CreditHistorique extends ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['montant'], 'required'], | |||
[['id_user', 'id_user_action', 'id_commande', 'id_etablissement'], 'integer'], | |||
[['amount'], 'required'], | |||
[['id_user', 'id_user_action', 'id_order', 'id_producer'], 'integer'], | |||
[['date'], 'safe'], | |||
[['montant'], 'double'], | |||
[['type', 'moyen_paiement', 'commentaire'], 'string', 'max' => 255], | |||
[['amount'], 'double'], | |||
[['type', 'mean_payment', 'comment'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -101,15 +102,17 @@ class CreditHistorique extends ActiveRecord | |||
'id' => 'ID', | |||
'id_user' => 'Utilisateur', | |||
'id_user_action' => 'Utilisateur', | |||
'id_commande' => 'Commande', | |||
'id_order' => 'Commande', | |||
'date' => 'Date', | |||
'montant' => 'Montant', | |||
'amount' => 'Montant', | |||
'type' => 'Type', | |||
'id_etablissement' => 'Établissement', | |||
'moyen_paiement' => 'Moyen de paiement', | |||
'commentaire' => 'Commentaire', | |||
'id_producer' => 'Producteur', | |||
'mean_payment' => 'Moyen de paiement', | |||
'comment' => 'Commentaire', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
@@ -125,9 +128,23 @@ class CreditHistorique extends ActiveRecord | |||
return $this->hasOne(User::className(), ['id' => 'id_user_action']); | |||
} | |||
public function getCommande() | |||
public function getOrder() | |||
{ | |||
return $this->hasOne(Commande::className(), ['id' => 'id_commande']); | |||
return $this->hasOne(Order::className(), ['id' => 'id_order']); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => self::tableName().'.date ASc', | |||
'attribute_id_producer' => self::tableName().'.id_producer' | |||
] ; | |||
} | |||
/** | |||
@@ -135,16 +152,16 @@ class CreditHistorique extends ActiveRecord | |||
* | |||
* @return string | |||
*/ | |||
public function getLibelleType() | |||
public function getStrType() | |||
{ | |||
switch ($this->type) { | |||
case 'paiement': | |||
case self::TYPE_PAYMENT: | |||
return 'Paiement'; | |||
break; | |||
case 'remboursement': | |||
case self::TYPE_REFUND: | |||
return 'Remboursement'; | |||
break; | |||
case 'debit': | |||
case self::TYPE_DEBIT: | |||
return 'Débit'; | |||
break; | |||
} | |||
@@ -159,22 +176,23 @@ class CreditHistorique extends ActiveRecord | |||
public function save($runValidation = true, $attributeNames = NULL) | |||
{ | |||
// initialisation du commentaire avant sauvegarde | |||
$this->commentaire .= $this->getStrCommentaire() ; | |||
$this->comment .= $this->getStrComment() ; | |||
parent::save($runValidation, $attributeNames); | |||
// mise à jour du crédit au niveau de UserEtablissement | |||
$user_etablissement = UserEtablissement::findOne([ | |||
'id_user' => $this->id_user, | |||
'id_etablissement' => $this->id_etablissement | |||
]); | |||
if ($user_etablissement) { | |||
// mise à jour du crédit au niveau de UserProducer | |||
$userProducer = UserProducer::searchOne([ | |||
'id_user' => $this->id_user, | |||
'id_producer' => $this->id_producer | |||
]) ; | |||
if ($userProducer) { | |||
if ($this->isTypeCredit()) { | |||
$user_etablissement->credit += $this->montant; | |||
$userProducer->credit += $this->amount; | |||
} elseif ($this->isTypeDebit()) { | |||
$user_etablissement->credit -= $this->montant; | |||
$userProducer->credit -= $this->amount; | |||
} | |||
$user_etablissement->save(); | |||
$userProducer->save(); | |||
} | |||
} | |||
@@ -187,7 +205,7 @@ class CreditHistorique extends ActiveRecord | |||
{ | |||
return in_array($this->type, [ | |||
self::TYPE_DEBIT, | |||
self::TYPE_PAIEMENT, | |||
self::TYPE_PAYMENT, | |||
]) ; | |||
} | |||
@@ -200,8 +218,8 @@ class CreditHistorique extends ActiveRecord | |||
{ | |||
return in_array($this->type, [ | |||
self::TYPE_CREDIT, | |||
self::TYPE_CREDIT_INITIAL, | |||
self::TYPE_REMBOURSEMENT | |||
self::TYPE_INITIAL_CREDIT, | |||
self::TYPE_REFUND | |||
]) ; | |||
} | |||
@@ -211,43 +229,45 @@ class CreditHistorique extends ActiveRecord | |||
* @param boolean $format | |||
* @return float | |||
*/ | |||
public function getMontant($format = false) | |||
public function getAmount($format = false) | |||
{ | |||
if($format) | |||
return number_format($this->montant,2) .' €' ; | |||
else | |||
return $this->montant ; | |||
if($format) { | |||
return number_format($this->amount,2) .' €' ; | |||
} | |||
else { | |||
return $this->amount ; | |||
} | |||
} | |||
/** | |||
* Retourne le libellé du CreditHistorique informant de son type et | |||
* Retourne le libellé du CreditHistory informant de son type et | |||
* éventuellement de la date de sa commande associée. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrLibelle() | |||
public function getStrWording() | |||
{ | |||
$str = '' ; | |||
if($this->type == self::TYPE_CREDIT_INITIAL) { | |||
if($this->type == self::TYPE_INITIAL_CREDIT) { | |||
$str = 'Crédit initial' ; | |||
} | |||
elseif($this->type == self::TYPE_CREDIT) { | |||
$str = 'Crédit' ; | |||
} | |||
elseif($this->type == self::TYPE_PAIEMENT) { | |||
elseif($this->type == self::TYPE_PAYMENT) { | |||
$str = 'Paiement' ; | |||
} | |||
elseif($this->type == self::TYPE_REMBOURSEMENT) { | |||
elseif($this->type == self::TYPE_REFUND) { | |||
$str = 'Remboursement' ; | |||
} | |||
elseif($this->type == self::TYPE_DEBIT) { | |||
$str = 'Débit' ; | |||
} | |||
if($this->type == self::TYPE_PAIEMENT || $this->type == self::TYPE_REMBOURSEMENT) { | |||
if(isset($this->commande)) { | |||
$str .= '<br />Commande : '.date('d/m/Y',strtotime($this->commande->production->date)) ; | |||
if($this->type == self::TYPE_PAYMENT || $this->type == self::TYPE_REFUND) { | |||
if(isset($this->order)) { | |||
$str .= '<br />Commande : '.date('d/m/Y',strtotime($this->order->distribution->date)) ; | |||
} | |||
else { | |||
$str .= '<br />Commande supprimée' ; | |||
@@ -264,21 +284,21 @@ class CreditHistorique extends ActiveRecord | |||
* | |||
* @return string | |||
*/ | |||
public function getStrCommentaire() | |||
public function getStrComment() | |||
{ | |||
$str = '' ; | |||
if(strlen($this->commentaire)) { | |||
if(strlen($this->comment)) { | |||
$str .= '<br />' ; | |||
} | |||
$str .= $this->getStrLibelle() ; | |||
if(isset($this->commande)) { | |||
$str .= '<br />Montant de la commande : '.$this->commande->getMontant(true) ; | |||
$str .= $this->getStrWording() ; | |||
if(isset($this->order)) { | |||
$str .= '<br />Montant de la commande : '.$this->order->getAmount(Order::AMOUNT_TOTAL, true) ; | |||
} | |||
if(isset($this->user)) { | |||
$str .= '<br />Client : '.Html::encode($this->user->nom. ' '.$this->user->prenom) ; | |||
$str .= '<br />Client : '.Html::encode($this->user->name. ' '.$this->user->lastname) ; | |||
} | |||
if(isset($this->userAction)) { | |||
$str .= '<br />Action : '.Html::encode($this->userAction->nom. ' '.$this->userAction->prenom) ; | |||
$str .= '<br />Action : '.Html::encode($this->userAction->name. ' '.$this->userAction->lastname) ; | |||
} | |||
return $str ; | |||
@@ -299,18 +319,29 @@ class CreditHistorique extends ActiveRecord | |||
} | |||
/** | |||
* Retourne le moyen de paiement. | |||
* Retourne le libellé du moyen de paiement du CreditHistory courant. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrMeanPayment() | |||
{ | |||
self::getStrMeanPaymentBy($this->mean_payement) ; | |||
} | |||
/** | |||
* Retourne le libellé du moyen de paiement. | |||
* | |||
* @param string $meanPayment | |||
* @return string | |||
*/ | |||
public function getStrMoyenPaiement() | |||
public static function getStrMeanPaymentBy($meanPayment) | |||
{ | |||
switch($this->moyen_paiement) { | |||
case CreditHistorique::MOYEN_ESPECES : return 'Espèces' ; | |||
case CreditHistorique::MOYEN_CHEQUE : return 'Chèque' ; | |||
case CreditHistorique::MOYEN_CB : return 'Carte bancaire' ; | |||
case CreditHistorique::MOYEN_AUTRE : return 'Autre' ; | |||
default: return 'Crédit pain' ; | |||
switch($meanPayment) { | |||
case CreditHistory::MEAN_PAYMENT_MONEY : return 'Espèces' ; | |||
case CreditHistory::MEAN_PAYMENT_CHEQUE : return 'Chèque' ; | |||
case CreditHistory::MEAN_PAYMENT_CREDIT_CARD : return 'Carte bancaire' ; | |||
case CreditHistory::MEAN_PAYMENT_OTHER : return 'Autre' ; | |||
default: return 'Crédit' ; | |||
} | |||
} | |||
@@ -322,7 +353,7 @@ class CreditHistorique extends ActiveRecord | |||
public function strUserAction() | |||
{ | |||
if($this->userAction) { | |||
return $this->userAction->nom . ' ' . $this->userAction->prenom ; | |||
return $this->userAction->name . ' ' . $this->userAction->lastname ; | |||
} | |||
else { | |||
return 'Système' ; |
@@ -39,33 +39,34 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
use common\models\DeveloppementPriorite; | |||
/** | |||
* This is the model class for table "developpement". | |||
* This is the model class for table "development". | |||
* | |||
* @property integer $id | |||
* @property string $objet | |||
* @property string $subject | |||
* @property string $description | |||
* @property string $date | |||
* @property integer $avancement | |||
* @property string $statut | |||
* @property double $estimation_temps | |||
* @property integer $progress | |||
* @property string $status | |||
* @property double $time_estimate | |||
*/ | |||
class Developpement extends \yii\db\ActiveRecord | |||
class Development extends ActiveRecordCommon | |||
{ | |||
const STATUT_OPEN = 'open'; | |||
const STATUT_CLOSED = 'closed'; | |||
const TYPE_EVOLUTION = 'evolution'; | |||
const TYPE_BUG = 'bug'; | |||
const STATUS_OPEN = 'open'; | |||
const STATUS_CLOSED = 'closed'; | |||
const TYPE_EVOLUTION = 'evolution'; | |||
const TYPE_BUG = 'bug'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'developpement'; | |||
return 'development'; | |||
} | |||
/** | |||
@@ -74,12 +75,12 @@ class Developpement extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['objet', 'date'], 'required'], | |||
[['id', 'avancement'], 'integer'], | |||
[['subject', 'date'], 'required'], | |||
[['id', 'progress'], 'integer'], | |||
[['description'], 'string'], | |||
[['date', 'date_livraison'], 'safe'], | |||
[['estimation_temps'], 'number'], | |||
[['objet', 'statut', 'type'], 'string', 'max' => 255], | |||
[['date', 'date_delivery'], 'safe'], | |||
[['time_estimate'], 'number'], | |||
[['subject', 'status', 'type'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -87,14 +88,21 @@ class Developpement extends \yii\db\ActiveRecord | |||
* Relations | |||
*/ | |||
public function getDeveloppementPriorite() | |||
public function getDevelopmentPriority() | |||
{ | |||
return $this->hasMany(DeveloppementPriorite::className(), ['id_developpement' => 'id'])->with('etablissement'); | |||
return $this->hasMany( | |||
DevelopmentPriority::className(), | |||
['id_development' => 'id']) | |||
->with('producer'); | |||
} | |||
public function getDeveloppementPrioriteCurrentEtablissement() | |||
public function getDevelopmentPriorityCurrentProducer() | |||
{ | |||
return $this->hasOne(DeveloppementPriorite::className(), ['id_developpement' => 'id'])->where(['id_etablissement' => Yii::$app->user->identity->id_etablissement])->with('etablissement'); | |||
return $this->hasOne( | |||
DevelopmentPriority::className(), | |||
['id_development' => 'id']) | |||
->where(['id_producer' => Producer::getId()]) | |||
->with('producer'); | |||
} | |||
/** | |||
@@ -104,29 +112,45 @@ class Developpement extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'objet' => 'Sujet', | |||
'subject' => 'Sujet', | |||
'description' => 'Description', | |||
'date' => 'Date', | |||
'avancement' => 'Avancement', | |||
'statut' => 'Statut', | |||
'estimation_temps' => 'Estimation temps', | |||
'progress' => 'Avancement', | |||
'status' => 'Statut', | |||
'time_estimate' => 'Estimation temps', | |||
'type' => 'Type', | |||
'date_livraison' => 'Date de livraison' | |||
'date_delivery' => 'Date de livraison' | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => ['developmentPriority', 'developmentPriorityCurrentProducer'], | |||
'join_with' => [], | |||
'orderby' => 'date DESC', | |||
'attribute_id_producer' => '' | |||
] ; | |||
} | |||
/** | |||
* Définit une date de livraison. | |||
* | |||
* @param string $date | |||
*/ | |||
public function setDateLivraison($date = '') { | |||
if (strlen($date)) | |||
$this->date_livraison = $date; | |||
if (strlen($this->date_livraison)) | |||
$this->date_livraison = date('Y-m-d', strtotime($this->date_livraison)); | |||
public function setDateDelivery($date = '') | |||
{ | |||
if (strlen($date)) { | |||
$this->date_delivery = $date; | |||
} | |||
if (strlen($this->date_delivery)) { | |||
$this->date_delivery = date('Y-m-d', strtotime($this->date_delivery)); | |||
} | |||
} | |||
} |
@@ -39,27 +39,28 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\models\Etablissement; | |||
use common\components\ActiveRecordCommon ; | |||
use common\models\Producer; | |||
/** | |||
* This is the model class for table "developpement_priorite". | |||
* This is the model class for table "development_priority". | |||
* | |||
* @property integer $id_user | |||
* @property integer $id_developpement | |||
* @property integer $id_development | |||
*/ | |||
class DeveloppementPriorite extends \yii\db\ActiveRecord | |||
class DevelopmentPriority extends ActiveRecordCommon | |||
{ | |||
const PRIORITE_HAUTE = 'haute'; | |||
const PRIORITE_NORMALE = 'normale'; | |||
const PRIORITE_BASSE = 'basse'; | |||
const PRIORITY_HIGH = 'high'; | |||
const PRIORITY_NORMAL = 'normal'; | |||
const PRIORITY_LOW = 'low'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'developpement_priorite'; | |||
return 'development_priority'; | |||
} | |||
/** | |||
@@ -68,9 +69,9 @@ class DeveloppementPriorite extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_etablissement', 'id_developpement'], 'required'], | |||
[['id_etablissement', 'id_developpement'], 'integer'], | |||
[['priorite'], 'string'], | |||
[['id_producer', 'id_development'], 'required'], | |||
[['id_producer', 'id_development'], 'integer'], | |||
[['priority'], 'string'], | |||
]; | |||
} | |||
@@ -78,9 +79,9 @@ class DeveloppementPriorite extends \yii\db\ActiveRecord | |||
* Relations | |||
*/ | |||
public function getEtablissement() | |||
public function getProducer() | |||
{ | |||
return $this->hasOne(Etablissement::className(), ['id' => 'id_etablissement']); | |||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||
} | |||
/** | |||
@@ -89,25 +90,39 @@ class DeveloppementPriorite extends \yii\db\ActiveRecord | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id_etablissement' => 'Établissement', | |||
'id_developpement' => 'Développement', | |||
'priorite' => 'Priorité' | |||
'id_producer' => 'Producteur', | |||
'id_producer' => 'Développement', | |||
'priority' => 'Priorité' | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => 'development_priority.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Retourne la priorité. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrPriorite() | |||
public function getStrPriority() | |||
{ | |||
switch ($this->priorite) { | |||
case self::PRIORITE_BASSE : return 'Basse'; | |||
switch ($this->priority) { | |||
case self::PRIORITY_LOW : return 'Basse'; | |||
break; | |||
case self::PRIORITE_NORMALE : return 'Normale'; | |||
case self::PRIORITY_NORMAL : return 'Normale'; | |||
break; | |||
case self::PRIORITE_HAUTE : return 'Haute'; | |||
case self::PRIORITY_HIGH : return 'Haute'; | |||
break; | |||
default: return 'Non définie'; | |||
break; | |||
@@ -119,17 +134,20 @@ class DeveloppementPriorite extends \yii\db\ActiveRecord | |||
* | |||
* @return string | |||
*/ | |||
public function getClassCssStyleBouton() | |||
public function getClassCssStyleButton() | |||
{ | |||
$style_bouton = 'default'; | |||
if ($this->priorite == DeveloppementPriorite::PRIORITE_BASSE) | |||
$style_bouton = 'info'; | |||
elseif ($this->priorite == DeveloppementPriorite::PRIORITE_NORMALE) | |||
$style_bouton = 'warning'; | |||
elseif ($this->priorite == DeveloppementPriorite::PRIORITE_HAUTE) | |||
$style_bouton = 'danger'; | |||
return $style_bouton; | |||
$styleButton = 'default'; | |||
if ($this->priority == DevelopmentPriority::PRIORITY_LOW) { | |||
$styleButton = 'info'; | |||
} | |||
elseif ($this->priority == DevelopmentPriority::PRIORITY_NORMAL) { | |||
$styleButton = 'warning'; | |||
} | |||
elseif ($this->priority == DevelopmentPriority::PRIORITY_HIGH) { | |||
$styleButton = 'danger'; | |||
} | |||
return $styleButton; | |||
} | |||
} |
@@ -0,0 +1,228 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
use common\models\Order; | |||
use common\models\Distribution; | |||
/** | |||
* This is the model class for table "production". | |||
* | |||
* @property integer $id | |||
* @property string $date | |||
* @property integer $actif | |||
*/ | |||
class Distribution extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'distribution'; | |||
} | |||
public function getProducer() | |||
{ | |||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['date'], 'required'], | |||
[['date'], 'safe'], | |||
[['active'], 'integer'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'date' => 'Date', | |||
'active' => 'Actif', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getOrder() | |||
{ | |||
return $this->hasMany(Order::className(), ['id_distribution' => 'id']); | |||
} | |||
public function getProductDistribution() | |||
{ | |||
return $this->hasMany(ProductDistribution::className(), ['id_distribution' => 'id']); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => 'date ASC', | |||
'attribute_id_producer' => 'distribution.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Retourne si un produit est actif ou non. | |||
* | |||
* @param integer $idProduit | |||
* @return boolean | |||
*/ | |||
public function isActiveProduct($idProduit) | |||
{ | |||
if ($idProduit && | |||
isset($this->productDistribution) && | |||
count($this->productDistribution) > 0) | |||
{ | |||
foreach ($this->productDistribution as $productDistribution) { | |||
if ($productDistribution['id_product'] == $idProduct && | |||
$productDistribution['active']) | |||
{ | |||
return true; | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* Initialise un jour de production. | |||
* | |||
* @param string $date | |||
* @return Production | |||
*/ | |||
public static function initDistribution($date) | |||
{ | |||
$distribution = null ; | |||
if ($date != '') { | |||
$distribution = Distribution::find() | |||
->where(['date' => $date]) | |||
->one() ; | |||
if (!$distribution) { | |||
$distribution = new Distribution; | |||
$distribution->date = $date; | |||
$distribution->delivery = 1; | |||
$distribution->id_producer = Producer::getId(); | |||
$distribution->save(); | |||
} | |||
} | |||
// point_sale_distribution à définir s'ils ne sont pas initialisés | |||
if ($distribution) { | |||
$countPointSaleDistribution = PointSaleDistribution::searchCount([ | |||
'id_distribution' => $distribution->id | |||
]) ; | |||
if (!$countPointSaleDistribution) { | |||
PointSaleDistribution::setAll($distribution->id, true); | |||
} | |||
} | |||
// init produits sélectionnés pour cette production | |||
$products = Product::searchAll(); | |||
if ($distribution) { | |||
$dayDistribution = date('N', strtotime($distribution->date)); | |||
$productsDistribution = ProductDistribution::searchAll([ | |||
'id_distribution' => $distribution->id | |||
]) ; | |||
if (!count($productsDistribution)) { | |||
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(); | |||
} | |||
} | |||
} | |||
return $distribution ; | |||
} | |||
} |
@@ -1,355 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\helpers\Departements; | |||
use yii\helpers\Html; | |||
/** | |||
* This is the model class for table "etablissement". | |||
* | |||
* @property integer $id | |||
* @property string $nom | |||
* @property string $siret | |||
* @property string $logo | |||
* @property string $photo | |||
* @property string $description | |||
* @property string $code_postal | |||
* @property string $ville | |||
*/ | |||
class Etablissement extends \yii\db\ActiveRecord | |||
{ | |||
const PAIEMENT_OK = 'ok'; | |||
const PAIEMENT_ESSAI = 'essai'; | |||
const PAIEMENT_ESSAI_TERMINE = 'essai-terminee'; | |||
const PAIEMENT_RETARD = 'retard-paiement'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'etablissement'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['nom', 'siret', 'heure_limite_commande', 'delai_commande','type'], 'required'], | |||
[['heure_limite_commande', 'delai_commande'], 'integer'], | |||
['heure_limite_commande', 'in', 'range' => [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]], | |||
['delai_commande', 'in', 'range' => [1, 2, 3, 4, 5, 6, 7]], | |||
['code', function($attribute, $params) { | |||
$code = $this->$attribute; | |||
$etablissement = Etablissement::findOne(['code' => $code]); | |||
if ($etablissement && $etablissement->id != $this->id) { | |||
$this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.'); | |||
} | |||
}], | |||
[['description', 'infos_commande','slug'], 'string'], | |||
[['solde_negatif', 'credit_pain', 'actif'], 'boolean'], | |||
[['nom', 'siret', 'logo', 'photo', 'code_postal', 'ville', 'code','type'], 'string', 'max' => 255], | |||
['prix_libre', 'double'], | |||
['prix_libre', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'nom' => 'Nom', | |||
'siret' => 'Siret', | |||
'logo' => 'Logo', | |||
'photo' => 'Photo', | |||
'description' => 'Description', | |||
'code_postal' => 'Code postal', | |||
'ville' => 'Ville', | |||
'code' => 'Code', | |||
'heure_limite_commande' => 'Heure limite de commande', | |||
'delai_commande' => 'Délai de commande', | |||
'solde_negatif' => 'Solde négatif', | |||
'credit_pain' => 'Crédit pain', | |||
'actif' => 'Actif', | |||
'date_creation' => 'Date de création', | |||
'infos_commande' => 'Informations', | |||
'slug' => 'Slug', | |||
'type' => 'Type d\'établissement' | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getUserEtablissement() | |||
{ | |||
return $this->hasMany( | |||
UserEtablissement::className(), | |||
['id_etablissement' => 'id'] | |||
); | |||
} | |||
public function getUser() | |||
{ | |||
return $this->hasMany(User::className(), ['id_etablissement' => 'id']); | |||
} | |||
public function getContact() | |||
{ | |||
return $this->hasMany(User::className(),['id_etablissement' => 'id']) | |||
->where(['status' => User::STATUS_BOULANGER]); | |||
} | |||
/** | |||
* Retourne la liste des établissements pour l'initialisation d'une liste | |||
* sélective. | |||
* | |||
* @return array | |||
*/ | |||
public static function getEtablissementsPopulateDropdown() | |||
{ | |||
$etablissements_dispos = Etablissement::find() | |||
->where(['actif' => 1]) | |||
->orderby('code_postal, ville ASC') | |||
->all(); | |||
$departements = Departements::get(); | |||
$data_etablissements_dispos = []; | |||
$options_etablissements_dispos = []; | |||
foreach ($etablissements_dispos as $e) { | |||
if (!key_exists('d' . substr($e->code_postal, 0, 2), $data_etablissements_dispos)) { | |||
$data_etablissements_dispos['d' . substr($e->code_postal, 0, 2)] = '<strong>' . $departements[substr($e->code_postal, 0, 2)] . '</strong>'; | |||
$options_etablissements_dispos['d' . substr($e->code_postal, 0, 2)] = ['disabled' => true]; | |||
} | |||
$data_etablissements_dispos[$e->id] = '<span class="glyphicon glyphicon-lock"></span> ' . Html::encode($e->nom) . ' - ' . Html::encode($e->code_postal) . ' ' . Html::encode($e->ville) . ' <span class="glyphicon glyphicon-lock"></span>'; | |||
if (strlen($e->code)) | |||
$options_etablissements_dispos[$e->id] = ['class' => 'lock']; | |||
} | |||
return ['data' => $data_etablissements_dispos, 'options' => $options_etablissements_dispos]; | |||
} | |||
/** | |||
* Retourne le CA de l'établissement pour un mois donné. | |||
* | |||
* @param string $periode | |||
* @param boolean $format | |||
* @return string | |||
*/ | |||
public function getCA($periode = '', $format = false) | |||
{ | |||
if (!$periode) | |||
$periode = date('Y-m'); | |||
$connection = Yii::$app->getDb(); | |||
$command = $connection->createCommand(' | |||
SELECT SUM(IF(produit.vrac,0,commande_produit.prix * commande_produit.quantite)) AS CA | |||
FROM commande, commande_produit, production, produit | |||
WHERE commande.id = commande_produit.id_commande | |||
AND production.id_etablissement = :id_etablissement | |||
AND commande.id_production = production.id | |||
AND commande_produit.id_produit = produit.id | |||
AND production.date > :date_debut | |||
AND production.date < :date_fin', [ | |||
':date_debut' => date('Y-m-31', strtotime("-1 month", strtotime($periode))), | |||
':date_fin' => date('Y-m-01', strtotime("+1 month", strtotime($periode))), | |||
':id_etablissement' => $this->id | |||
]); | |||
$result = $command->queryOne(); | |||
$ca = $result['CA']; | |||
if ($format) | |||
return number_format($ca, 2) . ' €'; | |||
else | |||
return $ca; | |||
} | |||
/** | |||
* Retourne le montant à facturer pour une période donnée. | |||
* | |||
* @param string $periode | |||
* @param float $ca | |||
* @param boolean $format | |||
* @return string | |||
*/ | |||
public function getMontantFacturer($periode = '', $ca = 0, $format = false) | |||
{ | |||
if (!$periode) | |||
$periode = date('Y-m'); | |||
if (!$ca) | |||
$ca = $this->getCA($periode); | |||
if ($ca < 500) { | |||
$montant = 0; | |||
} else { | |||
$montant = $ca * 0.02; | |||
} | |||
if ($format) { | |||
return number_format($montant, 2) . ' €'; | |||
} else { | |||
return $montant; | |||
} | |||
} | |||
/** | |||
* Retourne la facture d'une période donnée. | |||
* | |||
* @param string $periode | |||
* @return Facture | |||
*/ | |||
public function getFacture($periode = '') | |||
{ | |||
if (!$periode) | |||
$periode = date('Y-m', strtotime('-1 month')); | |||
$facture = Facture::find() | |||
->where('id_etablissement = :id_etablissement') | |||
->andWhere('periode = :periode') | |||
->addParams([ | |||
':id_etablissement' => $this->id, | |||
':periode' => $periode, | |||
]) | |||
->one(); | |||
return $facture; | |||
} | |||
/** | |||
* Retourne la facture du mois dernier. | |||
* | |||
* @return Facture | |||
*/ | |||
public function factureMoisDernier() | |||
{ | |||
return $this->getFacture(date('Y-m', strtotime('-1 month'))); | |||
} | |||
/** | |||
* Retourne une configuration d'un établissement donné. | |||
* | |||
* @param string $config | |||
* @param integer $id_etablissement | |||
* @return mixed | |||
*/ | |||
public static function getConfig($config = '', $id_etablissement = 0) | |||
{ | |||
if (strlen($config)) { | |||
if (!$id_etablissement) { | |||
$id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
} | |||
$etablissement = self::findOne($id_etablissement); | |||
if ($etablissement) { | |||
return $etablissement->$config; | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* Retourne le montant de l'abonnement à prix libre définit par | |||
* l'établissement | |||
* | |||
* @param boolean $format | |||
* @return mixed | |||
*/ | |||
public function getPrixLibre($format = true) | |||
{ | |||
if (!is_null($this->prix_libre)) { | |||
if($format) { | |||
return number_format($this->prix_libre, 2, ',', false) . ' € HT'; | |||
} | |||
else { | |||
return $this->prix_libre; | |||
} | |||
} | |||
} | |||
/** | |||
* Lie un utilisateur à un producteur. | |||
* | |||
* @param integer $id_user | |||
* @param integer $id_producer | |||
* @return UserProducer | |||
*/ | |||
public static function addUser($id_user, $id_producer) | |||
{ | |||
$user_producer = UserEtablissement::find() | |||
->where([ | |||
'id_user' => $id_user, | |||
'id_etablissement' => $id_producer | |||
])->one(); | |||
if (!$user_producer) { | |||
$new_user_producer = new UserEtablissement; | |||
$new_user_producer->id_etablissement = $id_producer; | |||
$new_user_producer->id_user = $id_user; | |||
$new_user_producer->credit = 0; | |||
$new_user_producer->actif = 1; | |||
$new_user_producer->favoris = 1; | |||
$new_user_producer->save(); | |||
} else { | |||
if (!$user_producer->actif) { | |||
$user_producer->actif = 1; | |||
$user_producer->save(); | |||
} | |||
} | |||
return $user_producer ; | |||
} | |||
} | |||
@@ -39,22 +39,23 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "facture". | |||
* | |||
* @property integer $id | |||
* @property integer $id_etablissement | |||
* @property integer $id_producer | |||
* @property string $date | |||
* @property string $reference | |||
* @property string $libelle | |||
* @property string $texte | |||
* @property double $montant_ht | |||
* @property integer $paye | |||
* @property string $date_paiement | |||
* @property string $methode_paiement | |||
* @property string $wording | |||
* @property string $text | |||
* @property double $amount_without_tax | |||
* @property integer $paid | |||
* @property string $date_payment | |||
* @property string $mean_payment | |||
*/ | |||
class Facture extends \yii\db\ActiveRecord | |||
class Invoice extends ActiveRecordCommon | |||
{ | |||
/** | |||
@@ -62,7 +63,7 @@ class Facture extends \yii\db\ActiveRecord | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'facture'; | |||
return 'invoice'; | |||
} | |||
/** | |||
@@ -71,11 +72,11 @@ class Facture extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_etablissement', 'paye'], 'integer'], | |||
[['date', 'date_paiement'], 'safe'], | |||
[['id_producer', 'paye'], 'integer'], | |||
[['date', 'date_payment'], 'safe'], | |||
[['texte'], 'string'], | |||
[['montant_ht', 'ca'], 'number'], | |||
[['reference', 'libelle', 'methode_paiement'], 'string', 'max' => 255], | |||
[['amount_without_tax', 'ca'], 'number'], | |||
[['reference', 'wording', 'mean_payment'], 'string', 'max' => 255], | |||
]; | |||
} | |||
@@ -83,9 +84,9 @@ class Facture extends \yii\db\ActiveRecord | |||
* Relations | |||
*/ | |||
public function getEtablissement() | |||
public function getProducer() | |||
{ | |||
return $this->hasOne(Etablissement::className(), ['id' => 'id_etablissement']); | |||
return $this->hasOne(Producer::className(), ['id' => 'id_producer']); | |||
} | |||
/** | |||
@@ -95,29 +96,42 @@ class Facture extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_etablissement' => 'Id Etablissement', | |||
'id_producer' => 'Producteur', | |||
'date' => 'Date', | |||
'reference' => 'Reference', | |||
'libelle' => 'Libelle', | |||
'texte' => 'Texte', | |||
'montant_ht' => 'Montant Ht', | |||
'paye' => 'Paye', | |||
'date_paiement' => 'Date Paiement', | |||
'methode_paiement' => 'Methode Paiement', | |||
'ca' => 'CA' | |||
'wording' => 'Libellé', | |||
'text' => 'Texte', | |||
'amount_without_tax' => 'Montant Ht', | |||
'paid' => 'Paye', | |||
'date_payment' => 'Date de paiement', | |||
'means_payment' => 'Méthode payment', | |||
'turnover' => 'CA' | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() | |||
{ | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => self::tableName().'.date ASc', | |||
'attribute_id_producer' => self::tableName().'.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Retourne la dernière facture émise. | |||
* | |||
* @return Facture | |||
*/ | |||
public static function getLastFacture() | |||
public static function getLastInvoice() | |||
{ | |||
return Facture::find() | |||
->orderBy('reference DESC') | |||
->one(); | |||
return self::searchOne([],['orderby'=>'reference DESC']) ; | |||
} | |||
} |
@@ -46,14 +46,13 @@ use yii\base\Model; | |||
*/ | |||
class LoginForm extends Model | |||
{ | |||
public $username; | |||
public $password; | |||
public $rememberMe = true; | |||
public $email; | |||
private $_user = false; | |||
public $code ; | |||
public $id_etablissement ; | |||
public $id_producer ; | |||
/** | |||
* @inheritdoc | |||
@@ -72,26 +71,26 @@ class LoginForm extends Model | |||
// password is validated by validatePassword() | |||
['password', 'validatePassword'], | |||
['code', 'required', 'message' => 'Champs obligatoire', 'when' => function($model) { | |||
$etablissement = Etablissement::findOne($this->id_etablissement); | |||
if ($etablissement) { | |||
return strlen($etablissement->code); | |||
$producer = Producer::findOne($this->id_producer); | |||
if ($producer) { | |||
return strlen($producer->code); | |||
} else { | |||
return false; | |||
} | |||
}], | |||
['code', function($attribute, $params) { | |||
$code = $this->$attribute; | |||
$etablissement = Etablissement::findOne($this->id_etablissement); | |||
$producer = Producer::findOne($this->id_producer); | |||
if ($etablissement && strtolower(trim($code)) != strtolower(trim($etablissement->code))) { | |||
if ($producer && strtolower(trim($code)) != strtolower(trim($producer->code))) { | |||
$this->addError($attribute, 'Code incorrect'); | |||
} | |||
}], | |||
['id_etablissement', 'integer'], | |||
['id_etablissement', function($attribute, $params) { | |||
if ($this->id_etablissement) { | |||
$etablissement = Etablissement::findOne($this->id_etablissement); | |||
if (!$etablissement) { | |||
['id_producer', 'integer'], | |||
['id_producer', function($attribute, $params) { | |||
if ($this->id_producer) { | |||
$producer = Producer::findOne($this->id_producer); | |||
if (!$producer) { | |||
$this->addError($attribute, 'Ce producteur n\'existe pas.'); | |||
} | |||
} | |||
@@ -124,7 +123,7 @@ class LoginForm extends Model | |||
public function login() | |||
{ | |||
if ($this->validate()) { | |||
$this->updateDerniereConnexion(); | |||
$this->updateLastConnection(); | |||
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); | |||
} else { | |||
return false; | |||
@@ -153,16 +152,17 @@ class LoginForm extends Model | |||
'password' => 'Mot de passe', | |||
'rememberMe' => 'Se souvenir de moi', | |||
'email' => 'Email', | |||
'id_producer' => 'Producteur' | |||
]; | |||
} | |||
/** | |||
* Met à jour la date de dernière connexion de l'utilisateur. | |||
*/ | |||
public function updateDerniereConnexion() | |||
public function updateLastConnection() | |||
{ | |||
$user = $this->getUser(); | |||
$user->date_derniere_connexion = date('Y-m-d H:i:s'); | |||
$user->date_last_connection = date('Y-m-d H:i:s'); | |||
$user->save(); | |||
} | |||
@@ -0,0 +1,618 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use yii\helpers\Html; | |||
use common\models\Producer; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "order". | |||
* | |||
* @property integer $id | |||
* @property integer $id_user | |||
* @property string $date | |||
* @property string $date_update | |||
* @property integer $id_point_sale | |||
* @property integer $id_distribution | |||
* @property boolean $auto_payment | |||
*/ | |||
class Order extends ActiveRecordCommon | |||
{ | |||
var $amount = 0 ; | |||
var $paid_amount = 0 ; | |||
var $weight = 0 ; | |||
const ORIGIN_AUTO = 'auto'; | |||
const ORIGIN_USER = 'user'; | |||
const ORIGIN_ADMIN = 'admin'; | |||
const PAYMENT_PAID = 'paid'; | |||
const PAYMENT_UNPAID = 'unpaid'; | |||
const PAYMENT_SURPLUS = 'surplus'; | |||
const AMOUNT_TOTAL = 'total' ; | |||
const AMOUNT_PAID = 'paid' ; | |||
const AMOUNT_REMAINING = 'remaining' ; | |||
const AMOUNT_SURPLUS = 'surplus' ; | |||
const STATE_OPEN = 'open'; | |||
const STATE_PREPARATION = 'preparation'; | |||
const STATE_DELIVERED = 'delivered'; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'order'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_user', 'date', 'id_point_sale', 'id_distribution'], 'required', 'message' => ''], | |||
[['id_user', 'id_point_sale', 'id_distribution'], 'integer'], | |||
[['auto_payment'], 'boolean'], | |||
[['date', 'date_update', 'comment', 'comment_point_sale'], 'safe'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_user' => 'Id User', | |||
'date' => 'Date', | |||
'date_update' => 'Date de modification', | |||
'id_point_sale' => 'Point de vente', | |||
'id_distribution' => 'Date de distribution', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getUser() | |||
{ | |||
return $this->hasOne(User::className(), ['id' => 'id_user']); | |||
} | |||
public function getProductOrder() | |||
{ | |||
return $this->hasMany(ProductOrder::className(),['id_order' => 'id']) | |||
->with('product'); | |||
} | |||
public function getDistribution() | |||
{ | |||
return $this->hasOne(Distribution::className(), ['id' => 'id_distribution']) | |||
->with('producer'); | |||
} | |||
public function getPointSale() | |||
{ | |||
return $this->hasOne(PointSale::className(), ['id' => 'id_point_sale']) | |||
->with('userPointSale'); | |||
} | |||
public function getCreditHistory() | |||
{ | |||
return $this->hasMany(CreditHistory::className(), ['id_order' => 'id']); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => ['productOrder', 'creditHistory', 'pointSale'], | |||
'join_with' => ['distribution', 'user', 'user.userProducer'], | |||
'orderby' => 'order.date ASC', | |||
'attribute_id_producer' => 'distribution.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Initialise le montant total, le montant déjà payé et le poids de la | |||
* commande. | |||
*/ | |||
public function init() | |||
{ | |||
$this->initAmount() ; | |||
$this->initPaidAmount() ; | |||
return $this ; | |||
} | |||
/** | |||
* Initialise le montant de la commande. | |||
* | |||
*/ | |||
public function initAmount() { | |||
if (isset($this->productOrder)) { | |||
foreach ($this->productOrder as $productOrder) { | |||
if ($productOrder->sale_mode == Product::SALE_MODE_UNIT) { | |||
$this->amount += $productOrder->price * $productOrder->quantity ; | |||
if(isset($productOrder->product)) { | |||
$this->weight += ($productOrder->quantity * $productOrder->product->weight) / 1000 ; | |||
} | |||
} | |||
elseif ($productOrder->sale_mode == Product::SALE_MODE_WEIGHT) { | |||
$this->amount += $productOrder->price * $productOrder->quantity / 1000; | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Initialise le montant payé de la commande et le retourne. | |||
* | |||
* @return float | |||
*/ | |||
public function initPaidAmount() | |||
{ | |||
$history = CreditHistory::find() | |||
->where(['id_order' => $this->id]) | |||
->all(); | |||
$this->paid_amount = 0 ; | |||
if(count($history)) { | |||
foreach ($history as $ch) { | |||
if ($ch->type == CreditHistory::TYPE_PAYMENT) { | |||
$this->paid_amount += $ch->amount; | |||
} | |||
elseif ($ch->type == CreditHistory::TYPE_REFUND) { | |||
$this->paid_amount -= $ch->amount; | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne le montant de la commande (total, payé, restant, ou en surplus). | |||
* | |||
* @param boolean $format | |||
* @return float | |||
*/ | |||
public function getAmount($type = self::AMOUNT_TOTAL, $format = false) | |||
{ | |||
switch($type) { | |||
case self::AMOUNT_TOTAL : | |||
$amount = $this->amount ; | |||
break ; | |||
case self::AMOUNT_PAID : | |||
$this->initPaidAmount() ; | |||
$amount = $this->paid_amount ; | |||
break ; | |||
case self::AMOUNT_REMAINING : | |||
$amount = $this->getAmount(self::AMOUNT_TOTAL) | |||
- $this->getAmount(self::AMOUNT_PAID) ; | |||
break ; | |||
case self::AMOUNT_EXCESS : | |||
$amount = $this->getAmount(self::AMOUNT_PAID) | |||
- $this->getAmount(self::AMOUNT_TOTAL) ; | |||
break ; | |||
} | |||
if ($format) { | |||
return number_format($amount, 2) . ' €'; | |||
} | |||
else { | |||
return $amount; | |||
} | |||
} | |||
/** | |||
* Retourne les informations relatives à la commande au format JSON. | |||
* | |||
* @return string | |||
*/ | |||
public function getDataJson() | |||
{ | |||
$order = Order::searchOne(['order.id' => $this->id]) ; | |||
$jsonOrder = [] ; | |||
if($order) { | |||
$jsonOrder = [ | |||
'products' => [], | |||
'amount' => $order->amount, | |||
'str_amount' => $order->getAmount(self::AMOUNT_TOTAL, true), | |||
'paid_amount' => $order->getAmount(self::AMOUNT_PAID), | |||
'comment' => $order->comment, | |||
]; | |||
foreach ($order->productOrder as $productOrder) { | |||
$jsonOrder['products'][$productOrder->id_product] = $productOrder->quantity; | |||
} | |||
} | |||
return json_encode($jsonOrder); | |||
} | |||
/** | |||
* Enregistre un modèle de type CreditHistory. | |||
* | |||
* @param string $type | |||
* @param float $montant | |||
* @param integer $idProducer | |||
* @param integer $idUser | |||
* @param integer $idUserAction | |||
*/ | |||
public function saveCreditHistory($type, $amount, $idProducer, $idUser, $idUserAction) | |||
{ | |||
$creditHistory = new CreditHistory; | |||
$creditHistory->id_user = $this->id_user; | |||
$creditHistory->id_order = $this->id; | |||
$creditHistory->amount = $amount; | |||
$creditHistory->type = $type; | |||
$creditHistory->id_producer = $idProducer; | |||
$creditHistory->id_user_action = $idUserAction; | |||
$creditHistory->populateRelation('order', $this) ; | |||
$creditHistory->populateRelation('user', User::find()->where(['id' => $this->id_user])->one()) ; | |||
$creditHistory->save(); | |||
} | |||
/** | |||
* Retourne le statut de paiement de la commande (payée, surplus, ou impayée). | |||
* | |||
* @return string | |||
*/ | |||
public function getPaymentStatus() | |||
{ | |||
// payé | |||
if ($this->getAmount() - $this->getAmount(self::AMOUNT_PAID) < 0.01 && | |||
$this->getAmount() - $this->getAmount(self::AMOUNT_PAID) >= 0) | |||
{ | |||
return self::PAYMENT_PAID ; | |||
} | |||
// à rembourser | |||
elseif ($this->getAmount() - $this->getAmount(self::AMOUNT_PAID) <= -0.01) { | |||
return self::PAYMENT_SURPLUS ; | |||
} | |||
// reste à payer | |||
elseif ($this->getAmount() - $this->getAmount(self::AMOUNT_PAID) >= 0.01) { | |||
return self::PAYMENT_UNPAID ; | |||
} | |||
} | |||
/** | |||
* Retourne le résumé du panier au format HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getCartSummary() | |||
{ | |||
if (!isset($this->productOrder)) { | |||
$this->productOrder = productOrder::find()->where(['id_order' => $this->id])->all(); | |||
} | |||
$html = ''; | |||
$count = count($this->productOrder); | |||
$i = 0; | |||
foreach ($this->productOrder as $p) { | |||
if (isset($p->product)) { | |||
$html .= $p->quantity . ' x ' . Html::encode($p->product->name); | |||
if (++$i != $count) { | |||
$html .= '<br />'; | |||
} | |||
} | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne le résumé du point de vente lié à la commande au format HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getPointSaleSummary() | |||
{ | |||
$html = ''; | |||
if (isset($this->pointSale)) { | |||
$html .= '<span class="name-point-sale">' . | |||
Html::encode($this->pointSale->name) . | |||
'</span>' . | |||
'<br /><span class="locality">' | |||
. Html::encode($this->pointSale->locality) | |||
. '</span>'; | |||
if (strlen($this->comment_point_sale)) { | |||
$html .= '<div class="comment"><span>' | |||
. Html::encode($this->comment_point_sale) | |||
. '</span></div>'; | |||
} | |||
} else { | |||
$html .= 'Point de vente supprimé'; | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne le résumé du paiement (montant, statut). | |||
* | |||
* @return string | |||
*/ | |||
public function getAmountSummary() | |||
{ | |||
$html = ''; | |||
$html .= $this->getAmount(self::AMOUNT_TOTAL, true) . '<br />'; | |||
if ($this->paid_amount) { | |||
if ($this->getPaymentStatus() == Order::PAYMENT_PAID) { | |||
$html .= '<span class="label label-success">Payée</span>'; | |||
} elseif ($this->getPaymentStatus() == Order::PAYMENT_UNPAID) { | |||
$html .= '<span class="label label-danger">Non payée</span><br /> | |||
Reste <strong>' . $this->getRemainingAmount(true) . '</strong> à payer'; | |||
} elseif ($this->getPaymentStatus() == Order::PAYMENT_SURPLUS) { | |||
$html .= '<span class="label label-success">Payée</span>'; | |||
} | |||
} | |||
else { | |||
$html .= '<span class="label label-default">À régler sur place</span>'; | |||
} | |||
return $html; | |||
} | |||
/** | |||
* Retourne une chaine de caractère décrivant l'utilisateur lié à la commande. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrUser() | |||
{ | |||
if (isset($this->user)) { | |||
return Html::encode($this->user->name . ' ' . $this->user->lastname); | |||
} elseif (strlen($this->username)) { | |||
return Html::encode($this->username); | |||
} else { | |||
return 'Client introuvable'; | |||
} | |||
} | |||
/** | |||
* Retourne l'état de la commande (livrée, modifiable ou en préparation) | |||
* | |||
* @return string | |||
*/ | |||
public function getState() | |||
{ | |||
$orderDelay = Producer::getConfig( | |||
'order_delay', | |||
$this->distribution->id_producer | |||
); | |||
$orderDeadline = Producer::getConfig( | |||
'order_deadline', | |||
$this->distribution->id_producer | |||
); | |||
$orderDate = strtotime($this->distribution->date); | |||
$today = strtotime(date('Y-m-d')); | |||
$todayHour = date('G'); | |||
$nbDays = (int) (($orderDate - $today) / (24 * 60 * 60)); | |||
if ($nbDays <= 0) { | |||
return self::STATE_DELIVERED; | |||
} | |||
elseif ($nbDays >= $orderDelay && | |||
($nbDays != $orderDelay || | |||
($nbDays == $orderDelay && $todayHour < $orderDeadline))) | |||
{ | |||
return self::STATE_OPEN; | |||
} | |||
return self::STATE_PREPARATION ; | |||
} | |||
/** | |||
* Retourne l'origine de la commande (client, automatique ou admin) sous forme | |||
* texte ou HTML. | |||
* | |||
* @param boolean $with_label | |||
* @return string | |||
*/ | |||
public function getStrOrigin($withLabel = false) | |||
{ | |||
$classLabel = ''; | |||
$str = ''; | |||
if ($this->origin == self::ORIGIN_USER) { | |||
$classLabel = 'success'; | |||
$str = 'Client'; | |||
} | |||
elseif ($this->origin == self::ORIGIN_AUTO) { | |||
$classLabel = 'default'; | |||
$str = 'Auto'; | |||
} | |||
elseif ($this->origin == self::ORIGIN_ADMIN) { | |||
$classLabel = 'warning'; | |||
$str = 'Vous'; | |||
} | |||
if ($withLabel) { | |||
return '<span class="label label-' . $classLabel . '">' | |||
. $str . '</span>'; | |||
} | |||
else { | |||
return $str; | |||
} | |||
} | |||
/** | |||
* Retourne l'historique de la commande (ajoutée, modifiée, supprimée) au | |||
* format HTML. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrHistory() | |||
{ | |||
$arr = [ | |||
'class' => 'create', | |||
'glyphicon' => 'plus', | |||
'str' => 'Ajoutée', | |||
'date' => $this->date | |||
] ; | |||
if(!is_null($this->date_update)) { | |||
$arr = [ | |||
'class' => 'update', | |||
'glyphicon' => 'pencil', | |||
'str' => 'Modifiée', | |||
'date' => $this->date_update | |||
] ; | |||
} | |||
if(!is_null($this->date_delete)) { | |||
$arr = [ | |||
'class' => 'delete', | |||
'glyphicon' => 'remove', | |||
'str' => 'Annulée', | |||
'date' => $this->date_delete | |||
] ; | |||
} | |||
$html = '<div class="small"><span class="'.$arr['class'].'">' | |||
. '<span class="glyphicon glyphicon-'.$arr['glyphicon'].'"></span> ' | |||
. $arr['str'].'</span> le <strong>' | |||
. date('d/m/Y à G\hi', strtotime($arr['date'])).'</strong></div>' ; | |||
return $html ; | |||
} | |||
/** | |||
* Retourne une classe identifiant l'historique de la commande (ajoutée, | |||
* modifiée, supprimée). | |||
* | |||
* @return string | |||
*/ | |||
public function getClassHistory() | |||
{ | |||
if(!is_null($this->date_delete)) { | |||
return 'commande-delete' ; | |||
} | |||
if(!is_null($this->date_update)) { | |||
return 'commande-update' ; | |||
} | |||
return 'commande-create' ; | |||
} | |||
/** | |||
* Retourne la quantité d'un produit donné de plusieurs commandes. | |||
* | |||
* @param integer $idProduct | |||
* @param array $orders | |||
* | |||
* @return integer | |||
*/ | |||
public static function getProductQuantity($idProduct, $orders) | |||
{ | |||
$quantity = 0; | |||
if (isset($orders) && is_array($orders) && count($orders)) { | |||
foreach ($orders as $c) { | |||
if(is_null($c->date_delete)) { | |||
foreach ($c->productOrder as $po) { | |||
if ($po->id_product == $idProduct) { | |||
$quantity += $po->quantity ; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return $quantity ; | |||
} | |||
/** | |||
* Recherche et initialise des commandes. | |||
* | |||
* @param array $params | |||
* @param array $conditions | |||
* @param string $orderby | |||
* @param integer $limit | |||
* @return array | |||
*/ | |||
public static function search($params = [], $options = []) | |||
{ | |||
$orders = parent::search($params, $options) ; | |||
/* | |||
* Initialisation des commandes | |||
*/ | |||
if(is_array($orders)) { | |||
if(count($orders)) { | |||
foreach($orders as $order) { | |||
$order->init() ; | |||
} | |||
return $orders ; | |||
} | |||
} | |||
else { | |||
$order = $orders ; | |||
if(is_a($order, 'common\models\Order')) { | |||
return $order->init() ; | |||
} | |||
// count | |||
else { | |||
return $order ; | |||
} | |||
} | |||
return false ; | |||
} | |||
} |
@@ -0,0 +1,334 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use yii\helpers\Html; | |||
use common\models\UserPointSale; | |||
use common\models\PointSaleDistribution ; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "point_vente". | |||
* | |||
* @property integer $id | |||
* @property string $name | |||
* @property string $address | |||
* @property integer $id_producer | |||
*/ | |||
class PointSale extends ActiveRecordCommon | |||
{ | |||
var $orders = []; | |||
var $revenues = 0; | |||
var $data_select_orders; | |||
var $data_options_orders; | |||
var $users = []; | |||
var $users_comment = []; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'point_sale'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['name'], 'required'], | |||
[['restricted_access'], 'boolean'], | |||
[['name', 'code'], 'string', 'max' => 255], | |||
[['address', 'locality', 'infos_monday', 'infos_tuesday', | |||
'infos_wednesday', 'infos_thursday', 'infos_friday', | |||
'infos_saturday', 'infos_sunday'], 'string'], | |||
[['point_production', 'credit', 'delivery_monday', 'delivery_tuesday', | |||
'delivery_wednesday', 'delivery_thursday', 'delivery_friday', | |||
'delivery_saturday', 'delivery_sunday'], 'boolean'], | |||
['point_production', 'default', 'value' => 0], | |||
['id_producer', 'integer'], | |||
['id_producer', 'required'], | |||
[['users', 'users_comment', 'code'], 'safe'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'address' => 'Adresse', | |||
'locality' => 'Localité', | |||
'point_production' => 'Point de production', | |||
'infos_monday' => 'Lundi', | |||
'infos_tuesday' => 'Mardi', | |||
'infos_wednesday' => 'Mercredi', | |||
'infos_thursday' => 'Jeudi', | |||
'infos_friday' => 'Vendredi', | |||
'infos_saturday' => 'Samedi', | |||
'infos_sunday' => 'Dimanche', | |||
'restricted_access' => 'Accès restreint', | |||
'credit' => 'Activer le Crédit Pain', | |||
'delivery_monday' => 'Lundi', | |||
'delivery_tuesday' => 'Mardi', | |||
'delivery_wednesday' => 'Mercredi', | |||
'delivery_thursday' => 'Jeudi', | |||
'delivery_friday' => 'Vendredi', | |||
'delivery_saturday' => 'Samedi', | |||
'delivery_sunday' => 'Dimanche', | |||
'code' => 'Code', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getUserPointSale() | |||
{ | |||
return $this->hasMany( | |||
UserPointSale::className(), | |||
['id_point_sale' => 'id'] | |||
); | |||
} | |||
public function getPointSaleDistribution() | |||
{ | |||
return $this->hasMany( | |||
PointSaleDistribution::className(), | |||
['id_point_sale' => 'id'] | |||
); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => 'point_sale.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Initialise les commandes liées au point de vente. | |||
* | |||
* @param array $ordersArray | |||
*/ | |||
public function initOrders($ordersArray) | |||
{ | |||
$this->orders = []; | |||
$this->revenues = 0; | |||
if($ordersArray) { | |||
foreach ($ordersArray as $order) { | |||
if ($this->id == $order->id_point_sale) { | |||
$this->orders[] = $order; | |||
if(is_null($order->date_delete)) { | |||
$this->revenues += (float) $order->amount; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne les commandes liées à ce point de vente. | |||
* | |||
* @return array | |||
*/ | |||
public function getOrders() | |||
{ | |||
return $this->orders; | |||
} | |||
/** | |||
* Enregistre le point de vente. | |||
* | |||
* @param boolean $runValidation | |||
* @param array $attributeNames | |||
* @return type | |||
*/ | |||
public function save($runValidation = true, $attributeNames = NULL) | |||
{ | |||
$this->id_producer = Producer::getId(); | |||
return parent::save($runValidation, $attributeNames); | |||
} | |||
/** | |||
* Traite la mise à jour de l'attribut 'point_production'. | |||
*/ | |||
public function processPointProduction() | |||
{ | |||
if ($this->point_production) { | |||
PointSale::updateAll( | |||
['point_production' => 0], | |||
['id_producer' => $this->id_producer] | |||
); | |||
$this->point_production = 1; | |||
$this->save(); | |||
} | |||
} | |||
/** | |||
* Traite les accès restreints d'un point de vente. | |||
*/ | |||
public function processRestrictedAccess() | |||
{ | |||
UserPointSale::deleteAll(['id_point_sale' => $this->id]); | |||
if (is_array($this->users) && count($this->users)) { | |||
foreach ($this->users as $key => $val) { | |||
$user = User::findOne($val); | |||
if ($user) { | |||
$userPointSale = new UserPointSale; | |||
$userPointSale->id_user = $val; | |||
$userPointSale->id_point_sale = $this->id; | |||
if (isset($this->users_comment[$val]) && strlen($this->users_comment[$val])) { | |||
$userPointSale->comment = $this->users_comment[$val]; | |||
} | |||
$userPointSale->save(); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne le commentaire de l'utilisateur courant lié au point de vente. | |||
* | |||
* @return string|null | |||
*/ | |||
public function getComment() | |||
{ | |||
if (isset($this->userPointSale)) { | |||
foreach ($this->userPointSale as $userPointSale) { | |||
if ($userPointSale->id_user == User::getCurrentId()) { | |||
return $userPointSale->comment; | |||
} | |||
} | |||
} | |||
return null ; | |||
} | |||
/** | |||
* Retourne le nombre de points de vente pour l'établissement courant. | |||
* | |||
* @return integer | |||
*/ | |||
public static function count() | |||
{ | |||
return self::searchCount(['id_producer' => Producer::getId()]) ; | |||
} | |||
/** | |||
* Vérifie le code d'accès à un point de vente. | |||
* | |||
* @param string $code | |||
* @return boolean | |||
*/ | |||
public function validateCode($code) | |||
{ | |||
if (strlen($this->code)) { | |||
if (trim(strtolower($code)) == trim(strtolower($this->code))) { | |||
return true; | |||
} else { | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
/** | |||
* Retourne les jours de livraison du point de vente sous forme d'une chaine | |||
* de caractères. | |||
* | |||
* @return string | |||
*/ | |||
public function getStrDeliveryDays() | |||
{ | |||
$str = '' ; | |||
if($this->delivery_monday) $str .= 'lundi, ' ; | |||
if($this->delivery_tuesday) $str .= 'mardi, ' ; | |||
if($this->delivery_wednesday) $str .= 'mercredi, ' ; | |||
if($this->delivery_thursday) $str .= 'jeudi, ' ; | |||
if($this->delivery_friday) $str .= 'vendredi, ' ; | |||
if($this->delivery_saturday) $str .= 'samedi, ' ; | |||
if($this->delivery_sunday) $str .= 'dimanche, ' ; | |||
if(strlen($str)) { | |||
return substr($str, 0, strlen($str)-2) ; | |||
} | |||
else { | |||
return '' ; | |||
} | |||
} | |||
/** | |||
* Retourne un commentaire informant l'utilisateur sur les détails de | |||
* livraison d'un point de vente et pour un jour donné. | |||
* | |||
* @param string $jour | |||
* @return string | |||
*/ | |||
public function getStrInfos($day) | |||
{ | |||
$str = '' ; | |||
$field = 'infos_'.$day ; | |||
if(strlen($this->$field)) { | |||
$str = nl2br(Html::encode($this->$field)) ; | |||
$str = preg_replace('/\[select_previous_day\](.*?)\[\/select_previous_day\]/', '<a href="javascript:void(0);" class="select-previous-day">$1</a>' , $str) ; | |||
} | |||
return $str ; | |||
} | |||
} |
@@ -0,0 +1,171 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
use common\models\PointVente; | |||
use common\models\Production; | |||
/** | |||
* This is the model class for table "production_point_vente". | |||
* | |||
* @property integer $id_production | |||
* @property integer $id_point_vente | |||
* @property integer $livraison | |||
*/ | |||
class PointSaleDistribution extends ActiveRecordCommon | |||
{ | |||
var $points_sale_distribution; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'point_sale_distribution'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_distribution', 'id_point_sale'], 'required'], | |||
[['id_distribution', 'id_point_sale', 'delivery'], 'integer'], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id_distribution' => 'Distribution', | |||
'id_point_sale' => 'Point de vente', | |||
'delivery' => 'Livraison', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getDistribution() | |||
{ | |||
return $this->hasOne(Distribution::className(), ['id' => 'id_distribution']); | |||
} | |||
public function getPointSale() | |||
{ | |||
return $this->hasOne(PointSale::className(), ['id' => 'id_point_sale']); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => ['distribution', 'pointSale'], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => '' | |||
] ; | |||
} | |||
/** | |||
* Définit les jours de livraisons des points de vente pour un jour de | |||
* production donné. | |||
* | |||
* @param integer $id_production | |||
* @param boolean $bool_livraison | |||
*/ | |||
public static function setAll($idDistribution, $boolDelivery) | |||
{ | |||
$countPointSaleDistribution = self::searchCount([ | |||
'id_distribution' => $idDistribution | |||
]) ; | |||
if (!$countPointSaleDistribution) { | |||
$arrPointsSale = PointSale::searchAll() ; | |||
foreach ($arrPointsSale as $pointSale) { | |||
$pointSaleDistribution = new PointSaleDistribution(); | |||
$pointSaleDistribution->id_distribution = $idDistribution; | |||
$pointSaleDistribution->id_point_sale = $pointSale->id; | |||
$pointSaleDistribution->save(); | |||
} | |||
} | |||
$distribution = Distribution::findOne($idDistribution); | |||
if ($distribution) { | |||
$day = date('N', strtotime($distribution->date)); | |||
$arrPointsSaleDistribution = self::searchAll([ | |||
'id_distribution' => $idDistribution | |||
]) ; | |||
foreach ($arrPointsSaleDistribution as $pointSaleDistribution) { | |||
if ($boolDelivery && | |||
(($day == 1 && $pointSaleDistribution->pointSale->delivery_monday) || | |||
($day == 2 && $pointSaleDistribution->pointSale->delivery_tuesday) || | |||
($day == 3 && $pointSaleDistribution->pointSale->delivery_wednesday) || | |||
($day == 4 && $pointSaleDistribution->pointSale->delivery_thursday) || | |||
($day == 5 && $pointSaleDistribution->pointSale->delivery_friday) || | |||
($day == 6 && $pointSaleDistribution->pointSale->delivery_saturday) || | |||
($day == 7 && $pointSaleDistribution->pointSale->delivery_sunday) || | |||
$pointSaleDistribution->pointSale->point_production | |||
)) { | |||
$pointSaleDistribution->delivery = 1; | |||
} else { | |||
$pointSaleDistribution->delivery = 0; | |||
} | |||
$pointSaleDistribution->save(); | |||
} | |||
} | |||
} | |||
} |
@@ -1,308 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use yii\helpers\Html; | |||
use common\models\PointVenteUser; | |||
use common\models\ProductionPointVente; | |||
/** | |||
* This is the model class for table "point_vente". | |||
* | |||
* @property integer $id | |||
* @property string $nom | |||
* @property string $adresse | |||
* @property integer $id_boulangerie | |||
*/ | |||
class PointVente extends \yii\db\ActiveRecord | |||
{ | |||
var $commandes = []; | |||
var $recettes = 0; | |||
var $data_select_commandes; | |||
var $data_options_commandes; | |||
var $users = []; | |||
var $users_commentaire = []; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'point_vente'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['nom'], 'required'], | |||
[['acces_restreint'], 'boolean'], | |||
[['nom', 'code'], 'string', 'max' => 255], | |||
[['adresse', 'localite', 'horaires_lundi', 'horaires_mardi', 'horaires_mercredi', 'horaires_jeudi', 'horaires_vendredi', 'horaires_samedi', 'horaires_dimanche'], 'string'], | |||
[['point_fabrication', 'vrac', 'pain', 'credit_pain', 'livraison_lundi', 'livraison_mardi', 'livraison_mercredi', 'livraison_jeudi', 'livraison_vendredi', 'livraison_samedi', 'livraison_dimanche'], 'boolean'], | |||
['point_fabrication', 'default', 'value' => 0], | |||
['id_etablissement', 'integer'], | |||
['id_etablissement', 'required'], | |||
[['users', 'users_commentaire', 'code'], 'safe'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'nom' => 'Nom', | |||
'adresse' => 'Adresse', | |||
'localite' => 'Localité', | |||
'point_fabrication' => 'Point de fabrication', | |||
'horaires_lundi' => 'Lundi', | |||
'horaires_mardi' => 'Mardi', | |||
'horaires_mercredi' => 'Mercredi', | |||
'horaires_jeudi' => 'Jeudi', | |||
'horaires_vendredi' => 'Vendredi', | |||
'horaires_samedi' => 'Samedi', | |||
'horaires_dimanche' => 'Dimanche', | |||
'vrac' => 'Livraison de vrac', | |||
'pain' => 'Livraison de pain', | |||
'acces_restreint' => 'Accès restreint', | |||
'credit_pain' => 'Activer le Crédit Pain', | |||
'livraison_lundi' => 'Lundi', | |||
'livraison_mardi' => 'Mardi', | |||
'livraison_mercredi' => 'Mercredi', | |||
'livraison_jeudi' => 'Jeudi', | |||
'livraison_vendredi' => 'Vendredi', | |||
'livraison_samedi' => 'Samedi', | |||
'livraison_dimanche' => 'Dimanche', | |||
'code' => 'Code', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getPointVenteUser() | |||
{ | |||
return $this->hasMany(PointVenteUser::className(), ['id_point_vente' => 'id']); | |||
} | |||
public function getProductionPointVente() | |||
{ | |||
return $this->hasMany(ProductionPointVente::className(), ['id_point_vente' => 'id']); | |||
} | |||
/** | |||
* Initialise les commandes liées au point de vente. | |||
* | |||
* @param array $commandes | |||
*/ | |||
public function initCommandes($commandes) | |||
{ | |||
$this->commandes = []; | |||
$this->recettes = 0; | |||
foreach ($commandes as $c) { | |||
if ($this->id == $c->id_point_vente) { | |||
$this->commandes[] = $c; | |||
if(is_null($c->date_delete)) { | |||
$this->recettes += (float) $c->montant; | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne les commandes liées à ce point de vente. | |||
* | |||
* @return array | |||
*/ | |||
public function getCommandes() | |||
{ | |||
return $this->commandes; | |||
} | |||
/** | |||
* Enregistre le point de vente. | |||
* | |||
* @param boolean $runValidation | |||
* @param array $attributeNames | |||
* @return type | |||
*/ | |||
public function save($runValidation = true, $attributeNames = NULL) | |||
{ | |||
$this->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$this->pain = 1; | |||
return parent::save($runValidation, $attributeNames); | |||
} | |||
/** | |||
* Traite la mise à jour de l'attribut 'point_fabrication'. | |||
*/ | |||
public function gestionPointFabrication() | |||
{ | |||
if ($this->point_fabrication) { | |||
PointVente::updateAll( | |||
['point_fabrication' => 0], ['id_etablissement' => $this->id_etablissement] | |||
); | |||
$this->point_fabrication = 1; | |||
$this->save(); | |||
} | |||
} | |||
/** | |||
* Traite les accès restreints d'un point de vente. | |||
*/ | |||
public function gestionAccesRestreint() | |||
{ | |||
PointVenteUser::deleteAll(['id_point_vente' => $this->id]); | |||
if (is_array($this->users) && count($this->users)) { | |||
foreach ($this->users as $key => $val) { | |||
$user = User::findOne($val); | |||
if ($user) { | |||
$point_vente_user = new PointVenteUser; | |||
$point_vente_user->id_user = $val; | |||
$point_vente_user->id_point_vente = $this->id; | |||
if (isset($this->users_commentaire[$val]) && strlen($this->users_commentaire[$val])) { | |||
$point_vente_user->commentaire = $this->users_commentaire[$val]; | |||
} | |||
$point_vente_user->save(); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* Retourne le commentaire de l'utilisateur courant lié au point de vente. | |||
* | |||
* @return string|null | |||
*/ | |||
public function getCommentaire() | |||
{ | |||
if (isset($this->pointVenteUser)) { | |||
foreach ($this->pointVenteUser as $pvu) { | |||
if ($pvu->id_user == Yii::$app->user->identity->id) { | |||
return $pvu->commentaire; | |||
} | |||
} | |||
} | |||
return null ; | |||
} | |||
/** | |||
* Retourne le nombre de points de vente pour l'établissement courant. | |||
* | |||
* @return integer | |||
*/ | |||
public static function count() | |||
{ | |||
return PointVente::find() | |||
->where([ | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
]) | |||
->count(); | |||
} | |||
/** | |||
* Vérifie le code d'accès à un point de vente. | |||
* | |||
* @param string $code | |||
* @return boolean | |||
*/ | |||
public function verifCode($code) | |||
{ | |||
if (strlen($this->code)) { | |||
if (trim(strtolower($code)) == trim(strtolower($this->code))) { | |||
return true; | |||
} else { | |||
return false; | |||
} | |||
} else { | |||
return true; | |||
} | |||
} | |||
/** | |||
* Retourne les jours de livraison du point de vente sous forme d'une chaine | |||
* de caractères. | |||
* | |||
* @return string | |||
*/ | |||
public function strJoursLivraison() { | |||
$str = '' ; | |||
if($this->livraison_lundi) $str .= 'lundi, ' ; | |||
if($this->livraison_mardi) $str .= 'mardi, ' ; | |||
if($this->livraison_mercredi) $str .= 'mercredi, ' ; | |||
if($this->livraison_jeudi) $str .= 'jeudi, ' ; | |||
if($this->livraison_vendredi) $str .= 'vendredi, ' ; | |||
if($this->livraison_samedi) $str .= 'samedi, ' ; | |||
if($this->livraison_dimanche) $str .= 'dimanche, ' ; | |||
if(strlen($str)) | |||
return substr($str, 0, strlen($str)-2) ; | |||
else | |||
return '' ; | |||
} | |||
/** | |||
* Retourne un commentaire informant l'utilisateur sur les détails de | |||
* livraison d'un point de vente et pour un jour donné. | |||
* | |||
* @param string $jour | |||
* @return string | |||
*/ | |||
public function strInfos($jour) { | |||
$str = '' ; | |||
$champs = 'horaires_'.$jour ; | |||
if(strlen($this->$champs)) { | |||
$str = nl2br(Html::encode($this->$champs)) ; | |||
$str = preg_replace('/\[select_previous_day\](.*?)\[\/select_previous_day\]/', '<a href="javascript:void(0);" class="select-previous-day">$1</a>' , $str) ; | |||
} | |||
return $str ; | |||
} | |||
} |
@@ -0,0 +1,379 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
use common\helpers\Departments; | |||
use yii\helpers\Html; | |||
/** | |||
* This is the model class for table "etablissement". | |||
* | |||
* @property integer $id | |||
* @property string $name | |||
* @property string $siret | |||
* @property string $logo | |||
* @property string $photo | |||
* @property string $description | |||
* @property string $postcode | |||
* @property string $city | |||
*/ | |||
class Producer extends ActiveRecordCommon | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'producer'; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['name', 'siret', 'order_deadline', 'order_delay','type'], 'required'], | |||
[['order_deadline', 'order_delay'], 'integer'], | |||
['order_deadline', 'in', 'range' => [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]], | |||
['order_delay', 'in', 'range' => [1, 2, 3, 4, 5, 6, 7]], | |||
['code', function($attribute, $params) { | |||
$code = $this->$attribute; | |||
$producer = Producer::findOne(['code' => $code]); | |||
if ($producer && $producer->id != $this->id) { | |||
$this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.'); | |||
} | |||
}], | |||
[['description', 'order_infos','slug'], 'string'], | |||
[['negative_balance', 'credit', 'active'], 'boolean'], | |||
[['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code','type'], 'string', 'max' => 255], | |||
['free_price', 'double'], | |||
['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'], | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'name' => 'Nom', | |||
'siret' => 'Siret', | |||
'logo' => 'Logo', | |||
'photo' => 'Photo', | |||
'description' => 'Description', | |||
'postcode' => 'Code postal', | |||
'city' => 'Ville', | |||
'code' => 'Code', | |||
'order_deadline' => 'Heure limite de commande', | |||
'order_delay' => 'Délai de commande', | |||
'negative_balance' => 'Solde négatif', | |||
'credit' => 'Crédit pain', | |||
'active' => 'Actif', | |||
'date_creation' => 'Date de création', | |||
'order_infos' => 'Informations', | |||
'slug' => 'Slug', | |||
'type' => 'Type de producteur' | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getUserProducer() | |||
{ | |||
return $this->hasMany( | |||
UserProducer::className(), | |||
['id_producer' => 'id'] | |||
); | |||
} | |||
public function getUser() | |||
{ | |||
return $this->hasMany(User::className(), ['id_producer' => 'id']); | |||
} | |||
public function getContact() | |||
{ | |||
return $this->hasMany(User::className(),['id_producer' => 'id']) | |||
->where(['status' => User::STATUS_PRODUCER]); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => 'name ASC', | |||
'attribute_id_producer' => 'id' | |||
] ; | |||
} | |||
/** | |||
* Retourne la liste des établissements pour l'initialisation d'une liste | |||
* sélective. | |||
* | |||
* @return array | |||
*/ | |||
public static function getProducerPopulateDropdown() | |||
{ | |||
$producers = Producer::searchAll( | |||
['active' => 1], | |||
['orderby' => 'postcode, city ASC'] | |||
) ; | |||
$departments = Departments::get(); | |||
$dataProducers = []; | |||
$optionsProducers = []; | |||
foreach ($producers as $p) { | |||
if (!key_exists('d' . substr($p->postcode, 0, 2), $dataProducers)) { | |||
$dataProducers['d' . substr($p->postcode, 0, 2)] = '<strong>' . $departments[substr($p->postcode, 0, 2)] . '</strong>'; | |||
$optionsProducers['d' . substr($p->postcode, 0, 2)] = ['disabled' => true]; | |||
} | |||
$dataProducers[$p->id] = '<span class="glyphicon glyphicon-lock"></span> ' . Html::encode($p->name) . ' - ' . Html::encode($p->postcode) . ' ' . Html::encode($p->city) . ' <span class="glyphicon glyphicon-lock"></span>'; | |||
if (strlen($p->code)) { | |||
$optionsProducers[$p->id] = ['class' => 'lock']; | |||
} | |||
} | |||
return ['data' => $dataProducers, 'options' => $optionsProducers]; | |||
} | |||
/** | |||
* Retourne le CA de l'établissement pour un mois donné. | |||
* | |||
* @param string $period | |||
* @param boolean $format | |||
* @return string | |||
*/ | |||
public function getTurnover($period = '', $format = false) | |||
{ | |||
if (!$period) { | |||
$period = date('Y-m'); | |||
} | |||
$connection = Yii::$app->getDb(); | |||
$command = $connection->createCommand(' | |||
SELECT SUM(product_order.price * product_order.quantity) AS turnover | |||
FROM `order`, product_order, distribution, product | |||
WHERE `order`.id = product_order.id_order | |||
AND distribution.id_producer = :id_producer | |||
AND `order`.id_distribution = distribution.id | |||
AND product_order.id_product = product.id | |||
AND distribution.date > :date_begin | |||
AND distribution.date < :date_end', [ | |||
':date_begin' => date('Y-m-31', strtotime("-1 month", strtotime($period))), | |||
':date_end' => date('Y-m-01', strtotime("+1 month", strtotime($period))), | |||
':id_producer' => $this->id | |||
]); | |||
$result = $command->queryOne(); | |||
$turnover = $result['turnover']; | |||
if ($format) { | |||
return number_format($turnover, 2) . ' €'; | |||
} | |||
else { | |||
return $turnover; | |||
} | |||
} | |||
/** | |||
* Retourne le montant à facturer pour une période donnée. | |||
* | |||
* @param string $periode | |||
* @param float $ca | |||
* @param boolean $format | |||
* @return string | |||
*/ | |||
public function getMAmountBilled($format = false) | |||
{ | |||
if ($format) { | |||
return number_format($this->free_price, 2) . ' €' ; | |||
} else { | |||
return $this->free_price ; | |||
} | |||
} | |||
/** | |||
* Retourne la facture d'une période donnée. | |||
* | |||
* @param string $periode | |||
* @return Facture | |||
*/ | |||
public function getInvoice($period = '') | |||
{ | |||
if (!$period) { | |||
$period = date('Y-m', strtotime('-1 month')); | |||
} | |||
$invoice = Invoice::searchOne( | |||
['id_producer' => $this->id, 'period' => ':period'], | |||
['params' => [':period' => $period]] | |||
) ; | |||
return $facture; | |||
} | |||
/** | |||
* Retourne la facture du mois dernier. | |||
* | |||
* @return Facture | |||
*/ | |||
public function getInvoiceLastMonth() | |||
{ | |||
return $this->getInvoice(date('Y-m', strtotime('-1 month'))); | |||
} | |||
/** | |||
* Retourne une configuration d'un établissement donné. | |||
* | |||
* @param string $config | |||
* @param integer $id_etablissement | |||
* @return mixed | |||
*/ | |||
public static function getConfig($config = '', $idProducer = 0) | |||
{ | |||
if (strlen($config)) { | |||
if (!$idProducer) { | |||
$idProducer = Producer::getId() ; | |||
} | |||
$producer = self::findOne($idProducer); | |||
if ($producer) { | |||
return $producer->$config; | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* Retourne le montant de l'abonnement à prix libre définit par | |||
* le producteur. | |||
* | |||
* @param boolean $format | |||
* @return mixed | |||
*/ | |||
public function getFreePrice($format = true) | |||
{ | |||
if (!is_null($this->free_price)) { | |||
if($format) { | |||
return number_format($this->free_price, 2, ',', false) . ' € HT'; | |||
} | |||
else { | |||
return $this->free_price; | |||
} | |||
} | |||
} | |||
/** | |||
* Lie un utilisateur à un producteur. | |||
* | |||
* @param integer $id_user | |||
* @param integer $id_producer | |||
* @return UserProducer | |||
*/ | |||
public static function addUser($idUser, $idProducer) | |||
{ | |||
$userProducer = UserProducer::searchOne([ | |||
'id_user' => $idUser, | |||
'id_producer' => $idProducer | |||
]) ; | |||
if (!$userProducer) { | |||
$newUserProducer = new UserProducer; | |||
$newUserProducer->id_producer = $idProducer; | |||
$newUserProducer->id_user = $idUser; | |||
$newUserProducer->credit = 0; | |||
$newUserProducer->active = 1; | |||
$newUserProducer->bookmark = 1; | |||
$newUserProducer->save(); | |||
} else { | |||
if (!$userProducer->active) { | |||
$userProducer->active = 1; | |||
$userProducer->save(); | |||
} | |||
} | |||
return $userProducer ; | |||
} | |||
/** | |||
* Retourne le producteur courant (le producteur auquel l'utilisateur | |||
* connecté est rattaché). | |||
* | |||
* @return integer|boolean | |||
*/ | |||
public static function getId() | |||
{ | |||
if(!Yii::$app->user->isGuest) { | |||
return Yii::$app->user->identity->id_producer ; | |||
} | |||
return false ; | |||
} | |||
/** | |||
* Retourne le producteur courant. | |||
* | |||
* @return Producer|boolean | |||
*/ | |||
public static function get() | |||
{ | |||
if(self::getId()) { | |||
return self::searchOne() ; | |||
} | |||
return false ; | |||
} | |||
} | |||
@@ -39,32 +39,33 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "produit". | |||
* This is the model class for table "product". | |||
* | |||
* @property integer $id | |||
* @property string $nom | |||
* @property string $name | |||
* @property string $description | |||
* @property integer $actif | |||
* @property string $illustration | |||
* @property integer $active | |||
* @property string $photo | |||
* @property string $saison | |||
* @property double $prix | |||
* @property double $poids | |||
* @property string $recette | |||
* @property double $price | |||
* @property double $pweight | |||
* @property string $recipe | |||
*/ | |||
class Produit extends \yii\db\ActiveRecord | |||
class Product extends ActiveRecordCommon | |||
{ | |||
var $total = 0; | |||
var $total = 0; | |||
const SALE_MODE_UNIT = 'unit' ; | |||
const SALE_MODE_WEIGHT = 'weight' ; | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'produit'; | |||
return 'product'; | |||
} | |||
/** | |||
@@ -73,13 +74,13 @@ class Produit extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['nom', 'id_etablissement'], 'required'], | |||
[['actif', 'order', 'quantite_max', 'id_etablissement'], 'integer'], | |||
[['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche', 'epuise'], 'boolean'], | |||
[['prix', 'poids'], 'number'], | |||
[['illustration', 'photo'], 'file'], | |||
[['nom', 'description', 'illustration', 'photo', 'saison', 'diminutif'], 'string', 'max' => 255], | |||
[['recette'], 'string', 'max' => 1000], | |||
[['name', 'id_producer'], 'required'], | |||
[['active', 'order', 'quantity_max', 'id_producer'], 'integer'], | |||
[['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', 'unavailable'], 'boolean'], | |||
[['price', 'weight'], 'number'], | |||
[[ 'photo'], 'file'], | |||
[['name', 'description', 'photo'], 'string', 'max' => 255], | |||
[['recipe'], 'string', 'max' => 1000], | |||
]; | |||
} | |||
@@ -90,27 +91,39 @@ class Produit extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'nom' => 'Nom', | |||
'name' => 'Nom', | |||
'description' => 'Description', | |||
'actif' => 'Actif', | |||
'illustration' => 'Illustration', | |||
'active' => 'Actif', | |||
'photo' => 'Photo', | |||
'saison' => 'Saison', | |||
'prix' => 'Prix', | |||
'poids' => 'Poids (g)', | |||
'recette' => 'Recette', | |||
'lundi' => 'Lundi', | |||
'mardi' => 'Mardi', | |||
'mercredi' => 'Mercredi', | |||
'jeudi' => 'Jeudi', | |||
'vendredi' => 'Vendredi', | |||
'samedi' => 'Samedi', | |||
'dimanche' => 'Dimanche', | |||
'price' => 'Prix', | |||
'weight' => 'Poids (g)', | |||
'recipe' => 'Recette', | |||
'monday' => 'Lundi', | |||
'tuesday' => 'Mardi', | |||
'wednesday' => 'Mercredi', | |||
'thursday' => 'Jeudi', | |||
'friday' => 'Vendredi', | |||
'saturday' => 'Samedi', | |||
'sunday' => 'Dimanche', | |||
'order' => 'Ordre', | |||
'quantite_max' => 'Quantité max par défaut', | |||
'epuise' => 'Épuisé', | |||
'quantity_max' => 'Quantité max par défaut', | |||
'unavailable' => 'Épuisé', | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => 'order ASC', | |||
'attribute_id_producer' => 'product.id_producer' | |||
] ; | |||
} | |||
/** | |||
* Retourne la description du produit. | |||
@@ -120,11 +133,11 @@ class Produit extends \yii\db\ActiveRecord | |||
public function getDescription() | |||
{ | |||
$description = $this->description; | |||
if (isset($this->poids) && is_numeric($this->poids) && $this->poids > 0) { | |||
if ($this->poids >= 1000) { | |||
$description .= ' (' . ($this->poids / 1000) . 'kg)'; | |||
if (isset($this->weight) && is_numeric($this->weight) && $this->weight > 0) { | |||
if ($this->weight >= 1000) { | |||
$description .= ' (' . ($this->weight / 1000) . 'kg)'; | |||
} else { | |||
$description .= ' (' . $this->poids . 'g)'; | |||
$description .= ' (' . $this->weight . 'g)'; | |||
} | |||
} | |||
return $description; | |||
@@ -134,9 +147,9 @@ class Produit extends \yii\db\ActiveRecord | |||
* Retourne le libellé (admin) du produit. | |||
* @return type | |||
*/ | |||
public function getLibelleAdmin() | |||
public function getStrWordingAdmin() | |||
{ | |||
return $this->nom; | |||
return $this->name; | |||
} | |||
/** | |||
@@ -148,40 +161,25 @@ class Produit extends \yii\db\ActiveRecord | |||
*/ | |||
public function save($runValidation = true, $attributeNames = NULL) | |||
{ | |||
$this->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$this->id_producer = Producer::getId(); | |||
return parent::save($runValidation, $attributeNames); | |||
} | |||
/** | |||
* Retourne les produits de l'établissement courant. | |||
* | |||
* @return array | |||
*/ | |||
public function getAll() | |||
{ | |||
return Produit::find() | |||
->where([ | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement, | |||
]) | |||
->orderBy('order ASC') | |||
->all(); | |||
} | |||
/** | |||
* Retourne les produits d'une production donnée. | |||
* | |||
* @param integer $id_production | |||
* @param integer $idDistribution | |||
* @return array | |||
*/ | |||
public function getByProduction($id_production) | |||
public static function searchByDistribution($idDistribution) | |||
{ | |||
return Produit::find() | |||
->leftJoin('production_produit', 'produit.id = production_produit.id_produit') | |||
return Product::find() | |||
->leftJoin('product_distribution', 'product.id = product_distribution.id_product') | |||
->where([ | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement, | |||
'production_produit.id_production' => $id_production | |||
'id_producer' => Producer::getId(), | |||
'product_distribution.id_distribution' => $idDistribution | |||
]) | |||
->orderBy('production_produit.actif DESC, produit.order ASC') | |||
->orderBy('product_distribution.active DESC, product.order ASC') | |||
->all(); | |||
} | |||
@@ -192,11 +190,7 @@ class Produit extends \yii\db\ActiveRecord | |||
*/ | |||
public static function count() | |||
{ | |||
return Produit::find() | |||
->where([ | |||
'id_etablissement' => Yii::$app->user->identity->id_etablissement | |||
]) | |||
->count(); | |||
return self::searchCount() ; | |||
} | |||
} |
@@ -38,18 +38,19 @@ termes. | |||
namespace common\models; | |||
use Yii ; | |||
use yii\base\Object; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "production_produit". | |||
* | |||
* @property integer $id | |||
* @property integer $id_production | |||
* @property integer $id_produit | |||
* @property integer $actif | |||
* @property integer $id_distribution | |||
* @property integer $id_product | |||
* @property integer $active | |||
*/ | |||
class ProductionProduit extends \yii\db\ActiveRecord | |||
class ProductDistribution extends ActiveRecordCommon | |||
{ | |||
/** | |||
@@ -57,7 +58,7 @@ class ProductionProduit extends \yii\db\ActiveRecord | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'production_produit'; | |||
return 'product_distribution'; | |||
} | |||
/** | |||
@@ -66,7 +67,7 @@ class ProductionProduit extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_production', 'id_produit', 'actif', 'quantite_max'], 'integer'] | |||
[['id_distribution', 'id_product', 'active', 'quantity_max'], 'integer'] | |||
]; | |||
} | |||
@@ -74,9 +75,14 @@ class ProductionProduit extends \yii\db\ActiveRecord | |||
* Relations | |||
*/ | |||
public function getProduit() | |||
public function getProduct() | |||
{ | |||
return $this->hasOne(Produit::className(), ['id' => 'id_produit']); | |||
return $this->hasOne(Product::className(), ['id' => 'id_product']); | |||
} | |||
public function getDistribution() | |||
{ | |||
return $this->hasOne(Distribution::className(), ['id' => 'id_distribution']); | |||
} | |||
/** | |||
@@ -86,49 +92,56 @@ class ProductionProduit extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_production' => 'Id Production', | |||
'id_produit' => 'Id Produit', | |||
'actif' => 'Actif', | |||
'quantite_max' => 'Quantité max', | |||
'id_distribution' => 'Distribution', | |||
'id_product' => 'Produit', | |||
'active' => 'Actif', | |||
'quantity_max' => 'Quantité max', | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => ['product','distribution'], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => '' | |||
] ; | |||
} | |||
/** | |||
* Recherche les enregistrement ProductionProduit liés à une production. | |||
* | |||
* @param integer $id_production | |||
* @param integer $idDistribution | |||
* @return array | |||
*/ | |||
public static function findProduits($id_production) { | |||
$production_produits = ProductionProduit::find() | |||
->with('produit') | |||
->where(['id_production' => $id_production]) | |||
->all(); | |||
$arr_production_produits = []; | |||
$commandes = Commande::find() | |||
->with('commandeProduits', 'user') | |||
->joinWith('production') | |||
->where(['production.id' => $id_production]) | |||
->orderBy('date ASC') | |||
->all(); | |||
foreach ($production_produits as $pp) { | |||
if (isset($pp->produit)) { | |||
$arr_production_produits[$pp->id_produit] = [ | |||
'actif' => (int) $pp->actif, | |||
'epuise' => (int) $pp->produit->epuise, | |||
'vrac' => (int) $pp->produit->vrac, | |||
'quantite_max' => $pp->quantite_max, | |||
'quantite_commandee' => Commande::getQuantiteProduit($pp->id_produit, $commandes), | |||
'quantite_restante' => $pp->quantite_max - Commande::getQuantiteProduit($pp->id_produit, $commandes) | |||
]; | |||
public static function searchByDistribution($idDistribution) | |||
{ | |||
$arrayProductsDistribution = ProductDistribution::searchAll([ | |||
'id_distribution' => $idDistribution | |||
]) ; | |||
$orders = Order::searchAll([ | |||
'distribution.id' => $idDistribution | |||
]) ; | |||
foreach ($arrayProductsDistribution as $productDistribution) { | |||
if (isset($productDistribution->product)) { | |||
$arrayProductsDistribution[$productDistribution->id_product] = [ | |||
'active' => (int) $productDistribution->active, | |||
'unavailable' => (int) $productDistribution->product->unavailable, | |||
'quantity_max' => $productDistribution->quantity_max, | |||
'quantity_order' => Order::getProductQuantity($productDistribution->id_product, $orders), | |||
'quantity_remaining' => $productDistribution->quantity_max - Order::getProductQuantity($productDistribution->id_product, $orders) | |||
]; | |||
} | |||
} | |||
return $arr_production_produits; | |||
return $arrayProductsDistribution; | |||
} | |||
} |
@@ -39,16 +39,17 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "commande_produit". | |||
* This is the model class for table "product_order". | |||
* | |||
* @property integer $id | |||
* @property integer $id_commande | |||
* @property integer $id_produit | |||
* @property double $quantite | |||
* @property integer $id_order | |||
* @property integer $id_product | |||
* @property double $quantity | |||
*/ | |||
class CommandeProduit extends \yii\db\ActiveRecord | |||
class ProductOrder extends ActiveRecordCommon | |||
{ | |||
/** | |||
@@ -56,16 +57,16 @@ class CommandeProduit extends \yii\db\ActiveRecord | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'commande_produit'; | |||
return 'product_order'; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getProduit() | |||
public function getProduct() | |||
{ | |||
return $this->hasOne(Produit::className(), ['id' => 'id_produit']); | |||
return $this->hasOne(Product::className(), ['id' => 'id_product']); | |||
} | |||
/** | |||
@@ -74,9 +75,9 @@ class CommandeProduit extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_commande', 'id_produit', 'quantite'], 'required'], | |||
[['id_commande', 'id_produit'], 'integer'], | |||
[['quantite'], 'number', 'min' => 0] | |||
[['id_order', 'id_product', 'quantity'], 'required'], | |||
[['id_order', 'id_product'], 'integer'], | |||
[['quantity'], 'number', 'min' => 0] | |||
]; | |||
} | |||
@@ -87,10 +88,24 @@ class CommandeProduit extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_commande' => 'Id Commande', | |||
'id_produit' => 'Id Produit', | |||
'quantite' => 'Quantite', | |||
'id_order' => 'Commande', | |||
'id_product' => 'Product', | |||
'quantity' => 'Quantité', | |||
]; | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => [], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => '' | |||
] ; | |||
} | |||
} |
@@ -39,17 +39,18 @@ termes. | |||
namespace common\models; | |||
use Yii; | |||
use common\models\Produit; | |||
use common\models\Product; | |||
use common\components\ActiveRecordCommon ; | |||
/** | |||
* This is the model class for table "commande_auto_produit". | |||
* | |||
* @property integer $id | |||
* @property integer $id_commande_auto | |||
* @property integer $id_produit | |||
* @property double $quantite | |||
* @property integer $id_subscription | |||
* @property integer $id_product | |||
* @property double $quantity | |||
*/ | |||
class CommandeAutoProduit extends \yii\db\ActiveRecord | |||
class ProductSubscription extends ActiveRecordCommon | |||
{ | |||
/** | |||
@@ -57,7 +58,7 @@ class CommandeAutoProduit extends \yii\db\ActiveRecord | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'commande_auto_produit'; | |||
return 'product_subscription'; | |||
} | |||
/** | |||
@@ -66,9 +67,9 @@ class CommandeAutoProduit extends \yii\db\ActiveRecord | |||
public function rules() | |||
{ | |||
return [ | |||
[['id_commande_auto', 'id_produit'], 'required'], | |||
[['id_commande_auto', 'id_produit'], 'integer'], | |||
[['quantite'], 'number'], | |||
[['id_subscription', 'id_product'], 'required'], | |||
[['id_subscription', 'id_product'], 'integer'], | |||
[['quantity'], 'number'], | |||
]; | |||
} | |||
@@ -79,9 +80,9 @@ class CommandeAutoProduit extends \yii\db\ActiveRecord | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'id_commande_auto' => 'Id Commande Auto', | |||
'id_produit' => 'Id Produit', | |||
'quantite' => 'Quantite', | |||
'id_subscription' => 'Abonnement', | |||
'id_product' => 'Produit', | |||
'quantity' => 'Quantité', | |||
]; | |||
} | |||
@@ -89,9 +90,23 @@ class CommandeAutoProduit extends \yii\db\ActiveRecord | |||
* Relations | |||
*/ | |||
public function getProduit() | |||
public function getProduct() | |||
{ | |||
return $this->hasOne(Produit::className(), ['id' => 'id_produit']); | |||
return $this->hasOne(Product::className(), ['id' => 'id_product']); | |||
} | |||
/** | |||
* Retourne les options de base nécessaires à la fonction de recherche. | |||
* | |||
* @return array | |||
*/ | |||
public static function defaultOptionsSearch() { | |||
return [ | |||
'with' => ['product'], | |||
'join_with' => [], | |||
'orderby' => '', | |||
'attribute_id_producer' => '' | |||
] ; | |||
} | |||
} |
@@ -1,206 +0,0 @@ | |||
<?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. | |||
*/ | |||
namespace common\models; | |||
use Yii; | |||
use common\models\Commande; | |||
use common\models\Production; | |||
/** | |||
* This is the model class for table "production". | |||
* | |||
* @property integer $id | |||
* @property string $date | |||
* @property integer $actif | |||
*/ | |||
class Production extends \yii\db\ActiveRecord | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public static function tableName() | |||
{ | |||
return 'production'; | |||
} | |||
public function getEtablissement() | |||
{ | |||
return $this->hasOne(Etablissement::className(), ['id' => 'id_etablissement']); | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function rules() | |||
{ | |||
return [ | |||
[['date'], 'required'], | |||
[['date'], 'safe'], | |||
[['actif'], 'integer'] | |||
]; | |||
} | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function attributeLabels() | |||
{ | |||
return [ | |||
'id' => 'ID', | |||
'date' => 'Date', | |||
'actif' => 'Actif', | |||
]; | |||
} | |||
/* | |||
* Relations | |||
*/ | |||
public function getCommande() | |||
{ | |||
return $this->hasMany(Commande::className(), ['id_production' => 'id']); | |||
} | |||
public function getProductionProduit() | |||
{ | |||
return $this->hasMany(ProductionProduit::className(), ['id_production' => 'id']); | |||
} | |||
/** | |||
* Retourne si un produit est actif ou non. | |||
* | |||
* @param integer $id_produit | |||
* @return boolean | |||
*/ | |||
public function produitActif($id_produit) | |||
{ | |||
if ($id_produit && | |||
isset($this->productionProduit) && | |||
count($this->productionProduit) > 0) | |||
{ | |||
foreach ($this->productionProduit as $production_produit) { | |||
if ($production_produit['id_produit'] == $id_produit && | |||
$production_produit['actif']) | |||
{ | |||
return true; | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* Initialise un jour de production. | |||
* | |||
* @param string $date | |||
* @return Production | |||
*/ | |||
public static function initProduction($date) | |||
{ | |||
$production = null ; | |||
if ($date != '') { | |||
$production = Production::find() | |||
->where(['date' => $date]) | |||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||
->one(); | |||
if (!$production) { | |||
$production = new Production; | |||
$production->date = $date; | |||
$production->livraison = 1; | |||
$production->id_etablissement = Yii::$app->user->identity->id_etablissement; | |||
$production->save(); | |||
} | |||
} | |||
// production_point_vente à définir s'ils ne sont pas initialisés | |||
if ($production) { | |||
$count_productions_point_vente = ProductionPointVente::find()-> | |||
where([ | |||
'id_production' => $production->id | |||
]) | |||
->count(); | |||
if (!$count_productions_point_vente) { | |||
ProductionPointVente::setAll($production->id, true); | |||
} | |||
} | |||
// init produits sélectionnés pour cette production | |||
$produits = Produit::getAll(); | |||
if ($production) { | |||
$day_production = date('N', strtotime($production->date)); | |||
$produits_production = ProductionProduit::find()->where(['id_production' => $production->id])->all(); | |||
if (!count($produits_production)) { | |||
foreach ($produits as $p) { | |||
$pp = new ProductionProduit(); | |||
$pp->id_production = $production->id; | |||
$pp->id_produit = $p->id; | |||
$pp->actif = 0; | |||
if ($p->actif && $day_production == 1 && $p->lundi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 2 && $p->mardi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 3 && $p->mercredi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 4 && $p->jeudi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 5 && $p->vendredi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 6 && $p->samedi) | |||
$pp->actif = 1; | |||
if ($p->actif && $day_production == 7 && $p->dimanche) | |||
$pp->actif = 1; | |||
$pp->quantite_max = $p->quantite_max; | |||
$pp->save(); | |||
} | |||
} | |||
} | |||
return $production ; | |||
} | |||
} |