[
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['@'],
'matchCallback' => function ($rule, $action) {
return User::getCurrentStatus() == USER::STATUS_ADMIN;
}
]
],
],
];
}
/**
* Liste les producteurs.
*
* @return mixed
*/
public function actionIndex()
{
$dataProviderProducer = new ActiveDataProvider([
'query' => Producer::find()
->with('userProducer', 'user')
->orderBy('date_creation DESC'),
'pagination' => [
'pageSize' => 1000,
],
]);
return $this->render('index', [
'dataProviderProducer' => $dataProviderProducer,
]);
}
/**
* Crée un producteur.
*
* @return mixed
*/
public function actionCreate()
{
$model = new Producer();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
Yii::$app->getSession()->setFlash('success', 'Producteur créé.');
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
/**
* Génère la facture mensuelle d'un producteur.
*
* @param integer $idProducer
*/
public function actionBill($idProducer)
{
$producer = Producer::findOne($idProducer);
if ($producer) {
$period = date('Y-m', strtotime('-1 month'));
$last_invoice = Invoice::getLastInvoice() ;
if (!$last_invoice) {
$reference = 'BAP000001';
} else {
$reference = str_replace('BAP', '', $last_invoice->reference);
$reference ++;
$reference = 'BAP' . $reference;
}
$invoice = new Invoice;
$invoice->id_producer = $idProducer;
$invoice->date = date('Y-m-d H:i:s');
$invoice->reference = $reference;
$invoice->turnover = $producer->getTurnover($period);
$invoice->amount_ht = $producer->getFreePrice() ;
$invoice->wording = 'Facture ' . date('m/Y', strtotime('-1 month'));
$invoice->text = 'Utilisation de la plateforme distrib pour le mois : ' . date('m/Y', strtotime('-1 month')) . '
'
. 'Chiffre d\'affaire réalisé sur la plateforme : ' . number_format($facture->ca, 2) . ' € commissionné à 1%.';
$invoice->paid = 0;
$invoice->period = $period;
$invoice->save();
}
$this->redirect(['producer-admin/index']);
}
/**
* Liste les factures des producteurs.
*
* @return mxied
*/
public function actionBilling()
{
$dataProviderInvoice = new ActiveDataProvider([
'query' => Invoice::find()
->with('producer')
->orderBy('reference DESC'),
'pagination' => [
'pageSize' => 1000,
],
]);
return $this->render('billing', [
'dataProviderInvoice' => $dataProviderInvoice,
]);
}
public function actionProducerInstallTaxUpdatePrices($idProducer, $idTaxRate)
{
$taxRate = TaxRate::searchOne([
'id' => $idTaxRate
]) ;
// product
$productsArray = Product::searchAll([
'id_producer' => $idProducer
]) ;
foreach($productsArray as $product) {
$product->price = $product->price / (1 + $taxRate->value) ;
}
// product_order
$ordersArray = Order::searchAll([
'distribution.id_producer' => $idProducer
]) ;
foreach($ordersArray as $order) {
foreach($order->productOrder as $productOrder) {
$productOrder->price = $productOrder->price / (1 + $taxRate->value) ;
$productOrder->save() ;
}
}
// product_subscription
$subscriptionsArray = Subscription::searchAll([
'subscription.id_producer' => $idProducer
]) ;
foreach($subscriptionsArray as $subscription) {
foreach($subscription->productSubscription as $productSubscription) {
$productSubscription->price = $productSubscription->price / (1 + $taxRate->value) ;
$productSubscription->save() ;
}
}
}
/**
* Recherche un établissement.
*
* @param integer $id
* @return Etablissement
* @throws NotFoundHttpException
*/
protected function findModel($id) {
if (($model = Producer::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}