namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Producer ; | use common\models\Producer ; | ||||
use common\models\User ; | use common\models\User ; | ||||
use common\models\UserSearch ; | use common\models\UserSearch ; | ||||
$usersAccessArray = User::find() | $usersAccessArray = User::find() | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'status' => User::STATUS_PRODUCER | 'status' => User::STATUS_PRODUCER | ||||
]) | ]) | ||||
->all() ; | ->all() ; |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\models\User; | use common\models\User; | ||||
use common\models\Development; | use common\models\Development; | ||||
if ($develpmentPriority) { | if ($develpmentPriority) { | ||||
$develpmentPriority->priority = $priority; | $develpmentPriority->priority = $priority; | ||||
$develpmentPriority->id_producer = Producer::getId(); | |||||
$develpmentPriority->id_producer = GlobalParam::getCurrentProducerId(); | |||||
} else { | } else { | ||||
$develpmentPriority = new DevelopmentPriority; | $develpmentPriority = new DevelopmentPriority; | ||||
$develpmentPriority->id_development = $idDevelopment; | $develpmentPriority->id_development = $idDevelopment; | ||||
$develpmentPriority->priority = $priority; | $develpmentPriority->priority = $priority; | ||||
$develpmentPriority->id_producer = Producer::getId(); | |||||
$develpmentPriority->id_producer = GlobalParam::getCurrentProducerId(); | |||||
} | } | ||||
$develpmentPriority->save(); | $develpmentPriority->save(); |
namespace backend\controllers; | namespace backend\controllers; | ||||
use backend\controllers\BackendController ; | use backend\controllers\BackendController ; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Distribution ; | use common\models\Distribution ; | ||||
use common\models\Product ; | use common\models\Product ; | ||||
use common\models\Producer ; | use common\models\Producer ; | ||||
$format = 'Y-m-d' ; | $format = 'Y-m-d' ; | ||||
$dateObject = DateTime::createFromFormat($format, $date); | $dateObject = DateTime::createFromFormat($format, $date); | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
$json['producer'] = [ | $json['producer'] = [ | ||||
'credit' => $producer->credit, | 'credit' => $producer->credit, | ||||
'tiller' => $producer->tiller | 'tiller' => $producer->tiller | ||||
// products | // products | ||||
$productsArray = Product::find() | $productsArray = Product::find() | ||||
->orWhere(['id_producer' => Producer::getId(),]) | |||||
->orWhere(['id_producer' => GlobalParam::getCurrentProducerId(),]) | |||||
->joinWith(['productDistribution' => function($query) use($distribution) { | ->joinWith(['productDistribution' => function($query) use($distribution) { | ||||
$query->andOnCondition('product_distribution.id_distribution = '.$distribution->id) ; | $query->andOnCondition('product_distribution.id_distribution = '.$distribution->id) ; | ||||
}]) | }]) | ||||
$q->where(['id_distribution' => $distribution->id]); | $q->where(['id_distribution' => $distribution->id]); | ||||
}]) | }]) | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->asArray() | ->asArray() | ||||
->all(); | ->all(); | ||||
$weekDistribution = Distribution::find() | $weekDistribution = Distribution::find() | ||||
->andWhere([ | ->andWhere([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'active' => 1, | 'active' => 1, | ||||
]) | ]) | ||||
->andWhere(['or', | ->andWhere(['or', | ||||
public function actionReport($date = '', $save = false, $idProducer = 0, $type = "pdf") | public function actionReport($date = '', $save = false, $idProducer = 0, $type = "pdf") | ||||
{ | { | ||||
if (!Yii::$app->user->isGuest) { | if (!Yii::$app->user->isGuest) { | ||||
$idProducer = Producer::getId() ; | |||||
$idProducer = GlobalParam::getCurrentProducerId() ; | |||||
} | } | ||||
$ordersArray = Order::searchAll([ | $ordersArray = Order::searchAll([ | ||||
$q->where(['id_distribution' => $distribution->id]); | $q->where(['id_distribution' => $distribution->id]); | ||||
}]) | }]) | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->orderBy('order ASC') | ->orderBy('order ASC') | ||||
->all(); | ->all(); |
{ | { | ||||
$pointSale = $this->findModel($id) ; | $pointSale = $this->findModel($id) ; | ||||
if($pointSale) { | if($pointSale) { | ||||
PointSale::updateAll(['default' => 0], 'id_producer = :id_producer', [':id_producer' => Producer::getId()]) ; | |||||
PointSale::updateAll(['default' => 0], 'id_producer = :id_producer', [':id_producer' => GlobalParam::getCurrentProducerId()]) ; | |||||
if(!$pointSale->default) { | if(!$pointSale->default) { | ||||
$pointSale->default = 1 ; | $pointSale->default = 1 ; | ||||
$pointSale->save() ; | $pointSale->save() ; |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\models\User; | use common\models\User; | ||||
use backend\models\MailForm; | use backend\models\MailForm; | ||||
public function actionUpdate() | public function actionUpdate() | ||||
{ | { | ||||
$request = Yii::$app->request; | $request = Yii::$app->request; | ||||
$model = $this->findModel(Producer::getId()); | |||||
$model = $this->findModel(GlobalParam::getCurrentProducerId()); | |||||
$model->secret_key_payplug = $model->getSecretKeyPayplug() ; | $model->secret_key_payplug = $model->getSecretKeyPayplug() ; | ||||
$logoFilenameOld = $model->logo; | $logoFilenameOld = $model->logo; | ||||
{ | { | ||||
$datasInvoices = new ActiveDataProvider([ | $datasInvoices = new ActiveDataProvider([ | ||||
'query' => Invoice::find() | 'query' => Invoice::find() | ||||
->where(['id_producer' => Producer::getId()]) | |||||
->where(['id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('reference DESC'), | ->orderBy('reference DESC'), | ||||
'pagination' => [ | 'pagination' => [ | ||||
'pageSize' => 1000, | 'pageSize' => 1000, | ||||
], | ], | ||||
]); | ]); | ||||
$producer = Producer::findOne(Producer::getId()); | |||||
$producer = Producer::findOne(GlobalParam::getCurrentProducerId()); | |||||
if ($producer->load(Yii::$app->request->post())) { | if ($producer->load(Yii::$app->request->post())) { | ||||
$producer->save(); | $producer->save(); |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\ProductDistribution; | use common\models\ProductDistribution; | ||||
use Yii; | use Yii; | ||||
use yii\filters\AccessControl; | use yii\filters\AccessControl; | ||||
{ | { | ||||
$model = new Product(); | $model = new Product(); | ||||
$model->active = 1; | $model->active = 1; | ||||
$model->id_producer = Producer::getId(); | |||||
$model->id_producer = GlobalParam::getCurrentProducerId(); | |||||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | if ($model->load(Yii::$app->request->post()) && $model->save()) { | ||||
$lastProductOrder = Product::find()->where('id_producer = :id_producer')->params([':id_producer' => Producer::getId()])->orderBy('order DESC')->one() ; | |||||
$lastProductOrder = Product::find()->where('id_producer = :id_producer')->params([':id_producer' => GlobalParam::getCurrentProducerId()])->orderBy('order DESC')->one() ; | |||||
if($lastProductOrder) { | if($lastProductOrder) { | ||||
$model->order = ++ $lastProductOrder->order ; | $model->order = ++ $lastProductOrder->order ; | ||||
} | } |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\filters\AccessControl; | use yii\filters\AccessControl; | ||||
use common\models\User; | use common\models\User; | ||||
$res = Yii::$app->db->createCommand("SELECT product.name, SUM(product_order.quantity) AS quantity, SUM(product_order.price * product_order.quantity) AS total | $res = Yii::$app->db->createCommand("SELECT product.name, SUM(product_order.quantity) AS quantity, SUM(product_order.price * product_order.quantity) AS total | ||||
FROM `order`, product_order, product | FROM `order`, product_order, product | ||||
WHERE `order`.id = product_order.id_order | WHERE `order`.id = product_order.id_order | ||||
AND product.id_producer = ".((int) Producer::getId())." | |||||
AND product.id_producer = ".((int) GlobalParam::getCurrentProducerId()) ." | |||||
AND product_order.id_product = product.id | AND product_order.id_product = product.id | ||||
AND `order`.date_delete IS NULL | AND `order`.date_delete IS NULL | ||||
".$conditionUsers." | ".$conditionUsers." |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\filters\AccessControl; | use yii\filters\AccessControl; | ||||
use yii\web\Controller; | use yii\web\Controller; | ||||
->with('order') | ->with('order') | ||||
->where(['>=', 'distribution.date', date('Y-m-d')]) | ->where(['>=', 'distribution.date', date('Y-m-d')]) | ||||
->andWhere([ | ->andWhere([ | ||||
'distribution.id_producer' => Producer::getId(), | |||||
'distribution.id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'distribution.active' => 1 | 'distribution.active' => 1 | ||||
]) | ]) | ||||
->orderBy('date ASC') | ->orderBy('date ASC') | ||||
->limit(5) | ->limit(5) | ||||
->all(); | ->all(); | ||||
$usersNegativeCredit = User::findBy(['id_producer' => Producer::getId()]) | |||||
$usersNegativeCredit = User::findBy(['id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->andWhere('user_producer.credit < 0') | ->andWhere('user_producer.credit < 0') | ||||
->all(); | ->all(); | ||||
// paramètres | // paramètres | ||||
$producer = Producer::getCurrent(); | |||||
$producer = GlobalParam::getCurrentProducer(); | |||||
$productsCount = Product::searchCount() ; | $productsCount = Product::searchCount() ; | ||||
$pointsSaleCount = PointSale::searchCount() ; | $pointsSaleCount = PointSale::searchCount() ; |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use yii\web\Controller; | use yii\web\Controller; | ||||
use yii\filters\AccessControl; | use yii\filters\AccessControl; | ||||
use Yii; | use Yii; | ||||
AND distribution.date >= :date_start | AND distribution.date >= :date_start | ||||
AND distribution.date <= :date_end | AND distribution.date <= :date_end | ||||
") | ") | ||||
->bindValue(':id_producer', Producer::getId()) | |||||
->bindValue(':id_producer',GlobalParam::getCurrentProducerId()) | |||||
->bindValue(':date_start', date('Y-m-', $date->getTimestamp()).'01') | ->bindValue(':date_start', date('Y-m-', $date->getTimestamp()).'01') | ||||
->bindValue(':date_end', date('Y-m-', $date->getTimestamp()).'31' ) | ->bindValue(':date_end', date('Y-m-', $date->getTimestamp()).'31' ) | ||||
->queryOne(); | ->queryOne(); | ||||
// Maximums | // Maximums | ||||
$resMaximums = Yii::$app->db->createCommand("SELECT product.name, SUM(IF(product_distribution.active, product_distribution.quantity_max,0)) AS total | $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 | FROM distribution, product_distribution, product | ||||
WHERE distribution.id_producer = ".Producer::getId()." | |||||
WHERE distribution.id_producer = ".GlobalParam::getCurrentProducerId()." | |||||
AND distribution.date >= :date_begin | AND distribution.date >= :date_begin | ||||
AND distribution.date <= :date_end | AND distribution.date <= :date_end | ||||
AND distribution.id = product_distribution.id_distribution | AND distribution.id = product_distribution.id_distribution | ||||
$resOrders = Yii::$app->db->createCommand(' | $resOrders = Yii::$app->db->createCommand(' | ||||
SELECT product.name, SUM(product_order.quantity) AS total | SELECT product.name, SUM(product_order.quantity) AS total | ||||
FROM `distribution`, `order`, `product_order`, `product` | FROM `distribution`, `order`, `product_order`, `product` | ||||
WHERE distribution.id_producer = '.Producer::getId().' | |||||
WHERE distribution.id_producer = '.GlobalParam::getCurrentProducerId().' | |||||
AND distribution.date >= :date_begin | AND distribution.date >= :date_begin | ||||
AND distribution.date <= :date_end | AND distribution.date <= :date_end | ||||
AND distribution.id = `order`.id_distribution | AND distribution.id = `order`.id_distribution |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Order ; | use common\models\Order ; | ||||
use common\models\Product ; | use common\models\Product ; | ||||
use common\models\SubscriptionSearch ; | use common\models\SubscriptionSearch ; | ||||
// form | // form | ||||
$model = new SubscriptionForm; | $model = new SubscriptionForm; | ||||
$model->isAdmin = true ; | $model->isAdmin = true ; | ||||
$model->id_producer = Producer::getId(); | |||||
$model->id_producer = GlobalParam::getCurrentProducerId(); | |||||
if($idOrder) { | if($idOrder) { | ||||
$order = Order::searchOne(['id' => $idOrder]); | $order = Order::searchOne(['id' => $idOrder]); | ||||
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | ||||
$productsQuery = Product::find() | $productsQuery = Product::find() | ||||
->where(['id_producer' => Producer::getId(),]) ; | |||||
->where(['id_producer' => GlobalParam::getCurrentProducerId(),]) ; | |||||
if($idSubscription) { | if($idSubscription) { | ||||
$productsQuery->joinWith(['productSubscription' => function($query) use($idSubscription) { | $productsQuery->joinWith(['productSubscription' => function($query) use($idSubscription) { |
namespace backend\controllers; | namespace backend\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\User ; | use common\models\User ; | ||||
use common\models\Producer ; | use common\models\Producer ; | ||||
use common\models\Distribution ; | use common\models\Distribution ; | ||||
]) ; | ]) ; | ||||
$producer = Producer::searchOne([ | $producer = Producer::searchOne([ | ||||
'id' => Producer::getId() | |||||
'id' => GlobalParam::getCurrentProducerId() | |||||
]) ; | ]) ; | ||||
$pointsSaleArray = PointSale::searchAll() ; | $pointsSaleArray = PointSale::searchAll() ; | ||||
// points de vente | // points de vente | ||||
$pointsSaleArray = PointSale::find() | $pointsSaleArray = PointSale::find() | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->joinWith(['userPointSale' => function($query) use($model) { | ->joinWith(['userPointSale' => function($query) use($model) { | ||||
if($model->id) { | if($model->id) { | ||||
// liaison etablissement / user | // liaison etablissement / user | ||||
$useProducer = new UserProducer(); | $useProducer = new UserProducer(); | ||||
$useProducer->id_user = $model->id; | $useProducer->id_user = $model->id; | ||||
$useProducer->id_producer = Producer::getId(); | |||||
$useProducer->id_producer = GlobalParam::getCurrentProducerId(); | |||||
$useProducer->credit = 0; | $useProducer->credit = 0; | ||||
$useProducer->active = 1; | $useProducer->active = 1; | ||||
$useProducer->save(); | $useProducer->save(); | ||||
// Moodification du profil | // Moodification du profil | ||||
$previousMail = $model->email ; | $previousMail = $model->email ; | ||||
$user = User::find()->with('userProducer')->where(['id' => $model['id']])->one(); | $user = User::find()->with('userProducer')->where(['id' => $model['id']])->one(); | ||||
$userBelongToProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => Producer::getId()]); | |||||
$userBelongToProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => GlobalParam::getCurrentProducerId()]); | |||||
if (($userBelongToProducer && count($user->userProducer) == 1) || User::getCurrentStatus() == USER::STATUS_ADMIN) { | if (($userBelongToProducer && count($user->userProducer) == 1) || User::getCurrentStatus() == USER::STATUS_ADMIN) { | ||||
if ($model->load(Yii::$app->request->post()) && $model->save()) { | if ($model->load(Yii::$app->request->post()) && $model->save()) { | ||||
{ | { | ||||
$userProducer = UserProducer::findOne([ | $userProducer = UserProducer::findOne([ | ||||
'id_user' => $id, | 'id_user' => $id, | ||||
'id_producer' => Producer::getId() | |||||
'id_producer' => GlobalParam::getCurrentProducerId() | |||||
]) ; | ]) ; | ||||
if($userProducer) { | if($userProducer) { | ||||
$userProducer->active = 0 ; | $userProducer->active = 0 ; | ||||
} | } | ||||
$users = User::findBy([ | $users = User::findBy([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'id_point_sale' => $idPointSale, | 'id_point_sale' => $idPointSale, | ||||
'users_point_sale_link' => $usersPointSaleLink, | 'users_point_sale_link' => $usersPointSaleLink, | ||||
'users_point_sale_has_order' => $usersPointSaleHasOrder, | 'users_point_sale_has_order' => $usersPointSaleHasOrder, | ||||
$usersArray[] = $user['email']; | $usersArray[] = $user['email']; | ||||
} | } | ||||
$pointsSaleArray = PointSale::find()->where(['id_producer' => Producer::getId()])->all() ; | |||||
$pointsSaleArray = PointSale::find()->where(['id_producer' => GlobalParam::getCurrentProducerId()])->all() ; | |||||
$pointSale = null ; | $pointSale = null ; | ||||
if($idPointSale) { | if($idPointSale) { | ||||
public function actionCredit($id) | public function actionCredit($id) | ||||
{ | { | ||||
$user = User::find()->with('userProducer')->where(['id' => $id])->one(); | $user = User::find()->with('userProducer')->where(['id' => $id])->one(); | ||||
$userProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => Producer::getId()]); | |||||
$userProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => GlobalParam::getCurrentProducerId()]); | |||||
if (($userProducer) || User::getCurrentStatus() == User::STATUS_ADMIN) { | if (($userProducer) || User::getCurrentStatus() == User::STATUS_ADMIN) { | ||||
->with(['order', 'userAction']) | ->with(['order', 'userAction']) | ||||
->where([ | ->where([ | ||||
'id_user' => $user->id, | 'id_user' => $user->id, | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->orderBy('date DESC') | ->orderBy('date DESC') | ||||
->all(); | ->all(); |
namespace backend\models; | namespace backend\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\base\Model; | use yii\base\Model; | ||||
use common\models\User ; | use common\models\User ; | ||||
]) ; | ]) ; | ||||
if($user) { | if($user) { | ||||
$user->id_producer = Producer::getId() ; | |||||
$user->id_producer = GlobalParam::getCurrentProducerId() ; | |||||
if($user->status != User::STATUS_PRODUCER && $user->status != User::STATUS_ADMIN) { | if($user->status != User::STATUS_PRODUCER && $user->status != User::STATUS_ADMIN) { | ||||
$user->status = User::STATUS_PRODUCER ; | $user->status = User::STATUS_PRODUCER ; | ||||
} | } |
namespace backend\models; | namespace backend\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\base\Model; | use yii\base\Model; | ||||
use common\models\CreditHistory ; | use common\models\CreditHistory ; | ||||
$creditHistory = new CreditHistory; | $creditHistory = new CreditHistory; | ||||
$creditHistory->id_user = $this->id_user; | $creditHistory->id_user = $this->id_user; | ||||
$creditHistory->id_user_action = Yii::$app->user->identity->id; | $creditHistory->id_user_action = Yii::$app->user->identity->id; | ||||
$creditHistory->id_producer = Producer::getId() ; | |||||
$creditHistory->id_producer = GlobalParam::getCurrentProducerId() ; | |||||
$creditHistory->type = $this->type ; | $creditHistory->type = $this->type ; | ||||
$creditHistory->comment = $this->comment ; | $creditHistory->comment = $this->comment ; | ||||
$creditHistory->amount = $this->amount ; | $creditHistory->amount = $this->amount ; | ||||
// on prévient l'utilisateur que son compte vient d'être crédité | // on prévient l'utilisateur que son compte vient d'être crédité | ||||
if($this->send_mail) { | if($this->send_mail) { | ||||
$user = User::findOne($this->id_user) ; | $user = User::findOne($this->id_user) ; | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
$userProducer = UserProducer::searchOne([ | $userProducer = UserProducer::searchOne([ | ||||
'id_user' => $this->id_user | 'id_user' => $this->id_user | ||||
]); | ]); |
namespace backend\models; | namespace backend\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\base\Model; | use yii\base\Model; | ||||
use common\helpers\Price ; | use common\helpers\Price ; | ||||
if($distribution) { | if($distribution) { | ||||
$linkOrder = Yii::$app->urlManagerProducer->createAbsoluteUrl(['order/order','slug_producer' => Producer::getCurrent()->slug, 'date' => $distribution->date]) ; | |||||
$linkOrder = Yii::$app->urlManagerProducer->createAbsoluteUrl(['order/order','slug_producer' => GlobalParam::getCurrentProducer()->slug, 'date' => $distribution->date]) ; | |||||
$dateOrder = strftime('%A %d %B %Y', strtotime($distribution->date)) ; | $dateOrder = strftime('%A %d %B %Y', strtotime($distribution->date)) ; | ||||
$messageAutoHtml .= '<a href="'.$linkOrder.'">Passer ma commande du '.$dateOrder.'</a>' ; | $messageAutoHtml .= '<a href="'.$linkOrder.'">Passer ma commande du '.$dateOrder.'</a>' ; | ||||
$messageAutoText .= 'Suivez ce lien pour passer votre commande du '.$dateOrder.' : | $messageAutoText .= 'Suivez ce lien pour passer votre commande du '.$dateOrder.' : | ||||
$productsArray = Product::find() | $productsArray = Product::find() | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->innerJoinWith(['productDistribution' => function($query) use($distribution) { | ->innerJoinWith(['productDistribution' => function($query) use($distribution) { | ||||
$query->andOnCondition([ | $query->andOnCondition([ | ||||
} | } | ||||
if($fromProducer) { | if($fromProducer) { | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
$fromEmail = $producer->slug.'@opendistrib.net' ; | $fromEmail = $producer->slug.'@opendistrib.net' ; | ||||
$fromName = $producer->name ; | $fromName = $producer->name ; | ||||
} | } |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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\helpers\Html; | ||||
use yii\grid\GridView; | use yii\grid\GridView; | ||||
use common\models\DevelopmentPriority; | use common\models\DevelopmentPriority; | ||||
use common\models\User; | use common\models\User; | ||||
use common\helpers\Url; | use common\helpers\Url; | ||||
use common\helpers\GlobalParam; | |||||
$this->setTitle('Développement') ; | |||||
$this->addButton(['label' => 'Nouveau développement <span class="glyphicon glyphicon-plus"></span>', 'url' => ['development/create'], 'class' => 'btn btn-primary']) ; | |||||
$this->addBreadcrumb($this->getTitle()) ; | |||||
$this->setTitle('Développement'); | |||||
$this->addButton(['label' => 'Nouveau développement <span class="glyphicon glyphicon-plus"></span>', 'url' => ['development/create'], 'class' => 'btn btn-primary']); | |||||
$this->addBreadcrumb($this->getTitle()); | |||||
?> | ?> | ||||
<div class="development-index"> | |||||
<div class="development-index"> | |||||
<div class="well"> | <div class="well"> | ||||
Cette page liste les besoins recencés auprès des producteurs utilisant la plateforme. N'hésitez pas à me <a href="<?= Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/contact']) ; ?>">contacter</a> pour la faire évoluer. Les remontées de bugs sont également bienvenues.<br /> | |||||
Afin d'orienter de manière pertinente le développement de la plateforme, je vous invite à définir la priorité des évolutions qui vous intéressent. | |||||
Cette page liste les besoins recencés auprès des producteurs utilisant la plateforme. N'hésitez pas à me <a | |||||
href="<?= Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/contact']); ?>">contacter</a> pour la | |||||
faire évoluer. Les remontées de bugs sont également bienvenues.<br/> | |||||
Afin d'orienter de manière pertinente le développement de la plateforme, je vous invite à définir la priorité | |||||
des évolutions qui vous intéressent. | |||||
</div> | </div> | ||||
<ul id="tab-status-developments" class="nav nav-tabs" role="tablist"> | <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> | |||||
<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> | </ul> | ||||
<?php | |||||
$columns = [ | |||||
[ | |||||
'header' => '#', | |||||
'value' => function($model) { | |||||
return '#'.$model->id ; | |||||
} | |||||
], | |||||
[ | |||||
'attribute' => 'type', | |||||
'header' => 'Type', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
if($model->type == Development::TYPE_EVOLUTION) { | |||||
return '<span class="label label-success">Évolution</span>' ; | |||||
} | |||||
else { | |||||
return '<span class="label label-danger">Anomalie</span>' ; | |||||
} | |||||
} | |||||
], | |||||
[ 'attribute' => 'sujet', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
$html = '<strong>'.Html::encode($model->subject).'</strong>' ; | |||||
if(strlen($model->description)) | |||||
$html .= '<br />'.nl2br(Html::encode($model->description)) ; | |||||
return $html ; | |||||
}], | |||||
[ 'attribute' => 'estimation_temps', | |||||
'header' => 'Estimation', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
return intval($model->time_estimate).' h' ; | |||||
}], | |||||
[ 'attribute' => 'avancement', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
if($model->progress) | |||||
return '<div class="progress"> | |||||
<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> | |||||
<?php | |||||
$columns = [ | |||||
[ | |||||
'header' => '#', | |||||
'value' => function ($model) { | |||||
return '#' . $model->id; | |||||
} | |||||
], | |||||
[ | |||||
'attribute' => 'type', | |||||
'header' => 'Type', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
if ($model->type == Development::TYPE_EVOLUTION) { | |||||
return '<span class="label label-success">Évolution</span>'; | |||||
} else { | |||||
return '<span class="label label-danger">Anomalie</span>'; | |||||
} | |||||
} | |||||
], | |||||
['attribute' => 'sujet', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
$html = '<strong>' . Html::encode($model->subject) . '</strong>'; | |||||
if (strlen($model->description)) | |||||
$html .= '<br />' . nl2br(Html::encode($model->description)); | |||||
return $html; | |||||
}], | |||||
['attribute' => 'estimation_temps', | |||||
'header' => 'Estimation', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
return intval($model->time_estimate) . ' h'; | |||||
}], | |||||
['attribute' => 'avancement', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
if ($model->progress) | |||||
return '<div class="progress"> | |||||
<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> | ||||
</div> ' ; | |||||
else | |||||
return '' ; | |||||
}], | |||||
[ 'attribute' => 'date_delivery', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
if(strlen($model->date_delivery)) | |||||
return date('d/m/Y',strtotime($model->date_delivery)) ; | |||||
else | |||||
return '' ; | |||||
}], | |||||
] ; | |||||
if(User::hasAccessBackend()) { | |||||
$columns[] = [ | |||||
'header' => 'Priorité', | |||||
'format' => 'raw', | |||||
'value' => function($model) { | |||||
$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-'.$styleButton.' dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||||
'.$currentPriority.' <span class="caret"></span> | |||||
</div> '; | |||||
else | |||||
return ''; | |||||
}], | |||||
['attribute' => 'date_delivery', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
if (strlen($model->date_delivery)) | |||||
return date('d/m/Y', strtotime($model->date_delivery)); | |||||
else | |||||
return ''; | |||||
}], | |||||
]; | |||||
if (User::hasAccessBackend()) { | |||||
$columns[] = [ | |||||
'header' => 'Priorité', | |||||
'format' => 'raw', | |||||
'value' => function ($model) { | |||||
$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-' . $styleButton . ' dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||||
' . $currentPriority . ' <span class="caret"></span> | |||||
</button> | </button> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<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> | |||||
<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> | </ul> | ||||
</div><br />' ; | |||||
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> ' ; | |||||
</div><br />'; | |||||
if (isset($model->developmentPriority) && count($model->developmentPriority)) { | |||||
foreach ($model->developmentPriority as $developmentPriority) { | |||||
if ($developmentPriority->id_producer != GlobalParam::getCurrentProducerId()) | |||||
$html .= '<div class="label label-priorite label-sm label-' . $developmentPriority->getClassCssStyleButton() . '">' . Html::encode($developmentPriority->producer->name) . '</div> '; | |||||
} | |||||
} | |||||
return $html; | |||||
} | } | ||||
} | |||||
return $html ; | |||||
} | |||||
] ; | |||||
]; | |||||
} | } | ||||
if(User::getCurrentStatus() == USER::STATUS_ADMIN) { | |||||
$columns[] = [ | |||||
'class' => 'yii\grid\ActionColumn', | |||||
'template' => '{update}', | |||||
'headerOptions' => ['class' => 'actions'], | |||||
'buttons' => [ | |||||
'update' => function ($url, $model) { | |||||
return '<div class="btn-group"> | |||||
<a href="'.$url.'" class="btn btn-default"><span class="glyphicon glyphicon-pencil"></span> Modifier</a> | |||||
if (User::getCurrentStatus() == USER::STATUS_ADMIN) { | |||||
$columns[] = [ | |||||
'class' => 'yii\grid\ActionColumn', | |||||
'template' => '{update}', | |||||
'headerOptions' => ['class' => 'actions'], | |||||
'buttons' => [ | |||||
'update' => function ($url, $model) { | |||||
return '<div class="btn-group"> | |||||
<a href="' . $url . '" class="btn btn-default"><span class="glyphicon glyphicon-pencil"></span> Modifier</a> | |||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | ||||
<span class="caret"></span> | <span class="caret"></span> | ||||
<span class="sr-only">Toggle Dropdown</span> | <span class="sr-only">Toggle Dropdown</span> | ||||
</button> | </button> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<li><a href="'.Yii::$app->urlManager->createUrl(['development/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> | </ul> | ||||
</div>' ; | |||||
}, | |||||
], | |||||
] ; | |||||
} | |||||
?> | |||||
<?= | |||||
GridView::widget([ | |||||
'id' => 'tab-developments', | |||||
'dataProvider' => $dataProvider, | |||||
'columns' => $columns | |||||
]); | |||||
?> | |||||
</div>'; | |||||
}, | |||||
], | |||||
]; | |||||
} | |||||
?> | |||||
<?= | |||||
GridView::widget([ | |||||
'id' => 'tab-developments', | |||||
'dataProvider' => $dataProvider, | |||||
'columns' => $columns | |||||
]); | |||||
?> | |||||
</div> | </div> |
<div id="summary-ca-weight" class="info-box col-md-4"> | <div id="summary-ca-weight" class="info-box col-md-4"> | ||||
<span class="info-box-icon bg-yellow"><i class="fa fa-euro"></i></span> | <span class="info-box-icon bg-yellow"><i class="fa fa-euro"></i></span> | ||||
<div class="info-box-content"> | <div class="info-box-content"> | ||||
<span class="info-box-text">CA</span> | |||||
<span class="info-box-text">CA (TTC)</span> | |||||
<span class="info-box-number">{{ distribution.revenues }} <span class="normal" v-if="distribution.potential_revenues != '0.00 €'">/ {{ distribution.potential_revenues }}</span></span> | <span class="info-box-number">{{ distribution.revenues }} <span class="normal" v-if="distribution.potential_revenues != '0.00 €'">/ {{ distribution.potential_revenues }}</span></span> | ||||
<span class="info-box-text">Poids</span> | <span class="info-box-text">Poids</span> | ||||
<span class="info-box-number">{{ distribution.weight }} kg <span class="normal" v-if="distribution.potential_weight > 0">/ {{ distribution.potential_weight }} kg</span></span> | <span class="info-box-number">{{ distribution.weight }} kg <span class="normal" v-if="distribution.potential_weight > 0">/ {{ distribution.potential_weight }} kg</span></span> |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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\helpers\Html; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\models\User; | use common\models\User; | ||||
use yii\widgets\ActiveForm; | use yii\widgets\ActiveForm; | ||||
use yii\helpers\ArrayHelper; | use yii\helpers\ArrayHelper; | ||||
use common\helpers\GlobalParam; | |||||
/* @var $this \yii\web\View */ | /* @var $this \yii\web\View */ | ||||
/* @var $content string */ | /* @var $content string */ | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer(); | |||||
?> | ?> | ||||
<header class="main-header"> | <header class="main-header"> | ||||
<?= Html::a('<span class="logo-mini"><img src="'.Yii::$app->urlManagerBackend->getBaseUrl().'/img/logo-distrib.png" /></span><span class="logo-lg"><img src="'.Yii::$app->urlManagerBackend->getBaseUrl().'/img/logo-distrib.png" /></span>', Yii::$app->homeUrl, ['class' => 'logo']) ?> | |||||
<?= Html::a('<span class="logo-mini"><img src="' . Yii::$app->urlManagerBackend->getBaseUrl() . '/img/logo-distrib.png" /></span><span class="logo-lg"><img src="' . Yii::$app->urlManagerBackend->getBaseUrl() . '/img/logo-distrib.png" /></span>', Yii::$app->homeUrl, ['class' => 'logo']) ?> | |||||
<nav class="navbar navbar-static-top" role="navigation"> | <nav class="navbar navbar-static-top" role="navigation"> | ||||
</a> | </a> | ||||
<div class="navbar-custom-menu"> | <div class="navbar-custom-menu"> | ||||
<?php | |||||
$usersArray = User::findBy(['id_producer' => Producer::getId()]) | |||||
->andWhere('CAST(FROM_UNIXTIME(user.created_at) AS date) > \''.date("Y-m-d", strtotime("-7 days")).'\'') | |||||
->orderBy('created_at DESC') | |||||
->all(); | |||||
?> | |||||
<ul class="nav navbar-nav"> | |||||
<?php | |||||
$pastDistributionsArray = Distribution::find() | |||||
->where(['<', 'distribution.date', date('Y-m-d')]) | |||||
->andWhere([ | |||||
'distribution.id_producer' => Producer::getId(), | |||||
'distribution.active' => 1 | |||||
]) | |||||
->orderBy('date DESC') | |||||
->limit(3) | |||||
->all(); | |||||
$pastDistributionsArray = array_reverse($pastDistributionsArray) ; | |||||
$incomingDistributionsArray = Distribution::find() | |||||
->where(['>=', 'distribution.date', date('Y-m-d')]) | |||||
->andWhere([ | |||||
'distribution.id_producer' => Producer::getId(), | |||||
'distribution.active' => 1 | |||||
]) | |||||
->orderBy('date ASC') | |||||
->limit(20) | |||||
->all(); | |||||
<?php | |||||
$usersArray = User::findBy(['id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->andWhere('CAST(FROM_UNIXTIME(user.created_at) AS date) > \'' . date("Y-m-d", strtotime("-7 days")) . '\'') | |||||
->orderBy('created_at DESC') | |||||
->all(); | |||||
?> | ?> | ||||
<ul class="nav navbar-nav"> | |||||
<?php | |||||
$pastDistributionsArray = Distribution::find() | |||||
->where(['<', 'distribution.date', date('Y-m-d')]) | |||||
->andWhere([ | |||||
'distribution.id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'distribution.active' => 1 | |||||
]) | |||||
->orderBy('date DESC') | |||||
->limit(3) | |||||
->all(); | |||||
$pastDistributionsArray = array_reverse($pastDistributionsArray); | |||||
$incomingDistributionsArray = Distribution::find() | |||||
->where(['>=', 'distribution.date', date('Y-m-d')]) | |||||
->andWhere([ | |||||
'distribution.id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'distribution.active' => 1 | |||||
]) | |||||
->orderBy('date ASC') | |||||
->limit(20) | |||||
->all(); | |||||
?> | |||||
<li class="dropdown distributions-menu notifications-menu"> | <li class="dropdown distributions-menu notifications-menu"> | ||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> | ||||
<i class="fa fa-calendar"></i> | <i class="fa fa-calendar"></i> | ||||
</a> | </a> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<?php if(count($pastDistributionsArray)): ?> | |||||
<li class="header">3 dernières distributions :</li> | |||||
<li> | |||||
<ul class="menu"> | |||||
<?php foreach($pastDistributionsArray as $distribution): ?> | |||||
<?php if (count($pastDistributionsArray)): ?> | |||||
<li class="header">3 dernières distributions :</li> | |||||
<li> | <li> | ||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index','date' => $distribution->date]) ; ?>"> | |||||
<h5><?= strftime('%A %d %B', strtotime($distribution->date)) ?></h5> | |||||
</a> | |||||
<ul class="menu"> | |||||
<?php foreach ($pastDistributionsArray as $distribution): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index', 'date' => $distribution->date]); ?>"> | |||||
<h5><?= strftime('%A %d %B', strtotime($distribution->date)) ?></h5> | |||||
</a> | |||||
</li> | |||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | </li> | ||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | |||||
<?php endif; ?> | |||||
<?php if(count($incomingDistributionsArray)): ?> | |||||
<li class="header">Prochaines distributions :</li> | |||||
<li> | |||||
<ul class="menu"> | |||||
<?php foreach($incomingDistributionsArray as $distribution): ?> | |||||
<?php endif; ?> | |||||
<?php if (count($incomingDistributionsArray)): ?> | |||||
<li class="header">Prochaines distributions :</li> | |||||
<li> | <li> | ||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index','date' => $distribution->date]) ; ?>"> | |||||
<h5><?= strftime('%A %d %B', strtotime($distribution->date)) ?></h5> | |||||
</a> | |||||
<ul class="menu"> | |||||
<?php foreach ($incomingDistributionsArray as $distribution): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index', 'date' => $distribution->date]); ?>"> | |||||
<h5><?= strftime('%A %d %B', strtotime($distribution->date)) ?></h5> | |||||
</a> | |||||
</li> | |||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | </li> | ||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | |||||
<?php else: ?> | |||||
<li class="header"> | |||||
Aucune distribution prévue.<br /> | |||||
<a class="btn btn-default" href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index']) ; ?>">Gérer mes distributions</a> | |||||
</li> | |||||
<?php endif; ?> | |||||
<?php else: ?> | |||||
<li class="header"> | |||||
Aucune distribution prévue.<br/> | |||||
<a class="btn btn-default" | |||||
href="<?= Yii::$app->urlManagerBackend->createUrl(['distribution/index']); ?>">Gérer | |||||
mes distributions</a> | |||||
</li> | |||||
<?php endif; ?> | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
<li class="dropdown users-menu notifications-menu"> | <li class="dropdown users-menu notifications-menu"> | ||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> | ||||
<i class="fa fa-user-plus"></i> | <i class="fa fa-user-plus"></i> | ||||
<?php if(count($usersArray)): ?><span class="label label-success"><?= count($usersArray) ?></span> | |||||
<?php else: ?><span class="label label-warning">0</span><?php endif; ?> | |||||
<?php if (count($usersArray)): ?><span | |||||
class="label label-success"><?= count($usersArray) ?></span> | |||||
<?php else: ?><span class="label label-warning">0</span><?php endif; ?> | |||||
</a> | </a> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<?php if(count($usersArray)): ?> | |||||
<li class="header">Inscriptions des 7 derniers jours</li> | |||||
<li> | |||||
<ul class="menu"> | |||||
<?php foreach($usersArray as $user): ?> | |||||
<?php if (count($usersArray)): ?> | |||||
<li class="header">Inscriptions des 7 derniers jours</li> | |||||
<li> | <li> | ||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['user/update','id' => $user['user_id']]) ; ?>"> | |||||
<h5><?= Html::encode($user['name'].' '.$user['lastname']) ; ?> <small><i class="fa fa-clock-o"></i> <?= date('d/m/Y à H:i',$user['created_at']); ?></small></h5> | |||||
</a> | |||||
<ul class="menu"> | |||||
<?php foreach ($usersArray as $user): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['user/update', 'id' => $user['user_id']]); ?>"> | |||||
<h5><?= Html::encode($user['name'] . ' ' . $user['lastname']); ?> | |||||
<small> | |||||
<i class="fa fa-clock-o"></i> <?= date('d/m/Y à H:i', $user['created_at']); ?> | |||||
</small> | |||||
</h5> | |||||
</a> | |||||
</li> | |||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | </li> | ||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | |||||
<?php else: ?> | |||||
<li class="header">Aucun nouvel inscrit ces 7 derniers jours.</li> | |||||
<?php endif; ?> | |||||
<?php else: ?> | |||||
<li class="header">Aucun nouvel inscrit ces 7 derniers jours.</li> | |||||
<?php endif; ?> | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
<?php | |||||
$usersNegativeCreditArray = User::findBy(['id_producer' => Producer::getId()]) | |||||
->andWhere('user_producer.credit < 0') | |||||
->orderBy('lastname, name ASC') | |||||
->all(); | |||||
?> | |||||
<?php | |||||
$usersNegativeCreditArray = User::findBy(['id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->andWhere('user_producer.credit < 0') | |||||
->orderBy('lastname, name ASC') | |||||
->all(); | |||||
?> | |||||
<li class="dropdown users-negative-credit-menu notifications-menu"> | <li class="dropdown users-negative-credit-menu notifications-menu"> | ||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> | ||||
<i class="fa fa-euro"></i> | <i class="fa fa-euro"></i> | ||||
<?php if(count($usersNegativeCreditArray)): ?><span class="label label-warning"><?= count($usersNegativeCreditArray) ?></span> | |||||
<?php else: ?><span class="label label-success">0</span><?php endif; ?> | |||||
<?php if (count($usersNegativeCreditArray)): ?><span | |||||
class="label label-warning"><?= count($usersNegativeCreditArray) ?></span> | |||||
<?php else: ?><span class="label label-success">0</span><?php endif; ?> | |||||
</a> | </a> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<?php if(count($usersNegativeCreditArray)): ?> | |||||
<li class="header">Utilisateurs au crédit négatif</li> | |||||
<li> | |||||
<ul class="menu"> | |||||
<?php foreach($usersNegativeCreditArray as $user): ?> | |||||
<?php if (count($usersNegativeCreditArray)): ?> | |||||
<li class="header">Utilisateurs au crédit négatif</li> | |||||
<li> | <li> | ||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['user/credit','id' => $user['user_id']]) ; ?>"> | |||||
<h5><?= Html::encode($user['name'].' '.$user['lastname']) ; ?> <small><i class="fa fa-euro"></i> <?= Price::format($user['credit']); ?></small></h5> | |||||
</a> | |||||
<ul class="menu"> | |||||
<?php foreach ($usersNegativeCreditArray as $user): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['user/credit', 'id' => $user['user_id']]); ?>"> | |||||
<h5><?= Html::encode($user['name'] . ' ' . $user['lastname']); ?> | |||||
<small> | |||||
<i class="fa fa-euro"></i> <?= Price::format($user['credit']); ?> | |||||
</small> | |||||
</h5> | |||||
</a> | |||||
</li> | |||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | </li> | ||||
<?php endforeach; ?> | |||||
</ul> | |||||
</li> | |||||
<?php else: ?> | |||||
<li class="header">Aucun de vos utilisateurs n'a de crédit négatif.</li> | |||||
<?php endif; ?> | |||||
</ul> | |||||
</li> | |||||
<?php if (User::isCurrentProducer() || User::isCurrentAdmin()): ?> | |||||
<li class="dropdown producer-menu"> | |||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | |||||
<?php if($producer->active): ?> | |||||
<i class="fa fa-home"></i> | |||||
<?php else: ?> | <?php else: ?> | ||||
<span class="label label-danger">Hors-ligne</span> | |||||
<li class="header">Aucun de vos utilisateurs n'a de crédit négatif.</li> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
<span><?= Html::encode(Yii::$app->user->identity->getNameProducer()); ?></span> | |||||
<i class="fa fa-caret-down"></i> | |||||
</a> | |||||
<ul class="dropdown-menu"> | |||||
<?php if(User::isCurrentAdmin()): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index','slug_producer' => Producer::getCurrent()->slug]); ?>"> | |||||
<i class="fa fa-th-large"></i> | |||||
<span class="hidden-xs">Espace du producteur</span> | |||||
</a> | |||||
</li> | |||||
<li class="header"> <strong>Autres producteurs</strong></li> | |||||
<?php $producersArray = Producer::find()->orderBy('name ASC')->all(); ?> | |||||
<?php foreach($producersArray as $producer): ?> | |||||
<li><a href="<?= Yii::$app->urlManagerBackend->createUrl(['site/change-producer', 'id' => $producer->id]); ?>"><?= Html::encode($producer->name) ?></a></li> | |||||
<?php endforeach; ?> | |||||
<?php else: ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index','slug_producer' => Producer::getCurrent()->slug]); ?>"> | |||||
<i class="fa fa-th-large"></i> | |||||
<span class="hidden-xs">Mon espace</span> | |||||
</a> | |||||
</li> | |||||
<?php endif; ?> | |||||
</ul> | |||||
</li> | |||||
<?php endif; ?> | |||||
</ul> | |||||
</li> | |||||
<?php if (User::isCurrentProducer() || User::isCurrentAdmin()): ?> | |||||
<li class="dropdown producer-menu"> | |||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | |||||
<?php if ($producer->active): ?> | |||||
<i class="fa fa-home"></i> | |||||
<?php else: ?> | |||||
<span class="label label-danger">Hors-ligne</span> | |||||
<?php endif; ?> | |||||
<span><?= Html::encode(Yii::$app->user->identity->getNameProducer()); ?></span> | |||||
<i class="fa fa-caret-down"></i> | |||||
</a> | |||||
<ul class="dropdown-menu"> | |||||
<?php if (User::isCurrentAdmin()): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index', 'slug_producer' => GlobalParam::getCurrentProducer()->slug]); ?>"> | |||||
<i class="fa fa-th-large"></i> | |||||
<span class="hidden-xs">Espace du producteur</span> | |||||
</a> | |||||
</li> | |||||
<li class="header"> <strong>Autres producteurs</strong></li> | |||||
<?php $producersArray = Producer::find()->orderBy('name ASC')->all(); ?> | |||||
<?php foreach ($producersArray as $producer): ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerBackend->createUrl(['site/change-producer', 'id' => $producer->id]); ?>"><?= Html::encode($producer->name) ?></a> | |||||
</li> | |||||
<?php endforeach; ?> | |||||
<?php else: ?> | |||||
<li> | |||||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index', 'slug_producer' => GlobalParam::getCurrentProducer()->slug]); ?>"> | |||||
<i class="fa fa-th-large"></i> | |||||
<span class="hidden-xs">Mon espace</span> | |||||
</a> | |||||
</li> | |||||
<?php endif; ?> | |||||
</ul> | |||||
</li> | |||||
<?php endif; ?> | |||||
<li class="dropdown user user-menu"> | <li class="dropdown user user-menu"> | ||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> | ||||
<i class="fa fa-user"></i> | <i class="fa fa-user"></i> | ||||
<span class="hidden-xs"><?= Html::encode(User::getCurrent()->name.' '.User::getCurrent()->lastname) ; ?></span> | |||||
<span class="hidden-xs"><?= Html::encode(User::getCurrent()->name . ' ' . User::getCurrent()->lastname); ?></span> | |||||
<i class="fa fa-caret-down"></i> | <i class="fa fa-caret-down"></i> | ||||
</a> | </a> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<li><a href="<?= Yii::$app->urlManagerFrontend->createAbsoluteUrl(['user/update']); ?>"><i class="fa fa-user"></i> Profil</a></li> | |||||
<li><a href="<?= Yii::$app->urlManagerBackend->createUrl(['site/logout']); ?>"><i class="fa fa-sign-out"></i> Déconnexion</a></li> | |||||
<li><a href="<?= Yii::$app->urlManagerFrontend->createAbsoluteUrl(['user/update']); ?>"><i | |||||
class="fa fa-user"></i> Profil</a></li> | |||||
<li><a href="<?= Yii::$app->urlManagerBackend->createUrl(['site/logout']); ?>"><i | |||||
class="fa fa-sign-out"></i> Déconnexion</a></li> | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
<li class="link-control-sidebar"> | <li class="link-control-sidebar"> | ||||
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a> | <a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a> | ||||
</li> | </li> | ||||
</ul> | </ul> | ||||
</div> | </div> | ||||
</nav> | </nav> |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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\helpers\Html; | ||||
use yii\bootstrap\Nav; | use yii\bootstrap\Nav; | ||||
use yii\widgets\ActiveForm; | use yii\widgets\ActiveForm; | ||||
use yii\helpers\ArrayHelper; | use yii\helpers\ArrayHelper; | ||||
use common\helpers\Url; | use common\helpers\Url; | ||||
use common\helpers\GlobalParam; | |||||
/* @var $this \yii\web\View */ | /* @var $this \yii\web\View */ | ||||
/* @var $content string */ | /* @var $content string */ | ||||
\common\assets\CommonAsset::register($this); | \common\assets\CommonAsset::register($this); | ||||
\backend\assets\AppAsset::register($this); | \backend\assets\AppAsset::register($this); | ||||
$producer = null ; | |||||
if(!Yii::$app->user->isGuest) { | |||||
$producer = Producer::findOne(Producer::getId()) ; | |||||
$producer = null; | |||||
if (!Yii::$app->user->isGuest) { | |||||
$producer = Producer::findOne(GlobalParam::getCurrentProducerId()); | |||||
} | } | ||||
?> | ?> | ||||
<?php $this->beginPage() ?> | <?php $this->beginPage() ?> | ||||
<!DOCTYPE html> | <!DOCTYPE html> | ||||
<html lang="<?= Yii::$app->language ?>"> | <html lang="<?= Yii::$app->language ?>"> | ||||
<head> | |||||
<meta charset="<?= Yii::$app->charset ?>"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||||
<meta name="baseurl" content="<?= Yii::$app->urlManagerBackend->baseUrl ; ?>"> | |||||
<meta name="baseurl-absolute" content="<?= Yii::$app->urlManagerBackend->getHostInfo().Yii::$app->urlManagerBackend->baseUrl; ?>"> | |||||
<link rel="icon" type="image/png" href="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/favicon3.png" /> | |||||
<head> | |||||
<meta charset="<?= Yii::$app->charset ?>"> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||||
<meta name="baseurl" content="<?= Yii::$app->urlManagerBackend->baseUrl; ?>"> | |||||
<meta name="baseurl-absolute" | |||||
content="<?= Yii::$app->urlManagerBackend->getHostInfo() . Yii::$app->urlManagerBackend->baseUrl; ?>"> | |||||
<link rel="icon" type="image/png" href="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/favicon3.png"/> | |||||
<?= Html::csrfMetaTags() ?> | <?= Html::csrfMetaTags() ?> | ||||
<title><?= Html::encode($this->title) ?> - distrib</title> | |||||
<?php $this->head() ?> | |||||
</head> | |||||
<body> | |||||
<?php $this->beginBody() ?> | |||||
<div class="wrap"> | |||||
<?php | |||||
NavBar::begin([ | |||||
<title><?= Html::encode($this->title) ?> - distrib</title> | |||||
<?php $this->head() ?> | |||||
</head> | |||||
<body> | |||||
<?php $this->beginBody() ?> | |||||
<div class="wrap"> | |||||
<?php | |||||
NavBar::begin([ | |||||
'brandLabel' => '<img class="logo" src="' . Yii::$app->urlManager->getBaseUrl() . '/img/laboulange3.png" />', | 'brandLabel' => '<img class="logo" src="' . Yii::$app->urlManager->getBaseUrl() . '/img/laboulange3.png" />', | ||||
'brandUrl' => Yii::$app->homeUrl, | 'brandUrl' => Yii::$app->homeUrl, | ||||
'innerContainerOptions' => ['class' => 'container-fluid'], | 'innerContainerOptions' => ['class' => 'container-fluid'], | ||||
'options' => [ | 'options' => [ | ||||
'class' => 'navbar-inverse navbar-fixed-top nav-header', | |||||
'class' => 'navbar-inverse navbar-fixed-top nav-header', | |||||
], | ], | ||||
]); | |||||
]); | |||||
$menuItems = [ | |||||
$menuItems = [ | |||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-home"></span> Tableau de bord', | |||||
'url' => ['/site/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
'label' => '<span class="glyphicon glyphicon-home"></span> Tableau de bord', | |||||
'url' => ['/site/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | ], | ||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Commandes', | |||||
'url' => ['/order/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Toutes les commandes', | |||||
'url' => ['/order/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-repeat"></span> Abonnements', | |||||
'url' => ['/subscription/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
] | |||||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Commandes', | |||||
'url' => ['/order/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-calendar"></span> Toutes les commandes', | |||||
'url' => ['/order/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'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' => ['/product/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
'label' => '<span class="glyphicon glyphicon-grain"></span> Produits', | |||||
'url' => ['/product/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | ], | ||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-map-marker"></span> Points de vente', | |||||
'url' => ['/point-sale/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
'label' => '<span class="glyphicon glyphicon-map-marker"></span> Points de vente', | |||||
'url' => ['/point-sale/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | ], | ||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-user"></span> Clients', | |||||
'url' => ['/user/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
'label' => '<span class="glyphicon glyphicon-user"></span> Clients', | |||||
'url' => ['/user/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | ], | ||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-plus"></span>', | |||||
'url' => ['/producer/update'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-cog"></span> Paramètres', | |||||
'url' => ['/producer/update'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-bullhorn"></span> Communiquer', | |||||
'url' => ['/communicate/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Mon abonnement', | |||||
'url' => ['/producer/billing'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques', | |||||
'url' => ['/stats/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques produits', | |||||
'url' => ['/stats/products'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-wrench"></span> Développement', | |||||
'url' => ['/development/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
'label' => '<span class="glyphicon glyphicon-plus"></span>', | |||||
'url' => ['/producer/update'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-cog"></span> Paramètres', | |||||
'url' => ['/producer/update'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-bullhorn"></span> Communiquer', | |||||
'url' => ['/communicate/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Mon abonnement', | |||||
'url' => ['/producer/billing'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques', | |||||
'url' => ['/stats/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques produits', | |||||
'url' => ['/stats/products'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-wrench"></span> Développement', | |||||
'url' => ['/development/index'], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
], | ], | ||||
], | |||||
] | ] | ||||
]; | |||||
]; | |||||
if (Yii::$app->user->isGuest) { | |||||
if (Yii::$app->user->isGuest) { | |||||
$menuItems[] = ['label' => 'Connexion', 'url' => ['/site/login']]; | $menuItems[] = ['label' => 'Connexion', 'url' => ['/site/login']]; | ||||
} else { | |||||
} else { | |||||
if (Yii::$app->user->identity->status == USER::STATUS_ADMIN) { | if (Yii::$app->user->identity->status == USER::STATUS_ADMIN) { | ||||
$menuItems[] = [ | |||||
'label' => '<span class="glyphicon glyphicon-asterisk"></span>', | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-th-list"></span> Producteurs', | |||||
'url' => ['producer-admin/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Facturation', | |||||
'url' => ['producer-admin/billing'], | |||||
'visible' => false, | |||||
], | |||||
] | |||||
]; | |||||
$menuItems[] = [ | |||||
'label' => '<span class="glyphicon glyphicon-asterisk"></span>', | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-th-list"></span> Producteurs', | |||||
'url' => ['producer-admin/index'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Facturation', | |||||
'url' => ['producer-admin/billing'], | |||||
'visible' => false, | |||||
], | |||||
] | |||||
]; | |||||
} | } | ||||
$menuItems[] = [ | $menuItems[] = [ | ||||
'label' => '<span class="glyphicon glyphicon-off"></span>', | |||||
'url' => ['/site/logout'], | |||||
'linkOptions' => ['data-method' => 'post', 'title' => 'Déconnexion'] | |||||
'label' => '<span class="glyphicon glyphicon-off"></span>', | |||||
'url' => ['/site/logout'], | |||||
'linkOptions' => ['data-method' => 'post', 'title' => 'Déconnexion'] | |||||
]; | ]; | ||||
$menuItems[] = [ | $menuItems[] = [ | ||||
'label' => '<span class="retour-site">Retour sur le site</span>', | |||||
'url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index','slug_producer' => $producer->slug]), | |||||
'label' => '<span class="retour-site">Retour sur le site</span>', | |||||
'url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['site/index', 'slug_producer' => $producer->slug]), | |||||
]; | ]; | ||||
} | |||||
echo Nav::widget([ | |||||
} | |||||
echo Nav::widget([ | |||||
'options' => ['class' => 'navbar-nav navbar-right'], | 'options' => ['class' => 'navbar-nav navbar-right'], | ||||
'items' => $menuItems, | 'items' => $menuItems, | ||||
'encodeLabels' => false | 'encodeLabels' => false | ||||
]); | |||||
NavBar::end(); | |||||
?> | |||||
]); | |||||
NavBar::end(); | |||||
?> | |||||
<div class="container-fluid container-body"> | |||||
<?php if (YII_ENV == 'dev' || YII_ENV == 'demo'): ?> | |||||
<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="name-producer"> | |||||
<div class="container-fluid container-body"> | |||||
<?php if (YII_ENV == 'dev' || YII_ENV == 'demo'): ?> | |||||
<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="name-producer"> | |||||
<?php if (User::getCurrentStatus() == User::STATUS_PRODUCER): ?> | <?php if (User::getCurrentStatus() == User::STATUS_PRODUCER): ?> | ||||
<span><?= Html::encode(Yii::$app->user->identity->getNameProducer()); ?></span> | <span><?= Html::encode(Yii::$app->user->identity->getNameProducer()); ?></span> | ||||
<?php elseif (User::getCurrentStatus() == User::STATUS_ADMIN): ?> | <?php elseif (User::getCurrentStatus() == User::STATUS_ADMIN): ?> | ||||
<?php $form = ActiveForm::begin(['id' => 'select-producer']); ?> | |||||
<?= | |||||
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 $form = ActiveForm::begin(['id' => 'select-producer']); ?> | |||||
<?= | |||||
Html::dropDownList('select_producer', GlobalParam::getCurrentProducerId(), ArrayHelper::map(Producer::find()->orderBy('name ASC')->all(), 'id', function ($model, $defaultValue) { | |||||
return $model->name; | |||||
})); | |||||
?> | |||||
<?php ActiveForm::end(); ?> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
<?php | <?php | ||||
$producer = Producer::findOne(Producer::getId()); | |||||
$producer = Producer::findOne(GlobalParam::getCurrentProducerId()); | |||||
if (!$producer->active): | 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."> | |||||
?> | |||||
<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', ['producer/update']); ?> | <?= Html::a('Hors-ligne', ['producer/update']); ?> | ||||
</span> | </span> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<div class="clr"></div> | |||||
</div> | |||||
<?php endif; ?> | |||||
<div class="clr"></div> | |||||
</div> | |||||
<?php endif; ?> | |||||
<?php if (YII_ENV == 'demo'): ?> | |||||
<div id="block-demo"> | |||||
<div class="container-fluid"> | |||||
<span class="glyphicon glyphicon-eye-open"></span> <strong>Espace de démonstration</strong> : | |||||
Testez la plateforme sans avoir à vous inscrire. Les données sont réinitialisées quotidiennement • <?= Html::a('Retour', Url::env('prod', 'frontend')) ?> | |||||
</div> | |||||
<?php if (YII_ENV == 'demo'): ?> | |||||
<div id="block-demo"> | |||||
<div class="container-fluid"> | |||||
<span class="glyphicon glyphicon-eye-open"></span> <strong>Espace de démonstration</strong> : | |||||
Testez la plateforme sans avoir à vous inscrire. Les données sont réinitialisées quotidiennement | |||||
• <?= Html::a('Retour', Url::env('prod', 'frontend')) ?> | |||||
</div> | </div> | ||||
<?php endif; ?> | |||||
</div> | |||||
<?php endif; ?> | |||||
<?= | |||||
Breadcrumbs::widget([ | |||||
<?= | |||||
Breadcrumbs::widget([ | |||||
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], | 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], | ||||
]) | |||||
?> | |||||
<?= $content ?> | |||||
</div> | |||||
</div> | |||||
]) | |||||
?> | |||||
<?= $content ?> | |||||
</div> | |||||
</div> | |||||
<div id="alerts-fixed"></div> | |||||
<div id="alerts-fixed"></div> | |||||
<footer class="footer"> | |||||
<div class="container-fluid"> | |||||
<p class="pull-left"> | |||||
<a href="<?php echo Url::frontend('site/contact'); ?>">Contact</a> • | |||||
<a href="<?php echo Url::frontend('site/mentions'); ?>">Mentions légales</a> • | |||||
<a href="<?php echo Url::frontend('site/cgv'); ?>">CGS</a> | |||||
<a id="code-source" href="https://framagit.org/guillaume-bourgeois/laboiteapain">Code source <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-framagit.png" alt="Hébergé par Framasoft" /> <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-gitlab.png" alt="Propulsé par Gitlab" /></a> | |||||
</p> | |||||
<p class="pull-right"><?= Yii::powered() ?></p> | |||||
</div> | |||||
</footer> | |||||
<footer class="footer"> | |||||
<div class="container-fluid"> | |||||
<p class="pull-left"> | |||||
<a href="<?php echo Url::frontend('site/contact'); ?>">Contact</a> • | |||||
<a href="<?php echo Url::frontend('site/mentions'); ?>">Mentions légales</a> • | |||||
<a href="<?php echo Url::frontend('site/cgv'); ?>">CGS</a> | |||||
<a id="code-source" href="https://framagit.org/guillaume-bourgeois/laboiteapain">Code source <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-framagit.png" | |||||
alt="Hébergé par Framasoft"/> <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-gitlab.png" | |||||
alt="Propulsé par Gitlab"/></a> | |||||
</p> | |||||
<p class="pull-right"><?= Yii::powered() ?></p> | |||||
</div> | |||||
</footer> | |||||
<?php $this->endBody() ?> | <?php $this->endBody() ?> | ||||
<!-- analytics --> | |||||
<script> | |||||
(function (i, s, o, g, r, a, m) { | |||||
i['GoogleAnalyticsObject'] = r; | |||||
i[r] = i[r] || function () { | |||||
(i[r].q = i[r].q || []).push(arguments) | |||||
}, i[r].l = 1 * new Date(); | |||||
a = s.createElement(o), | |||||
m = s.getElementsByTagName(o)[0]; | |||||
a.async = 1; | |||||
a.src = g; | |||||
m.parentNode.insertBefore(a, m) | |||||
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); | |||||
<!-- analytics --> | |||||
<script> | |||||
(function (i, s, o, g, r, a, m) { | |||||
i['GoogleAnalyticsObject'] = r; | |||||
i[r] = i[r] || function () { | |||||
(i[r].q = i[r].q || []).push(arguments) | |||||
}, i[r].l = 1 * new Date(); | |||||
a = s.createElement(o), | |||||
m = s.getElementsByTagName(o)[0]; | |||||
a.async = 1; | |||||
a.src = g; | |||||
m.parentNode.insertBefore(a, m) | |||||
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); | |||||
ga('create', 'UA-86917043-1', 'auto'); | |||||
ga('send', 'pageview'); | |||||
</script> | |||||
</body> | |||||
ga('create', 'UA-86917043-1', 'auto'); | |||||
ga('send', 'pageview'); | |||||
</script> | |||||
</body> | |||||
</html> | </html> | ||||
<?php $this->endPage() ?> | <?php $this->endPage() ?> |
use yii\helpers\ArrayHelper; | use yii\helpers\ArrayHelper; | ||||
use common\models\TaxRate; | use common\models\TaxRate; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\helpers\GlobalParam; | |||||
/* @var $this yii\web\View */ | /* @var $this yii\web\View */ | ||||
/* @var $model app\models\Produit */ | /* @var $model app\models\Produit */ | ||||
<?php | <?php | ||||
//Récupère la tva par défaut du producteur courant | //Récupère la tva par défaut du producteur courant | ||||
$producer = Producer::searchOne(['id' => Producer::getId()]); | |||||
$taxRateDefault = TaxRate::searchOne(['id' => $producer->id_tax_rate_default]); | |||||
$producer = \common\helpers\GlobalParam::getCurrentProducer(); | |||||
$taxRateDefault = $producer->taxRate; | |||||
$taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | $taxRateNamesArray = array_merge(array(0 => 'Tva par défaut'), ArrayHelper::map(TaxRate::find()->all(), 'id', function ($model) { | ||||
return $model->name; | return $model->name; |
use common\models\Product; | use common\models\Product; | ||||
use common\models\TaxRate; | use common\models\TaxRate; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\helpers\GlobalParam; | |||||
$this->setTitle('Produits'); | $this->setTitle('Produits'); | ||||
$this->addBreadcrumb($this->getTitle()); | $this->addBreadcrumb($this->getTitle()); | ||||
if ($model->id_tax_rate == 0 || $model->id_tax_rate == null) { | if ($model->id_tax_rate == 0 || $model->id_tax_rate == null) { | ||||
//Récupère la tva par défaut du producteur courant | //Récupère la tva par défaut du producteur courant | ||||
$producer = Producer::searchOne(['id'=> Producer::getId()]); | |||||
$taxRate = TaxRate::searchOne(['id'=> $producer->id_tax_rate_default]); | |||||
$taxRateDefault = GlobalParam::getCurrentProducer()->taxRate; | |||||
$return = $taxRate->name; | |||||
$return = $taxRateDefault->name; | |||||
} else { | } else { | ||||
$return = $model->taxRate->name; | $return = $model->taxRate->name; |
use yii\helpers\ArrayHelper ; | use yii\helpers\ArrayHelper ; | ||||
use common\models\User ; | use common\models\User ; | ||||
use common\models\PointSale ; | use common\models\PointSale ; | ||||
use common\helpers\GlobalParam ; | |||||
\backend\assets\VuejsSubscriptionFormAsset::register($this); | \backend\assets\VuejsSubscriptionFormAsset::register($this); | ||||
<?= $form->field($model, 'id')->hiddenInput() ?> | <?= $form->field($model, 'id')->hiddenInput() ?> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<div class="col-md-5" id="bloc-select-user"> | <div class="col-md-5" id="bloc-select-user"> | ||||
<?= $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) { | |||||
<?= $form->field($model, 'id_user')->dropDownList( ArrayHelper::map(User::find()->joinWith('userProducer')->where('user_producer.id_producer = '.GlobalParam::getCurrentProducerId())->andWhere('user_producer.active = 1')->orderBy('lastname ASC, name ASC')->all(), 'id', function($model, $defaultValue) { | |||||
return $model['lastname'].' '.$model['name']; | return $model['lastname'].' '.$model['name']; | ||||
}), ['prompt' => '--','class' => 'form-control user-id', ]) ?> | }), ['prompt' => '--','class' => 'form-control user-id', ]) ?> | ||||
</div> | </div> | ||||
<div class="clr"></div> | <div class="clr"></div> | ||||
<?= $form->field($model, 'id_producer')->hiddenInput() ?> | <?= $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) { | |||||
<?= $form->field($model, 'id_point_sale')->dropDownList(ArrayHelper::map(PointSale::find()->where('id_producer = '.GlobalParam::getCurrentProducerId())->all(), 'id', function($model, $defaultValue) { | |||||
return $model['name']; | return $model['name']; | ||||
}), ['prompt' => '--','class' => 'form-control user-id']) ?> | }), ['prompt' => '--','class' => 'form-control user-id']) ?> | ||||
<?= $form->field($model, 'date_begin') ?> | <?= $form->field($model, 'date_begin') ?> |
use yii\helpers\Html; | use yii\helpers\Html; | ||||
use yii\grid\GridView; | use yii\grid\GridView; | ||||
use common\models\Product ; | use common\models\Product ; | ||||
use common\helpers\GlobalParam ; | |||||
$this->setTitle('Abonnements') ; | $this->setTitle('Abonnements') ; | ||||
'attribute' => 'id_point_sale', | 'attribute' => 'id_point_sale', | ||||
'label' => 'Point de vente', | 'label' => 'Point de vente', | ||||
'format' => 'raw', | 'format' => 'raw', | ||||
'filter' => ArrayHelper::map(PointSale::find()->where(['id_producer' => Producer::getId()])->asArray()->all(), 'id', 'name'), | |||||
'filter' => ArrayHelper::map(PointSale::find()->where(['id_producer' => GlobalParam::getCurrentProducerId()])->asArray()->all(), 'id', 'name'), | |||||
'value' => function($model) { | 'value' => function($model) { | ||||
return Html::encode($model->pointSale->name) ; | return Html::encode($model->pointSale->name) ; | ||||
} | } |
use yii\widgets\ActiveForm; | use yii\widgets\ActiveForm; | ||||
use common\models\CreditHistory; | use common\models\CreditHistory; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\helpers\GlobalParam; | |||||
$this->setTitle('Créditer <small>'.Html::encode($user->lastname.' '.$user->name).'</small>', 'Créditer '.Html::encode($user->lastname.' '.$user->name)) ; | $this->setTitle('Créditer <small>'.Html::encode($user->lastname.' '.$user->name).'</small>', 'Créditer '.Html::encode($user->lastname.' '.$user->name)) ; | ||||
$this->addBreadcrumb(['label' => 'Utilisateurs', 'url' => ['index']]) ; | $this->addBreadcrumb(['label' => 'Utilisateurs', 'url' => ['index']]) ; | ||||
<?php | <?php | ||||
$producer = Producer::searchOne([ | $producer = Producer::searchOne([ | ||||
'id' => Producer::getId() | |||||
'id' => GlobalParam::getCurrentProducerId() | |||||
]); | ]); | ||||
if(!$producer->credit) | if(!$producer->credit) |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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 ; | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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; | |||||
use common\helpers\GlobalParam; | |||||
class ActiveRecordCommon extends \yii\db\ActiveRecord | 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 searchBy($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) | |||||
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 searchBy($params = [], $options = []) | |||||
{ | { | ||||
$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); | |||||
} | |||||
$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) { | |||||
$params[$options['attribute_id_producer']] = GlobalParam::getCurrentProducerId(); | |||||
} | } | ||||
} | |||||
else { | |||||
if(strlen($options['conditions'])) { | |||||
$records = $records->andWhere($options['conditions']); | |||||
if (!isset($options['type_search'])) { | |||||
$options['type_search'] = self::SEARCH_ALL; | |||||
} | } | ||||
} | |||||
} | |||||
// 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 = $class::find(); | |||||
// With | |||||
if (is_array($options['with']) && count($options['with'])) { | |||||
$records = $records->with($options['with']); | |||||
} | } | ||||
$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']); | |||||
} | |||||
// 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 (isset($options['as_array'])) { | |||||
$records = $records->asArray(); | |||||
} | |||||
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; | |||||
} | } | ||||
if(isset($options['as_array'])) { | |||||
$records = $records->asArray() ; | |||||
/** | |||||
* 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); | |||||
} | } | ||||
if($options['type_search'] == self::SEARCH_ALL) { | |||||
return $records->all(); | |||||
/** | |||||
* 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); | |||||
} | } | ||||
elseif($options['type_search'] == self::SEARCH_ONE) { | |||||
$record = $records->one(); | |||||
if($record) { | |||||
return $record ; | |||||
} | |||||
/** | |||||
* 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); | |||||
} | } | ||||
elseif($options['type_search'] == self::SEARCH_COUNT) { | |||||
return $records->count() ; | |||||
/** | |||||
* 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::searchBy($params, $options); | |||||
} | } | ||||
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::searchBy($params, $options) ; | |||||
} | |||||
} | } |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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. | |||||
*/ | |||||
return [ | return [ | ||||
'adminEmail' => 'contact@opendistrib.net', | |||||
'supportEmail' => 'contact@opendistrib.net', | |||||
'user.passwordResetTokenExpire' => 3600, | |||||
'adminEmail' => 'contact@opendistrib.net', | |||||
'supportEmail' => 'contact@opendistrib.net', | |||||
'user.passwordResetTokenExpire' => 3600, | |||||
'producer' => false | |||||
]; | ]; |
<?php | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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\helpers; | |||||
use common\models\Producer; | |||||
class GlobalParam | |||||
{ | |||||
public function get($key) | |||||
{ | |||||
if($key == 'producer'){ | |||||
return $this->getCurrentProducer(); | |||||
}else{ | |||||
return \Yii::$app->params[$key]; | |||||
} | |||||
} | |||||
public static function getCurrentProducer() | |||||
{ | |||||
if(\Yii::$app->params['producer'] == false){ | |||||
\Yii::$app->params['producer'] = Producer::searchOne(); | |||||
} | |||||
return \Yii::$app->params['producer']; | |||||
} | |||||
/** | |||||
* Retourne l'ID du producteur courant. | |||||
* | |||||
* @return integer|boolean | |||||
*/ | |||||
public static function getCurrentProducerId() | |||||
{ | |||||
if(\Yii::$app->controller->module->id == 'app-backend') { | |||||
if(!\Yii::$app->user->isGuest) { | |||||
return Yii::$app->user->identity->id_producer ; | |||||
} | |||||
} | |||||
else { | |||||
return \Yii::$app->controller->getProducer()->id; | |||||
} | |||||
return false ; | |||||
} | |||||
} |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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. | |||||
*/ | |||||
contact@opendistrib.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". | |||||
namespace common\helpers; | |||||
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. | |||||
class Price | |||||
{ | |||||
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é. | |||||
public static function format($number) | |||||
{ | |||||
return number_format($number, 2) . ' €'; | |||||
} | |||||
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. | |||||
*/ | |||||
public static function getPrice($priceWithTax, $taxRate) | |||||
{ | |||||
return round(floatval($priceWithTax) / ($taxRate + 1), 2); | |||||
} | |||||
namespace common\helpers; | |||||
public static function getPriceWithTax($priceWithoutTax, $taxRate) | |||||
{ | |||||
return round(floatval($priceWithoutTax) * ($taxRate + 1), 2); | |||||
} | |||||
class Price { | |||||
public static function format($number) | |||||
{ | |||||
return number_format($number, 2).' €' ; | |||||
} | |||||
} | } |
namespace common\models ; | namespace common\models ; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\CreditHistory ; | use common\models\CreditHistory ; | ||||
class CreditHistorySearch extends CreditHistory | class CreditHistorySearch extends CreditHistory | ||||
$query = CreditHistory::find() | $query = CreditHistory::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->innerJoinWith($optionsSearch['join_with'], true) | ->innerJoinWith($optionsSearch['join_with'], true) | ||||
->where(['credit_history.id_producer' => Producer::getId()]) | |||||
->where(['credit_history.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('id DESC') | ->orderBy('id DESC') | ||||
; | ; | ||||
namespace common\models ; | namespace common\models ; | ||||
use common\helpers\GlobalParam; | |||||
class DeliveryNoteSearch extends DeliveryNote | class DeliveryNoteSearch extends DeliveryNote | ||||
{ | { | ||||
$query = DeliveryNote::find() | $query = DeliveryNote::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->joinWith($optionsSearch['join_with'], true) | ->joinWith($optionsSearch['join_with'], true) | ||||
->where(['distribution.id_producer' => Producer::getId()]) | |||||
->where(['distribution.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('delivery_note.reference DESC') | ->orderBy('delivery_note.reference DESC') | ||||
; | ; | ||||
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | use common\components\ActiveRecordCommon ; | ||||
use common\models\DeveloppementPriorite; | use common\models\DeveloppementPriorite; | ||||
return $this->hasOne( | return $this->hasOne( | ||||
DevelopmentPriority::className(), | DevelopmentPriority::className(), | ||||
['id_development' => 'id']) | ['id_development' => 'id']) | ||||
->where(['id_producer' => Producer::getId()]) | |||||
->where(['id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->with('producer'); | ->with('producer'); | ||||
} | } | ||||
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | |||||
use common\components\ActiveRecordCommon; | |||||
use common\models\Order; | use common\models\Order; | ||||
use common\models\Distribution; | use common\models\Distribution; | ||||
* @property string $date | * @property string $date | ||||
* @property integer $active | * @property integer $active | ||||
*/ | */ | ||||
class Distribution extends ActiveRecordCommon | |||||
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) | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | { | ||||
return 'distribution'; | |||||
} | |||||
foreach ($this->productDistribution as $productDistribution) { | |||||
if ($productDistribution['id_product'] == $idProduct && | |||||
$productDistribution['active']) | |||||
{ | |||||
return true; | |||||
} | |||||
} | |||||
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', | |||||
]; | |||||
} | } | ||||
return false; | |||||
} | |||||
/** | |||||
* Initialise un jour de production. | |||||
* | |||||
* @param string $date | |||||
* @return Production | |||||
*/ | |||||
public static function initDistribution($date, $idProducer = 0) | |||||
{ | |||||
$distribution = null ; | |||||
if ($date != '') { | |||||
$paramsDistribution = [ | |||||
'date' => $date | |||||
] ; | |||||
if($idProducer) { | |||||
$paramsDistribution['distribution.id_producer'] = (int) $idProducer ; | |||||
} | |||||
else { | |||||
$idProducer = Producer::getId() ; | |||||
} | |||||
$distribution = Distribution::searchOne($paramsDistribution) ; | |||||
if (!$distribution) { | |||||
$distribution = new Distribution; | |||||
$distribution->date = $date; | |||||
$distribution->delivery = 1; | |||||
$distribution->id_producer = $idProducer ; | |||||
$distribution->save(); | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
public function getOrder() | |||||
{ | |||||
return $this->hasMany(Order::className(), ['id_distribution' => 'id']); | |||||
} | } | ||||
// 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); | |||||
} | |||||
public function getProductDistribution() | |||||
{ | |||||
return $this->hasMany(ProductDistribution::className(), ['id_distribution' => 'id']); | |||||
} | } | ||||
// init produits sélectionnés pour cette production | |||||
$products = Product::searchAll(); | |||||
if ($distribution) { | |||||
$productsDistribution = ProductDistribution::searchAll([ | |||||
'id_distribution' => $distribution->id | |||||
]) ; | |||||
if (!count($productsDistribution)) { | |||||
foreach ($products as $product) { | |||||
$distribution->linkProduct($product) ; | |||||
/** | |||||
* 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'] == $idProduit && | |||||
$productDistribution['active']) { | |||||
return true; | |||||
} | |||||
} | |||||
} | } | ||||
} | |||||
$distribution->linkProductGift() ; | |||||
return false; | |||||
} | } | ||||
return $distribution ; | |||||
} | |||||
/** | |||||
* Retourne les distributions futures. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function getIncomingDistributions() | |||||
{ | |||||
$distributionsArray = Distribution::find() | |||||
->where('date > \'' . date('Y-m-d').'\'') | |||||
->andWhere([ | |||||
'id_producer' => Producer::getId(), | |||||
'active' => 1 | |||||
]) | |||||
->orderBy('date ASC') | |||||
->all(); | |||||
return $distributionsArray ; | |||||
} | |||||
/** | |||||
* Lie un produit aux jours de distribution futurs. | |||||
* | |||||
* @param Product $product | |||||
*/ | |||||
public static function linkProductIncomingDistributions($product) | |||||
{ | |||||
$distributionsArray = self::getIncomingDistributions() ; | |||||
foreach ($distributionsArray as $distribution) { | |||||
$distribution->linkProduct($product) ; | |||||
/** | |||||
* Initialise un jour de production. | |||||
* | |||||
* @param string $date | |||||
* @return Production | |||||
*/ | |||||
public static function initDistribution($date, $idProducer = 0) | |||||
{ | |||||
$distribution = null; | |||||
if ($date != '') { | |||||
$paramsDistribution = [ | |||||
'date' => $date | |||||
]; | |||||
if ($idProducer) { | |||||
$paramsDistribution['distribution.id_producer'] = (int)$idProducer; | |||||
} else { | |||||
$idProducer = GlobalParam::getCurrentProducerId(); | |||||
} | |||||
$distribution = Distribution::searchOne($paramsDistribution); | |||||
if (!$distribution) { | |||||
$distribution = new Distribution; | |||||
$distribution->date = $date; | |||||
$distribution->delivery = 1; | |||||
$distribution->id_producer = $idProducer; | |||||
$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) { | |||||
$productsDistribution = ProductDistribution::searchAll([ | |||||
'id_distribution' => $distribution->id | |||||
]); | |||||
if (!count($productsDistribution)) { | |||||
foreach ($products as $product) { | |||||
$distribution->linkProduct($product); | |||||
} | |||||
} | |||||
$distribution->linkProductGift(); | |||||
} | |||||
return $distribution; | |||||
} | } | ||||
} | |||||
/** | |||||
* Lie un produit à la distribution. | |||||
* | |||||
* @param Product $product | |||||
*/ | |||||
public function linkProduct($product) | |||||
{ | |||||
$productDistribution = ProductDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_product' => $product->id | |||||
]) ; | |||||
if(!$productDistribution) { | |||||
$productDistribution = new ProductDistribution(); | |||||
$productDistribution->id_distribution = $this->id; | |||||
$productDistribution->id_product = $product->id; | |||||
/** | |||||
* Retourne les distributions futures. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function getIncomingDistributions() | |||||
{ | |||||
$distributionsArray = Distribution::find() | |||||
->where('date > \'' . date('Y-m-d') . '\'') | |||||
->andWhere([ | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'active' => 1 | |||||
]) | |||||
->orderBy('date ASC') | |||||
->all(); | |||||
return $distributionsArray; | |||||
} | } | ||||
$productDistribution->quantity_max = $product->quantity_max; | |||||
$dayDistribution = date('N', strtotime($this->date)); | |||||
$daysArray = [ | |||||
1 => 'monday', | |||||
2 => 'tuesday', | |||||
3 => 'wednesday', | |||||
4 => 'thursday', | |||||
5 => 'friday', | |||||
6 => 'saturday', | |||||
7 => 'sunday', | |||||
] ; | |||||
$productDistribution->active = 0; | |||||
$day = $daysArray[$dayDistribution] ; | |||||
if($product->active && $product->$day) { | |||||
$productDistribution->active = 1; | |||||
/** | |||||
* Lie un produit aux jours de distribution futurs. | |||||
* | |||||
* @param Product $product | |||||
*/ | |||||
public static function linkProductIncomingDistributions($product) | |||||
{ | |||||
$distributionsArray = self::getIncomingDistributions(); | |||||
foreach ($distributionsArray as $distribution) { | |||||
$distribution->linkProduct($product); | |||||
} | |||||
} | } | ||||
$productDistribution->save(); | |||||
return $productDistribution ; | |||||
} | |||||
/** | |||||
* Lie le produit "Don" à la distribution | |||||
*/ | |||||
public function linkProductGift() | |||||
{ | |||||
$productGift = Product::getProductGift() ; | |||||
if($productGift) { | |||||
$productDistribution = ProductDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_product' => $productGift->id | |||||
]) ; | |||||
if(!$productDistribution) { | |||||
$productDistribution = new ProductDistribution(); | |||||
$productDistribution->id_distribution = $this->id; | |||||
$productDistribution->id_product = $productGift->id; | |||||
$productDistribution->active = 1; | |||||
$productDistribution->save() ; | |||||
} | |||||
/** | |||||
* Lie un produit à la distribution. | |||||
* | |||||
* @param Product $product | |||||
*/ | |||||
public function linkProduct($product) | |||||
{ | |||||
$productDistribution = ProductDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_product' => $product->id | |||||
]); | |||||
if (!$productDistribution) { | |||||
$productDistribution = new ProductDistribution(); | |||||
$productDistribution->id_distribution = $this->id; | |||||
$productDistribution->id_product = $product->id; | |||||
} | |||||
$productDistribution->quantity_max = $product->quantity_max; | |||||
$dayDistribution = date('N', strtotime($this->date)); | |||||
$daysArray = [ | |||||
1 => 'monday', | |||||
2 => 'tuesday', | |||||
3 => 'wednesday', | |||||
4 => 'thursday', | |||||
5 => 'friday', | |||||
6 => 'saturday', | |||||
7 => 'sunday', | |||||
]; | |||||
$productDistribution->active = 0; | |||||
$day = $daysArray[$dayDistribution]; | |||||
if ($product->active && $product->$day) { | |||||
$productDistribution->active = 1; | |||||
} | |||||
$productDistribution->save(); | |||||
return $productDistribution; | |||||
} | } | ||||
} | |||||
/** | |||||
* Lie un point de vente aux jours de distribution futurs. | |||||
* | |||||
* @param PointSale $pointSale | |||||
*/ | |||||
public static function linkPointSaleIncomingDistributions($pointSale) | |||||
{ | |||||
$distributionsArray = self::getIncomingDistributions() ; | |||||
foreach ($distributionsArray as $distribution) { | |||||
$distribution->linkPointSale($pointSale) ; | |||||
/** | |||||
* Lie le produit "Don" à la distribution | |||||
*/ | |||||
public function linkProductGift() | |||||
{ | |||||
$productGift = Product::getProductGift(); | |||||
if ($productGift) { | |||||
$productDistribution = ProductDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_product' => $productGift->id | |||||
]); | |||||
if (!$productDistribution) { | |||||
$productDistribution = new ProductDistribution(); | |||||
$productDistribution->id_distribution = $this->id; | |||||
$productDistribution->id_product = $productGift->id; | |||||
$productDistribution->active = 1; | |||||
$productDistribution->save(); | |||||
} | |||||
} | |||||
} | } | ||||
} | |||||
/** | |||||
* | |||||
* @param type $pointSale | |||||
*/ | |||||
public function linkPointSale($pointSale) | |||||
{ | |||||
$pointSaleDistribution = PointSaleDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_point_sale' => $pointSale->id | |||||
]) ; | |||||
if(!$pointSaleDistribution) { | |||||
$pointSaleDistribution = new PointSaleDistribution(); | |||||
$pointSaleDistribution->id_distribution = $this->id; | |||||
$pointSaleDistribution->id_point_sale = $pointSale->id; | |||||
/** | |||||
* Lie un point de vente aux jours de distribution futurs. | |||||
* | |||||
* @param PointSale $pointSale | |||||
*/ | |||||
public static function linkPointSaleIncomingDistributions($pointSale) | |||||
{ | |||||
$distributionsArray = self::getIncomingDistributions(); | |||||
foreach ($distributionsArray as $distribution) { | |||||
$distribution->linkPointSale($pointSale); | |||||
} | |||||
} | } | ||||
$dayDistribution = date('N', strtotime($this->date)); | |||||
$daysArray = [ | |||||
1 => 'monday', | |||||
2 => 'tuesday', | |||||
3 => 'wednesday', | |||||
4 => 'thursday', | |||||
5 => 'friday', | |||||
6 => 'saturday', | |||||
7 => 'sunday', | |||||
] ; | |||||
$pointSaleDistribution->delivery = 0 ; | |||||
$deliveryDay = 'delivery_'.$daysArray[$dayDistribution] ; | |||||
if($pointSale->$deliveryDay) { | |||||
$pointSaleDistribution->delivery = 1; | |||||
/** | |||||
* | |||||
* @param type $pointSale | |||||
*/ | |||||
public function linkPointSale($pointSale) | |||||
{ | |||||
$pointSaleDistribution = PointSaleDistribution::searchOne([ | |||||
'id_distribution' => $this->id, | |||||
'id_point_sale' => $pointSale->id | |||||
]); | |||||
if (!$pointSaleDistribution) { | |||||
$pointSaleDistribution = new PointSaleDistribution(); | |||||
$pointSaleDistribution->id_distribution = $this->id; | |||||
$pointSaleDistribution->id_point_sale = $pointSale->id; | |||||
} | |||||
$dayDistribution = date('N', strtotime($this->date)); | |||||
$daysArray = [ | |||||
1 => 'monday', | |||||
2 => 'tuesday', | |||||
3 => 'wednesday', | |||||
4 => 'thursday', | |||||
5 => 'friday', | |||||
6 => 'saturday', | |||||
7 => 'sunday', | |||||
]; | |||||
$pointSaleDistribution->delivery = 0; | |||||
$deliveryDay = 'delivery_' . $daysArray[$dayDistribution]; | |||||
if ($pointSale->$deliveryDay) { | |||||
$pointSaleDistribution->delivery = 1; | |||||
} | |||||
$pointSaleDistribution->save(); | |||||
} | } | ||||
$pointSaleDistribution->save() ; | |||||
} | |||||
/** | |||||
* Active ou désactive la distribution. | |||||
*/ | |||||
public function active($active = true) | |||||
{ | |||||
PointSaleDistribution::setAll($this->id, true); | |||||
$this->active = (int) $active ; | |||||
$this->save() ; | |||||
if ($active) { | |||||
// ajout des abonnements | |||||
Subscription::addAll($this->date); | |||||
/** | |||||
* Active ou désactive la distribution. | |||||
*/ | |||||
public function active($active = true) | |||||
{ | |||||
PointSaleDistribution::setAll($this->id, true); | |||||
$this->active = (int)$active; | |||||
$this->save(); | |||||
if ($active) { | |||||
// ajout des abonnements | |||||
Subscription::addAll($this->date); | |||||
} | |||||
} | } | ||||
} | |||||
} | } |
namespace common\models ; | namespace common\models ; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Invoice ; | use common\models\Invoice ; | ||||
class InvoiceSearch extends Invoice | class InvoiceSearch extends Invoice | ||||
$query = Invoice::find() | $query = Invoice::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->joinWith($optionsSearch['join_with'], true) | ->joinWith($optionsSearch['join_with'], true) | ||||
->where(['distribution.id_producer' => Producer::getId()]) | |||||
->where(['distribution.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('invoice.reference DESC') | ->orderBy('invoice.reference DESC') | ||||
; | ; | ||||
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use yii\helpers\Html; | use yii\helpers\Html; | ||||
use common\models\UserPointSale; | use common\models\UserPointSale; | ||||
use common\models\PointSaleDistribution ; | |||||
use common\components\ActiveRecordCommon ; | |||||
use common\models\PointSaleDistribution; | |||||
use common\components\ActiveRecordCommon; | |||||
/** | /** | ||||
* This is the model class for table "point_vente". | * This is the model class for table "point_vente". | ||||
*/ | */ | ||||
class PointSale extends ActiveRecordCommon | class PointSale extends ActiveRecordCommon | ||||
{ | { | ||||
var $orders = []; | |||||
var $revenues = 0; | |||||
var $data_select_orders; | |||||
var $data_options_orders; | |||||
var $users = []; | |||||
var $users_comment = []; | |||||
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 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', 'credit_functioning'], 'string'], | |||||
[['point_production', 'credit', 'delivery_monday', 'delivery_tuesday', | |||||
'delivery_wednesday', 'delivery_thursday', 'delivery_friday', | |||||
'delivery_saturday', 'delivery_sunday', 'default'], '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', | |||||
'delivery_monday' => 'Lundi', | |||||
'delivery_tuesday' => 'Mardi', | |||||
'delivery_wednesday' => 'Mercredi', | |||||
'delivery_thursday' => 'Jeudi', | |||||
'delivery_friday' => 'Vendredi', | |||||
'delivery_saturday' => 'Samedi', | |||||
'delivery_sunday' => 'Dimanche', | |||||
'code' => 'Code', | |||||
'credit_functioning' => 'Utilisation du Crédit par l\'utilisateur', | |||||
'default' => 'Point de vente par défaut', | |||||
]; | |||||
} | |||||
/** | |||||
* @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','credit_functioning'], 'string'], | |||||
[['point_production', 'credit', 'delivery_monday', 'delivery_tuesday', | |||||
'delivery_wednesday', 'delivery_thursday', 'delivery_friday', | |||||
'delivery_saturday', 'delivery_sunday','default'], 'boolean'], | |||||
['point_production', 'default', 'value' => 0], | |||||
['id_producer', 'integer'], | |||||
['id_producer', 'required'], | |||||
[['users', 'users_comment', 'code'], 'safe'] | |||||
]; | |||||
} | |||||
/* | |||||
* Relations | |||||
*/ | |||||
/** | |||||
* @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', | |||||
'delivery_monday' => 'Lundi', | |||||
'delivery_tuesday' => 'Mardi', | |||||
'delivery_wednesday' => 'Mercredi', | |||||
'delivery_thursday' => 'Jeudi', | |||||
'delivery_friday' => 'Vendredi', | |||||
'delivery_saturday' => 'Samedi', | |||||
'delivery_sunday' => 'Dimanche', | |||||
'code' => 'Code', | |||||
'credit_functioning' => 'Utilisation du Crédit par l\'utilisateur', | |||||
'default' => 'Point de vente par défaut', | |||||
]; | |||||
} | |||||
public function getUserPointSale() | |||||
{ | |||||
return $this->hasMany( | |||||
UserPointSale::className(), | |||||
['id_point_sale' => 'id'] | |||||
); | |||||
} | |||||
/* | |||||
* 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'] | |||||
); | |||||
} | |||||
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' | |||||
]; | |||||
} | |||||
/** | |||||
* 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; | |||||
/** | |||||
* 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 ($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; | |||||
} | |||||
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); | |||||
} | |||||
/** | |||||
* 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 = GlobalParam::getCurrentProducerId(); | |||||
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 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]); | |||||
/** | |||||
* 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(); | |||||
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; | |||||
/** | |||||
* 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; | |||||
} | } | ||||
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()]) ; | |||||
} | |||||
/** | |||||
* Retourne le nombre de points de vente pour l'établissement courant. | |||||
* | |||||
* @return integer | |||||
*/ | |||||
public static function count() | |||||
{ | |||||
return self::searchCount(['id_producer' => GlobalParam::getCurrentProducerId()]); | |||||
} | |||||
/** | |||||
* 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; | |||||
} | |||||
} | |||||
/** | |||||
* 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; | 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) ; | |||||
/** | |||||
* 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 ''; | |||||
} | |||||
} | } | ||||
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; | |||||
} | } | ||||
} | |||||
/** | |||||
* 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) ; | |||||
/** | |||||
* Retourne le mode de fonctionnement du crédit du point de vente. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getCreditFunctioning() | |||||
{ | |||||
return strlen($this->credit_functioning) > 0 ? | |||||
$this->credit_functioning : | |||||
Producer::getConfig('credit_functioning'); | |||||
} | } | ||||
return $str ; | |||||
} | |||||
/** | |||||
* Retourne le mode de fonctionnement du crédit du point de vente. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getCreditFunctioning() | |||||
{ | |||||
return strlen($this->credit_functioning) > 0 ? | |||||
$this->credit_functioning : | |||||
Producer::getConfig('credit_functioning') ; | |||||
} | |||||
/** | |||||
* Lie un utilisateur au point de vente. | |||||
* | |||||
* @param integer $idUser | |||||
*/ | |||||
public function linkUser($idUser) | |||||
{ | |||||
if($idUser) { | |||||
$userPointSale = UserPointSale::find() | |||||
->where([ | |||||
'id_user' => $idUser, | |||||
'id_point_sale' => $this->id | |||||
])->one() ; | |||||
if(!$userPointSale) { | |||||
$userPointSale = new UserPointSale ; | |||||
$userPointSale->id_user = $idUser ; | |||||
$userPointSale->id_point_sale = $this->id ; | |||||
$userPointSale->save() ; | |||||
} | |||||
/** | |||||
* Lie un utilisateur au point de vente. | |||||
* | |||||
* @param integer $idUser | |||||
*/ | |||||
public function linkUser($idUser) | |||||
{ | |||||
if ($idUser) { | |||||
$userPointSale = UserPointSale::find() | |||||
->where([ | |||||
'id_user' => $idUser, | |||||
'id_point_sale' => $this->id | |||||
])->one(); | |||||
if (!$userPointSale) { | |||||
$userPointSale = new UserPointSale; | |||||
$userPointSale->id_user = $idUser; | |||||
$userPointSale->id_point_sale = $this->id; | |||||
$userPointSale->save(); | |||||
} | |||||
} | |||||
} | } | ||||
} | |||||
} | } |
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | use common\components\ActiveRecordCommon ; | ||||
use common\models\PointVente; | use common\models\PointVente; | ||||
$q->where(['id_distribution' => $idDistribution]); | $q->where(['id_distribution' => $idDistribution]); | ||||
}]) | }]) | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) | ]) | ||||
->all(); | ->all(); | ||||
namespace common\models ; | namespace common\models ; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\PointSale ; | use common\models\PointSale ; | ||||
class PointSaleSearch extends PointSale | class PointSaleSearch extends PointSale | ||||
$query = PointSale::find() | $query = PointSale::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->innerJoinWith($optionsSearch['join_with'], true) | ->innerJoinWith($optionsSearch['join_with'], true) | ||||
->where(['point_sale.id_producer' => Producer::getId()]) | |||||
->where(['point_sale.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
; | ; | ||||
$dataProvider = new ActiveDataProvider([ | $dataProvider = new ActiveDataProvider([ |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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; | namespace common\models; | ||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | |||||
use common\components\ActiveRecordCommon; | |||||
use common\helpers\Departments; | use common\helpers\Departments; | ||||
use yii\helpers\Html; | use yii\helpers\Html; | ||||
* @property boolean use_credit_checked_default | * @property boolean use_credit_checked_default | ||||
* @property float credit_limit | * @property float credit_limit | ||||
* @property string background_color_logo | * @property string background_color_logo | ||||
* | |||||
* | |||||
*/ | */ | ||||
class Producer extends ActiveRecordCommon | |||||
class Producer extends ActiveRecordCommon | |||||
{ | { | ||||
const CREDIT_FUNCTIONING_MANDATORY = 'mandatory' ; | |||||
const CREDIT_FUNCTIONING_OPTIONAL = 'optional' ; | |||||
const CREDIT_FUNCTIONING_USER = 'user' ; | |||||
const HINT_CREDIT_FUNCTIONING = '<ul>' | |||||
const CREDIT_FUNCTIONING_MANDATORY = 'mandatory'; | |||||
const CREDIT_FUNCTIONING_OPTIONAL = 'optional'; | |||||
const CREDIT_FUNCTIONING_USER = 'user'; | |||||
const HINT_CREDIT_FUNCTIONING = '<ul>' | |||||
. '<li>Optionnelle : l\'utilisateur choisit s\'il utilise son Crédit ou non. Les commandes peuvent être payées ou impayées.</li>' | . '<li>Optionnelle : l\'utilisateur choisit s\'il utilise son Crédit ou non. Les commandes peuvent être payées ou impayées.</li>' | ||||
. '<li>Obligatoire : toutes les commandes de l\'utilisateur son comptabilisées au niveau du Crédit. Toutes les commandes sont payées.</li>' | . '<li>Obligatoire : toutes les commandes de l\'utilisateur son comptabilisées au niveau du Crédit. Toutes les commandes sont payées.</li>' | ||||
. '<li>Basée sur l\'utilisateur : Crédit obligatoire si l\'utilisateur a le crédit activé au niveau de son compte, système de Crédit non affiché sinon.</li>' | . '<li>Basée sur l\'utilisateur : Crédit obligatoire si l\'utilisateur a le crédit activé au niveau de son compte, système de Crédit non affiché sinon.</li>' | ||||
. '</ul>' ; | |||||
public static $creditFunctioningArray = [ | |||||
self::CREDIT_FUNCTIONING_MANDATORY => 'Obligatoire', | |||||
self::CREDIT_FUNCTIONING_OPTIONAL => 'Optionnelle', | |||||
self::CREDIT_FUNCTIONING_USER => 'Basée sur l\'utilisateur', | |||||
]; | |||||
const BEHAVIOR_DELETE_ORDER_DELETE = 'delete' ; | |||||
const BEHAVIOR_DELETE_ORDER_STATUS = 'status' ; | |||||
var $secret_key_payplug ; | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'producer'; | |||||
} | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['name','type','id_tax_rate_default'], 'required'], | |||||
[['tiller_provider_token','tiller_restaurant_token'], 'required', 'when' => function($model) { | |||||
return $model->tiller == true ; | |||||
}], | |||||
[['order_deadline', 'order_delay', 'id_tax_rate_default', 'document_quotation_duration'], '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','mentions','gcs','order_infos','slug','secret_key_payplug','background_color_logo','option_behavior_cancel_order','tiller_provider_token','tiller_restaurant_token','status', | |||||
'document_infos_bottom', 'document_infos_quotation', 'document_infos_invoice', 'document_infos_delivery_note'], 'string'], | |||||
[['negative_balance', 'credit', 'active','online_payment','user_manage_subscription', 'option_allow_user_gift','use_credit_checked_default','tiller'], 'boolean'], | |||||
[['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code','type','credit_functioning','option_behavior_cancel_order', 'document_quotation_prefix', 'document_quotation_first_reference', 'document_invoice_prefix', 'document_invoice_first_reference', 'document_delivery_note_prefix', 'document_delivery_note_first_reference'], 'string', 'max' => 255], | |||||
[['free_price', 'credit_limit_reminder','credit_limit'], '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', | |||||
'credit_limit_reminder' => 'Seuil de crédit limite avant relance', | |||||
'online_payment' => 'Activer le paiement en ligne', | |||||
'secret_key_payplug' => 'Clé secrète Payplug', | |||||
'user_manage_subscription' => 'Autoriser les utilisateurs à gérer leurs abonnements', | |||||
'mentions' => 'Mentions légales', | |||||
'gcs' => 'Conditions générales de vente', | |||||
'option_allow_user_gift' => 'Autoriser les utilisateurs à effectuer un don à la plateforme lors de leur commande', | |||||
'credit_functioning' => 'Utilisation du Crédit par l\'utilisateur', | |||||
'credit_limit' => 'Crédit limite', | |||||
'use_credit_checked_default' => 'Cocher par défaut l\'option "Utiliser mon crédit" lors de la commande de l\'utilisateur', | |||||
'background_color_logo' => 'Couleur de fond du logo', | |||||
'option_behavior_cancel_order' => 'Comportement lors de la suppression d\'une commande', | |||||
'tiller' => 'Tiller', | |||||
'tiller_provider_token' => 'Token provider', | |||||
'tiller_restaurant_token' => 'Token restaurant', | |||||
'status' => 'Statut', | |||||
'id_tax_rate_default' => 'Taxe', | |||||
'document_quotation_prefix' => 'Préfixe des devis', | |||||
'document_quotation_first_reference' => 'Première référence des devis', | |||||
'document_quotation_duration' => 'Durée du devis', | |||||
'document_invoice_prefix' => 'Préfixe des factures', | |||||
'document_invoice_first_reference' => 'Première référence des factures', | |||||
'document_delivery_note_prefix' => 'Préfixe des bons de livraison', | |||||
'document_delivery_note_first_reference' => 'Première référence des bons de livraison', | |||||
'document_infos_bottom' => 'Informations affichées en bas des documents', | |||||
'document_infos_quotation' => 'Informations affichées en bas des devis', | |||||
'document_infos_invoice' => 'Informations affichées en bas des factures', | |||||
'document_infos_delivery_note' => 'Informations affichées en bas des bons de livraison', | |||||
. '</ul>'; | |||||
public static $creditFunctioningArray = [ | |||||
self::CREDIT_FUNCTIONING_MANDATORY => 'Obligatoire', | |||||
self::CREDIT_FUNCTIONING_OPTIONAL => 'Optionnelle', | |||||
self::CREDIT_FUNCTIONING_USER => 'Basée sur l\'utilisateur', | |||||
]; | ]; | ||||
} | |||||
/* | |||||
* 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]); | |||||
} | |||||
public function getTaxRate() | |||||
{ | |||||
return $this->hasOne(TaxRate::className(), ['id' => 'id_tax_rate_default']) ; | |||||
} | |||||
/** | |||||
* 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::find() | |||||
->where([ | |||||
'active' => true, | |||||
]) | |||||
->orderBy('postcode, city ASC') | |||||
->all() ; | |||||
$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']; | |||||
} | |||||
const BEHAVIOR_DELETE_ORDER_DELETE = 'delete'; | |||||
const BEHAVIOR_DELETE_ORDER_STATUS = 'status'; | |||||
var $secret_key_payplug; | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public static function tableName() | |||||
{ | |||||
return 'producer'; | |||||
} | } | ||||
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'); | |||||
/** | |||||
* @inheritdoc | |||||
*/ | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['name', 'type', 'id_tax_rate_default'], 'required'], | |||||
[['tiller_provider_token', 'tiller_restaurant_token'], 'required', 'when' => function ($model) { | |||||
return $model->tiller == true; | |||||
}], | |||||
[['order_deadline', 'order_delay', 'id_tax_rate_default', 'document_quotation_duration'], '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', 'mentions', 'gcs', 'order_infos', 'slug', 'secret_key_payplug', 'background_color_logo', 'option_behavior_cancel_order', 'tiller_provider_token', 'tiller_restaurant_token', 'status', | |||||
'document_infos_bottom', 'document_infos_quotation', 'document_infos_invoice', 'document_infos_delivery_note'], 'string'], | |||||
[['negative_balance', 'credit', 'active', 'online_payment', 'user_manage_subscription', 'option_allow_user_gift', 'use_credit_checked_default', 'tiller'], 'boolean'], | |||||
[['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code', 'type', 'credit_functioning', 'option_behavior_cancel_order', 'document_quotation_prefix', 'document_quotation_first_reference', 'document_invoice_prefix', 'document_invoice_first_reference', 'document_delivery_note_prefix', 'document_delivery_note_first_reference'], 'string', 'max' => 255], | |||||
[['free_price', 'credit_limit_reminder', 'credit_limit'], 'double'], | |||||
['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'], | |||||
]; | |||||
} | } | ||||
$connection = Yii::$app->getDb(); | |||||
$command = $connection->createCommand(' | |||||
/** | |||||
* @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', | |||||
'credit_limit_reminder' => 'Seuil de crédit limite avant relance', | |||||
'online_payment' => 'Activer le paiement en ligne', | |||||
'secret_key_payplug' => 'Clé secrète Payplug', | |||||
'user_manage_subscription' => 'Autoriser les utilisateurs à gérer leurs abonnements', | |||||
'mentions' => 'Mentions légales', | |||||
'gcs' => 'Conditions générales de vente', | |||||
'option_allow_user_gift' => 'Autoriser les utilisateurs à effectuer un don à la plateforme lors de leur commande', | |||||
'credit_functioning' => 'Utilisation du Crédit par l\'utilisateur', | |||||
'credit_limit' => 'Crédit limite', | |||||
'use_credit_checked_default' => 'Cocher par défaut l\'option "Utiliser mon crédit" lors de la commande de l\'utilisateur', | |||||
'background_color_logo' => 'Couleur de fond du logo', | |||||
'option_behavior_cancel_order' => 'Comportement lors de la suppression d\'une commande', | |||||
'tiller' => 'Tiller', | |||||
'tiller_provider_token' => 'Token provider', | |||||
'tiller_restaurant_token' => 'Token restaurant', | |||||
'status' => 'Statut', | |||||
'id_tax_rate_default' => 'Taxe', | |||||
'document_quotation_prefix' => 'Préfixe des devis', | |||||
'document_quotation_first_reference' => 'Première référence des devis', | |||||
'document_quotation_duration' => 'Durée du devis', | |||||
'document_invoice_prefix' => 'Préfixe des factures', | |||||
'document_invoice_first_reference' => 'Première référence des factures', | |||||
'document_delivery_note_prefix' => 'Préfixe des bons de livraison', | |||||
'document_delivery_note_first_reference' => 'Première référence des bons de livraison', | |||||
'document_infos_bottom' => 'Informations affichées en bas des documents', | |||||
'document_infos_quotation' => 'Informations affichées en bas des devis', | |||||
'document_infos_invoice' => 'Informations affichées en bas des factures', | |||||
'document_infos_delivery_note' => 'Informations affichées en bas des bons de livraison', | |||||
]; | |||||
} | |||||
/* | |||||
* 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]); | |||||
} | |||||
public function getTaxRate() | |||||
{ | |||||
return $this->hasOne(TaxRate::className(), ['id' => 'id_tax_rate_default']); | |||||
} | |||||
/** | |||||
* Retourne les options de base nécessaires à la fonction de recherche. | |||||
* | |||||
* @return array | |||||
*/ | |||||
public static function defaultOptionsSearch() | |||||
{ | |||||
return [ | |||||
'with' => ['taxRate'], | |||||
'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::find() | |||||
->where([ | |||||
'active' => true, | |||||
]) | |||||
->orderBy('postcode, city ASC') | |||||
->all(); | |||||
$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 | SELECT SUM(product_order.price * product_order.quantity) AS turnover | ||||
FROM `order`, product_order, distribution, product | FROM `order`, product_order, distribution, product | ||||
WHERE `order`.id = product_order.id_order | WHERE `order`.id = product_order.id_order | ||||
AND product_order.id_product = product.id | AND product_order.id_product = product.id | ||||
AND distribution.date > :date_begin | AND distribution.date > :date_begin | ||||
AND distribution.date < :date_end', [ | 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 | |||||
]); | |||||
':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']; | |||||
$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 ; | |||||
if ($format) { | |||||
return number_format($turnover, 2) . ' €'; | |||||
} else { | |||||
return $turnover; | |||||
} | |||||
} | } | ||||
} | |||||
/** | |||||
* 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')); | |||||
/** | |||||
* 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; | |||||
} | |||||
} | } | ||||
$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; | |||||
} | |||||
/** | |||||
* 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 $invoice; | |||||
} | } | ||||
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; | |||||
} | |||||
/** | |||||
* Retourne la facture du mois dernier. | |||||
* | |||||
* @return Facture | |||||
*/ | |||||
public function getInvoiceLastMonth() | |||||
{ | |||||
return $this->getInvoice(date('Y-m', strtotime('-1 month'))); | |||||
} | } | ||||
} | |||||
/** | |||||
* Lie un utilisateur à un producteur. | |||||
* | |||||
* @param integer $id_user | |||||
* @param integer $id_producer | |||||
* @return UserProducer | |||||
*/ | |||||
public static function addUser($idUser, $idProducer, $bookmark = 1) | |||||
{ | |||||
$userProducer = UserProducer::searchOne([ | |||||
'user_producer.id_user' => $idUser, | |||||
'user_producer.id_producer' => $idProducer | |||||
]) ; | |||||
if (!$userProducer) { | |||||
$newUserProducer = new UserProducer; | |||||
$newUserProducer->id_producer = $idProducer; | |||||
$newUserProducer->id_user = $idUser; | |||||
$newUserProducer->credit = 0; | |||||
$newUserProducer->active = 1; | |||||
$newUserProducer->bookmark = (int) $bookmark ; | |||||
$newUserProducer->save(); | |||||
} else { | |||||
if (!$userProducer->active) { | |||||
$userProducer->active = 1; | |||||
$userProducer->save(); | |||||
} | |||||
/** | |||||
* 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 = GlobalParam::getCurrentProducerId(); | |||||
} | |||||
$producer = self::findOne($idProducer); | |||||
if ($producer) { | |||||
return $producer->$config; | |||||
} | |||||
} | |||||
return false; | |||||
} | } | ||||
return $userProducer ; | |||||
} | |||||
/** | |||||
* Retourne l'ID du producteur courant. | |||||
* | |||||
* @return integer|boolean | |||||
*/ | |||||
public static function getId() | |||||
{ | |||||
if(Yii::$app->controller->module->id == 'app-backend') { | |||||
if(!Yii::$app->user->isGuest) { | |||||
return Yii::$app->user->identity->id_producer ; | |||||
} | |||||
/** | |||||
* 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; | |||||
} | |||||
} | |||||
} | } | ||||
else { | |||||
return Yii::$app->controller->getProducer()->id ; ; | |||||
/** | |||||
* Lie un utilisateur à un producteur. | |||||
* | |||||
* @param integer $id_user | |||||
* @param integer $id_producer | |||||
* @return UserProducer | |||||
*/ | |||||
public static function addUser($idUser, $idProducer, $bookmark = 1) | |||||
{ | |||||
$userProducer = UserProducer::searchOne([ | |||||
'user_producer.id_user' => $idUser, | |||||
'user_producer.id_producer' => $idProducer | |||||
]); | |||||
if (!$userProducer) { | |||||
$newUserProducer = new UserProducer; | |||||
$newUserProducer->id_producer = $idProducer; | |||||
$newUserProducer->id_user = $idUser; | |||||
$newUserProducer->credit = 0; | |||||
$newUserProducer->active = 1; | |||||
$newUserProducer->bookmark = (int)$bookmark; | |||||
$newUserProducer->save(); | |||||
} else { | |||||
if (!$userProducer->active) { | |||||
$userProducer->active = 1; | |||||
$userProducer->save(); | |||||
} | |||||
} | |||||
return $userProducer; | |||||
} | } | ||||
return false ; | |||||
} | |||||
/** | |||||
* Retourne le producteur courant. | |||||
* | |||||
* @return Producer|boolean | |||||
*/ | |||||
public static function getCurrent() | |||||
{ | |||||
if(self::getId()) { | |||||
return self::searchOne() ; | |||||
/** | |||||
* Retourne la date la plus proche où il est possible de commander. | |||||
* Attention, cette méthode ne garantit pas qu'une distribution a été initialisée | |||||
* à cette date. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getEarliestDateOrder() | |||||
{ | |||||
$deadline = 20; | |||||
$earliestDateOrder = date('Y-m-d'); | |||||
if ($this->order_deadline) { | |||||
$deadline = $this->order_deadline; | |||||
} | |||||
if (date('H') >= $deadline) { | |||||
$earliestDateOrder = date('Y-m-d', strtotime(date('Y-m-d')) + ($this->order_delay) * (24 * 60 * 60)); | |||||
} else { | |||||
$earliestDateOrder = date('Y-m-d', strtotime(date('Y-m-d')) + ($this->order_delay - 1) * (24 * 60 * 60)); | |||||
} | |||||
return $earliestDateOrder; | |||||
} | } | ||||
return false ; | |||||
} | |||||
/** | |||||
* Retourne la date la plus proche où il est possible de commander. | |||||
* Attention, cette méthode ne garantit pas qu'une distribution a été initialisée | |||||
* à cette date. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getEarliestDateOrder() | |||||
{ | |||||
$deadline = 20; | |||||
$earliestDateOrder = date('Y-m-d'); | |||||
if($this->order_deadline) { | |||||
$deadline = $this->order_deadline; | |||||
/** | |||||
* Retourne le chemin vers le fichier contenant la clé secrète d'API de Payplug | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getFilenameSecretKeyPayplug() | |||||
{ | |||||
return '../../common/config/payplug/' . $this->id . '.key'; | |||||
} | } | ||||
if (date('H') >= $deadline) { | |||||
$earliestDateOrder = date('Y-m-d', strtotime(date('Y-m-d')) + ($this->order_delay) * (24 * 60 * 60)); | |||||
} else { | |||||
$earliestDateOrder = date('Y-m-d', strtotime(date('Y-m-d')) + ($this->order_delay - 1) * (24 * 60 * 60)); | |||||
/** | |||||
* Enregistre la clé secrète d'API de Payplug dans un fichier | |||||
*/ | |||||
public function saveSecretKeyPayplug() | |||||
{ | |||||
if ($this->online_payment) { | |||||
$handle = fopen($this->getFilenameSecretKeyPayplug(), "w"); | |||||
fwrite($handle, $this->secret_key_payplug); | |||||
fclose($handle); | |||||
} | |||||
} | } | ||||
return $earliestDateOrder ; | |||||
} | |||||
/** | |||||
* Retourne le chemin vers le fichier contenant la clé secrète d'API de Payplug | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getFilenameSecretKeyPayplug() | |||||
{ | |||||
return '../../common/config/payplug/'.$this->id.'.key' ; | |||||
} | |||||
/** | |||||
* Enregistre la clé secrète d'API de Payplug dans un fichier | |||||
*/ | |||||
public function saveSecretKeyPayplug() | |||||
{ | |||||
if($this->online_payment) { | |||||
$handle = fopen($this->getFilenameSecretKeyPayplug(),"w"); | |||||
fwrite($handle,$this->secret_key_payplug); | |||||
fclose($handle); | |||||
/** | |||||
* Retourne la clé secrète d'API de Payplug. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getSecretKeyPayplug() | |||||
{ | |||||
if (file_exists($this->getFilenameSecretKeyPayplug())) { | |||||
$handle = fopen($this->getFilenameSecretKeyPayplug(), "r"); | |||||
$filesize = filesize($this->getFilenameSecretKeyPayplug()); | |||||
if ($handle && $filesize) { | |||||
$secretKey = fread($handle, $filesize); | |||||
fclose($handle); | |||||
return $secretKey; | |||||
} | |||||
} | |||||
return ''; | |||||
} | } | ||||
} | |||||
/** | |||||
* Retourne la clé secrète d'API de Payplug. | |||||
* | |||||
* @return string | |||||
*/ | |||||
public function getSecretKeyPayplug() | |||||
{ | |||||
if(file_exists($this->getFilenameSecretKeyPayplug())) { | |||||
$handle = fopen($this->getFilenameSecretKeyPayplug(), "r") ; | |||||
$filesize = filesize($this->getFilenameSecretKeyPayplug()) ; | |||||
if($handle && $filesize) { | |||||
$secretKey = fread($handle, $filesize); | |||||
fclose($handle); | |||||
return $secretKey ; | |||||
} | |||||
/** | |||||
* Retourne le compte producteur de démonstration. | |||||
* | |||||
* @return Producer | |||||
*/ | |||||
public static function getDemoAccount() | |||||
{ | |||||
$producer = Producer::find()->where('name LIKE \'Démo\'')->one(); | |||||
return $producer; | |||||
} | } | ||||
return '' ; | |||||
} | |||||
/** | |||||
* Retourne le compte producteur de démonstration. | |||||
* | |||||
* @return Producer | |||||
*/ | |||||
public static function getDemoAccount() | |||||
{ | |||||
$producer = Producer::find()->where('name LIKE \'Démo\'')->one() ; | |||||
return $producer ; | |||||
} | |||||
/** | |||||
* Retourne true si le compte est un compte de démo. | |||||
* | |||||
* @return boolean | |||||
*/ | |||||
public function isDemo() | |||||
{ | |||||
if(strpos($this->name, 'Démo') !== false) { | |||||
return true ; | |||||
/** | |||||
* Retourne true si le compte est un compte de démo. | |||||
* | |||||
* @return boolean | |||||
*/ | |||||
public function isDemo() | |||||
{ | |||||
if (strpos($this->name, 'Démo') !== false) { | |||||
return true; | |||||
} | |||||
return false; | |||||
} | } | ||||
return false ; | |||||
} | |||||
} | } | ||||
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon; | use common\components\ActiveRecordCommon; | ||||
*/ | */ | ||||
public function save($runValidation = true, $attributeNames = NULL) | public function save($runValidation = true, $attributeNames = NULL) | ||||
{ | { | ||||
$this->id_producer = Producer::getId(); | |||||
$this->id_producer = GlobalParam::getCurrentProducerId(); | |||||
return parent::save($runValidation, $attributeNames); | return parent::save($runValidation, $attributeNames); | ||||
} | } | ||||
return Product::find() | return Product::find() | ||||
->leftJoin('product_distribution', 'product.id = product_distribution.id_product') | ->leftJoin('product_distribution', 'product.id = product_distribution.id_product') | ||||
->where([ | ->where([ | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
'product_distribution.id_distribution' => $idDistribution | 'product_distribution.id_distribution' => $idDistribution | ||||
]) | ]) | ||||
->orderBy('product_distribution.active DESC, product.order ASC') | ->orderBy('product_distribution.active DESC, product.order ASC') |
namespace common\models ; | namespace common\models ; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Product ; | use common\models\Product ; | ||||
class ProductSearch extends Product | class ProductSearch extends Product | ||||
$query = Product::find() | $query = Product::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->innerJoinWith($optionsSearch['join_with'], true) | ->innerJoinWith($optionsSearch['join_with'], true) | ||||
->where(['product.id_producer' => Producer::getId()]) | |||||
->where(['product.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('product.order ASC') | ->orderBy('product.order ASC') | ||||
; | ; | ||||
namespace common\models ; | namespace common\models ; | ||||
use common\models\Quotation ; | use common\models\Quotation ; | ||||
use common\helpers\GlobalParam; | |||||
class QuotationSearch extends Quotation | class QuotationSearch extends Quotation | ||||
{ | { | ||||
$query = Quotation::find() | $query = Quotation::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->joinWith($optionsSearch['join_with'], true) | ->joinWith($optionsSearch['join_with'], true) | ||||
->where(['distribution.id_producer' => Producer::getId()]) | |||||
->where(['distribution.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->orderBy('quotation.reference DESC') | ->orderBy('quotation.reference DESC') | ||||
; | ; | ||||
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use Yii; | use Yii; | ||||
use common\components\ActiveRecordCommon ; | use common\components\ActiveRecordCommon ; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
{ | { | ||||
$distribution = Distribution::searchOne([ | $distribution = Distribution::searchOne([ | ||||
'date' => date('Y-m-d', strtotime($date)), | 'date' => date('Y-m-d', strtotime($date)), | ||||
'id_producer' => Producer::getId(), | |||||
'id_producer' => GlobalParam::getCurrentProducerId(), | |||||
]) ; | ]) ; | ||||
if ($distribution) { | if ($distribution) { | ||||
*/ | */ | ||||
public function searchMatchedIncomingDistributions() | public function searchMatchedIncomingDistributions() | ||||
{ | { | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
$params = [ | $params = [ | ||||
':date_earliest_order' => $producer->getEarliestDateOrder(), | ':date_earliest_order' => $producer->getEarliestDateOrder(), | ||||
':date_begin' => date('Y-m-d', strtotime($this->date_begin)), | ':date_begin' => date('Y-m-d', strtotime($this->date_begin)), | ||||
':id_producer' => Producer::getId() | |||||
':id_producer' => GlobalParam::getCurrentProducerId() | |||||
] ; | ] ; | ||||
$incomingDistributions = Distribution::find() | $incomingDistributions = Distribution::find() | ||||
public function deleteOrdersIncomingDistributions() | public function deleteOrdersIncomingDistributions() | ||||
{ | { | ||||
$params = [ | $params = [ | ||||
':id_producer' => Producer::getId(), | |||||
':id_producer' => GlobalParam::getCurrentProducerId(), | |||||
':date_today' => date('Y-m-d'), | ':date_today' => date('Y-m-d'), | ||||
':date_begin' => $this->date_begin, | ':date_begin' => $this->date_begin, | ||||
':id_subscription' => $this->id | ':id_subscription' => $this->id |
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Subscription ; | use common\models\Subscription ; | ||||
class SubscriptionSearch extends Subscription | class SubscriptionSearch extends Subscription | ||||
$query = Subscription::find() | $query = Subscription::find() | ||||
->with($optionsSearch['with']) | ->with($optionsSearch['with']) | ||||
->joinWith($optionsSearch['join_with'], true) | ->joinWith($optionsSearch['join_with'], true) | ||||
->where(['subscription.id_producer' => Producer::getId()]) | |||||
->where(['subscription.id_producer' => GlobalParam::getCurrentProducerId()]) | |||||
->groupBy('subscription.id') | ->groupBy('subscription.id') | ||||
; | ; | ||||
namespace common\models; | namespace common\models; | ||||
use common\helpers\GlobalParam; | |||||
use yii\web\IdentityInterface; | use yii\web\IdentityInterface; | ||||
use yii\db\Query ; | use yii\db\Query ; | ||||
use common\components\ActiveRecordCommon ; | use common\components\ActiveRecordCommon ; | ||||
public static function findBy($params = []) | public static function findBy($params = []) | ||||
{ | { | ||||
if (!isset($params['id_producer'])) { | if (!isset($params['id_producer'])) { | ||||
$params['id_producer'] = Producer::getId() ; | |||||
$params['id_producer'] = GlobalParam::getCurrentProducerId() ; | |||||
} | } | ||||
$query = (new Query()) | $query = (new Query()) | ||||
$query->innerJoin( | $query->innerJoin( | ||||
'subscription', | 'subscription', | ||||
'user.id = subscription.id_user AND subscription.id_producer = :id_producer', | 'user.id = subscription.id_user AND subscription.id_producer = :id_producer', | ||||
[':id_producer' => Producer::getId()] | |||||
[':id_producer' => GlobalParam::getCurrentProducerId()] | |||||
)->groupBy('user.id') ; | )->groupBy('user.id') ; | ||||
} | } | ||||
->innerJoinWith('pointSale', true) | ->innerJoinWith('pointSale', true) | ||||
->where([ | ->where([ | ||||
'user_point_sale.id_user' => $this->id, | 'user_point_sale.id_user' => $this->id, | ||||
'point_sale.id_producer' => Producer::getId() | |||||
'point_sale.id_producer' => GlobalParam::getCurrentProducerId() | |||||
]) | ]) | ||||
->all() ; | ->all() ; | ||||
else { | else { | ||||
$lastOrder = Order::find()->innerJoinWith('pointSale', true)->where([ | $lastOrder = Order::find()->innerJoinWith('pointSale', true)->where([ | ||||
'id_user' => $this->id, | 'id_user' => $this->id, | ||||
'point_sale.id_producer' => Producer::getId() | |||||
'point_sale.id_producer' => GlobalParam::getCurrentProducerId() | |||||
]) | ]) | ||||
->orderBy('order.id DESC') | ->orderBy('order.id DESC') | ||||
->one() ; | ->one() ; | ||||
public function sendMailWelcome($password) | public function sendMailWelcome($password) | ||||
{ | { | ||||
if (strlen($this->email)) { | if (strlen($this->email)) { | ||||
$producer = Producer::findOne(Producer::getId()); | |||||
$producer = Producer::findOne(GlobalParam::getCurrentProducerId()); | |||||
Yii::$app->mailer->compose(); | Yii::$app->mailer->compose(); | ||||
$mail = Yii::$app->mailer->compose( | $mail = Yii::$app->mailer->compose( | ||||
['html' => 'createUserAdmin-html', 'text' => 'createUserAdmin-text'], ['user' => $this, 'producer' => $producer, 'password' => $password] | ['html' => 'createUserAdmin-html', 'text' => 'createUserAdmin-text'], ['user' => $this, 'producer' => $producer, 'password' => $password] |
<?php | <?php | ||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.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 common\models\User ; | |||||
/** | |||||
* Copyright distrib (2018) | |||||
* | |||||
* contact@opendistrib.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 common\helpers\GlobalParam; | |||||
use common\models\User; | |||||
class UserSearch extends User | class UserSearch extends User | ||||
{ | { | ||||
var $id_point_sale ; | |||||
var $subscribers ; | |||||
var $inactive ; | |||||
var $username ; | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['no_mail', 'mail_distribution_monday', 'mail_distribution_tuesday', 'mail_distribution_wednesday', 'mail_distribution_thursday', 'mail_distribution_friday', 'mail_distribution_saturday', 'mail_distribution_sunday'], 'boolean'], | |||||
[['lastname', 'name', 'phone', 'address'], 'string'], | |||||
[['id_point_sale', 'inactive', 'subscribers'],'integer'], | |||||
[['date_last_connection', 'id_point_sale', 'username'], 'safe'], | |||||
]; | |||||
} | |||||
public function search($params = []) | |||||
{ | |||||
$optionsSearch = self::defaultOptionsSearch() ; | |||||
$query = User::find() | |||||
->select( | |||||
'`user`.id, ' | |||||
.'`user`.username,' | |||||
.'`user`.email, ' | |||||
.'`user`.status, ' | |||||
.'`user`.created_at, ' | |||||
.'`user`.updated_at, ' | |||||
.'`user`.lastname, ' | |||||
.'`user`.name, ' | |||||
.'`user`.phone, ' | |||||
.'`user`.address, ' | |||||
.'`user`.no_mail, ' | |||||
.'`user`.mail_distribution_monday, ' | |||||
.'`user`.mail_distribution_tuesday, ' | |||||
.'`user`.mail_distribution_wednesday, ' | |||||
.'`user`.mail_distribution_thursday, ' | |||||
.'`user`.mail_distribution_friday, ' | |||||
.'`user`.mail_distribution_saturday, ' | |||||
.'`user`.mail_distribution_sunday, ' | |||||
.'`user`.id_producer, ' | |||||
.'`user`.date_last_connection, ' | |||||
. '(SELECT COUNT(*) FROM `order` WHERE `user`.id = `order`.id_user) AS count_orders'); | |||||
$dataProvider = new ActiveDataProvider([ | |||||
'query' => $query, | |||||
'sort' => ['attributes' => ['username','credit','orders']], | |||||
'pagination' => [ | |||||
'pageSize' => 20, | |||||
], | |||||
]); | |||||
$dataProvider->sort->attributes['username'] = [ | |||||
'asc' => ['user.lastname' => SORT_ASC, 'user.name' => SORT_ASC], | |||||
'desc' => ['user.lastname' => SORT_DESC, 'user.name' => SORT_DESC], | |||||
]; | |||||
$dataProvider->sort->attributes['credit'] = [ | |||||
'asc' => ['user_producer.credit' => SORT_ASC], | |||||
'desc' => ['user_producer.credit' => SORT_DESC], | |||||
]; | |||||
$this->load($params); | |||||
if (!$this->validate()) { | |||||
return $dataProvider; | |||||
} | |||||
$query->innerJoin('user_producer','user.id = user_producer.id_user AND user_producer.id_producer = :id_producer AND user_producer.active = 1', [':id_producer' => Producer::getId()]) ; | |||||
if(isset($this->id_point_sale) && $this->id_point_sale) { | |||||
$pointSale = PointSale::findOne(['id' => $this->id_point_sale]) ; | |||||
$query->innerJoin('user_point_sale','user.id = user_point_sale.id_user AND user_point_sale.id_point_sale = :id_point_sale',[':id_point_sale' => $this->id_point_sale]) ; | |||||
} | |||||
if(isset($this->subscribers) && $this->subscribers) { | |||||
$query->innerJoin( | |||||
'subscription', | |||||
'user.id = subscription.id_user AND subscription.id_producer = :id_producer', | |||||
[':id_producer' => Producer::getId()] | |||||
)->groupBy('user.id') ; | |||||
var $id_point_sale; | |||||
var $subscribers; | |||||
var $inactive; | |||||
var $username; | |||||
public function rules() | |||||
{ | |||||
return [ | |||||
[['no_mail', 'mail_distribution_monday', 'mail_distribution_tuesday', 'mail_distribution_wednesday', 'mail_distribution_thursday', 'mail_distribution_friday', 'mail_distribution_saturday', 'mail_distribution_sunday'], 'boolean'], | |||||
[['lastname', 'name', 'phone', 'address'], 'string'], | |||||
[['id_point_sale', 'inactive', 'subscribers'], 'integer'], | |||||
[['date_last_connection', 'id_point_sale', 'username'], 'safe'], | |||||
]; | |||||
} | } | ||||
if(isset($this->inactive) && $this->inactive) { | |||||
$query->having([ | |||||
'count_orders' => 0 | |||||
]) ; | |||||
public function search($params = []) | |||||
{ | |||||
$optionsSearch = self::defaultOptionsSearch(); | |||||
$query = User::find() | |||||
->select( | |||||
'`user`.id, ' | |||||
. '`user`.username,' | |||||
. '`user`.email, ' | |||||
. '`user`.status, ' | |||||
. '`user`.created_at, ' | |||||
. '`user`.updated_at, ' | |||||
. '`user`.lastname, ' | |||||
. '`user`.name, ' | |||||
. '`user`.phone, ' | |||||
. '`user`.address, ' | |||||
. '`user`.no_mail, ' | |||||
. '`user`.mail_distribution_monday, ' | |||||
. '`user`.mail_distribution_tuesday, ' | |||||
. '`user`.mail_distribution_wednesday, ' | |||||
. '`user`.mail_distribution_thursday, ' | |||||
. '`user`.mail_distribution_friday, ' | |||||
. '`user`.mail_distribution_saturday, ' | |||||
. '`user`.mail_distribution_sunday, ' | |||||
. '`user`.id_producer, ' | |||||
. '`user`.date_last_connection, ' | |||||
. '(SELECT COUNT(*) FROM `order` WHERE `user`.id = `order`.id_user) AS count_orders'); | |||||
$dataProvider = new ActiveDataProvider([ | |||||
'query' => $query, | |||||
'sort' => ['attributes' => ['username', 'credit', 'orders']], | |||||
'pagination' => [ | |||||
'pageSize' => 20, | |||||
], | |||||
]); | |||||
$dataProvider->sort->attributes['username'] = [ | |||||
'asc' => ['user.lastname' => SORT_ASC, 'user.name' => SORT_ASC], | |||||
'desc' => ['user.lastname' => SORT_DESC, 'user.name' => SORT_DESC], | |||||
]; | |||||
$dataProvider->sort->attributes['credit'] = [ | |||||
'asc' => ['user_producer.credit' => SORT_ASC], | |||||
'desc' => ['user_producer.credit' => SORT_DESC], | |||||
]; | |||||
$this->load($params); | |||||
if (!$this->validate()) { | |||||
return $dataProvider; | |||||
} | |||||
$query->innerJoin('user_producer', 'user.id = user_producer.id_user AND user_producer.id_producer = :id_producer AND user_producer.active = 1', [':id_producer' => GlobalParam::getCurrentProducerId()]); | |||||
if (isset($this->id_point_sale) && $this->id_point_sale) { | |||||
$pointSale = PointSale::findOne(['id' => $this->id_point_sale]); | |||||
$query->innerJoin('user_point_sale', 'user.id = user_point_sale.id_user AND user_point_sale.id_point_sale = :id_point_sale', [':id_point_sale' => $this->id_point_sale]); | |||||
} | |||||
if (isset($this->subscribers) && $this->subscribers) { | |||||
$query->innerJoin( | |||||
'subscription', | |||||
'user.id = subscription.id_user AND subscription.id_producer = :id_producer', | |||||
[':id_producer' => GlobalParam::getCurrentProducerId()] | |||||
)->groupBy('user.id'); | |||||
} | |||||
if (isset($this->inactive) && $this->inactive) { | |||||
$query->having([ | |||||
'count_orders' => 0 | |||||
]); | |||||
} | |||||
$query->andFilterWhere([ | |||||
'or', | |||||
['like', 'user.lastname', $this->username], | |||||
['like', 'user.name', $this->username] | |||||
]); | |||||
return $dataProvider; | |||||
} | } | ||||
$query->andFilterWhere([ | |||||
'or', | |||||
['like', 'user.lastname', $this->username], | |||||
['like', 'user.name', $this->username] | |||||
]); | |||||
return $dataProvider; | |||||
} | |||||
} | } |
namespace producer\controllers; | namespace producer\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\Producer ; | use common\models\Producer ; | ||||
class SiteController extends ProducerBaseController | class SiteController extends ProducerBaseController | ||||
*/ | */ | ||||
public function actionMentions() | public function actionMentions() | ||||
{ | { | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
if(!strlen($producer->mentions)) { | if(!strlen($producer->mentions)) { | ||||
throw new \yii\base\UserException('Mentions légales introuvables.') ; | throw new \yii\base\UserException('Mentions légales introuvables.') ; | ||||
*/ | */ | ||||
public function actionGcs() | public function actionGcs() | ||||
{ | { | ||||
$producer = Producer::getCurrent() ; | |||||
$producer = GlobalParam::getCurrentProducer() ; | |||||
if(!strlen($producer->gcs)) { | if(!strlen($producer->gcs)) { | ||||
throw new \yii\base\UserException('Conditions générales de vente introuvables.') ; | throw new \yii\base\UserException('Conditions générales de vente introuvables.') ; |
namespace producer\controllers; | namespace producer\controllers; | ||||
use common\helpers\GlobalParam; | |||||
use common\models\SubscriptionForm ; | use common\models\SubscriptionForm ; | ||||
use common\models\SubscriptionSearch ; | use common\models\SubscriptionSearch ; | ||||
use common\models\Product ; | use common\models\Product ; | ||||
{ | { | ||||
// form | // form | ||||
$model = new SubscriptionForm; | $model = new SubscriptionForm; | ||||
$model->id_producer = Producer::getId(); | |||||
$model->id_producer = GlobalParam::getCurrentProducerId(); | |||||
$model->id_user = User::getCurrentId() ; | $model->id_user = User::getCurrentId() ; | ||||
$posts = Yii::$app->request->post() ; | $posts = Yii::$app->request->post() ; |
<?php | <?php | ||||
/** | |||||
Copyright La boîte à pain (2018) | |||||
contact@opendistrib.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. | |||||
*/ | |||||
/** | |||||
* Copyright La boîte à pain (2018) | |||||
* | |||||
* contact@opendistrib.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\bootstrap\Nav; | use yii\bootstrap\Nav; | ||||
use yii\bootstrap\NavBar; | use yii\bootstrap\NavBar; | ||||
use common\helpers\Url; | use common\helpers\Url; | ||||
use common\models\Producer; | use common\models\Producer; | ||||
use common\models\User; | use common\models\User; | ||||
use common\helpers\GlobalParam; | |||||
\common\assets\CommonAsset::register($this); | \common\assets\CommonAsset::register($this); | ||||
\producer\assets\AppAsset::register($this); | \producer\assets\AppAsset::register($this); | ||||
$producer = $this->context->getProducer() ; | |||||
if(!Yii::$app->user->isGuest) { | |||||
$userProducer = UserProducer::findOne(['id_user' => User::getCurrentId(), 'id_producer' => $producer->id ]) ; | |||||
$producer = $this->context->getProducer(); | |||||
if (!Yii::$app->user->isGuest) { | |||||
$userProducer = UserProducer::findOne(['id_user' => User::getCurrentId(), 'id_producer' => $producer->id]); | |||||
} | } | ||||
?> | ?> | ||||
<title><?= Html::encode($producer->name); ?> | <?= $this->getPageTitle(); ?></title> | <title><?= Html::encode($producer->name); ?> | <?= $this->getPageTitle(); ?></title> | ||||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||||
<meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
<meta name="base-url" content="<?= Yii::$app->urlManager->baseUrl ; ?>"> | |||||
<meta name="slug-producer" content="<?= $producer->slug ; ?>"> | |||||
<?= Html::csrfMetaTags() ?> | |||||
<link rel="icon" type="image/png" href="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/favicon-distrib.png" /> | |||||
<?php $this->head() ?> | |||||
<meta name="base-url" content="<?= Yii::$app->urlManager->baseUrl; ?>"> | |||||
<meta name="slug-producer" content="<?= $producer->slug; ?>"> | |||||
<?= Html::csrfMetaTags() ?> | |||||
<link rel="icon" type="image/png" | |||||
href="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/favicon-distrib.png"/> | |||||
<?php $this->head() ?> | |||||
</head> | </head> | ||||
<body class="<?= Yii::$app->controller->id.'-'.Yii::$app->controller->action->id ?>"> | |||||
<?php $this->beginBody() ?> | |||||
<div id="header-bap"> | |||||
<body class="<?= Yii::$app->controller->id . '-' . Yii::$app->controller->action->id ?>"> | |||||
<?php $this->beginBody() ?> | |||||
<div id="header-bap"> | |||||
<?php | <?php | ||||
echo Nav::widget([ | |||||
echo Nav::widget([ | |||||
'encodeLabels' => false, | 'encodeLabels' => false, | ||||
'items' => [ | 'items' => [ | ||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-menu-hamburger"></span>', | |||||
'options' => ['id' => 'label1'], | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-chevron-left"></span> Retour à l\'accueil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']), | |||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-user"></span> Inscription', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/signup']), | |||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-log-in"></span> Connexion', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/login','return_url' => Yii::$app->urlManager->createAbsoluteUrl(['site/index'])]), | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-menu-hamburger"></span>', | |||||
'options' => ['id' => 'label1'], | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-chevron-left"></span> Retour à l\'accueil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']), | |||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-user"></span> Inscription', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/signup']), | |||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-log-in"></span> Connexion', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/login', 'return_url' => Yii::$app->urlManager->createAbsoluteUrl(['site/index'])]), | |||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
], | |||||
'visible' => Yii::$app->user->isGuest | 'visible' => Yii::$app->user->isGuest | ||||
], | |||||
], | ], | ||||
'visible' => Yii::$app->user->isGuest | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-menu-hamburger"></span>', | |||||
'options' => ['id' => 'label1'], | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-chevron-left"></span> Retour à l\'accueil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']), | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-user"></span> Profil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['user/update']), | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-off"></span> Déconnexion<br /><small>'.(!Yii::$app->user->isGuest ? Html::encode(Yii::$app->user->identity->name .' '.strtoupper(substr(Yii::$app->user->identity->lastname, 0, 1))) : '').'.</small>', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/logout']), | |||||
] | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-menu-hamburger"></span>', | |||||
'options' => ['id' => 'label1'], | |||||
'url' => '#', | |||||
'items' => [ | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-chevron-left"></span> Retour à l\'accueil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']), | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-user"></span> Profil', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['user/update']), | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-off"></span> Déconnexion<br /><small>' . (!Yii::$app->user->isGuest ? Html::encode(Yii::$app->user->identity->name . ' ' . strtoupper(substr(Yii::$app->user->identity->lastname, 0, 1))) : '') . '.</small>', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/logout']), | |||||
] | |||||
], | |||||
'visible' => !Yii::$app->user->isGuest | |||||
], | ], | ||||
'visible' => !Yii::$app->user->isGuest | |||||
], | |||||
], | ], | ||||
'options' => ['id' =>'nav-bap'], | |||||
]); | |||||
'options' => ['id' => 'nav-bap'], | |||||
]); | |||||
?> | ?> | ||||
</div> | |||||
<div class="container"> | |||||
<div id="left" class="col-md-3"> | |||||
<div class="fixed"> | |||||
<?php if(strlen($producer->logo)): ?> | |||||
<div id="logo"<?php if(!is_null($producer->background_color_logo) && strlen($producer->background_color_logo)): ?> style="background-color:<?= Html::encode($producer->background_color_logo); ?>"<?php endif; ?>> | |||||
<a href="<?= Yii::$app->urlManager->createUrl(['site/index']) ?>"> | |||||
<img class="img-logo" src="<?= Yii::$app->urlManager->baseUrl; ?>/uploads/<?= $producer->logo; ?>" alt="Logo <?= Html::encode($producer->name) ?>" /> | |||||
</a> | |||||
</div> | |||||
</div> | |||||
<div class="container"> | |||||
<div id="left" class="col-md-3"> | |||||
<div class="fixed"> | |||||
<?php if (strlen($producer->logo)): ?> | |||||
<div id="logo"<?php if (!is_null($producer->background_color_logo) && strlen($producer->background_color_logo)): ?> style="background-color:<?= Html::encode($producer->background_color_logo); ?>"<?php endif; ?>> | |||||
<a href="<?= Yii::$app->urlManager->createUrl(['site/index']) ?>"> | |||||
<img class="img-logo" | |||||
src="<?= Yii::$app->urlManager->baseUrl; ?>/uploads/<?= $producer->logo; ?>" | |||||
alt="Logo <?= Html::encode($producer->name) ?>"/> | |||||
</a> | |||||
</div> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
<h1><?= Html::encode($producer->name); ?></h1> | |||||
<h2><?= Html::encode($producer->type) ?> à <?= Html::encode($producer->city); ?> (<?= Html::encode($producer->postcode); ?>)</h2> | |||||
<h1><?= Html::encode($producer->name); ?></h1> | |||||
<h2><?= Html::encode($producer->type) ?> à <?= Html::encode($producer->city); ?> | |||||
(<?= Html::encode($producer->postcode); ?>)</h2> | |||||
<nav id="main-nav"> | |||||
<nav id="main-nav"> | |||||
<?php | <?php | ||||
$credit = '' ; | |||||
if(isset($userProducer) && $userProducer) { | |||||
$labelType = $userProducer->credit > 0 ? 'success' : 'danger' ; | |||||
$credit = ' <span class="label label-'.$labelType.'">'.number_format($userProducer->credit, 2).' €</span>' ; | |||||
} | |||||
$credit = ''; | |||||
if (isset($userProducer) && $userProducer) { | |||||
$labelType = $userProducer->credit > 0 ? 'success' : 'danger'; | |||||
$credit = ' <span class="label label-' . $labelType . '">' . number_format($userProducer->credit, 2) . ' €</span>'; | |||||
} | |||||
$countSubcriptions = Subscription::find() | |||||
$countSubcriptions = Subscription::find() | |||||
->where([ | ->where([ | ||||
'subscription.id_user' => User::getCurrentId(), | |||||
'subscription.id_producer' => Producer::getId(), | |||||
])->count() ; | |||||
$labelSubscription = $countSubcriptions > 0 ? 'success' : 'default' ; | |||||
'subscription.id_user' => User::getCurrentId(), | |||||
'subscription.id_producer' => GlobalParam::getCurrentProducerId(), | |||||
])->count(); | |||||
$labelSubscription = $countSubcriptions > 0 ? 'success' : 'default'; | |||||
$countOrders = Order::find() | |||||
$countOrders = Order::find() | |||||
->joinWith(['distribution']) | ->joinWith(['distribution']) | ||||
->where([ | ->where([ | ||||
'id_user' => User::getCurrentId(), | |||||
'distribution.id_producer' => Producer::getId() | |||||
'id_user' => User::getCurrentId(), | |||||
'distribution.id_producer' => GlobalParam::getCurrentProducerId() | |||||
]) | ]) | ||||
->params([':date_today' => date('Y-m-d')]) | ->params([':date_today' => date('Y-m-d')]) | ||||
->andWhere('distribution.date >= :date_today') | ->andWhere('distribution.date >= :date_today') | ||||
->count(); | ->count(); | ||||
$labelOrders = $countOrders > 0 ? 'success' : 'default' ; | |||||
$labelOrders = $countOrders > 0 ? 'success' : 'default'; | |||||
echo Nav::widget([ | |||||
echo Nav::widget([ | |||||
'encodeLabels' => false, | 'encodeLabels' => false, | ||||
'options' => ['class' =>'nav'], | |||||
'options' => ['class' => 'nav'], | |||||
'items' => [ | 'items' => [ | ||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-th-large"></span> Accueil', | |||||
'url' => Yii::$app->urlManager->createUrl(['site/index']), | |||||
'active' => $this->getControllerAction() == 'site/index', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-plus"></span> Commander', | |||||
'url' => Yii::$app->urlManager->createUrl(['order/order']), | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/order', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-plus"></span> Commander', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/producer','id' => $this->context->getProducer()->id,'return_url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['order/order','slug_producer' => $this->context->getProducer()->slug])]), | |||||
'visible' => Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/order', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-folder-open"></span> Mes commandes <span class="label label-'.$labelOrders.'">'.$countOrders.'</span>', | |||||
'url' => Yii::$app->urlManager->createUrl(['order/history']), | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/history', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-repeat"></span> Abonnements <span class="label label-'.$labelSubscription.'">'.$countSubcriptions.'</span>', | |||||
'url' => Yii::$app->urlManager->createUrl(['subscription/index']), | |||||
'visible' => !Yii::$app->user->isGuest && $producer->user_manage_subscription, | |||||
'active' => $this->getControllerAction() == 'subscription/index', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Crédit'.$credit, | |||||
'url' => Yii::$app->urlManager->createUrl(['credit/history']), | |||||
'visible' => !Yii::$app->user->isGuest && $producer->credit, | |||||
'active' => $this->getControllerAction() == 'credit/history', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact', | |||||
'url' => Yii::$app->urlManager->createUrl(['site/contact']), | |||||
'active' => $this->getControllerAction() == 'site/contact', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-cog"></span> Administration', | |||||
'url' => Yii::$app->urlManagerBackend->createAbsoluteUrl(['site/index']), | |||||
'visible' => isset(Yii::$app->user->identity) && Yii::$app->user->identity->isProducer(), | |||||
'options' => ['id' => 'btn-administration'] | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-th-large"></span> Accueil', | |||||
'url' => Yii::$app->urlManager->createUrl(['site/index']), | |||||
'active' => $this->getControllerAction() == 'site/index', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-plus"></span> Commander', | |||||
'url' => Yii::$app->urlManager->createUrl(['order/order']), | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/order', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-plus"></span> Commander', | |||||
'url' => Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/producer', 'id' => $this->context->getProducer()->id, 'return_url' => Yii::$app->urlManagerProducer->createAbsoluteUrl(['order/order', 'slug_producer' => $this->context->getProducer()->slug])]), | |||||
'visible' => Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/order', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-folder-open"></span> Mes commandes <span class="label label-' . $labelOrders . '">' . $countOrders . '</span>', | |||||
'url' => Yii::$app->urlManager->createUrl(['order/history']), | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
'active' => $this->getControllerAction() == 'order/history', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-repeat"></span> Abonnements <span class="label label-' . $labelSubscription . '">' . $countSubcriptions . '</span>', | |||||
'url' => Yii::$app->urlManager->createUrl(['subscription/index']), | |||||
'visible' => !Yii::$app->user->isGuest && $producer->user_manage_subscription, | |||||
'active' => $this->getControllerAction() == 'subscription/index', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-euro"></span> Crédit' . $credit, | |||||
'url' => Yii::$app->urlManager->createUrl(['credit/history']), | |||||
'visible' => !Yii::$app->user->isGuest && $producer->credit, | |||||
'active' => $this->getControllerAction() == 'credit/history', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact', | |||||
'url' => Yii::$app->urlManager->createUrl(['site/contact']), | |||||
'active' => $this->getControllerAction() == 'site/contact', | |||||
], | |||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-cog"></span> Administration', | |||||
'url' => Yii::$app->urlManagerBackend->createAbsoluteUrl(['site/index']), | |||||
'visible' => isset(Yii::$app->user->identity) && Yii::$app->user->identity->isProducer(), | |||||
'options' => ['id' => 'btn-administration'] | |||||
], | |||||
], | ], | ||||
]); | |||||
]); | |||||
?> | ?> | ||||
</nav> | |||||
</div> | |||||
</nav> | |||||
</div> | </div> | ||||
</div> | |||||
<div id="main" class="col-md-9"> | |||||
<?php if(strlen($producer->photo)): ?> | |||||
<div id="img-big"> | |||||
<img class="img-photo" src="<?= Yii::$app->urlManager->baseUrl; ?>/uploads/<?= $producer->photo; ?>" alt="Photo <?= Html::encode($producer->name) ?>" /> | |||||
</div> | |||||
<div id="main" class="col-md-9"> | |||||
<?php if (strlen($producer->photo)): ?> | |||||
<div id="img-big"> | |||||
<img class="img-photo" src="<?= Yii::$app->urlManager->baseUrl; ?>/uploads/<?= $producer->photo; ?>" | |||||
alt="Photo <?= Html::encode($producer->name) ?>"/> | |||||
</div> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
<div id="infos-producer"> | |||||
<div id="infos-producer"> | |||||
<span data-toggle="tooltip" data-placement="bottom" title="Heure limite de commande"> | <span data-toggle="tooltip" data-placement="bottom" title="Heure limite de commande"> | ||||
<span class="glyphicon glyphicon-time"></span> Commande avant | <span class="glyphicon glyphicon-time"></span> Commande avant | ||||
<strong><?php echo Html::encode($producer->order_deadline) ?> h</strong></span>, | |||||
<span data-toggle="tooltip" data-placement="bottom" title="Exemple : commande le lundi pour le <?php if($producer->order_delay == 1): ?>mardi<?php elseif($producer->order_delay == 2): ?>mercredi<?php elseif($producer->order_delay == 3): ?>jeudi<?php elseif($producer->order_delay == 4): ?>vendredi<?php elseif($producer->order_delay == 5): ?>samedi<?php elseif($producer->order_delay == 6): ?>dimanche<?php elseif($producer->order_delay == 7): ?>lundi d'après<?php endif; ?>"><strong><?= Html::encode($producer->order_delay) ?> jour<?php if($producer->order_delay > 1): ?>s<?php endif; ?></strong> à l'avance</span> | |||||
<strong><?php echo Html::encode($producer->order_deadline) ?> h</strong></span>, | |||||
<span data-toggle="tooltip" data-placement="bottom" | |||||
title="Exemple : commande le lundi pour le <?php if ($producer->order_delay == 1): ?>mardi<?php elseif ($producer->order_delay == 2): ?>mercredi<?php elseif ($producer->order_delay == 3): ?>jeudi<?php elseif ($producer->order_delay == 4): ?>vendredi<?php elseif ($producer->order_delay == 5): ?>samedi<?php elseif ($producer->order_delay == 6): ?>dimanche<?php elseif ($producer->order_delay == 7): ?>lundi d'après<?php endif; ?>"><strong><?= Html::encode($producer->order_delay) ?> jour<?php if ($producer->order_delay > 1): ?>s<?php endif; ?></strong> à l'avance</span> | |||||
<?php if(!Yii::$app->user->isGuest): ?> | |||||
<?php if (!Yii::$app->user->isGuest): ?> | |||||
<span class="favorite"> | <span class="favorite"> | ||||
<?php if($userProducer && $userProducer->bookmark): ?> | |||||
<span class="glyphicon glyphicon-star"></span> <a href="<?= Yii::$app->urlManagerProducer->createUrl(['site/bookmarks','action' => 'delete']); ?>" data-toggle="tooltip" data-placement="bottom" title="Supprimer de mes favoris">Favoris</a> | |||||
<?php if ($userProducer && $userProducer->bookmark): ?> | |||||
<span class="glyphicon glyphicon-star"></span> <a | |||||
href="<?= Yii::$app->urlManagerProducer->createUrl(['site/bookmarks', 'action' => 'delete']); ?>" | |||||
data-toggle="tooltip" data-placement="bottom" title="Supprimer de mes favoris">Favoris</a> | |||||
<?php else: ?> | <?php else: ?> | ||||
<span class="glyphicon glyphicon glyphicon-star-empty"></span> <a href="<?= Yii::$app->urlManagerProducer->createUrl(['site/bookmarks','action' => 'add']); ?>" data-toggle="tooltip" data-placement="bottom" title="Ajouter à mes favoris">Favoris</a> | |||||
<span class="glyphicon glyphicon glyphicon-star-empty"></span> <a | |||||
href="<?= Yii::$app->urlManagerProducer->createUrl(['site/bookmarks', 'action' => 'add']); ?>" | |||||
data-toggle="tooltip" data-placement="bottom" | |||||
title="Ajouter à mes favoris">Favoris</a> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
</span> | </span> | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<div class="clr"></div> | |||||
</div> | |||||
<?php if(strlen($this->getTitle())): ?> | |||||
<h2 id="page-title"> | |||||
<div class="clr"></div> | |||||
</div> | |||||
<?php if (strlen($this->getTitle())): ?> | |||||
<h2 id="page-title"> | |||||
<?= $this->getTitle(); ?> | <?= $this->getTitle(); ?> | ||||
<?php | |||||
if(count($this->buttons)): ?> | |||||
<?php | |||||
if (count($this->buttons)): ?> | |||||
<span id="buttons"> | <span id="buttons"> | ||||
<?php foreach($this->buttons as $button) { | |||||
echo '<a href="'.Yii::$app->urlManagerProducer->createUrl($button['url']).'" class="'.$button['class'].'">'.$button['label'].'</a>' ; | |||||
<?php foreach ($this->buttons as $button) { | |||||
echo '<a href="' . Yii::$app->urlManagerProducer->createUrl($button['url']) . '" class="' . $button['class'] . '">' . $button['label'] . '</a>'; | |||||
} | } | ||||
?> | ?> | ||||
</span> | </span> | ||||
<?php endif; ?> | |||||
</h2> | |||||
<?php endif; ?> | |||||
<?php endif; ?> | |||||
</h2> | |||||
<?php endif; ?> | |||||
<section id="content"> | |||||
<?php if (Yii::$app->session->hasFlash('error')): ?> | |||||
<div class="alert alert-danger" role="alert"> | |||||
<section id="content"> | |||||
<?php if (Yii::$app->session->hasFlash('error')): ?> | |||||
<div class="alert alert-danger" role="alert"> | |||||
<?= Yii::$app->session->getFlash('error') ?> | <?= Yii::$app->session->getFlash('error') ?> | ||||
</div> | |||||
<?php endif; ?> | |||||
<?php if (Yii::$app->session->hasFlash('success')): ?> | |||||
<div class="alert alert-success" role="alert"> | |||||
</div> | |||||
<?php endif; ?> | |||||
<?php if (Yii::$app->session->hasFlash('success')): ?> | |||||
<div class="alert alert-success" role="alert"> | |||||
<?= Yii::$app->session->getFlash('success') ?> | <?= Yii::$app->session->getFlash('success') ?> | ||||
</div> | |||||
<?php endif; ?> | |||||
</div> | |||||
<?php endif; ?> | |||||
<?= $content ?> | |||||
</section> | |||||
<?= $content ?> | |||||
</section> | |||||
<?php if(strlen($producer->mentions) || strlen($producer->gcs)): ?> | |||||
<section id="footer-producer"> | |||||
<?= Html::encode($producer->name) ?> : | |||||
<?php if(strlen($producer->mentions)): ?> | |||||
<a href="<?php echo Yii::$app->urlManager->createUrl(['site/mentions']) ; ?>">Mentions légales</a> | |||||
<?php if (strlen($producer->mentions) || strlen($producer->gcs)): ?> | |||||
<section id="footer-producer"> | |||||
<?= Html::encode($producer->name) ?> : | |||||
<?php if (strlen($producer->mentions)): ?> | |||||
<a href="<?php echo Yii::$app->urlManager->createUrl(['site/mentions']); ?>">Mentions | |||||
légales</a> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
<?php if(strlen($producer->mentions) && strlen($producer->gcs)): ?> | |||||
<?php if (strlen($producer->mentions) && strlen($producer->gcs)): ?> | |||||
• | • | ||||
<?php endif; ?> | <?php endif; ?> | ||||
<?php if(strlen($producer->gcs)): ?> | |||||
<a href="<?php echo Yii::$app->urlManager->createUrl(['site/gcs']) ; ?>">Conditions générales de vente</a> | |||||
<?php if (strlen($producer->gcs)): ?> | |||||
<a href="<?php echo Yii::$app->urlManager->createUrl(['site/gcs']); ?>">Conditions générales | |||||
de vente</a> | |||||
<?php endif; ?> | <?php endif; ?> | ||||
</section> | |||||
<?php endif; ?> | |||||
</div> | |||||
</section> | |||||
<?php endif; ?> | |||||
</div> | </div> | ||||
<footer id="footer" class="col-md-9"> | |||||
<div class="content"> | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']) ; ?>">distrib</a> • | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/mentions']) ; ?>">Mentions légales</a> • | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/cgv']) ; ?>">CGS</a> • | |||||
<a id="code-source" href="https://framagit.org/guillaume-bourgeois/distrib">Code source <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-framagit.png" alt="Hébergé par Framasoft" /> <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-gitlab.png" alt="Propulsé par Gitlab" /></a> • | |||||
<a id="social-mastodon" href="https://mastodon.social/@opendistrib">Mastodon <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-mastodon.png" alt="Mastodon" /></a> • | |||||
<a id="social-diaspora" href="https://framasphere.org/people/db12d640c64c0137f1d52a0000053625">Diaspora <img src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-diaspora.png" alt="Diaspora" /></a> | |||||
</div> | |||||
</footer> | |||||
</div> | |||||
<footer id="footer" class="col-md-9"> | |||||
<div class="content"> | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/index']); ?>">distrib</a> • | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/mentions']); ?>">Mentions | |||||
légales</a> • | |||||
<a href="<?php echo Yii::$app->urlManagerFrontend->createAbsoluteUrl(['site/cgv']); ?>">CGS</a> • | |||||
<a id="code-source" href="https://framagit.org/guillaume-bourgeois/distrib">Code source <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-framagit.png" | |||||
alt="Hébergé par Framasoft"/> <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-gitlab.png" | |||||
alt="Propulsé par Gitlab"/></a> • | |||||
<a id="social-mastodon" href="https://mastodon.social/@opendistrib">Mastodon <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-mastodon.png" alt="Mastodon"/></a> | |||||
• | |||||
<a id="social-diaspora" href="https://framasphere.org/people/db12d640c64c0137f1d52a0000053625">Diaspora <img | |||||
src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/logo-diaspora.png" alt="Diaspora"/></a> | |||||
</div> | |||||
</footer> | |||||
<?php $this->endBody() ?> | |||||
<?= $this->render('@common/views/_analytics.php'); ?> | |||||
<?php $this->endBody() ?> | |||||
<?= $this->render('@common/views/_analytics.php'); ?> | |||||
</body> | </body> | ||||
</html> | </html> | ||||
<?php $this->endPage() ?> | <?php $this->endPage() ?> |
use yii\helpers\Html; | use yii\helpers\Html; | ||||
use yii\grid\GridView; | use yii\grid\GridView; | ||||
use common\models\Product ; | use common\models\Product ; | ||||
use common\helpers\GlobalParam; | |||||
$this->setTitle('Abonnements') ; | $this->setTitle('Abonnements') ; | ||||
$this->addButton(['label' => '<span class="glyphicon glyphicon-plus"></span> Ajouter', 'url' => 'subscription/form', 'class' => 'btn btn-primary']) ; | $this->addButton(['label' => '<span class="glyphicon glyphicon-plus"></span> Ajouter', 'url' => 'subscription/form', 'class' => 'btn btn-primary']) ; | ||||
[ | [ | ||||
'label' => 'Point de vente', | 'label' => 'Point de vente', | ||||
'format' => 'raw', | 'format' => 'raw', | ||||
'filter' => ArrayHelper::map(PointSale::find()->where(['id_producer' => Producer::getId()])->asArray()->all(), 'id', 'name'), | |||||
'filter' => ArrayHelper::map(PointSale::find()->where(['id_producer' => GlobalParam::getCurrentProducerId()])->asArray()->all(), 'id', 'name'), | |||||
'value' => function($model) { | 'value' => function($model) { | ||||
return Html::encode($model->pointSale->name) ; | return Html::encode($model->pointSale->name) ; | ||||
} | } |