From 5a0752c941ee8fd86cd7f4de9a595b292f9771a8 Mon Sep 17 00:00:00 2001 From: pimka <pimka@ro.ru> Date: Fri, 26 Dec 2014 13:12:36 +0300 Subject: [PATCH] file creator && xls --- .../Controller/Handler/FileCreator.php | 72 +++++++++++------- ~dev_rating/docs/template credit.xls | Bin 38912 -> 23040 bytes ~dev_rating/docs/template exam.xls | Bin 39936 -> 27136 bytes 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/~dev_rating/application/classes/Controller/Handler/FileCreator.php b/~dev_rating/application/classes/Controller/Handler/FileCreator.php index 82901f136..88a3841bf 100644 --- a/~dev_rating/application/classes/Controller/Handler/FileCreator.php +++ b/~dev_rating/application/classes/Controller/Handler/FileCreator.php @@ -173,31 +173,30 @@ class Controller_Handler_FileCreator extends Controller_Handler // Ведомость public function action_GenerateExcelStatement() { - // TODO CHECK!!! - - // parameters - $disciplineID = $this->post->offsetGet('disciplineID'); + // TODO CHECK!!! + + // parameters + $disciplineID = $this->post->offsetGet('disciplineID'); $groupID = $this->post->offsetGet('studyGroupID'); - - //$disciplineID = 266; - //$groupID = 11; - - // preparation - $db = $this->model; + // preparation + $db = $this->model; $info = $db->getFinalFormInfo($disciplineID, $groupID); $type = $info[0]['ExamType']; - // $specName = ''; <------- TODO - - $templateFile = DOCROOT."docs/template $type.xls"; + $templateFile = DOCROOT."docs/template $type.xls"; if (!file_exists($templateFile)) { exit("template wasn't found" . PHP_EOL); // TODO } + $objPHPExcel = PHPExcel_IOFactory::load($templateFile); + $objPHPExcel->setActiveSheetIndex(0); + $index = 1; + + // $specName = ''; <------- TODO $result = $db->getRatesForStudentsGroup($this->user['TeacherID'], $disciplineID, $groupID); $rowsCount = count($result); // Получаем количество записей $objPHPExcel = PHPExcel_IOFactory::load($templateFile); - $objPHPExcel->setActiveSheetIndex(0); + $objPHPExcel->setActiveSheetIndex(0); // fill header @@ -221,13 +220,13 @@ class Controller_Handler_FileCreator extends Controller_Handler $objPHPExcel->getActiveSheet()->setCellValue("$range", date("d.m.y")); $range = $objPHPExcel->getNamedRange("Date")->getRange(); if ($type == 'exam') - $controlDate = "Дата экзамена \n__________"; + $controlDate = '__________'; else - $controlDate = "Дата зачета \n30.12.2014"; - $objPHPExcel->getActiveSheet()->setCellValue("$range", $controlDate); + $controlDate = '30.12.2014'; + $objPHPExcel->getActiveSheet()->setCellValue("$range", "Дата зачета \n$controlDate"); // fill students rows - $startRow = 12; + $startRow = 13; $finalRow = 52; $indPosition = 'A'; // Номер $namePosition = 'B'; // Р¤РРћ @@ -236,8 +235,14 @@ class Controller_Handler_FileCreator extends Controller_Handler $bonusRatePosition = 'I'; // Бонусные баллы $rowNumber = $startRow; $index = 1; + foreach($result as $studentInfo){ - + + $objPHPExcel->getActiveSheet()->insertNewRowBefore($rowNumber + 1, 1); + $objPHPExcel->getActiveSheet()->getStyle("A".$rowNumber.":S".$rowNumber)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); + + $objPHPExcel->getActiveSheet()->mergeCells("B".$rowNumber.":F".$rowNumber); + $lastName = $studentInfo['Last']; $firstName = $studentInfo['First']; $secondName = $studentInfo['Second']; @@ -245,24 +250,33 @@ class Controller_Handler_FileCreator extends Controller_Handler $bonus = (int)$studentInfo['bonus']; $fullName = "$lastName $firstName $secondName"; $totalRate = $rate + $bonus; - + + if($totalRate < 60) + { + $tempRate = " "; + $tempStr = "РЅРµ зачтено"; + } + else + { + $tempStr = "зачтено"; + $tempRate = $totalRate; + } + $objPHPExcel->getActiveSheet()->setCellValue("$indPosition$rowNumber", "$index") ->setCellValue("$namePosition$rowNumber", "$fullName") - ->setCellValue("$totalRatePosition$rowNumber", "$totalRate") + ->setCellValue("$totalRatePosition$rowNumber", "$tempRate") ->setCellValue("$semesterRatePosition$rowNumber","$rate") - ->setCellValue("$bonusRatePosition$rowNumber","$bonus"); + ->setCellValue("$bonusRatePosition$rowNumber","$bonus") + ->setCellValue("J".$rowNumber,$tempStr); + $rowNumber++; - $index++; + $index++; } - - // delete rest rows - $objPHPExcel->getActiveSheet()->removeRow($rowNumber+1, $finalRow); - - $this->GetHeaders('FinalForm'); + $this->GetHeaders("FinalForm".$disciplineID."_".$groupID); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); - } + } // Выводим HTTP-заголовки public function GetHeaders($filename = 'excel') diff --git a/~dev_rating/docs/template credit.xls b/~dev_rating/docs/template credit.xls index c94873a0a043c1f27038116883bc280c31c100c6..3efe9c7f2eecc7d658d857fb90e482818417b15a 100644 GIT binary patch delta 3394 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 literal 38912 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 QlPmu$$!3lAhs^)~0ix)jsQ>@~ diff --git a/~dev_rating/docs/template exam.xls b/~dev_rating/docs/template exam.xls index b272e99f3b750f5b97c13fe99a67e7af4eb5f5eb..682553295565fb2e1931608da9f2bebac94b6c46 100644 GIT binary patch delta 4023 zcmbVPZ){Ul6hH5^TVLC4?P$BMWrY?&Iza6Hg!n;VxD7UBbd+wZLxGNUv%0NiD<l$Q zi{oGTvvxa#L}Q4F(NDyP)#wMa5MyFuh@df=5M%J8A54q}KbYt|=e1qRc)cd}=DmCG z@0|NP=bd}rxv!Z|<;-_d?rAA-bNiQ))P_~^C-wg<EiLiY3IOW(=7Bb8K|f)9JMzPU z8*A=LEqFpdD}O$m|4aXejC&N@f?~#-2B%>?<Rk!z#tsY^j3nA2nXtpuh}RWkadfLV zYQX!7S;ZP^Bxr}vWHKk;HetYMuiGL?@KibETh=UtJ4_9D(O4wG8|sKw<85Otsoyge z7B!mes#_{KEvb>gSq_x6OyyuBzGWhh^Y585b&?-<x}0>+y7_*@?Zh3fCLE!@*=50u z>l$u#_u!zbF@MtSm9W9xh}TvRVtbQaZ?N=@=Jz!ze$$ywfcN_W76<Wg*Y&Y&dVoHN z!!ekK1kBJi1}X4D1p471^<9J<gA*_bF_=;%L!=p}QH=V+Ptrs6j}X!6mMC&ygg4FY z$|y)+fru<qACd9Z{eH}JZ(6vjUkECAt6T4<4FcL+TJrF(t9SpvI<QLnbT#nRw|`Ef zPv0aNaqX}JtwDRfBY00D7R(JOy;kBl*caZ*1XkMb|NR^o?eV93r&6)$iCFYxd}<tm zyLUtHWOO_hekB=$z5U&L`eLIHoQ}t)QqfdAF$Mj>P&l-!Hw>MLiHT?`rY;G^W)c%8 zRCzGTT?_O_ld<W8@l!F_*BuUbhgd%`-Io}RL2LU+GFf_hd_(Uw)zGXj(lsPW`R`AC zAgAwhl%PYhfFfIgr48^fR;z*4X<!x&jAHf(Uwt{2E*f4{4i+(+24>g592!`I2Ikbj z(v2FRO9OLjV5>E-CJoG^fvqWE>4(C<c7@{KU?K!yT)i)<Gl^y)dI<_L9lav##v-hv zyPjs1+6>ee*Q}yfi``_tG=Pn!d%<25I^a2A-<Y0#8wY;!Mc6{Kg6T>I7@r}o6fsJ2 zHEA;!^KiX8uCgscfMycSiY;9lRO}rpg-)elBBs!lQ&e18GE!imDny!`q|Bf%GHfU* z3444uv$1oSGMP#MJy{hwFs!;&MMQ__ISaw8BFQ0Y)kT?sv^ePsYZN$ymeauvN#J~7 zCpbn)YR4XJID5J?{UX^Z?1Vy^FOe-?R|g8k@MX14kVTHLLR^QrLKSBQc%CGsnL@Ja z<(ZLWhUJ+FMuA^GP6h?cRCC9u3aFfEsHKIRfdvzFaFi5SwT4tJ5T!O!%qoRQj*@F7 zsjVn=khYr&Hc&yIr1H)!0Y~5k^)jl=MzYaOj0HPJvN5WzFtblaGByTB@XqUJ9Ydt@ z+fI%E=TsqT5sc3^*R!Ol!>mTyL@Ofr&g`?!Fbt?|kj|J=8zR~9GcH_nrdlNTaMkOA z$_#5otMS%<u=7rd*j*m3l41?sHL(U4P@x8XeO4R=&g{wzzH{OzB+rT2x%O6Or(N=J zB^GONbrNfEc@%2kYv;v&^7~qu;hXc~D0nZ3*c}+U5L$5x`^etPQ<%&9O6)NWY`q4y zK?8fd94no|8_U7sDeTw4nl-RZ8rWtHY>Nh#enJD>s)0SJfdw?M77eUb18XZ_o0d=E zMQ8;tft9zL(~>u+vc~C);)J++QIrra4{u>*cDBzOD%Rlb6>IQb3pMbkOJYAc3o0|T zToy+mb6L#Jc~Y63qrgcc*5DKpYj8pdHE`~V*iTNi$_zhW5l0~~Ct`Qt$lNoV2gt%D z#Yz_qmVY7ojIe-?4`lknphJ^#c?s{#ZNq`A6>GCS7|ZtKgRB=n&IZtv>%qyK-&w7G z2*~ttP(?>5e_lv*x8g@RpTkTf65*_)qeHZgni+r3wOJH8o$KhNSLisdg<5Q%-{oWm z`d3Eh{wi9>e;oLO&w;7=UP~J}!%W<h48NFfwt2{3#%$DB-wt;4E_m?4yjSM~AKuS8 Y^4k~2r4O(EBI{E-4&2E9dd*h#FJFAGK>z>% delta 5993 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%0AB{<ZVV Y{3~eg+lzm)SbzJ=S8lBTHQ8SMU(LlO?EnA( -- GitLab