Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?error_reporting(E_ALL);
- ini_set('display_errors', TRUE);
- ini_set('display_startup_errors', TRUE);
- require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
- require($_SERVER["DOCUMENT_ROOT"]."/local/lib/PHPExcel/PHPExcel.php");
- class GenerateReportAboutUsersBP{
- private $bp_id, $objPHPExcel;
- function __construct($bp_id){
- $this->bp_id = $bp_id;
- $this->objPHPExcel = new \PHPExcel();
- }
- public function generate(){
- $sheet = $this->objPHPExcel->getActiveSheet();
- $arResult = $this->getUsers();
- $bpName = $this->getBpName();
- if( count($arResult) > 0 ){
- $this->objPHPExcel->getActiveSheet()->mergeCells("A1:H1");
- $this->objPHPExcel->getActiveSheet()->setCellValue("A1", $bpName);
- $this->objPHPExcel->getActiveSheet()->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
- $styleArray = array(
- 'font' => array(
- 'bold' => false,
- 'size' => 15,
- ),
- 'borders' => array(
- 'allborders' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THIN,
- )
- )
- );
- if(count($arResult[0])==1){
- $this->objPHPExcel->getActiveSheet()->mergeCells("A2:H2");
- }
- foreach(array_keys($arResult[ key($arResult) ]) as $i=>$title){
- $this->objPHPExcel
- ->getActiveSheet()
- ->setCellValueByColumnAndRow($i, 2, $title)
- ->getStyle()
- ->applyFromArray($styleArray);
- }
- $this->objPHPExcel
- ->getActiveSheet()
- ->getRowDimension('1')
- ->setRowHeight(40);
- foreach (range('A', $this->objPHPExcel->getActiveSheet()->getHighestDataColumn()) as $col) {
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."1")
- ->applyFromArray($styleArray);
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."1")
- ->getAlignment()
- ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."1")
- ->getFill()
- ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
- ->getStartColor()
- ->setRGB('DCE6F4');
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."2")
- ->applyFromArray($styleArray);
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."2")
- ->getAlignment()
- ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
- $this->objPHPExcel
- ->getActiveSheet()
- ->getStyle($col."2")
- ->getFill()
- ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
- ->getStartColor()
- ->setRGB('DCE6F4');
- $this->objPHPExcel
- ->getActiveSheet()
- ->getColumnDimension($col)
- ->setAutoSize(true);
- }
- $row = 0;
- foreach($arResult as $arUser){
- $col = 0;
- if(count($arUser)==1){
- $this->objPHPExcel->getActiveSheet()->mergeCells("A3:H3");
- }
- foreach($arUser as $val){
- $this->objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row + 3, $val);
- $col++;
- }
- $row++;
- }
- $objWriter = new \PHPExcel_Writer_Excel2007($this->objPHPExcel);
- $objWriter->setPreCalculateFormulas(false);
- header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
- header('Content-Disposition: attachment; filename="'.$this->bp_id.'.xlsx"');
- header('Cache-Control: max-age=0');
- $objWriter->save("php://output");
- }
- }
- public function getUsers(){
- \CModule::IncludeModule('bizproc');
- \CModule::IncludeModule("iblock");
- $getBpID = \COption::GetOptionString("main", "BP_DOC");
- $allIDValues = "";
- $allIDValuesList = [];
- $allElementsList = [];
- $allResultList = [];
- $arFilter = array(
- "IBLOCK_ID" => $getBpID,
- "CHECK_PERMISSIONS" => "N",
- "SHOW_NEW" => "Y",
- "ID" => $this->bp_id
- );
- $rsElements = \CIBlockElement::GetList(
- array(), $arFilter, false, false, array("ID","IBLOCK_ID","NAME","DATE_CREATE","CREATED_BY","PROPERTY_SROK","PROPERTY_KOGO")
- );
- while($obElement = $rsElements->GetNextElement()) {
- $data = $obElement->GetFields();
- $allIDValues .= $data["ID"].", ";
- $allElementsList[$data["ID"]] = $data;
- }
- $allIDValues = mb_substr($allIDValues, 0, -2);
- $connection = \Bitrix\Main\Application::getConnection();
- $sqlHelper = $connection->getSqlHelper();
- $workflow_id = "";
- $sql = "SELECT * FROM b_bp_workflow_state WHERE DOCUMENT_ID_INT IN($allIDValues)";//AND STATE = 'InProgress'
- $recordset = $connection->query($sql);
- while ($record = $recordset->fetch())
- {
- $workflow_id .= "'".$record["ID"]."', ";
- $allIDValuesList[$record["ID"]] = $record["DOCUMENT_ID_INT"];
- }
- $workflow_id = mb_substr($workflow_id, 0, -2);
- $sql = "SELECT * FROM b_bp_tracking WHERE WORKFLOW_ID IN($workflow_id)";
- $recordset = $connection->query($sql);
- while ($record = $recordset->fetch())
- {
- if (strpos($record["ACTION_NOTE"], 'Ознакомление с документом пользователями из списка') !== false) {
- $newTitle = substr($record["ACTION_NOTE"], strpos($record["ACTION_NOTE"], '{=user'));
- $pieces = explode(", ", $newTitle);
- $arUsers = array();
- foreach ($pieces as $piecesKey => $piecesVal){
- if (strpos($piecesVal, 'group_dr') !== false) {
- $str = preg_replace("/[^0-9]/", '', $piecesVal);
- unset($pieces[$piecesKey]);
- $arUsersDep = CBPHelper::extractUsersFromExtendedGroup("group_dr".$str);
- $arUsers = array_merge($arUsers,$arUsersDep);
- }
- else{
- $str = preg_replace("/[^0-9]/", '', $piecesVal);
- $pieces[$piecesKey] = $str;
- }
- }
- $pieces = array_merge($pieces,$arUsers);
- $pieces = array_unique($pieces);
- $allResultList["ALL_USER"] = $pieces;
- }
- if(strpos($record["ACTION_NOTE"], 'ознакомился с документом') !== false){
- $pattern = '/\{(.+?)\}/';
- preg_match_all($pattern, substr($record["ACTION_NOTE"],3), $matches);
- $str = preg_replace("/[^0-9]/", '', $matches[0]);
- $comment = explode("документом:", $record["ACTION_NOTE"]);
- $dateEdit = $record["MODIFIED"]->toString();
- $allResultList["USER_VOTED"][$str[0]] = array("COMMENT"=>$comment[1],"DATE"=>$dateEdit);
- }
- }
- $arAllSection = array();
- $arFilter = Array('IBLOCK_ID'=>5, 'GLOBAL_ACTIVE'=>'Y');
- $db_list = \CIBlockSection::GetList(Array($by=>$order), $arFilter, true);
- echo $db_list->NavPrint($arIBTYPE["SECTION_NAME"]);
- while($ar_result = $db_list->GetNext())
- {
- $arAllSection[$ar_result['ID']] = $ar_result['NAME'];
- }
- $arAllUser = array();
- $user_filter = array("ID"=>implode("|", $allResultList["ALL_USER"]));
- $rsUsers = \CUser::GetList($by="ID", $order="desc", $user_filter, array("SELECT"=>array("UF_1C_PRFB0C9F4DC8C6","UF_DEPARTMENT","UF_1C_PRF508AFB5863A"), "FIELDS"=>array("ID","NAME","LAST_NAME"))); // выбираем пользователей
- while($rs = $rsUsers->GetNext()) {
- $rs["UF_DEPARTMENT"] = $arAllSection[$rs["UF_DEPARTMENT"][0]];
- $arAllUser[$rs["ID"]] = $rs;
- }
- $arAllResult = array();
- if(!empty($allResultList["ALL_USER"])){
- foreach ($allResultList["ALL_USER"] as $resultKey => $resultVal){
- $arAllResult[$resultVal] = array(
- "№ п\п" => $resultKey+1,
- "Фамилия Имя" => $arAllUser[$resultVal]["LAST_NAME"]." ".$arAllUser[$resultVal]["NAME"],
- "Табельный номер" => $arAllUser[$resultVal]["UF_1C_PRFB0C9F4DC8C6"],
- "Статус ознакомления" => (!empty($allResultList["USER_VOTED"][$resultVal]))?"Ознакомлен":"Не ознакомлен",
- "Дата" => $allResultList["USER_VOTED"][$resultVal]["DATE"],
- "Комментарии" => $allResultList["USER_VOTED"][$resultVal]["COMMENT"],
- "Бюджет" => $arAllUser[$resultVal]["UF_1C_PRF508AFB5863A"],
- "Подразделение" => $arAllUser[$resultVal]["UF_DEPARTMENT"],
- );
- }
- }
- else{
- $arAllResult[] = array(
- "Ошибка"=>"Документ в статусе 'Ожидание дополнительной информации'"
- );
- }
- return $arAllResult;
- }
- public function getBpName(){
- \CModule::IncludeModule("iblock");
- $getBpID = \COption::GetOptionString("main", "BP_DOC");
- $bpName = "";
- $arFilter = array(
- "IBLOCK_ID" => $getBpID,
- "CHECK_PERMISSIONS" => "N",
- "SHOW_NEW" => "Y",
- "ID" => $this->bp_id
- );
- $rsElements = \CIBlockElement::GetList(
- array(), $arFilter, false, false, array("ID","IBLOCK_ID","NAME")
- );
- while($obElement = $rsElements->GetNextElement()) {
- $data = $obElement->GetFields();
- $bpName = $data["NAME"];
- }
- return $bpName;
- }
- }
- $report = new GenerateReportAboutUsersBP($_REQUEST["bp_id"]);
- $report->generate();
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement