Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 8.81 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=73566
  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_
  53.              ON resource3_.payload_dis_id=payloaddis4_.id
  54.              INNER JOIN и_виды_работ tasktype5_ ON resource3_.task_type_id=tasktype5_.ид
  55.              WHERE genericvac1_.id IN (SELECT employee6_.id
  56.              FROM w_generic_vacancies employee6_
  57.              WHERE employee6_.vac_type='employee'
  58.              AND employee6_.person_id= $person_id
  59.              AND employee6_.study_year=$study_year)
  60.              ORDER BY genericvac1_.id, payloaddis4_.discipline, payloaddis4_.study_form, payloaddis4_.study_length,
  61.              resource3_.course, payloaddis4_.group_codes, tasktype5_.аббревиатура"""
  62.           .map { rs => Member (
  63.             rs.stringOpt ("post"),
  64.             rs.string ("rate"),
  65.             rs.intOpt ("part"),
  66.             rs.stringOpt ("disciplineName"),
  67.             rs.stringOpt ("faculty"),
  68.             rs.int("department"),
  69.             rs.stringOpt ("cipherGroup"),
  70.             rs.stringOpt ("disciplineIndex"),
  71.             rs.string ("course"),
  72.             rs.stringOpt ("fo"),
  73.             rs.stringOpt ("trainingPeriod"),
  74.             rs.string ("nameWork"),
  75.             rs.int ("contingentVolume"),
  76.             rs.int ("calculationHours"),
  77.             rs.int ("term"))
  78.           }.list.apply()
  79.     // val data = members.groupBy (record => (record.post.getOrElse (""), record.rate, record.part.getOrElse ("")))
  80.       val department_group = members.groupBy(group=> group.department)
  81.  
  82.       def sumYear(rows: List[Member]) = rows.map (row => row.calculationHours).sum
  83.  
  84.       val full_name_person =sql"""select LAST_NAME, FIRST_NAME, MIDDLE_NAME from IIAS_OWNER.WV_PERSONS where id=$person_id"""
  85.        .map { rs =>  Full_name(
  86.          rs.stringOpt ("LAST_NAME"),
  87.          rs.stringOpt ("FIRST_NAME"),
  88.          rs.stringOpt ("MIDDLE_NAME"))
  89.        }.list.apply()
  90.  
  91.     val doc = <html>
  92.       <head>
  93.         <meta charset="utf-8"/>
  94.         <link href="style.css" rel="stylesheet" type="text/css"/>
  95.       </head>
  96.       <body>
  97.         <h3 align="center">УЧЕБНАЯ НАГРУЗКА ПРЕПОДАВАТЕЛЯ НА {study_year} УЧ. ГОД</h3>
  98.         <p>Ф.И.О. преподавателя:
  99.           {
  100.             full_name_person.map{name=>
  101.               (name.last_name.getOrElse(""),
  102.               name.first_name.getOrElse(""),
  103.               name.middle_name.getOrElse("")).toString().replaceAll(","," ")}
  104.           } </p>
  105.        { department_group.map { case (depart, dat) =>
  106.         <p>КАФЕДРА:
  107.                 { sql"""SELECT "НАИМЕНОВАНИЕ" FROM IIAS_OWNER.WV_DEPARTMENTS where "ИД"=$depart"""
  108.                 .map { rs =>  rs.string("наименование")
  109.                 }.list.apply()}
  110.         </p>
  111.         <table border="1" class="jewel">
  112.           <tr>
  113.             <td>Исполнение должности</td>
  114.             <td>Наименование дисциплины</td>
  115.             <td>Факультет</td>
  116.             <td>Шифр группы</td>
  117.             <td>Индекс дисциплины</td>
  118.             <td>Курс</td>
  119.             <td>Ф.О</td>
  120.             <td>Срок обучения</td>
  121.             <td>Наимен/вид работ</td>
  122.             <td>Объем контингента</td>
  123.             <td>Расчет часов</td>
  124.             <td>1 сем</td>
  125.             <td>2 сем</td>
  126.             <td>год</td>
  127.           </tr>{
  128.             val data = dat.groupBy(record => (record.post.getOrElse (""), record.rate, record.part.getOrElse ("")))
  129.             data.map {
  130.               case (name, rows) =>
  131.                 var sum_one_sem = 0
  132.                 var sum_two_sem = 0              
  133.                 rows.map { row =>
  134.                   val (post, rate, part) = name
  135.                   var one_sem = 0
  136.                   var two_sem = 0
  137.                   <tr>
  138.                     {if (row eq rows.head) <td rowspan={rows.length.toString}>{post}, {rate}, {part}</td>}
  139.                     <td>{row.discilineName.getOrElse ("")}</td>
  140.                     <td>{row.faculty.getOrElse ("")}</td>
  141.                     <td>{row.cipherGroup.getOrElse ("")}</td>
  142.                     <td>{row.disciplineIndex.getOrElse ("")}</td>
  143.                     <td>{row.course}</td>
  144.                     <td>{row.fo.getOrElse ("")}</td>
  145.                     <td>{row.trainingPeriod.getOrElse ("")}</td>
  146.                     <td>{row.nameWork}</td>
  147.                     <td>{row.contingentVolume}</td>
  148.                     <td>{row.calculationHours}</td>
  149.                     {if ( {row.term} == 1)
  150.                       one_sem = {row.calculationHours};
  151.                       sum_one_sem += one_sem;
  152.                       <td> {one_sem}</td>
  153.                     }
  154.                     {if ( {row.term} == 2)
  155.                       two_sem = {row.calculationHours};
  156.                       sum_two_sem += two_sem;
  157.                       <td> {two_sem}</td>
  158.                     }
  159.                     <td>{row.calculationHours}</td>
  160.                   </tr>
  161.                 } ++
  162.                 <tr>
  163.                  <th>Итого: </th>
  164.                   <td></td>
  165.                   <td></td>
  166.                   <td></td>
  167.                   <td></td>
  168.                   <td></td>
  169.                   <td></td>
  170.                   <td></td>
  171.                   <td></td>
  172.                   <td></td>
  173.                   <td></td>
  174.                   <th>{sum_one_sem}</th>
  175.                   <th>{sum_two_sem}</th>
  176.                   <th>{sumYear (rows)}</th>
  177.               </tr>
  178.             }
  179.           }
  180.  
  181.         </table>
  182.       }}
  183.         <p>Данные подготовлены в ИИАС "Учебный процесс"</p>
  184.       </body>
  185.     </html>
  186.  
  187.     val document: Document = new Document
  188.     val writer: PdfWriter = PdfWriter.getInstance (document, new FileOutputStream ("/tmp/out.pdf"))
  189.     document.open
  190.  
  191.     val fontProvider: XMLWorkerFontProvider = new XMLWorkerFontProvider (XMLWorkerFontProvider.DONTLOOKFORFONTS)
  192.     fontProvider.register ("/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf")
  193.     FontFactory.setFontImp (fontProvider)
  194.     val is: InputStream = new ByteArrayInputStream (doc.toString ().getBytes (Charset.forName ("UTF-8")))
  195.     XMLWorkerHelper.getInstance ().parseXHtml (writer, document, is, Charset.forName ("UTF-8"), fontProvider)
  196.     document.close
  197.  
  198.     println ("PDF Created!")
  199.   }
  200. }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement