getActiveSheet(); $sheet->setTitle('Работа над проектами'); $emp_id = intval($options['emp_id']) ? : Emp::$AUTH_ID; $emp = Emp::getByID($emp_id); $sheet->setCellValue('A1',Emp::getName($emp)); $sheet->setCellValue('A2','Работа над проектами'); $sheet->setCellValue('A3','В таблице представлена сводка часов, затраченных вами на реализацию проектов, в которых вы принимаете участие как член команды проекта.'); $INIT_ROW = $row = 5; $sheet->setCellValue('A'.$row,'Шифр'); $sheet->setCellValue('B'.$row,'Название'); $sheet->setCellValue('C'.$row,'Статус'); $sheet->setCellValue('D'.$row,'Роль в проекте'); $sheet->setCellValue('E'.$row,'Раб., час'); $sheet->setCellValue('F'.$row,'Сверх., час'); $sheet->setCellValue('G'.$row,'Всего, час'); $sheet->setCellValue('H'.$row,'Архивный'); $row++; foreach ($data['data'] as $v){ $sheet->setCellValue('A'.$row,$v['code']); $sheet->setCellValue('B'.$row,$v['name']); $sheet->setCellValue('C'.$row,$v['status']); $sheet->setCellValue('D'.$row,$v['role']); $sheet->setCellValue('E'.$row,$v['hours']); $sheet->setCellValue('F'.$row,$v['over']); $sheet->setCellValue('G'.$row,$v['total']); $sheet->setCellValue('H'.$row,$v['archive']?'Архивный':''); $row++; } $row++; $sheet2 = new Worksheet($spreadsheet,"Отсутствие на рабочем месте"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex(1); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $sheet->setCellValue('A'.($row++),'Отсутствие на рабочем месте'); $sheet->setCellValue('A'.($row++),'Сводная таблица отсутствия на рабочем месте. Данные представляются за выбранный в шапке страницы период или за все время работы, если период явно не задан. Значения указаны в днях.'); $row++; $sheet->setCellValue('A'.$row,'Шифр'); $sheet->setCellValue('B'.$row,'Определение'); $sheet->setCellValue('C'.$row,'Всего, дн'); foreach ($data['absence'] as $v){ $sheet->setCellValue('A'.$row,$v['code']); $sheet->setCellValue('B'.$row,$v['title']); $sheet->setCellValue('C'.$row,$v['count']); $row++; } //------------ $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex(2); $sheet = $spreadsheet->getActiveSheet(); $row = 0; self::summary($sheet, $row, "Распределение времени между проектами", $data['project_name'], $data['period'], "%", $data['project_graph'] ); self::summary($sheet, $row, "Распределение рабочего времени", $data['project_name'], $data['period'], "ч.", $data['time_graph'], true ); self::summary($sheet, $row, "Распределение причин отсутствия", $data['project_name'], $data['period'], "дн.", $data['absence_graph'], true ); /* $sheet = $spreadsheet->getSheet(1); $col = 'A'; $col2 = 'B'; $row = 1; $sheet->setCellValue($col.$row,'Статистика'); $row++; $row++; $sheet->setCellValue($col.$row++,$data['emp']); $sheet->setCellValue($col.$row++,$data['project_name']); $sheet->setCellValue($col.$row++,$data['period']); $row++; $sheet->setCellValue($col.$row,'Рабочие часы'); $sheet->setCellValue($col2.$row++,$data['hours']); $sheet->setCellValue($col.$row,'Внеурочные часы'); $sheet->setCellValue($col2.$row++,$data['over']); $sheet->setCellValue($col.$row,'Сумма часов'); $sheet->setCellValue($col2.$row++,$data['total']); $row++; $sheet->setCellValue($col.$row++,'Отсутствие на рабочем месте'); $row++; $sheet->setCellValue($col.$row,'Сумма нерабочих дней'); $sheet->setCellValue($col2.$row,$data['absence_total']); */ } static function writeMyTeam2(Spreadsheet $spreadsheet, $data, $options){ $isMoney = Rules::isAnalysisProjectsFinance(); $sheetIndex = 0; $PROJECT_ID = $pid = $options['subtype']; $isShowMoney = Rules::isAnalysisProjectsShowMoney($PROJECT_ID); $project = Project::getByID($pid); $code_title = Project::getCodeName($project); $isAdmin = Rules::isAdmin(); $myMoneyProjectIds = []; if(!$isAdmin){ $myMoneyProjectIds = Project::getListForMoney(); } $showMoney = function ($v) use ($isAdmin, $myMoneyProjectIds,$PROJECT_ID,$isShowMoney){ if($isAdmin) return $v; else return (in_array($PROJECT_ID,$myMoneyProjectIds)&&$isShowMoney)?$v:'-'; }; //* if(Rules::isAnalysisProjectsProject($PROJECT_ID)) { if($sheetIndex) { $sheet2 = new Worksheet($spreadsheet); $spreadsheet->addSheet($sheet2); } $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Проект'); $row = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow(7, $row), 'Время проектирования, ч'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow(11, $row), 'Стоимость проекта, млн. ' . Merakomis::CURRENCY); } $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Шифр'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Стадия'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Название'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'РП'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Команда'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'РЧ | ОЧ'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); } $row++; $col = 1; foreach ($data['projects2'] as $pid=>$v) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['code']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['step']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['director']['title']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), ($v['emps_total']) . ' | ' . ($v['emps'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['r'] . ' | ' . $v['o']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['total'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_hours']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over1']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over2']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_total']))); } $row++; } $row++; $col = 2; foreach ($data['periods'] as $year => $months) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $year); $col += count($months); } $row++; $col = 2; foreach ($data['periods'] as $year => $months) { foreach ($months as $month) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), Merakomis::getMonth($month)); } } $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col, $row), "Время пр-я, ч"); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col, $row + 1), "Стоимость пр-я, млн ₽"); } $col++; foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col, $row), cfloatval($data['period_data'][$year][$m]['time'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col, $row + 1), $showMoney(cfloatval($data['period_data'][$year][$m]['money']))); } $col++; } } } //*/ //* if(Rules::isAnalysisProjectsSection($PROJECT_ID)) { if ($sheetIndex) { $sheet2 = new Worksheet($spreadsheet); $spreadsheet->addSheet($sheet2); } //$sheet2 = new Worksheet($spreadsheet,"Разделы"); //$spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Разделы'); $row = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow(4, $row), 'Время проектирования, ч'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow(8, $row), 'Стоимость проекта, млн. ' . Merakomis::CURRENCY); } $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раздел'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Команда'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'РЧ | ОЧ'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); } $row++; foreach ($data['parents'][$pid] as $v) { $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), count($v['total_emps']) . ' | ' . count($v['emps'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['r'] . ' | ' . $v['o']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['total'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_hours']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over1']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over2']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_total']))); } $row++; } $col = 1; $v = $data['totals']['sections']; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), "Всего"); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), count($v['total_emps']) . ' | ' . count($v['emps'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['r'] . ' | ' . $v['o']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v['total'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_hours']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over1']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_over2']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($v['money_total']))); } $row++; self::summary($sheet, $row, "Распределение времени проектирования разделов", $code_title, $data['period'], "ч.", $data['graph3'], true, ); if ($isMoney && $isShowMoney) { self::summary($sheet, $row, "Распределение стоимости проектирования разделов", $code_title, $data['period'], "ч.", $data['graph4'], true, ); } $row++; $row++; $row++; $col = 2; foreach ($data['periods'] as $year => $months) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $year); $col += count($months); } $row++; $col = 2; foreach ($data['periods'] as $year => $months) { foreach ($months as $month) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), Merakomis::getMonth($month)); } } $row++; $arr = ['АР', 'КР', 'ИОС', 'СПЕЦ', 'BIM-IT', 'УПР']; foreach ($arr as $name) { $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $name); foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($data['section_data'][$name][$year][$m]['time'])); } } $row++; } $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), "Всего"); foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($data['section_info']['time'][$year][$m])); } } } //*/ //* if(Rules::isAnalysisProjectsSubsection($PROJECT_ID)) { if ($sheetIndex) { $sheet2 = new Worksheet($spreadsheet); $spreadsheet->addSheet($sheet2); } //$sheet2 = new Worksheet($spreadsheet,"Подразделы"); //$spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Подразделы'); $row = 1; foreach ($data['sub'] as $sid => $v) { $subKeys = array_keys($v); $total = $data['totals']['subsections'][$sid]; $array = []; foreach ($data['section'][$pid] as $vv) { if (in_array($vv['name'], $subKeys)) { $array[] = $vv; } } $sheet->setCellValue(CellAddress::fromColumnAndRow(4, $row), 'Время проектирования, ч'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow(8, $row), 'Стоимость проекта, млн. ' . Merakomis::CURRENCY); } $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Подраздел'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Команда'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'РЧ | ОЧ'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); } $row++; foreach ($array as $vv) { $col = 1; $emps = []; foreach ($vv['emps'] as $emp) { if ($vv['emp_hours'][$emp['emp_id']]) { $emps[] = $emp['emp']; } } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $vv['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), implode(", ", $emps)); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $vv['r'] . ' | ' . $vv['o']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($vv['hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($vv['over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($vv['over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($vv['total'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($vv['money_hours']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($vv['money_over1']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($vv['money_over2']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($vv['money_total']))); } $row++; } $col = 1; $total = $data['totals']['subsections'][mb_strtoupper($sid)]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), "Всего"); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), ""); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), ""); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($total['hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($total['over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($total['over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($total['total'])); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($total['money_hours']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($total['money_over1']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($total['money_over2']))); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney(cfloatval($total['money_total']))); } $row++; self::summary($sheet, $row, $sid . ". Распределение времени проектирования подразделов", $code_title, $data['period'], "ч.", $data['sub_graph'][$sid]['time'], true, ); if ($isMoney) { self::summary($sheet, $row, $sid . ". Распределение стоимости проектирования подразделов", $code_title, $data['period'], "ч.", $data['sub_graph'][$sid]['money'], true, ); } $row++; $row++; } $row++; $col = 2; foreach ($data['periods'] as $year => $months) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $year); $col += count($months); } $row++; $col = 2; foreach ($data['periods'] as $year => $months) { foreach ($months as $month) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), Merakomis::getMonth($month)); } } $row++; foreach ($data['subsection_data'] as $name => $v) { $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $name); foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($v[$year][$m]['time'])); } } $row++; } $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), "Всего"); foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($data['subsection_info']['time'][$year][$m])); } } } //*/ //* if(Rules::isAnalysisProjectsTeam($PROJECT_ID)) { if ($sheetIndex) { $sheet2 = new Worksheet($spreadsheet); $spreadsheet->addSheet($sheet2); } //$sheet2 = new Worksheet($spreadsheet,"Команда"); //$spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Команда'); $row = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow(6, $row), 'Время проектирования, ч'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow(10, $row), 'Стоимость проекта, млн. ' . Merakomis::CURRENCY); } $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Архивный'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'ФИО'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Подраздел'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Вовлеченность'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Выработка'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Нагрузка'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Раб.'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх1'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Сверх2'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Всего'); } $row++; uksort($data['data'][$pid], function ($k1, $k2) use ($data, $pid) { return $data['data'][$pid][$k1]['emp_name'] <=> $data['data'][$pid][$k2]['emp_name']; }); foreach ($data['data'][$pid] as $v) { $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['archive'] ? 'Архивный' : ''); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['emp_name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['section']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['x']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['y']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['z']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['hours']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['over1']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['over2']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['total']); if ($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney($v['money_hours'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney($v['money_over1'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney($v['money_over2'])); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $showMoney($v['money_total'])); } $row++; } //*/ //* } $sheet2 = new Worksheet($spreadsheet, "Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; self::summary($sheet, $row, "Информация", $data['project_name'], $data['period'], "", [ $isMoney ? [ 'title' => 'Ср ставка команды', 'value' => $data['per_hour'] . ' ' . Merakomis::CURRENCY . '/ч', ] : null, [ 'title' => 'Проектов в работе', 'value' => $data['project_count'] . ' шт.', ], [ 'title' => 'Рабочих дней по ПК', 'value' => $data['work_days'] . ' д.', ], [ 'title' => 'Рабочих часов по ПК', 'value' => $data['work_hours'] . ' ч.', ], ], ); //*/ } static function writeMyTeam(Spreadsheet $spreadsheet, $data, $options){ $isMoney = Rules::isAnalysisProjectsFinance(); $isShowMoney = $isMoney && Rules::isAnalysisProjectsShowMoney(); $isSummary = !$options['subtype']; $sheet = $spreadsheet->getActiveSheet(); $sheetIndex = 1; $sheet->setTitle('Анализ затрат на проекты — 1'); $sheet->setCellValue('A1','Мои проекты'); //$sections = ['АР', 'КР', 'ИОС', 'СПЕЦ', 'BIM-IT', 'УПР']; $sections = $data['report_sections']; $sectionsCount = count($sections); $isAdmin = Rules::isAdmin(); $myMoneyProjectIds = []; if(!$isAdmin){ $myMoneyProjectIds = Project::getListForMoney(); } $showMoney = function ($pid,$v) use ($isAdmin, $myMoneyProjectIds,$isShowMoney){ if($isAdmin) return $v; else return (in_array($pid,$myMoneyProjectIds)&&$isShowMoney)?$v:'-'; }; uksort($data['projects2'],function ($k1,$k2) use ($data){ $p1 = $data['projects2'][$k1]; $p2 = $data['projects2'][$k2]; return $p1['code']<=>$p2['code']; }); $row = 2; $sheet->setCellValue('A'.$row,'Анализ затрат на проекты - 1'); $row++; $sheet->setCellValue('A'.$row,'Анализ затрат ресурсов (сотрудники, их часы и бюджет) на проекты в заданный промежуток времени.'); $row++;$row++; $INIT_COL = $col = 6; $sheet->setCellValue(CellAddress::fromColumnAndRow($col,$row),'Команда, чел'); $col += $sectionsCount+2; $sheet->setCellValue(CellAddress::fromColumnAndRow($col,$row),'Вермя, ч'); if($isMoney) $sheet->setCellValue(CellAddress::fromColumnAndRow($col+$sectionsCount + 2,$row),'млн. р.'); $row++; $sheet->setCellValue('A'.$row,'Шифр'); $sheet->setCellValue('B'.$row,'Стадия'); $sheet->setCellValue('C'.$row,'Название'); $sheet->setCellValue('D'.$row,'РП'); $col = $INIT_COL; foreach ($sections as $k=>$v){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$v); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Всего'); $col++; foreach ($sections as $k=>$v){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$v); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row), 'Всего'); $col++; if($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row), 'Бюджет'); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Архивный'); $row++; foreach ($data['projects2'] as $pid=>$v){ $sheet->setCellValue('A'.$row,$v['code']); $sheet->setCellValue('B'.$row,$v['step']); $sheet->setCellValue('C'.$row,$v['name']); $sheet->setCellValue('D'.$row,$v['director']['title']); $col = $INIT_COL; foreach ($sections as $k=>$name){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),count($v['sections'][$name]['emps'])?:0); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),count($v['emps_total_count'])?:0); $col++; foreach ($sections as $k=>$name){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$v['sections'][$name]['total']?:0); } /* $sheet->setCellValue('n' . $row, $v['sections'][$sections[0]]['total'] ?: 0); $sheet->setCellValue('o' . $row, $v['sections'][$sections[1]]['total'] ?: 0); $sheet->setCellValue('p' . $row, $v['sections'][$sections[2]]['total'] ?: 0); $sheet->setCellValue('q' . $row, $v['sections'][$sections[3]]['total'] ?: 0); $sheet->setCellValue('r' . $row, $v['sections'][$sections[4]]['total'] ?: 0); $sheet->setCellValue('s' . $row, $v['sections'][$sections[5]]['total'] ?: 0); */ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row), $v['sections']['total'] ?: 0); $col++; if($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row), $showMoney($pid,$v['money'] ?: 0)); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$v['archive']?'Архивный':''); $row++; } $col = $INIT_COL; foreach ($sections as $name){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$data['section_emp_total'][$name]?:0); } /* $sheet->setCellValue('f'.$row,$data['section_emp_total'][$sections[0]]?:0); $sheet->setCellValue('g'.$row,$data['section_emp_total'][$sections[1]]?:0); $sheet->setCellValue('h'.$row,$data['section_emp_total'][$sections[2]]?:0); $sheet->setCellValue('i'.$row,$data['section_emp_total'][$sections[3]]?:0); $sheet->setCellValue('j'.$row,$data['section_emp_total'][$sections[4]]?:0); $sheet->setCellValue('k'.$row,$data['section_emp_total'][$sections[5]]?:0); */ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$data['section_emp_total']['total']?:0); $col++; foreach ($sections as $name){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$data['sections_total'][$name]?:0); } /* $sheet->setCellValue('n'.$row,$data['sections_total'][$sections[0]]?:0); $sheet->setCellValue('o'.$row,$data['sections_total'][$sections[1]]?:0); $sheet->setCellValue('p'.$row,$data['sections_total'][$sections[2]]?:0); $sheet->setCellValue('q'.$row,$data['sections_total'][$sections[3]]?:0); $sheet->setCellValue('r'.$row,$data['sections_total'][$sections[4]]?:0); $sheet->setCellValue('s'.$row,$data['sections_total'][$sections[5]]?:0); */ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$data['sections_total']['total']?:0); $col++; if($isMoney) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row), $data['total_money'] ?: 0); } $row++;$row++; $sheet2 = new Worksheet($spreadsheet,"Анализ затрат на проекты — 2"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $sheet->setCellValue('A'.$row,'Анализ затрат на проекты - 2'); $row++; $sheet->setCellValue('A'.$row,'В таблице представлена сводка часов, затраченных на реализацию выбранных проектов.'); $row++;$row++; $sheet->setCellValue('G'.$row,'Время проектирования, ч'); if($isMoney) { $sheet->setCellValue('K' . $row, 'Стоимость проектирования, млн. ' . Merakomis::CURRENCY); } $row++; $sheet->setCellValue('A'.$row,'Шифр'); $sheet->setCellValue('B'.$row,'Стадия'); $sheet->setCellValue('C'.$row,'Название'); $sheet->setCellValue('D'.$row,'РП'); $sheet->setCellValue('E'.$row,'Команда'); $sheet->setCellValue('F'.$row,'РЧ | ОЧ'); $sheet->setCellValue('G'.$row,'Раб., ч.'); $sheet->setCellValue('H'.$row,'Сверх1., ч.'); $sheet->setCellValue('I'.$row,'Сверх2., ч.'); $sheet->setCellValue('J'.$row,'Всего, ч.'); if($isMoney) { $sheet->setCellValue('K' . $row, 'Раб., ч.'); $sheet->setCellValue('L' . $row, 'Сверх1., ч.'); $sheet->setCellValue('M' . $row, 'Сверх2., ч.'); $sheet->setCellValue('N' . $row, 'Всего, ч.'); } $sheet->setCellValue(($isMoney?'O':'K').$row,'Архивный'); $row++; foreach ($data['projects2'] as $pid=>$v){ $sheet->setCellValue('A'.$row,$v['code']); $sheet->setCellValue('B'.$row,$v['step']); $sheet->setCellValue('C'.$row,$v['name']); $sheet->setCellValue('D'.$row,$v['director']['title']); $sheet->setCellValue('E'.$row,$v['emps_total'].' | '.$v['emps']); $sheet->setCellValue('F'.$row,$v['r'].' | '.$v['o']); $sheet->setCellValue('G'.$row,$v['hours']); $sheet->setCellValue('H'.$row,$v['over1']); $sheet->setCellValue('I'.$row,$v['over2']); $sheet->setCellValue('J'.$row,$v['total']); if($isMoney) { $sheet->setCellValue('K' . $row, $showMoney($pid,$v['money_hours'])); $sheet->setCellValue('L' . $row, $showMoney($pid,$v['money_over1'])); $sheet->setCellValue('M' . $row, $showMoney($pid,$v['money_over2'])); $sheet->setCellValue('N' . $row, $showMoney($pid,$v['money_total'])); } $sheet->setCellValue(($isMoney?'O':'K').$row,$v['archive']?'Архивный':''); $row++; } $row++; $row++; $getTwoGraphs = function($sheet,&$row) use ($data,$isMoney,$showMoney){ $col = 2; foreach ($data['periods'] as $year=>$m){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col,$row),$year); $col+=count($m); } $row++; $col = 2; foreach ($data['periods'] as $year=>$months){ foreach ($months as $m){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),Merakomis::getMonth($m)); } } $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(1,$row),'Время пр-я, ч'); $col = 2; foreach ($data['periods'] as $year=>$months){ foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($data['period_data'][$year][$m]['time'])); } } if($isMoney) { $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(1, $row), 'Стоимость пр-я, млн. ' . Merakomis::CURRENCY); $col = 2; foreach ($data['periods'] as $year => $months) { foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($data['period_data'][$year][$m]['money'])); } } } //$sheet->setCellValue('A'.($row),'Подразделение'); //$sheet->setCellValue('A'.($row),'Время пр-я, ч'); }; if($isSummary){ $sheet2 = new Worksheet($spreadsheet,"Распределение вр. и ст. "); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $subtitle = $isSummary ? 'Все проекты' : ($project ? $project['code_title'] : $data['project_name']); self::summary($sheet, $row, "Распределение времени проектирования разделов", $subtitle, $data['period'], "ч.", $data['graph3'], ); if($isMoney && $isShowMoney) { self::summary($sheet, $row, "Распределение стоимости проектирования разделов", $subtitle, $data['period'], "млн. ₽", $data['graph4'], ); } // Распределение затрат $sheet2 = new Worksheet($spreadsheet,"Распределение затрат"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $getTwoGraphs($sheet,$row); } else { $sheet2 = new Worksheet($spreadsheet,"Проекты"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; foreach ($data['data'] as $pid=>$emps){ $p = $data['project'][$pid]; $sheet->setCellValue('A'.($row++),$p['code_step'].' '.$p['name']); $sheet->setCellValue('A'.($row++),'Подразделы'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка часов, затраченных членами команды проекта на реализацию подразделов.'); $row++; $sheet->setCellValue('A'.($row),'Подраздел'); $sheet->setCellValue('B'.($row),'Команда'); //$sheet->setCellValue('C'.($row),'Неактивны'); $sheet->setCellValue('C'.($row),'РЧ | ОЧ'); $sheet->setCellValue('D'.($row),'Раб., ч.'); $sheet->setCellValue('E'.($row),'Сверх., ч.'); $sheet->setCellValue('F'.($row),'Всего., ч.'); $row++; uksort($data['section'][$pid],function ($k1,$k2) use ($data,$pid){ $p1 = $data['section'][$pid][$k1]; $p2 = $data['section'][$pid][$k2]; return $p1['name']<=>$p2['name']; }); foreach ($data['section'][$pid] as $v){ $x = []; $y = []; foreach ($v['emps'] as $vv){ //$x[] = $vv['emp']; if(!$v['emp_hours'][$vv['emp_id']]) { $y[] = $vv['emp']; } else { $x[] = $vv['emp']; } } $sheet->setCellValue('A'.($row),$v['name']); $sheet->setCellValue('B'.($row),implode(", ",$x)); //$sheet->setCellValue('C'.($row),implode(", ",$y)); $sheet->setCellValue('C'.($row),$v['r'].' | '.$v['o']); $sheet->setCellValue('D'.($row),$v['hours']); $sheet->setCellValue('E'.($row),$v['over']); $sheet->setCellValue('F'.($row),$v['total']); $row++; } $row++; $sheet->setCellValue('A'.($row++),'Разделы'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка часов, затраченных членами команды проекта на реализацию разделов.'); $row++; $sheet->setCellValue('A'.($row),'Раздел'); $sheet->setCellValue('B'.($row),'Команда'); $sheet->setCellValue('C'.($row),'РЧ | ОЧ'); $sheet->setCellValue('D'.($row),'Рабочие, час'); $sheet->setCellValue('E'.($row),'Сверхурочные, час'); $sheet->setCellValue('F'.($row),'Всего, час'); $row++; uksort($data['parents'][$pid],function ($k1,$k2) use ($data,$pid){ $p1 = $data['parents'][$pid][$k1]; $p2 = $data['parents'][$pid][$k2]; return $p1['name']<=>$p2['name']; }); foreach ($data['parents'][$pid] as $v){ $sheet->setCellValue('A'.($row),$v['name']); //$sheet->setCellValue('B'.($row),$data['projects2'][$pid]['emps_total'].' | '.count($v['emps'])); $sheet->setCellValue('B'.($row),count($v['total_emps']).' | '.count($v['emps'])); $sheet->setCellValue('C'.($row),$v['r'].' | '.$v['o']); $sheet->setCellValue('D'.($row),$v['hours']); $sheet->setCellValue('E'.($row),$v['over']); $sheet->setCellValue('F'.($row),$v['total']); $row++; } $row++; $sheet->setCellValue('A'.($row++),'Команда проекта'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка часов, затраченных членами команды проекта, в котором вы являетесь руководителем.'); $row++; $sheet->setCellValue('A'.($row),'ФИО'); $sheet->setCellValue('B'.($row),'Раздел: подраздел'); $sheet->setCellValue('C'.($row),'Вовлеченность'); $sheet->setCellValue('D'.($row),'Выработка'); $sheet->setCellValue('E'.($row),'Нагрузка'); $sheet->setCellValue('F'.($row),'Рабочие, час'); $sheet->setCellValue('G'.($row),'Сверхурочные, час'); $sheet->setCellValue('H'.($row),'Всего, час'); $row++; uksort($emps,function ($k1,$k2) use ($emps){ $p1 = $emps[$k1]; $p2 = $emps[$k2]; return $p1['emp']<=>$p2['emp']; }); foreach ($emps as $emp){ $sheet->setCellValue('A'.($row),$emp['emp']); $sheet->setCellValue('B'.($row),$emp['section']); $sheet->setCellValue('C'.($row),$emp['x']); $sheet->setCellValue('D'.($row),$emp['y']); $sheet->setCellValue('E'.($row),$emp['z']); $sheet->setCellValue('F'.($row),$emp['hours']); $sheet->setCellValue('G'.($row),$emp['over']); $sheet->setCellValue('H'.($row),$emp['total']); $row++; } $row++; } } //---------------- $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; self::summary($sheet, $row, "Информация", $data['project_name'], $data['period'], "", [ [ 'title'=>'Проектов', 'value'=>(count($data['project'])??0).' шт.', ], [ 'title'=>'Сумма РЧ', 'value'=>$data['total_r'].' чел.', ], [ 'title'=>'Сумма ОЧ', 'value'=>$data['total_o'].' чел.', ], [ 'title'=>'Рабочих дней', 'value'=>$data['work_days'].' д.', ], [ 'title'=>'Рабочих часов', 'value'=>$data['work_hours'].' ч.', ], $isMoney?[ 'title'=>'Ставка ч/ч', 'value'=>$data['per_hour'].' р./ч.', ]:null, $isMoney?[ 'title'=>'Всего затрат', 'value'=>$data['total_money'].' млн.р.', ]:null, ], ); self::summary($sheet, $row, "Распределение времени проектирования", $data['project_name'], $data['period'], "%", $data['graph1'] ); self::summary($sheet, $row, "Распределение рабочего времени", $data['project_name'], $data['period'], "ч.", $data['graph2'], true, ); /* $sheet = $spreadsheet->getSheet(1); $col = 'A'; $col2 = 'B'; $row = 1; $sheet->setCellValue($col.$row,'Статистика'); $row++; $row++; $sheet->setCellValue($col.$row++,'Все разделы'); $sheet->setCellValue($col.$row++,$data['project_name']); $sheet->setCellValue($col.$row++,$data['period']); $row++; $sheet->setCellValue($col.$row,'Рабочие часы'); $sheet->setCellValue($col2.$row++,$data['hours']); $sheet->setCellValue($col.$row,'Внеурочные часы'); $sheet->setCellValue($col2.$row++,$data['over']); $sheet->setCellValue($col.$row,'Сумма часов'); $sheet->setCellValue($col2.$row++,$data['total']); $row++; foreach ($data['sections'] as $v){ $sheet->setCellValue($col.$row++,$v['name']); $sheet->setCellValue($col.$row++,$data['project_name']); $sheet->setCellValue($col.$row,'Рабочие часы'); $sheet->setCellValue($col2.$row++,$v['hours']); $sheet->setCellValue($col.$row,'Внеурочные часы'); $sheet->setCellValue($col2.$row++,$v['over']); $sheet->setCellValue($col.$row,'Сумма часов'); $sheet->setCellValue($col2.$row++,$v['total']); $row++; } */ } static function writeMyDepartments(Spreadsheet $spreadsheet, $data, $options){ $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1','Моё подразделение'); $sheet->setCellValue('A2','Нагрузка на подразделения'); $sheet->setCellValue('A3','В таблице представлена нагрузка на подразделения компании, в которых вы являетесь руководителем'); $row = 4; $sheet->setCellValue('A'.($row),'Подразделение'); $sheet->setCellValue('B'.($row),'Команда'); $sheet->setCellValue('C'.($row),'Выработка'); $sheet->setCellValue('D'.($row),'Нагрузка'); $sheet->setCellValue('E'.($row),'Раб., ч.'); $sheet->setCellValue('F'.($row),'Сверх., ч.'); $sheet->setCellValue('G'.($row),'Всего, ч.'); $row++; foreach ($data['dids'] as $dep_id=>$v){ $sheet->setCellValue('A'.($row),$v['title']); $sheet->setCellValue('B'.($row),$v['emp_count'].' | '.$v['emp_work']); $sheet->setCellValue('C'.($row),$v['y']); $sheet->setCellValue('D'.($row),$v['z']); $sheet->setCellValue('E'.($row),$v['hours']); $sheet->setCellValue('F'.($row),$v['over']); $sheet->setCellValue('G'.($row),$v['total']); $row++; } foreach ($data['data'] as $dep_id=>$a){ $dep = $data['departments'][$dep_id]; $sheet->setCellValue('A'.($row++),$dep['name']); $sheet->setCellValue('A'.($row++),'Сотрудники'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка часов, затраченных сотрудниками вашего подразделения, в котором вы являетесь руководителем.'); $row++; $sheet->setCellValue('A'.($row),'ФИО'); $sheet->setCellValue('B'.($row),'Выработка'); $sheet->setCellValue('C'.($row),'Нагрузка '); $sheet->setCellValue('D'.($row),'Проект '); $sheet->setCellValue('E'.($row),'Раб., час '); $sheet->setCellValue('F'.($row),'Сверх., час '); $sheet->setCellValue('G'.($row),'Всего, час '); $sheet->setCellValue('H'.($row),'Итого, час '); $row++; foreach ($a as $emp_id=>$aa){ $i = 0; foreach ($aa as $v){ //$emp_id = $v['id']; $emp_info = $data['emp'][$dep_id][$emp_id]; if(!$i) $sheet->setCellValue('A'.($row),$v['emp']); if(!$i) $sheet->setCellValue('B'.($row),$emp_info['y']); if(!$i) $sheet->setCellValue('C'.($row),$emp_info['z']); //$sheet->setCellValue('B'.($row),$v['staffing']); $sheet->setCellValue('D'.($row),$v['code']); //$sheet->setCellValue('D'.($row),implode(", ",$data['emp_roles'][$dep_id][$emp_id])); $sheet->setCellValue('E'.($row),$v['hours']); $sheet->setCellValue('F'.($row),$v['over']); $sheet->setCellValue('G'.($row),$v['total']); if(!$i) $sheet->setCellValue('H'.($row),$data['emp'][$dep_id][$emp_id]['total']); $row++; $i++; } } $row++; $sheet->setCellValue('A'.($row++),'Анализ нерабочих дней сотрудников вашего подразделения'); $sheet->setCellValue('A'.($row++),'Сводная таблица отсутствия на рабочем месте. Данные представляются за выбранный в шапке страницы период или за все время работы, если период явно не задан.'); $sheet->setCellValue('A'.($row),'ФИО'); $sheet->setCellValue('B'.($row),'Должность'); $sheet->setCellValue('C'.($row),'Шифр'); $sheet->setCellValue('D'.($row),'Определения'); $sheet->setCellValue('E'.($row),'Всего, дн'); $sheet->setCellValue('F'.($row),'Итого, дн'); $row++; foreach ($data['absence'][$dep_id] as $aa){ $i = 0; foreach ($aa as $v) { $emp_id = $v['id']; if(!$i) $sheet->setCellValue('A' . ($row), $v['name']); $sheet->setCellValue('B' . ($row), implode(", ", $v['roles'])); $sheet->setCellValue('C' . ($row), $v['code']); $sheet->setCellValue('D' . ($row), $v['title']); $sheet->setCellValue('E' . ($row), $v['count']); if(!$i) $sheet->setCellValue('F' . ($row), $data['emp'][$dep_id][$emp_id]['absence']); $row++; $i++; } } $row++; } //------------------ foreach ($data['total'] as $dep_id=>$total) { $dep = $data['departments'][$dep_id]['name']; self::summary($sheet, $row, "Распределение времени между проектами", $dep.', '.$data['project_name'], $data['period'], "%", $total['graph1'] ); self::summary($sheet, $row, "Распределение рабочего времени", $dep.', '.$data['project_name'], $data['period'], "ч.", $total['graph2'], true ); self::summary($sheet, $row, "Распределение причин отсутствия", $dep.', '.$data['project_name'], $data['period'], "д", $total['graph3'], true ); } /* $sheet = $spreadsheet->getSheet(1); $col = 'A'; $col2 = 'B'; $row = 1; $sheet->setCellValue($col.$row,'Статистика'); $row++; $row++; foreach ($data['total'] as $dep_id=>$a) { $dep = $data['departments'][$dep_id]; $total = $data['total'][$dep_id]; $sheet->setCellValue($col . $row++, $dep['name']); $sheet->setCellValue($col . $row++, $data['project_name']); $sheet->setCellValue($col . $row++, $data['period']); $row++; $sheet->setCellValue($col . $row, 'Рабочие часы'); $sheet->setCellValue($col2 . $row++, $total['hours']); $sheet->setCellValue($col . $row, 'Внеурочные часы'); $sheet->setCellValue($col2 . $row++, $total['over']); $sheet->setCellValue($col . $row, 'Сумма часов'); $sheet->setCellValue($col2 . $row++, $total['total']); $row++; $row++; } */ } static function writeMyCompany(Spreadsheet $spreadsheet, $data, $options){ $isAll = ($options['type']==7); $sheetIndex = 1; $isAll = true; $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Нагрузка на подразделения'); $sheet->setCellValue('A1',$data['subtitle']); $sheet->setCellValue('A1',"Нагрузка на подразделения"); $row = 2; uksort($data['dids'],function ($k1,$k2) use ($data){ $p1 = $data['dids'][$k1]; $p2 = $data['dids'][$k2]; return $p1['title']<=>$p2['title']; }); if($isAll){ $row++; $sheet->setCellValue('A'.($row++),'Нагрузка на подразделения'); $sheet->setCellValue('A'.($row++),'В таблице представлена нагрузка на подразделения компании.'); $row++; $sheet->setCellValue('A'.($row),'Подразделение'); $sheet->setCellValue('B'.($row),'Команда'); $sheet->setCellValue('C'.($row),'Выработка'); $sheet->setCellValue('D'.($row),'Нагрузка'); $sheet->setCellValue('E'.($row),'Раб., ч.'); $sheet->setCellValue('F'.($row),'Сверх., ч.'); $sheet->setCellValue('G'.($row),'Всего, ч.'); $row++; foreach ($data['dids'] as $v){ $sheet->setCellValue('A'.($row),$v['title']); $sheet->setCellValue('B'.($row),$v['emp_count'].' | '.$v['emp_work']); $sheet->setCellValue('C'.($row),$v['y']); $sheet->setCellValue('D'.($row),$v['z']); $sheet->setCellValue('E'.($row),$v['hours']); $sheet->setCellValue('F'.($row),$v['over']); $sheet->setCellValue('G'.($row),$v['total']); $row++; } } // Распределение сотрудников $dep_ids = []; $sheet2 = new Worksheet($spreadsheet,"Распределение сотрудников "); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $col = 6; foreach ($data['depReport'] as $v){ $d = $v['data']; if(count($v['a'])) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col, $row), $d['short']); } $col+=count($v['a']); } $col = 1; $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Архивный'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Шифр'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Стадия'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'Название'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),'РП'); foreach ($data['depReport'] as $v){ $d = $v['data']; if(count($v['a'])){ foreach ($v['a'] as $a){ $dep_ids[] = $a['id']; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $a['short']); } } else { $dep_ids[] = $v['id']; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $d['short']); } //$col++; } $row++; uksort($data['pro_nom'],function ($k1,$k2) use ($data){ $p1 = $data['workload'][$k1]; $p2 = $data['workload'][$k2]; return $p1['code']<=>$p2['code']; }); foreach ($data['pro_nom'] as $pid=>$v){ $col = 1; $w = $data['workload'][$pid]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$w['archive']?'Архивный':''); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$w['code']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$w['step']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$w['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$w['director_name']); foreach($dep_ids as $did){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),cfloatval($data['depReportData'][$did]['projects'][$pid]['per_emp'])); } $row++; } $col = 6; foreach($dep_ids as $did){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),cfloatval($data['depReportData'][$did]['total'])); } // Нагрузка на сотрудников - 1 $sheet2 = new Worksheet($spreadsheet,"Нагрузка на сотрудников - 1"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $sheet->setCellValue('A'.($row++),'Нагрузка на сотрудников - 1'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка по сотрудникам компании за выбранный период времени.'); $row++; $sheet->setCellValue('A'.($row),'Архивный'); $sheet->setCellValue('B'.($row),'Шифр'); $sheet->setCellValue('C'.($row),'Стадия'); $sheet->setCellValue('D'.($row),'Название'); $sheet->setCellValue('E'.($row),'РП'); $col = 6; foreach ($data['data'] as $emp_id=>$emp){ $cell = CellAddress::fromColumnAndRow($col,$row); $sheet->setCellValue($cell,$emp['name']); $col++; } $row++; uksort($data['workload'],function ($k1,$k2) use ($data){ $p1 = $data['workload'][$k1]; $p2 = $data['workload'][$k2]; return $p2['code']<=>$p1['code']; }); foreach ($data['workload'] as $k=>$v){ $sheet->setCellValue('A'.($row),$v['archive']?'Архивный':''); $sheet->setCellValue('B'.($row),$v['code']); $sheet->setCellValue('C'.($row),$v['step']); $sheet->setCellValue('D'.($row),$v['name']); $sheet->setCellValue('E'.($row),$v['director_name']); $col = 6; foreach ($data['data'] as $emp){ $emp_id = $emp['id']; $emp = $v['emp'][$emp_id]; $value = $emp['value']?:0; $cell = CellAddress::fromColumnAndRow($col,$row); $sheet->setCellValue($cell,$value); self::fill($sheet,$cell,self::percentBlue($emp['percent'])); $col++; } $row++; } $row++; // Нагрузка на сотрудников - 2 $sheet2 = new Worksheet($spreadsheet,"Нагрузка на сотрудников - 2"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $sheet->setCellValue('A'.($row++),'Нагрузка на сотрудников - 2'); $sheet->setCellValue('A'.($row++),'В таблице представлена сводка по сотрудникам компании за выбранный период времени.'); $row++; $sheet->setCellValue('A'.($row),'ФИО'); $sheet->setCellValue('B'.($row),'Должность'); $sheet->setCellValue('C'.($row),'Подразделение'); $sheet->setCellValue('D'.($row),'Проект'); $sheet->setCellValue('E'.($row),'Выработка'); $sheet->setCellValue('F'.($row),'Нагрузка'); $sheet->setCellValue('G'.($row),'Раб., час '); $sheet->setCellValue('H'.($row),'Сверх1., час '); $sheet->setCellValue('I'.($row),'Сверх2., час '); $sheet->setCellValue('J'.($row),'Всего, час '); $sheet->setCellValue('K'.($row),'Архивный'); $row++; foreach ($data['data'] as $e){ $i = 0; $projects = []; foreach ($e['projects'] as $v){ if($v['archive']) continue; $projects[]= $v['name']; //$sheet->setCellValue('D'.($row),$v['name']); //$sheet->setCellValue('D'.($row),$v['role']); //$sheet->setCellValue('E'.($row),$v['info']['hours']); //$sheet->setCellValue('F'.($row),$v['info']['over']); //if(!$i) $sheet->setCellValue('G'.($row),$v['info']['total']); //$i++; //$row++; } $sheet->setCellValue('A'.($row),$e['name']); $sheet->setCellValue('B'.($row),is_array($e['staffing'])?implode(", ",$e['staffing']):$e['staffing']); $sheet->setCellValue('C'.($row),$e['department']); $sheet->setCellValue('D'.($row),implode(", ",$projects)); $sheet->setCellValue('E'.($row),$e['y']); $sheet->setCellValue('F'.($row),$e['z']); $sheet->setCellValue('G'.($row),$e['hours']); $sheet->setCellValue('H'.($row),$e['over1']); $sheet->setCellValue('I'.($row),$e['over2']); $sheet->setCellValue('J'.($row),$e['info']['total']); $sheet->setCellValue('K'.($row),$e['archive']?'Архивный':''); $row++; } $row++; $row++; // Нагрузка на сотрудников - 3 if(Rules::isAnalysisCompanyEmp3()) { $sheet2 = new Worksheet($spreadsheet, "Нагрузка на сотрудников - 3"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Архивный'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'ФИО'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Должность'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Подразделение'); foreach ($data['contract']['names'] as $v) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v); } $row++; uksort($data['contract']['data'], function ($k1, $k2) use ($data) { return $data['contract']['data'][$k1]['name'] <=> $data['contract']['data'][$k2]['name']; }); foreach ($data['contract']['data'] as $v) { $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['archive'] ? 'Архивный' : ''); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $v['department']); foreach ($data['contract']['names'] as $name) { $emp = $v['contracts'][$name]; $sheet->setCellValue($cell = CellAddress::fromColumnAndRow($col++, $row), cfloatval($emp['value'])); self::fill($sheet, $cell, self::percentBlue($emp['percent'])); } $sheet->setCellValue($cell = CellAddress::fromColumnAndRow($col++, $row), $v['total']); self::fill($sheet, $cell, self::percentBlue($v['percent'])); $row++; } $col = 5; foreach ($data['contract']['names'] as $name) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['contract']['total'][$name]); } } /* $sheet2 = new Worksheet($spreadsheet,"Анализ нераб. дней сотрудников"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $sheet->setCellValue('A'.($row++),'Анализ нерабочих дней сотрудников'); $sheet->setCellValue('A'.($row++),'Сводная таблица отсутствия на рабочем месте. Данные представляются за выбранный в шапке страницы период или за все время работы, если период явно не задан.'); $row++; $sheet->setCellValue('A'.($row),'ФИО'); $sheet->setCellValue('B'.($row),'Шифр'); $sheet->setCellValue('C'.($row),'Определения '); $sheet->setCellValue('D'.($row),'Всего, дн '); $sheet->setCellValue('E'.($row),'Итого, дн '); $row++; foreach ($data['absence'] as $e){ $emp_id = $e['id']; $sheet->setCellValue('A'.($row),$e['name']); $sheet->setCellValue('E'.($row),$e['total']); foreach ($e['a'] as $v){ $sheet->setCellValue('B'.($row),$v['code']); $sheet->setCellValue('C'.($row),$v['name']); $sheet->setCellValue('D'.($row),$v['count']); $row++; } } */ $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; self::summary($sheet, $row, "Информация", $data['project_name'].($data['department_names']?:''), $data['period'], "", [ [ 'title'=>'Проектов', 'value'=>count($data['graph1']).' шт.', ], [ 'title'=>'Штат', 'value'=>count(array_keys($data['data'])).' чел.', ], [ 'title'=>'Рабочих дней', 'value'=>$data['work_days'].' д.', ], [ 'title'=>'Рабочих часов', 'value'=>$data['work_hours'].' ч.', ], ] ); self::summary($sheet, $row, "Распределение времени между проектами", $data['project_name'].($data['department_names']?', '.$data['department_names']:''), $data['period'], "%", $data['graph1'] ); self::summary($sheet, $row, "Распределение рабочего времени", $data['project_name'].($data['department_names']?', '.$data['department_names']:''), $data['period'], "ч.", $data['graph2'], true ); /* self::summary($sheet, $row, "Распределение причин отсутствия", $data['project_name'].($data['department_names']?', '.$data['department_names']:''), $data['period'], "д", $data['graph3'], true ); */ //----------- /* $sheet = $spreadsheet->getSheet(1); $col = 'A'; $col2 = 'B'; $row = 1; $sheet->setCellValue($col.$row,'Статистика'); $row++; $row++; $sheet->setCellValue($col . $row++, $data['stat_subtitle']); $sheet->setCellValue($col . $row++, $data['project_name']); $sheet->setCellValue($col . $row++, $data['period']); $row++; $sheet->setCellValue($col . $row, 'Рабочие часы'); $sheet->setCellValue($col2 . $row++, $data['hours']); $sheet->setCellValue($col . $row, 'Внеурочные часы'); $sheet->setCellValue($col2 . $row++, $data['over']); $sheet->setCellValue($col . $row, 'Сумма часов'); $sheet->setCellValue($col2 . $row++, $data['total']); $row++; $row++; */ } static function brightenColor($hex, $percent) { // Удалить символ #, если он есть $hex = ltrim($hex, '#'); // Разделить цвет на компоненты RGB $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); // Увеличить яркость $r = min(255, $r + (1-$percent / 100) * (255 - $r)); $g = min(255, $g + (1-$percent / 100) * (255 - $g)); $b = min(255, $b + (1-$percent / 100) * (255 - $b)); // Вернуть цвет в формате HEX return str_pad(dechex($r), 2, '0', STR_PAD_LEFT) . str_pad(dechex($g), 2, '0', STR_PAD_LEFT) . str_pad(dechex($b), 2, '0', STR_PAD_LEFT); } static function percentBlue($percent){ return self::brightenColor('8aa0b2',$percent); } static function percentBrown($percent){ return self::brightenColor('bd9768',$percent); } static function fill($sheet,$cell,$color){ $sheet->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($color); } static function writeMyYear(Spreadsheet $spreadsheet, $data, $options){ $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Сводка часов за год'); $sheetIndex = 1; $isMoney = $data['is_money']; $isAdmin = Rules::isAdmin(); $myMoneyProjectIds = []; if(!$isAdmin){ $myMoneyProjectIds = Project::getListForMoney(); } $showMoney = function ($pid,$v) use ($isAdmin, $myMoneyProjectIds){ if($isAdmin) return $v; else return in_array($pid,$myMoneyProjectIds)?$v:'-'; }; $keys = [ 'time'=>[ 't'=>'Сводка часов за календарный год', 't2'=>'Анализ затрат времени на проекты за заданный календарный год', ], 'money'=>[ 't'=>'Сводка затрат за календарный год', 't2'=>'Анализ затрат бюджета на проекты за заданный календарный год', ], ]; if(!$isMoney){ unset($keys['money']); } $isKeyMoney = false; foreach ($keys as $key=>$info) { if($key=='money'){ $isKeyMoney = true; $sheet2 = new Worksheet($spreadsheet,"Сводка затрат за год"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); } $sheet->setCellValue('A1','Мои проекты: годовой отчёт'); $row = 3; uksort($data[$key]['project'],function ($k1,$k2) use ($data,$key){ $p1 = $data[$key]['project'][$k1]['data']; $p2 = $data[$key]['project'][$k2]['data']; return $p1['code']<=>$p2['code']; }); $sheet->setCellValue('A'.$row,$info['t']); $row++; $sheet->setCellValue('A'.$row,$info['t2']); $row++; $row++; $sheet->setCellValue('E' . $row, $data['year'] . ' г. Время, ч'); $row++; $sheet->setCellValue('A' . $row, 'Шифр'); $sheet->setCellValue('B' . $row, 'Стадия'); $sheet->setCellValue('C' . $row, 'Название'); $sheet->setCellValue('D' . $row, 'РП'); $sheet->setCellValue('E' . $row, 'Янв'); $sheet->setCellValue('F' . $row, 'Фев'); $sheet->setCellValue('G' . $row, 'Мар'); $sheet->setCellValue('H' . $row, 'Апр'); $sheet->setCellValue('I' . $row, 'Май'); $sheet->setCellValue('J' . $row, 'Июн'); $sheet->setCellValue('K' . $row, 'Июл'); $sheet->setCellValue('L' . $row, 'Авг'); $sheet->setCellValue('M' . $row, 'Сен'); $sheet->setCellValue('n' . $row, 'Окт'); $sheet->setCellValue('o' . $row, 'Ноя'); $sheet->setCellValue('p' . $row, 'Дек'); $sheet->setCellValue('q' . $row, 'Всего'); $sheet->setCellValue('r' . $row, 'Архивный'); $row++; foreach ($data[$key]['project'] as $pid => $v) { $p = $v['data']; $sheet->setCellValue('a' . $row, $p['code']); $sheet->setCellValue('b' . $row, $p['step']); $sheet->setCellValue('c' . $row, $p['name']); $sheet->setCellValue('d' . $row, $p['director_name']); $col = 5; for ($i = 1; $i <= 12; $i++) { $cell = CellAddress::fromColumnAndRow($col, $row); $value = $v['time'][$i]['value'] ?: '0'; $color = self::percentBlue($v['time'][$i]['percent']); if($isKeyMoney) { $value = $showMoney($pid, $value); if($value=='-') $color = self::percentBlue(0); } $sheet->setCellValue($cell, $value); $sheet->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($color); $col++; } $cell = CellAddress::fromColumnAndRow($col++, $row); $color = self::percentBrown($v['percent']); $value = $v['total'] ?: '0'; if($isKeyMoney) { $value = $showMoney($pid, $value); if($value=='-') $color = self::percentBlue(0); } $sheet->setCellValue($cell, $value); $sheet->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($color); $cell = CellAddress::fromColumnAndRow($col, $row); $sheet->setCellValue($cell, $p['archive']?'Архивный':''); $row++; } $col = 5; for ($i = 1; $i <= 12; $i++) { $cell = CellAddress::fromColumnAndRow($col, $row); $sheet->setCellValue($cell, $data[$key]['month'][$i]['value'] ?: '0'); $color = self::percentBlue($data[$key]['month'][$i]['percent']); $sheet->getStyle($cell)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($color); $col++; } $cell = CellAddress::fromColumnAndRow($col, $row); $sheet->setCellValue($cell, $data[$key]['total'] ?: '0'); $row++; $row++; } $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 0; $period = $data['year'].' г.'; self::summary($sheet, $row, "Информация", '', $period, "", [ ['value'=>$data['total']['projects'],'title'=>'Проектов'], $isMoney ? ['value'=>$data['total']['per_hour'],'title'=>'Ставка ч/ч'] : null, ['value'=>$data['total']['work_hours'],'title'=>'Рабочих часов по ПК'], //['value'=>$data['total']['hours'],'title'=>'Всего часов'], //['value'=>$data['total']['total'],'title'=>'Всего затрат'], ] ); self::summary($sheet, $row, "Распределение времени между проектами", '', $period, "%", $data['graph1'] ); self::summary($sheet, $row, "Распределение времени по месяцам", '', $period, "%", $data['graph2'] ); } static function summary(&$sheet,&$row,$title,$subtitle,$period,$dim,$data,$isTotal = false){ $row++; $sheet->setCellValue('A' . $row++, $title); $sheet->setCellValue('A' . $row++, $subtitle); $total = 0; foreach ($data as $k=>$v){ $sheet->setCellValue('A' . $row, $v['title']); $sheet->setCellValue('B' . $row, $v['value'].($dim?' '.$dim:'')); $total+=$v['value']; $row++; } if($isTotal){ $sheet->setCellValue('A' . $row, "Итого"); $sheet->setCellValue('B' . $row, $total.($dim?' '.$dim:'')); $row++; } $row++; $sheet->setCellValue('A' . $row++, $period); } static function writeStaff(Spreadsheet $spreadsheet, $data, $options){ $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Сводные данные'); $sheetIndex = 1; //* $sortStaff = function($k1,$k2)use($data){ $v1 = trim($data['emp'][$k1]['name']); $v2 = trim($data['emp'][$k2]['name']); return $v1<=>$v2; }; uksort($data['stat1'],$sortStaff); uksort($data['stat2'],$sortStaff); uksort($data['stat3'],$sortStaff); uksort($data['stat4'],$sortStaff); //*/ //* $row = 1; $heads = [ 'ФИО', 'Должность', 'Подразделение', 'Локация', 'Юр. лицо', 'Удалёнка', 'Вид', 'Начало', 'Пол', 'Стаж', 'Возраст', 'Архивный', ]; foreach ($heads as $k=>$v){ $cell = CellAddress::fromColumnAndRow($k+1,$row); $sheet->setCellValue($cell,$v); } $row++; foreach ($data['stat1'] as $emp_id){ $col = 1; $emp = $data['emp'][$emp_id]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['city']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['org']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['freelance']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['org_type']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['hire']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['sex']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['work_period']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['age']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),$emp['archive']?'Архивный':''); $row++; } //*/ /* $sheet2 = new Worksheet($spreadsheet,"Заработная плата и ставка"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $heads = [ 'ФИО', 'Должность', 'Подразделение', 'Локация', 'Юр. лицо', 'ЗП, ₽/мес.', 'Ставка, ₽/ч', ]; foreach ($heads as $k=>$v){ $cell = CellAddress::fromColumnAndRow($k+1,$row); $sheet->setCellValue($cell,$v); } $row++; foreach ($data['stat2'] as $emp_id) { $col = 1; $emp = $data['emp'][$emp_id]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['city']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['org']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['salary']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['per_hour']); $row++; } //*/ //* $sheet2 = new Worksheet($spreadsheet,"Информация о детях"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $heads = [ 'ФИО', 'Должность', 'Подразделение', 'Локация', 'Дети', 'Архивный', ]; foreach ($heads as $k=>$v){ $cell = CellAddress::fromColumnAndRow($k+1,$row); $sheet->setCellValue($cell,$v); } $row++; foreach ($data['stat3'] as $emp_id) { $col = 1; $emp = $data['emp'][$emp_id]; $children = []; foreach ($emp['children'] as $vv){ $children[] = $vv['name'].($vv['age'] ? ' ('.$vv['age'].')':''); } $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['city']); //$sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['org']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), implode(", ",$children)); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['archive']?'Архивный':''); $row++; } //*/ //* $sheet2 = new Worksheet($spreadsheet,"Аттестация сотрудников"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $heads = [ 'ФИО', 'Должность', 'Подразделение', 'Локация', 'Юр. лицо', 'НОПРИЗ', 'НОСТРОЙ', 'Ростехнадзор', 'Архивный', ]; foreach ($heads as $k=>$v){ $cell = CellAddress::fromColumnAndRow($k+1,$row); $sheet->setCellValue($cell,$v); } $row++; foreach ($data['stat4'] as $emp_id) { $col = 1; $emp = $data['emp'][$emp_id]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['city']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['org']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['nopriz']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['nostroi']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['technadzor']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['archive']?'Архивный':''); $row++; } //*/ //* $sheet2 = new Worksheet($spreadsheet,"Анализ нерабочих дней"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $heads = [ 'ФИО', 'Должность', 'Подразделение', 'Шифр', 'Определение', 'Всего, дн', 'Итого, дн', 'Архивный', ]; foreach ($heads as $k=>$v){ $cell = CellAddress::fromColumnAndRow($k+1,$row); $sheet->setCellValue($cell,$v); } $row++; foreach ($data['absence'] as $i) { $col = 1; $emp = $data['emp'][$i['id']]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $i['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $emp['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col+3, $row), $i['total']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col+4, $row), $emp['archive']?'Архивный':''); $initCol = $col; foreach ($i['a'] as $vv){ $col = $initCol; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $vv['code']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $vv['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $vv['count']); $row++; } $row++; } //*/ //* $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; //*/ self::summary($sheet, $row, "Информация", $data['filter_text'], $data['period'], "", [ ['value'=>$data['stat']['emps'].' чел.', 'title'=>'Штат'], //['value'=>$data['stat']['salary'].' ₽.', 'title'=>'Фонд ЗП (gross)'], // ['value'=>$data['stat']['per_hour'].' ₽/ч.', 'title'=>'Средняя ставка'], ['value'=>$data['stat']['age'].' г.', 'title'=>'Средний возраст'], ['value'=>$data['stat']['work'].' г.', 'title'=>'Средний стаж'], ['value'=>$data['stat']['hire'].' чел.', 'title'=>'Принято'], ['value'=>$data['stat']['archive'].' чел.', 'title'=>'Уволено'], ['value'=>$data['stat']['ssch'].' чел.', 'title'=>'ССЧ'], ['value'=>$data['stat']['flow'].'%', 'title'=>'Текучесть'], ] ); } static function writeFot(Spreadsheet $spreadsheet, $data, $options){ $sheetIndex = 1; $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('ФОТ'); $row = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow(7, $row), 'Средние'); $sheet->setCellValue(CellAddress::fromColumnAndRow(9, $row), 'Абсолютные'); $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(1, $row), 'ФИО'); $sheet->setCellValue(CellAddress::fromColumnAndRow(2, $row), 'Должность'); $sheet->setCellValue(CellAddress::fromColumnAndRow(3, $row), 'Подразделение'); $sheet->setCellValue(CellAddress::fromColumnAndRow(4, $row), 'Локация'); $sheet->setCellValue(CellAddress::fromColumnAndRow(5, $row), 'Юр. лицо'); $sheet->setCellValue(CellAddress::fromColumnAndRow(6, $row), 'Вид'); $sheet->setCellValue(CellAddress::fromColumnAndRow(7, $row), 'ФОТ, ₽'); $sheet->setCellValue(CellAddress::fromColumnAndRow(8, $row), 'Ставка, ₽/ч'); $sheet->setCellValue(CellAddress::fromColumnAndRow(9, $row), 'ФОТ, ₽'); $sheet->setCellValue(CellAddress::fromColumnAndRow(10, $row), 'Ст-ть пр-я, ₽'); $sheet->setCellValue(CellAddress::fromColumnAndRow(11, $row), 'Архивный'); $row++; uksort($data['data'],function ($k1,$k2) use ($data){ $v1 = trim($data['data'][$k1]['name']); $v2 = trim($data['data'][$k2]['name']); return $v1<=>$v2; }); foreach ($data['data'] as $emp_id=>$v) { $sheet->setCellValue(CellAddress::fromColumnAndRow(1, $row), $v['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow(2, $row), $v['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow(3, $row), $v['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow(4, $row), $v['city']); $sheet->setCellValue(CellAddress::fromColumnAndRow(5, $row), $v['org']); $sheet->setCellValue(CellAddress::fromColumnAndRow(6, $row), $v['org_type']); $sheet->setCellValue(CellAddress::fromColumnAndRow(7, $row), cfloatval( $v['avg']['fot'])); $sheet->setCellValue(CellAddress::fromColumnAndRow(8, $row), cfloatval( $v['avg']['per_hour'])); $sheet->setCellValue(CellAddress::fromColumnAndRow(9, $row), cfloatval( $v['total'])); $sheet->setCellValue(CellAddress::fromColumnAndRow(10, $row), cfloatval( $v['money'])); $sheet->setCellValue(CellAddress::fromColumnAndRow(11, $row), $v['archive']?'Архивный':''); $row++; } $sheet2 = new Worksheet($spreadsheet,"Динамика ФОТ"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; $col = 2; foreach ($data['periods'] as $year=>$m){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col,$row),$year); $col+=count($m); } $row++; $col = 2; foreach ($data['periods'] as $year=>$months){ foreach ($months as $month=>$m){ $sheet->setCellValue(CellAddress::fromColumnAndRow($col++,$row),Merakomis::getMonth($month)); } } $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(1,$row),'ФОТ, млн. '.Merakomis::CURRENCY); $col = 2; foreach ($data['periods'] as $year=>$months){ foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($m['fot'])); } } $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(1,$row),'Стоимость пр-я, млн. '.Merakomis::CURRENCY); $col = 2; foreach ($data['periods'] as $year=>$months){ foreach ($months as $m) { $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), cfloatval($m['money'])); } } $sheet2 = new Worksheet($spreadsheet,"Статистика"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; self::summary($sheet, $row, "Информация", $data['filter_text'], $data['period'], "", [ [ 'title'=>'Штат', 'value'=>count($data['data']).' чел.', ], [ 'title'=>'Средний ФОТ', 'value'=>$data['totals']['avg']['fot'].' '.Merakomis::CURRENCY, ], [ 'title'=>'Средняя ставка', 'value'=>$data['totals']['avg']['per_hour'].' '.Merakomis::CURRENCY.'/ч', ], [ 'title'=>'Абсолютный ФОТ', 'value'=>$data['totals']['total'].' '.Merakomis::CURRENCY, ], [ 'title'=>'Стоимость пр-я', 'value'=>$data['totals']['money'].' '.Merakomis::CURRENCY, ], ] ); } static function writeMoneyFot(Spreadsheet $spreadsheet, $data,$options) { $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('ФОТ'); $row = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow(2, $row), 'Бюджет, млн. Р'); $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Бюджет'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['prevYear'].' '.$data['prevMonth']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['year'].' '.$data['month']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Флаг'); $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Бюджет'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['budget']['other']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['budget']['edit']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['budget']['mark']?"Изм":"Ок"); $row++; $row++; $sheet->setCellValue(CellAddress::fromColumnAndRow(4, $row), 'ЗП, Р'); $sheet->setCellValue(CellAddress::fromColumnAndRow(9, $row), 'ФОТ, Р'); $sheet->setCellValue(CellAddress::fromColumnAndRow(11, $row), 'Ставка, Р/ч'); $row++; $col = 1; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'ФИО'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Должность'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Подразделение'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['prevYear'].' '.$data['prevMonth']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['year'].' '.$data['month']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Локация'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Удалёнка'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Юр. лицо'); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['prevYear'].' '.$data['prevMonth']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['year'].' '.$data['month']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['prevYear'].' '.$data['prevMonth']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $data['year'].' '.$data['month']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), 'Флаг'); uksort($data['data'],function ($k1,$k2) use ($data){ $key_y1 = $data['year'] . $data['month']; $emp1 = $data['data'][$k1][$key_y1]['name']; $emp2 = $data['data'][$k2][$key_y1]['name']; return $emp1<=>$emp2; }); $format = function($v){ return $v?number_format($v,2,',',' '):'0.00'; }; foreach ($data['data'] as $v) { $row++; $col = 1; $key_y1 = $data['year'] . $data['month']; $key_y2 = $data['prevYear'] . $data['prevMonth']; $y1 = $v[$key_y1]; $y2 = $v[$key_y2]; $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['name']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['staffing']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['department']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['fzp']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['fzp']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['location']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['freelance']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['org_type']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['fot']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['fot']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y2['per_hour']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['per_hour']); $sheet->setCellValue(CellAddress::fromColumnAndRow($col++, $row), $y1['mark']); } } static function project(){ if(!Emp::$IS_AUTH) exit; $pid = intval($_GET['id']); $project = Project::getByID($pid); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle('Информация о проекте'); $sheetIndex = 1; $name = Project::getCode($project)."_".$project[Project::$NAME]; $sheet->setCellValue('A1',$name); $sheet->setCellValue('A2','Информация о проекте'); $sheet->setCellValue('A3','Карточка проекта, в разработке которого вы принимаете участие'); $row = 5; $p = Project::format($project); $data = [ 'Руководитель проекта' => $p['director'], 'ГИП' => $p['gip'], 'Заказчик' => $p['client'], 'Юр. лицо' => $p['org'], 'Адрес' => $p['address'], 'Папка проекта' => $p['link'], 'Папка договора' => $p['doc_folder'], 'Начало работ по договору' => $p['date'], 'Окончание работ по договору' => $p['date_end'], 'Шифр' => $p['code'], 'Статус' => $p['status'], 'Стадия (тип) проекта' => $p['step'], 'Разделы: подраздел' => implode(", ",$p['sections']), 'Типология' => $p['obj_types'], 'Общая площадь, м2' => $p['area'], 'Строительный объем, м3' => $p['volume'], 'Максимальная высота, м' => $p['height'], 'Архивный' => $p['archive']?'Да':'Нет', // 'Дата архивации' => $p['archive_date'], // 'Описание' => $p['text'], ]; if($p['archive']){ $data['Дата архивации'] = $p['archive_date']; } $data['Описание'] = $p['text']; foreach ($data as $k=>$v){ $sheet->setCellValue('A'.$row, $k); $sheet->setCellValue('B'.$row, $v); $row++; } $row++; $row++; $sheet2 = new Worksheet($spreadsheet,"Команда проекта"); $spreadsheet->addSheet($sheet2); $spreadsheet->setActiveSheetIndex($sheetIndex++); $sheet = $spreadsheet->getActiveSheet(); $row = 1; /* $sheet->setCellValue('A'.($row++),'Команда проекта'); $sheet->setCellValue('A'.($row++),'Контакт-лист команды проекта'); $row++; $sheet->setCellValue('A'.($row),'Сотрудник'); $sheet->setCellValue('B'.($row),'Раздел: подраздел'); $sheet->setCellValue('C'.($row),'Skype'); $sheet->setCellValue('D'.($row),'Email'); $sheet->setCellValue('E'.($row),'Телефон'); $row++; $r = Member::select([ \Query::LEFT_JOINS => [ [Emp::$table_name,Emp::$ID,Member::$EMP] ], \Query::WHERE => new \Where(\Where::_and([ \Where::_operator(Member::$TEAM,'=',$project[Project::$ID]), ])) ]); while($l = \DB::fetch($r)){ $section = Section::getFullName( Section::getByID(intval($l[Member::$SECTION])) ); $sheet->setCellValue('A'.($row),$l[Emp::$NAME]); $sheet->setCellValue('B'.($row),$section); $sheet->setCellValue('C'.($row),$l[Emp::$SKYPE]); $sheet->setCellValue('D'.($row),$l[Emp::$EMAIL]); $sheet->setCellValue('E'.($row),$l[Emp::$PHONE]); $row++; } */ $team = json_decode($_POST['team'],true); $columns = $team['columns']; $rows = $team['rows']; foreach ($columns as $k=>$col){ $sheet->setCellValue(CellAddress::fromColumnAndRow($k+1,$row),$col['name']); } $row++; foreach ($rows as $member){ forEach($member['data'] as $k=>$v){ $value = $v['value']; if(is_array($value)) $value = $value['name']; $sheet->setCellValue(CellAddress::fromColumnAndRow($k+1,$row),$value); } $row++; } //* $writer = new Xlsx($spreadsheet); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$name.'.xlsx"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); //*/ } static function contractor(){ if(!Emp::$IS_AUTH) exit; $id = intval($_GET['id']); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(1); $contractor = Contractor::getByID($id); $contractor = Contractor::format($contractor); $row = 1; $sheet->setCellValue('A1',$contractor['name']); $row++; $data = [ 'Имя'=>$contractor['name'], 'Описание'=>$contractor['text'], 'ИНН'=>$contractor['inn'], 'Группа компаний'=>$contractor['group'], 'Тип'=>$contractor['status'], ]; foreach ($data as $k=>$v){ $sheet->setCellValue('A'.$row, $k); $sheet->setCellValue('B'.$row, $v); $row++; } $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); //* $writer = new Xlsx($spreadsheet); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$contractor['name'].'.xlsx"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); //*/ } static function emp(){ if(!Emp::$IS_AUTH) exit; $emp_id = intval($_GET['id']); $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); //$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(1); $data = Emp::getPublicData($emp_id); $row = 1; $sheet->setCellValue('A1',$data['data']['name']); $row++; foreach ($data['tr'] as $k=>$v){ $sheet->setCellValue('A'.$row, $k); $sheet->setCellValue('B'.$row, $v); $row++; } $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $writer = new Xlsx($spreadsheet); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$data['tr']['Имя'].'.xlsx"'); header('Cache-Control: max-age=0'); /**/ //$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); } static function writeAllProjects($spreadsheet,$data,$options) { if(!Emp::$IS_AUTH) exit; $sheet = $spreadsheet->getActiveSheet(); $row = 1; $sheet->setCellValue('F'.$row,'Время проектирования, ч.'); $row++; $thead = [ 'Шифр', 'Стадия', 'Название', 'Площадь, м²', 'РП', 'АР', 'КР', 'ИОС', 'СПЕЦ', 'BIM-IT', 'УПР', 'Всего', 'чч/м²', 'Архивный', ]; foreach ($thead as $k=>$v){ $sheet->setCellValueByColumnAndRow($k+1,$row,$v); } uasort($data['data'],function($a,$b){ return $a['code']<=>$b['code']; }); foreach ($data['data'] as $v){ $row++; $col = 1; $sheet->setCellValueByColumnAndRow($col++,$row,$v['code']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['step']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['title']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['area']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['director']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['АР']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['КР']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['ИОС']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['СПЕЦ']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['BIM-IT']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['times']['УПР']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['total']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['ch']); $sheet->setCellValueByColumnAndRow($col++,$row,$v['archive']?'Да':''); } } static function report(){ if(!Emp::$IS_AUTH) exit; $data = json_decode($_POST['data'],true); $options = json_decode($_POST['options'],true); $type = $options['type']; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setTitle("Таблицы"); $report_title = $_POST['report_title']; //$sheet2 = new Worksheet($spreadsheet,"Аналитика"); //$spreadsheet->addSheet($sheet2); //$sheet2->setTitle("Аналитика"); if(is_numeric($type)){ switch ($type){ case 0 : static::writeMyProjects($spreadsheet,$data,$options); break; case 1 : if($options['subtype']){ $project = Project::getByID($options['subtype']); $report_title = Project::getCodeName($project); static::writeMyTeam2($spreadsheet, $data, $options); } else { static::writeMyTeam($spreadsheet, $data, $options); } break; //case 2 : static::writeMyDepartments($spreadsheet,$data,$options); break; case 2 : // Моё подразделение case 3 :case 4 :case 5 :case 6 : // Офисы case 7 : // Моя компания static::writeMyCompany($spreadsheet,$data,$options); break; case 8: static::writeMyYear($spreadsheet,$data,$options); break; case 9: static::writeStaff($spreadsheet,$data,$options); break; case 11: static::writeFot($spreadsheet,$data,$options); break; case 12: static::writeAllProjects($spreadsheet,$data,$options); break; } } else { switch ($type){ case "money_fot": $report_title = "ФОТ"; static::writeMoneyFot($spreadsheet,$data,$options); break; } } $spreadsheet->setActiveSheetIndex(0); //$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(1); /* $row = 1; $sheet->setCellValue('A1',$data['data']['name']); $row++; foreach ($data['tr'] as $k=>$v){ $sheet->setCellValue('A'.$row, $k); $sheet->setCellValue('B'.$row, $v); $row++; } $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); */ //* $writer = new Xlsx($spreadsheet); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$report_title.'.xlsx"'); header('Cache-Control: max-age=0'); $writer->save('php://output'); //*/ } }