guild/common/services/ImportProjectTaskService.php

78 lines
3.5 KiB
PHP
Raw Permalink Normal View History

2023-11-10 15:55:01 +03:00
<?php
namespace common\services;
use common\models\ProjectTask;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use yii\helpers\ArrayHelper;
class ImportProjectTaskService
{
/**
* @param array $tasks
* @return string|void
*/
public function importTasks(array $tasks)
{
try {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet
->setCellValue('A1', 'ID')
->setCellValue('B1', 'ID проекта')
->setCellValue('C1', 'Название проекта')
->setCellValue('D1', 'Задача')
->setCellValue('E1', 'Дата создания')
->setCellValue('F1', 'Дата обновления')
->setCellValue('G1', 'Дедлайн')
->setCellValue('H1', 'Описание')
->setCellValue('I1', 'Статус')
->setCellValue('J1', 'Колонка')
->setCellValue('G1', 'ID создателя задачи')
->setCellValue('K1', 'Создатель задачи')
->setCellValue('L1', 'ID исполнителя')
->setCellValue('M1', 'Приоритет')
->setCellValue('N1', 'Исполнитель')
->setCellValue('O1', 'Количество коментариев')
->setCellValue('P1', 'Участники')
->setCellValue('Q1', 'Теги')
->setCellValue('R1', 'Приоритет выполнения');
$i = 2;
/** @var ProjectTask $task */
foreach ($tasks as $task) {
$sheet
->setCellValue('A' . $i, $task->id)
->setCellValue('B' . $i, $task->project_id)
->setCellValue('C' . $i, $task->project->name)
->setCellValue('D' . $i, $task->title)
->setCellValue('E' . $i, $task->created_at)
->setCellValue('F' . $i, $task->updated_at)
->setCellValue('G' . $i, $task->dead_line)
->setCellValue('H' . $i, $task->description)
->setCellValue('I' . $i, ArrayHelper::getValue(ProjectTask::getStatus(), $task->status))
->setCellValue('J' . $i, $task->column->title)
->setCellValue('G' . $i, $task->user_id)
->setCellValue('K' . $i, $task->user->userCard->fio ?? ($task->user->username ?? 'kkk'))
->setCellValue('L' . $i, $task->executor_id)
->setCellValue('M' . $i, $task->priority)
->setCellValue('N' . $i, $task->executor->userCard->fio ?? ($task->executor->username ?? 'ggg'))
->setCellValue('O' . $i, $task->getCommentCount())
->setCellValue('P' . $i, $task->getTaskUsersToStr())
->setCellValue('Q' . $i, $task->getMarkTitleToStr())
->setCellValue('R' . $i, $task->execution_priority);
$i++;
}
$writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="'. urlencode('tasks.xlsx').'"');
$writer->save('php://output');
exit();
} catch (\Exception $ex) {
return $ex->getMessage();
}
}
}