[ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['?'], ], [ 'actions' => ['pay-orders'], 'allow' => true, 'roles' => ['@'] ], ], ], ]; } /** * Initialise le compte de démonstration. * * @param string $key */ public function actionInitDemo($key = '') { if ($key == '45432df6e842ac71aa0b5bb6b9f25d44') { $producer = Producer::getDemoAccount(); if ($producer) { // initialisation de la distribution à J+7 $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.' ] ] ; } /** * Routine quotidienne concernant les commandes : paiement et envoi d'un * récap aux producteurs. * * @param string $key * @param string $forceDate */ 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)) { /* * Paiement des commandes (paiement automatique) */ $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++; } } } } /* * Envoi des commandes par email au producteur */ 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)); // génération du pdf de commande 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; $mail->setTo('contact@opendistrib.net') ->send(); 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::$app->mailer->compose() ->setFrom('contact@opendistrib.net') ->setTo('contact@opendistrib.net') ->setSubject('[Opendistrib] Log '.$producer->name) ->setTextBody($messageLog) ->send(); 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'); } } } } }