Advertisement
Guest User

Untitled

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