Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 9.66 KB | None | 0 0
  1. package com.hmkcode
  2.  
  3. ;
  4.  
  5. import java.io._
  6. import java.nio.charset.Charset
  7. import java.sql.{Connection, DriverManager}
  8.  
  9. import com.itextpdf.text.pdf.PdfWriter
  10. import com.itextpdf.text.{Document, FontFactory}
  11. import com.itextpdf.tool.xml.{XMLWorkerFontProvider, XMLWorkerHelper}
  12. import org.scalatest.FunSuite
  13. import scalikejdbc.{DB, _}
  14.  
  15. /**
  16.   * Created by ksenya on 08.02.16.
  17.   */
  18. //noinspection ScalaDeprecation
  19.  
  20. case class Member(post: Option[String], rate: String, part: Option[Int], discilineName: Option[String],
  21.                   faculty: Option[String], department:Int, cipherGroup: Option[String], disciplineIndex: Option[String],
  22.                   course: String, fo: Option[String], trainingPeriod: Option[String], nameWork: String,
  23.                   contingentVolume: Int, calculationHours: Int, term: Int)
  24. case class Full_name(last_name:Option[String],first_name:Option[String],middle_name:Option[String])
  25.  
  26. class ReportTest extends FunSuite {
  27.   test ("A Scala XML generation test") {
  28.     Class.forName ("oracle.jdbc.driver.OracleDriver")
  29.     val c: Connection = DriverManager.getConnection ("jdbc:oracle:thin:@//[192.168.11.36][1521]/student", "portal_owner", "portal_owner")
  30.     val person_id=54412
  31.     val study_year="2015/2016"
  32.    DB (c).readOnly { implicit session =>
  33.       val members =sql"""SELECT genericvac1_.title AS post,
  34.              employeety2_.наименования AS rate,
  35.              genericvac1_.part AS part,
  36.              payloaddis4_.discipline AS disciplineName,
  37.              payloaddis4_.faculty AS faculty,
  38.              genericvac1_.DEPARTMENT_ID as department,
  39.              payloaddis4_.group_codes AS cipherGroup,
  40.              payloaddis4_.discipline_index AS disciplineIndex,
  41.              resource3_.course AS course,
  42.              payloaddis4_.study_form AS fo,
  43.              payloaddis4_.study_length AS trainingPeriod,
  44.              tasktype5_.аббревиатура AS nameWork,
  45.              resource3_.term AS term,
  46.              assignment0_.payload AS calculationHours,
  47.              assignment0_.qty AS contingentVolume
  48.              FROM w_assignments assignment0_
  49.              INNER JOIN w_generic_vacancies genericvac1_ ON assignment0_.employee_id=genericvac1_.id
  50.              INNER JOIN и_типы_долж employeety2_ ON genericvac1_.TYPE=employeety2_.наим_сокр
  51.              INNER JOIN W_Resource resource3_ ON assignment0_.resource_id=resource3_.id
  52.              LEFT OUTER JOIN w_payload_discipline payloaddis4_ ON resource3_.payload_dis_id=payloaddis4_.id
  53.              INNER JOIN и_виды_работ tasktype5_ ON resource3_.task_type_id=tasktype5_.ид
  54.              WHERE genericvac1_.id IN (SELECT employee6_.id
  55.              FROM w_generic_vacancies employee6_
  56.              WHERE employee6_.vac_type='employee'
  57.              AND employee6_.person_id= $person_id
  58.              AND employee6_.study_year=$study_year)
  59.              ORDER BY genericvac1_.id, payloaddis4_.discipline, payloaddis4_.study_form, payloaddis4_.study_length,
  60.              resource3_.course, payloaddis4_.group_codes, tasktype5_.аббревиатура"""
  61.           .map { rs => Member (
  62.             rs.stringOpt ("post"),
  63.             rs.string ("rate"),
  64.             rs.intOpt ("part"),
  65.             rs.stringOpt ("disciplineName"),
  66.             rs.stringOpt ("faculty"),
  67.             rs.int("department"),
  68.             rs.stringOpt ("cipherGroup"),
  69.             rs.stringOpt ("disciplineIndex"),
  70.             rs.string ("course"),
  71.             rs.stringOpt ("fo"),
  72.             rs.stringOpt ("trainingPeriod"),
  73.             rs.string ("nameWork"),
  74.             rs.int ("contingentVolume"),
  75.             rs.int ("calculationHours"),
  76.             rs.int ("term"))
  77.           }.list.apply()
  78.  
  79.       val department_group = members.groupBy(group=> group.department)
  80.  
  81.       def sumYear(rows: List[Member]) = rows.map (row => row.calculationHours).sum
  82.     /* def sum_discipline_year(rows: List[Member]) = rows.groupBy(discipline_group=>
  83.           (discipline_group.discilineName,
  84.             discipline_group.faculty,
  85.             discipline_group.cipherGroup,
  86.             discipline_group.disciplineIndex,
  87.             discipline_group.course,
  88.             discipline_group.fo,
  89.             discipline_group.trainingPeriod)).map(row => row.calculationHours).sum*/
  90.       val full_name_person =sql"""select LAST_NAME, FIRST_NAME, MIDDLE_NAME from IIAS_OWNER.WV_PERSONS where id=$person_id"""
  91.        .map { rs =>  Full_name(
  92.          rs.stringOpt ("LAST_NAME"),
  93.          rs.stringOpt ("FIRST_NAME"),
  94.          rs.stringOpt ("MIDDLE_NAME"))
  95.        }.list.apply()
  96.  
  97.     val doc = <html>
  98.       <head>
  99.         <meta charset="utf-8"/>
  100.         <link href="style.css" rel="stylesheet" type="text/css"/>
  101.       </head>
  102.       <body>
  103.         <h3 align="center">УЧЕБНАЯ НАГРУЗКА ПРЕПОДАВАТЕЛЯ НА {study_year} УЧ. ГОД</h3>
  104.         <p>Ф.И.О. преподавателя:
  105.           {
  106.             full_name_person.map{name=>
  107.               (name.last_name.getOrElse(""),
  108.                 name.first_name.getOrElse(""),
  109.                 name.middle_name.getOrElse(""))
  110.                 .toString().replaceAll(","," ")}
  111.           } </p>
  112.        { department_group.map { case (depart, dat) =>
  113.         <p>КАФЕДРА:
  114.                 { sql"""SELECT "НАИМЕНОВАНИЕ" FROM IIAS_OWNER.WV_DEPARTMENTS where "ИД"=$depart"""
  115.                 .map { rs =>  rs.string("наименование")
  116.                 }.list.apply()}
  117.         </p>
  118.         <table border="1" class="jewel">
  119.           <tr>
  120.             <td>Исполнение должности</td>
  121.             <td>Наименование дисциплины</td>
  122.             <td>Факультет</td>
  123.             <td>Шифр группы</td>
  124.             <td>Индекс дисциплины</td>
  125.             <td>Курс</td>
  126.             <td>Ф.О</td>
  127.             <td>Срок обучения</td>
  128.             <td>Наимен/вид работ</td>
  129.             <td>Объем контингента</td>
  130.             <td>Расчет часов</td>
  131.             <td>1 сем</td>
  132.             <td>2 сем</td>
  133.             <td>год</td>
  134.           </tr>{
  135.             val data = dat.groupBy(record => (record.post.getOrElse (""), record.rate, record.part.getOrElse ("")))
  136.             data.map {
  137.               case (name, rows) =>
  138.                 rows.groupBy (discipline_group =>
  139.                   (discipline_group.discilineName,
  140.                     discipline_group.faculty,
  141.                     discipline_group.cipherGroup,
  142.                     discipline_group.disciplineIndex,
  143.                     discipline_group.course,
  144.                     discipline_group.fo,
  145.                     discipline_group.trainingPeriod)).map { case (disciplonegroup, row_) =>
  146.                   var sum_one_sem = 0
  147.                   var sum_two_sem = 0
  148.                   var sum_year=0
  149.                   row_.map { row =>
  150.                     val (post, rate, part) = name
  151.                     var one_sem = 0
  152.                     var two_sem = 0
  153.                     var year = 0
  154.                   <tr>
  155.                     {if (row eq rows.head) <td rowspan={rows.length.toString}>{post}, {rate}, {part}</td>}
  156.                     <td>{row.discilineName.getOrElse ("")}</td>
  157.                     <td>{row.faculty.getOrElse ("")}</td>
  158.                     <td>{row.cipherGroup.getOrElse ("")}</td>
  159.                     <td>{row.disciplineIndex.getOrElse ("")}</td>
  160.                     <td>{row.course}</td>
  161.                     <td>{row.fo.getOrElse ("")}</td>
  162.                     <td>{row.trainingPeriod.getOrElse ("")}</td>
  163.                     <td>{row.nameWork}</td>
  164.                     <td>{row.contingentVolume}</td>
  165.                     <td>{row.calculationHours}</td>
  166.                     {if ( {row.term} == 1)
  167.                     one_sem = {row.calculationHours};
  168.                     sum_one_sem += one_sem;
  169.                       <td> {one_sem}</td>
  170.                     }
  171.                     {if ( {row.term} == 2)
  172.                     two_sem = {row.calculationHours};
  173.                     sum_two_sem += two_sem;
  174.                       <td> {two_sem}</td>
  175.                     } {  year={row.calculationHours};
  176.                   sum_year+=year;
  177.                     <td>{row.calculationHours}</td>
  178.                     }
  179.                   </tr>
  180.                 } ++
  181.                 <tr>
  182.                  <th>Итого: </th>
  183.                   <td></td>
  184.                   <td></td>
  185.                   <td></td>
  186.                   <td></td>
  187.                   <td></td>
  188.                   <td></td>
  189.                   <td></td>
  190.                   <td></td>
  191.                   <td></td>
  192.                   <th>{sum_one_sem}</th>
  193.                   <th>{sum_two_sem}</th>
  194.                   <th>{sum_year}</th>
  195.               </tr>
  196.                 }
  197.             }
  198.           }
  199.  
  200.         </table>
  201.       }}
  202.         <p>Данные подготовлены в ИИАС "Учебный процесс"</p>
  203.       </body>
  204.     </html>
  205.  
  206.     val document: Document = new Document
  207.     val writer: PdfWriter = PdfWriter.getInstance (document, new FileOutputStream ("/tmp/out.pdf"))
  208.     document.open
  209.  
  210.     val fontProvider: XMLWorkerFontProvider = new XMLWorkerFontProvider (XMLWorkerFontProvider.DONTLOOKFORFONTS)
  211.     fontProvider.register ("/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf")
  212.     FontFactory.setFontImp (fontProvider)
  213.     val is: InputStream = new ByteArrayInputStream (doc.toString ().getBytes (Charset.forName ("UTF-8")))
  214.     XMLWorkerHelper.getInstance ().parseXHtml (writer, document, is, Charset.forName ("UTF-8"), fontProvider)
  215.     document.close
  216.  
  217.     println ("PDF Created!")
  218.   }
  219. }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement