|
- <?php
-
-
-
- namespace backend\controllers;
-
- use Yii;
- use common\models\User;
- use yii\data\ActiveDataProvider;
- use yii\web\Controller;
- use yii\web\NotFoundHttpException;
- use yii\filters\VerbFilter;
- use yii\filters\AccessControl;
- use kartik\mpdf\Pdf;
- use common\models\Producer;
- use common\models\Order;
- use common\models\Subscription;
- use common\models\Distribution;
- use common\models\CreditHistory;
-
-
- class CronController extends BackendController
- {
- public function behaviors()
- {
- return [
- 'verbs' => [
- 'class' => VerbFilter::className(),
- 'actions' => [
- 'delete' => ['post'],
- ],
- ],
- 'access' => [
- 'class' => AccessControl::className(),
- 'rules' => [
- [
- 'allow' => true,
- 'roles' => ['?'],
- ],
- [
- 'actions' => ['pay-orders'],
- 'allow' => true,
- 'roles' => ['@']
- ],
- ],
- ],
- ];
- }
-
-
-
- public function actionInitDemo($key = '')
- {
- if ($key == '45432df6e842ac71aa0b5bb6b9f25d44') {
- $producer = Producer::getDemoAccount();
-
- if ($producer) {
-
- $dateTime = strtotime("+7 day");
- $dayStr = strtolower(date('l', $dateTime));
- $fieldDeliveryDay = 'delivery_' . $dayStr;
- $pointsSaleArray = PointSale::searchAll(['point_sale.id_producer' => $producer->id]);
- $activeDistribution = false;
- foreach ($pointsSaleArray as $pointSale) {
- if ($pointSale->$fieldDeliveryDay) {
- $activeDistribution = true;
- }
- }
-
- if ($activeDistribution) {
- $distribution = Distribution::initDistribution(date('Y-m-d', $dateTime), $producer->id);
- $distribution->active(true);
- }
- }
- }
-
- }
-
- public function actionPayOrders($date)
- {
- \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
-
- if(strlen($date)) {
- $this->actionProcessOrders('64ac0bdab7e9f5e48c4d991ec5201d57', $date) ;
- }
-
- return [
- 'return' => 'success',
- 'alert' => [
- 'type' => 'success',
- 'message' => 'Commandes payées.'
- ]
- ] ;
- }
-
-
-
- public function actionProcessOrders($key = '', $forceDate = '')
- {
- if ($key == '64ac0bdab7e9f5e48c4d991ec5201d57') {
-
- Yii::error('Cron process orders', 'log-cron');
- $hour = 20;
- if (strlen($forceDate)) {
- $date = $forceDate;
- } else {
- $hour = date('H');
-
- if ($hour == '00') {
- $date = date('Y-m-d');
- $hour = 24;
- } else {
- $date = date('Y-m-d', time() + 24 * 60 * 60);
- }
- }
-
- $arrayProducers = Producer::searchAll();
-
- foreach ($arrayProducers as $producer) {
-
- Yii::error('Producteur : '.$producer->name, 'log-cron');
-
- $countOrders = 0;
- $mailOrdersSend = false;
-
- $distribution = Distribution::findOne([
- 'date' => $date,
- 'active' => 1,
- 'id_producer' => $producer->id,
- ]);
-
- if($distribution) {
-
- Yii::error('Distribution : '.$date, 'log-cron');
-
- if ($hour == $producer->order_deadline || strlen($forceDate)) {
-
-
-
-
- $arrayOrders = Order::searchAll([
- 'distribution.date' => $date,
- 'distribution.id_producer' => $producer->id
- ], [
- 'conditions' => 'date_delete IS NULL'
- ]);
-
- Yii::error('Commandes : ' . count($arrayOrders), 'log-cron');
-
- $configCredit = Producer::getConfig('credit', $producer->id);
-
- if ($arrayOrders && is_array($arrayOrders)) {
- foreach ($arrayOrders as $order) {
- if ($order->auto_payment && $configCredit) {
-
- if ($order->getAmount(Order::AMOUNT_REMAINING) > 0) {
- $order->saveCreditHistory(
- CreditHistory::TYPE_PAYMENT,
- $order->getAmount(Order::AMOUNT_REMAINING),
- $order->distribution->id_producer,
- $order->id_user,
- User::ID_USER_SYSTEM
- );
- $countOrders++;
- }
- }
- }
- }
-
-
-
- if (!strlen($forceDate)) {
- $arrayOrders = Order::searchAll([
- 'distribution.date' => $date,
- 'distribution.id_producer' => $producer->id
- ], [
- 'conditions' => 'date_delete IS NULL'
- ]);
-
- $user = User::searchOne([
- 'id_producer' => $producer->id,
- 'status' => User::STATUS_PRODUCER
- ]);
-
- $mail = Yii::$app->mailer->compose(
- [
- 'html' => 'cronOrdersSummary-html',
- 'text' => 'cronOrdersSummary-text',
- ], [
- 'date' => $date,
- 'orders' => $arrayOrders
- ]
- )
- ->setTo($user->email)
- ->setFrom([Yii::$app->params['adminEmail'] => 'distrib']);
-
- if (is_array($arrayOrders) && count($arrayOrders)) {
- $subject = '[distrib] Commandes du ' . date('d/m', strtotime($date));
-
-
- Yii::$app->runAction('distribution/report-cron', [
- 'date' => $date,
- 'save' => true,
- 'idProducer' => $producer->id,
- 'key' => '64ac0bdab7e9f5e48c4d991ec5201d57'
- ]);
- $mail->attach(Yii::getAlias('@app/web/pdf/Commandes-' . $date . '-' . $producer->id . '.pdf'));
- } else {
- $subject = '[distrib] Aucune commande';
- }
-
- $mail->setSubject($subject)
- ->send();
- $mailOrdersSend = true;
-
-
-
-
- Yii::error('Envoi du mail avec les commandes', 'log-cron');
- }
-
- if ($producer->active) {
- Yii::error('Producteur actif : log', 'log-cron');
- $messageLog = $producer->name . ' : Distribution du ' . $date . ', ' . count($arrayOrders) . ' commande(s) enregistrée(s), ' . $countOrders . ' commande(s) payée(s), ' . ($mailOrdersSend ? 'Récapitulatif de commandes envoyé' : 'Aucun email envoyé');
-
-
-
-
- Yii::error($messageLog, 'cron-process-orders');
- } else {
- Yii::error('Producteur non actif', 'log-cron');
- }
- }
- else {
- Yii::error('L\'heure ne correspond pas.', 'log-cron');
- }
- }
- else {
- Yii::error('La distribution n\'existe pas', 'log-cron');
- }
- }
- }
- }
- }
|