]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Вывод таблицы
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 11 Dec 2024 15:04:32 +0000 (18:04 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 11 Dec 2024 15:04:32 +0000 (18:04 +0300)
erp24/controllers/UsersMessageManagementController.php
erp24/records/Users.php
erp24/views/users-message-management/export-kogort.php [new file with mode: 0644]

index d817a28330423dd0bac3a022ae3c311a751150f5..cec867b985a7840b5f48eb4554722ec0fe25a86e 100644 (file)
@@ -2,13 +2,16 @@
 
 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) {
@@ -29,4 +32,89 @@ class UsersMessageManagementController extends Controller
 
         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,
+        ]);
+    }
 }
index 2493466b95f1093115fecc0076f1e43984eb8f91..d8572a7ceac9d8359b44eb30bb4a8e3783e6e507 100755 (executable)
@@ -3,6 +3,7 @@
 namespace yii_app\records;
 
 use Yii;
+use yii\base\StaticInstanceInterface;
 
 /**
  * This is the model class for table "users".
@@ -289,10 +290,11 @@ class Users extends \yii\db\ActiveRecord
      * 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"])
diff --git a/erp24/views/users-message-management/export-kogort.php b/erp24/views/users-message-management/export-kogort.php
new file mode 100644 (file)
index 0000000..98e2b3f
--- /dev/null
@@ -0,0 +1,52 @@
+<?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">&nbsp;</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