[
'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('memory_limit', '-1');
set_time_limit(0);
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 récapitulatif envoyé');
/*Yii::$app->mailer->compose()
->setFrom('contact@opendistrib.net')
->setTo('contact@opendistrib.net')
->setSubject('[Opendistrib] Log '.$producer->name)
->setTextBody($messageLog)
->send();*/
}
}
}
}
}
}
}