[ '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('active DESC, free_price DESC'), 'pagination' => [ 'pageSize' => 1000, ], ]); $producersArray = Producer::find()->where('active = 1')->all(); $sumPrices = 0; foreach($producersArray as $producer) { $sumPrices += $producer->getAmountBilledLastMonth(); } return $this->render('index', [ 'dataProviderProducer' => $dataProviderProducer, 'sumPrices' => $sumPrices ]); } /** * 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, ]); } } /** * Modification d'un producteur. * * @return mixed */ public function actionUpdate($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post()) && $model->save()) { Yii::$app->getSession()->setFlash('success', 'Producteur modifié.'); return $this->redirect(['index']); } else { return $this->render('update', [ 'model' => $model, ]); } } public function actionUserTransfer($fromProducerId, $toProducerId, $withOrders = 1) { $fromProducerId = (int) $fromProducerId; $toProducerId = (int) $toProducerId; $count = 0; $usersArray = User::findBy(['id_producer' => $fromProducerId])->all(); foreach($usersArray as $user) { $idUser = $user['user_id']; $countOrders = 0; if($withOrders) { $countOrders = Order::searchCount([ 'id_user' => $idUser, 'distribution.id_producer' => $fromProducerId ], ['conditions' => 'date_delete IS NULL']); } if(($withOrders && $countOrders) || !$withOrders) { Producer::addUser($idUser, $toProducerId); $count ++; } } if($count) { Yii::$app->getSession()->setFlash('success', $count.' clients importés du producteur #'.$fromProducerId.' vers le producteur #'.$toProducerId.'.'); } else { Yii::$app->getSession()->setFlash('error', 'Aucun client à importer.'); } return $this->redirect(['producer-admin/index']); } /** * 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) { // product $productsArray = Product::searchAll([ 'id_producer' => $idProducer ]) ; $connection = Yii::$app->getDb(); foreach($productsArray as $product) { $product->price = round($product->price / (1 + $product->taxRate->value), 2) ; $product->save() ; $command = $connection->createCommand(" UPDATE `product_order` SET price = ROUND(price / (1 + :tax_value), 2), id_tax_rate = :id_tax_rate WHERE id_product = :id_product", [ ':id_product' => $product->id, ':tax_value' => $product->taxRate->value, ':id_tax_rate' => $product->taxRate->id, ]); $result = $command->query(); } echo 'ok' ; } /** * 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.'); } } }