[ 'class' => VerbFilter::class, 'actions' => [ 'delete' => ['post'], ], ], 'access' => [ 'class' => AccessControl::class, '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') { $producerManager = $this->getProducerManager(); $distributionManager = $this->getDistributionManager(); $producer = $producerManager->findOneProducerDemoAccount(); $producerManager->setProducerContext($producer); $distributionManager->setProducerContext($producer); 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 = $distributionManager->createDistributionIfNotExist(date('Y-m-d', $dateTime)); $distributionManager->activeDistribution($distribution); } } } } 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 = '') { $producerManager = $this->getProducerManager(); $distributionManager = $this->getDistributionManager(); $orderManager = $this->getOrderManager(); $creditHistoryManager = $this->getCreditHistoryManager(); $userManager = $this->getUserManager(); if ($key == '64ac0bdab7e9f5e48c4d991ec5201d57') { ini_set('memory_limit', '-1'); set_time_limit(0); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $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 = $producerManager->findProducers(); foreach ($arrayProducers as $producer) { $this->getLogic()->setProducerContext($producer); $countOrders = 0; $mailOrdersSend = false; $distribution = $distributionManager ->findOneDistribution($date, true); 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 = $producerManager->getConfig('credit', $producer->id); if ($arrayOrders && is_array($arrayOrders)) { foreach ($arrayOrders as $order) { $orderManager->initOrder($order); if ($order->auto_payment && $configCredit) { if ($orderManager->getOrderAmount($order, Order::AMOUNT_REMAINING) > 0) { $creditHistoryManager->createCreditHistory( CreditHistory::TYPE_PAYMENT, $orderManager->getOrderAmount($order, Order::AMOUNT_REMAINING), $order->distribution->producer, $order->user, $userManager->findOneUserById(User::ID_USER_SYSTEM), MeanPayment::CREDIT, $order ); $countOrders++; } } } } /* * Envoi des commandes par email au producteur */ if (!strlen($forceDate) && $producerManager->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 = '[Opendistrib] 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 = '[Opendistrib] 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) { if($user->email && strlen($user->email) > 0) { $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 récapitulatif envoyé'); /*Yii::$app->mailer->compose() ->setFrom('contact@opendistrib.net') ->setTo('contact@opendistrib.net') ->setSubject('[Opendistrib] Log '.$producer->name) ->setTextBody($messageLog) ->send();*/ } } } } } } }