[ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ '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) ; } } } } /** * 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') { $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 && ($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)) { $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 (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/Orders-' . $date . '-' . $producer->id . '.pdf')); } else { $subject = '[distrib] Aucune commande'; } $mail->setSubject($subject) ->send(); $mailOrdersSend = true ; } if($producer->active) { $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 cron') ->setTextBody($messageLog) ->send(); Yii::error($messageLog, 'cron-process-orders') ; } } } } } }