[ '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.' ] ]; } public function actionForceProcessOrders($key = '') { $this->actionProcessOrders($key, date('Y-m-d')); } /** * 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') { ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 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) { $countOrders = 0; $mailOrdersSend = false; $distribution = Distribution::findOne([ 'date' => $date, 'active' => 1, 'id_producer' => $producer->id, ]); if ($distribution) { 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' ]); $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) && Producer::getConfig('option_notify_producer_order_summary', $producer->id)) { $arrayOrders = Order::searchAll([ 'distribution.date' => $date, 'distribution.id_producer' => $producer->id ], [ 'conditions' => 'date_delete IS NULL' ]); $mail = Yii::$app->mailer->compose( [ 'html' => 'cronOrdersSummary-html', 'text' => 'cronOrdersSummary-text', ], [ 'date' => $date, 'orders' => $arrayOrders ] ) ->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); // envoi des emails à tous les comptes users (statut producer) associés à ce producteur $userArray = User::searchAll([ 'id_producer' => $producer->id, 'status' => User::STATUS_PRODUCER ]); foreach ($userArray as $user) { $mail->setTo($user->email)->send(); $mailOrdersSend = true; } } if ($producer->active) { $strCountOrders = 0; if ($arrayOrders && is_array($arrayOrders)) { $strCountOrders = count($arrayOrders); } $messageLog = $producer->name . ' : Distribution du ' . $date . ', ' . $strCountOrders . ' 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();*/ } } } } } } }