namespace app\controllers;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Yii;
use yii\web\Controller;
+use yii_app\records\Users;
use yii_app\records\UsersMessageManagement;
class UsersMessageManagementController extends Controller
{
- public function actionIndex() {
+ public function actionIndex()
+ {
$model = UsersMessageManagement::find()->one();
if (!$model) {
return $this->render('index', compact('model'));
}
+
+
+ public function actionExportKogort()
+ {
+ $request = Yii::$app->request;
+
+
+ $startDate = $request->get('start_date', date('Y-m-d'));
+ $endDate = $request->get('end_date', date('Y-m-d', strtotime('+7 days')));
+
+ $dates = [];
+ $currentDate = strtotime($startDate);
+
+ while ($currentDate <= strtotime($endDate)) {
+ $formattedDate = date('Y-m-d', $currentDate);
+ $dates[$formattedDate] = [
+ 'target' => $this->generateExcelLink($formattedDate, 'target'),
+ 'whatsapp' => $this->generateExcelLink($formattedDate, 'whatsapp'),
+ 'call' => $this->generateExcelLink($formattedDate, 'call'),
+ ];
+ $currentDate = strtotime('+1 day', $currentDate);
+ }
+
+ return $this->render('export-kogort', [
+ 'links' => $dates,
+ 'startDate' => $startDate,
+ 'endDate' => $endDate,
+ ]);
+ }
+
+ public function actionGenerateExcel($date, $type)
+ {
+ $data = Users::getUsersListForKogort($date);
+
+ $spreadsheet = new Spreadsheet();
+ $sheet = $spreadsheet->getActiveSheet();
+
+ if (!empty($data)) {
+ $fields = array_keys($data[0]->getAttributes());
+ } else {
+ Yii::$app->session->setFlash('error', 'Нет данных для экспорта.');
+ return $this->redirect(Yii::$app->request->referrer);
+ }
+
+ $columnIndex = 1;
+ foreach ($fields as $field) {
+ $sheet->setCellValue([ $columnIndex, 1], $field);
+ $columnIndex++;
+ }
+
+ $row = 2;
+ foreach ($data as $user) {
+ $columnIndex = 1;
+ foreach ($fields as $field) {
+ $sheet->setCellValue([$columnIndex, $row], $user->$field);
+ $columnIndex++;
+ }
+ $row++;
+ }
+
+ $sheet->setTitle('Users');
+
+ $response = Yii::$app->response;
+ $response->format = \yii\web\Response::FORMAT_RAW;
+
+
+ $response->headers->add('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
+ $response->headers->add('Content-Disposition', 'attachment; filename="users-' . $type . '-' . $date . '.xlsx"');
+ $response->headers->add('Cache-Control', 'max-age=0');
+ $response->headers->add('Pragma', 'public');
+
+
+ $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
+ $writer->save('php://output');
+ Yii::$app->end();
+ }
+
+ protected function generateExcelLink($date, $type)
+ {
+ return Yii::$app->urlManager->createUrl([
+ 'users-message-management/generate-excel',
+ 'date' => $date,
+ 'type' => $type,
+ ]);
+ }
}
namespace yii_app\records;
use Yii;
+use yii\base\StaticInstanceInterface;
/**
* This is the model class for table "users".
* https://tracker.yandex.ru/ERP-252
* @return array
*/
- public function getUsersListForKogort()
+ public static function getUsersListForKogort($startDate = null, $endDate = null)
{
- $startDate = date('Y-m-d');
- $endDate = date('Y-m-d', strtotime($startDate . ' +7 days'));
+
+ $startDate = $startDate ?? date('Y-m-d');
+ $endDate = $endDate ?? date('Y-m-d', strtotime($startDate . ' +7 days'));
$salesPhone = Sales::find()
->where(['>=', 'date', "$startDate 00:00:00"])
--- /dev/null
+<?php
+use yii\helpers\Html;
+use yii\helpers\Url;
+
+/** @var array $links */
+/** @var string $startDate */
+/** @var string $endDate */
+
+$this->title = 'Рассылка по когортам';
+?>
+
+<div class="container mt-4">
+ <h1><?= Html::encode($this->title) ?></h1>
+
+ <form method="get" class="mb-4">
+ <div class="row g-3">
+ <div class="col">
+ <label for="start_date" class="form-label">Начальная дата</label>
+ <input type="date" name="start_date" id="start_date" class="form-control" value="<?= Html::encode($startDate) ?>">
+ </div>
+ <div class="col">
+ <label for="end_date" class="form-label">Конечная дата</label>
+ <input type="date" name="end_date" id="end_date" class="form-control" value="<?= Html::encode($endDate) ?>">
+ </div>
+ <div class="col-auto">
+ <label class="form-label d-block"> </label>
+ <button type="submit" class="btn btn-primary">Показать</button>
+ </div>
+ </div>
+ </form>
+
+ <table class="table table-bordered table-striped">
+ <thead class="table-light">
+ <tr>
+ <th>День выгрузки</th>
+ <th>Target</th>
+ <th>Whatsapp</th>
+ <th>Звонок</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($links as $date => $columns): ?>
+ <tr>
+ <td><?= Html::encode($date) ?></td>
+ <td><a href="<?= Url::to($columns['target']) ?>" target="_blank" download="users-target-<?= $date ?>.xlsx">Скачать EXCEL</a></td>
+ <td><a href="<?= Url::to($columns['whatsapp']) ?>" target="_blank" download="users-whatsapp-<?= $date ?>.xlsx">Скачать EXCEL</a></td>
+ <td><a href="<?= Url::to($columns['call']) ?>" target="_blank" download="users-call-<?= $date ?>.xlsx">Скачать EXCEL</a></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+</div>
\ No newline at end of file