/app/service/JobOrderService.java

https://github.com/lukaspili/Ramses · Java · 127 lines · 93 code · 31 blank · 3 comment · 6 complexity · d5e9719d83d20f3fbcbe30a095037485 MD5 · raw file

  1. package service;
  2. import models.contracts.JobOrder;
  3. import models.contracts.SpecificPrestation;
  4. import models.school.Prestation;
  5. import models.school.SoeExam;
  6. import models.user.User;
  7. import org.joda.time.LocalDate;
  8. import pdf.JobOrderPdfGenerator;
  9. import play.libs.MimeTypes;
  10. import plugin.s3.model.impl.S3RealBlob;
  11. import javax.persistence.NoResultException;
  12. import javax.persistence.Query;
  13. import java.io.File;
  14. import java.io.FileInputStream;
  15. import java.io.IOException;
  16. import java.util.List;
  17. /**
  18. * @author Lukasz Piliszczuk <lukasz.piliszczuk AT zenika.com>
  19. */
  20. public class JobOrderService {
  21. public List<JobOrder> getOrdersForUser(User user) {
  22. Query query = JobOrder.em().createQuery("select o from JobOrder as o where o.user = :user");
  23. query.setParameter("user", user);
  24. return query.getResultList();
  25. }
  26. public void createOrder(List<Prestation> prestations, List<SoeExam> soeExams, List<SpecificPrestation> specificPrestations, User user) {
  27. JobOrder order = new JobOrder();
  28. order.creationDate = new LocalDate();
  29. order.user = user;
  30. order.contract = user.contract;
  31. order.soeExams = soeExams;
  32. order.realCoursesProfessors = prestations;
  33. order.specificPrestations = specificPrestations;
  34. order.total = 0;
  35. for (Prestation rcp : prestations) {
  36. order.total += rcp.getTotal();
  37. }
  38. for (SoeExam soe : soeExams) {
  39. order.total += soe.getTotal();
  40. }
  41. for (SpecificPrestation specificPrestation : specificPrestations) {
  42. order.total += specificPrestation.getTotal();
  43. }
  44. JobOrder last;
  45. try {
  46. last = (JobOrder) JobOrder.em().createQuery("select jo from JobOrder jo " +
  47. "where jo.user = :user " +
  48. "order by jo.jobOrderNumber desc")
  49. .setParameter("user", user)
  50. .setMaxResults(1)
  51. .getSingleResult();
  52. } catch (NoResultException e) {
  53. last = null;
  54. }
  55. if (null == last) {
  56. order.jobOrderNumber = 1;
  57. } else {
  58. order.jobOrderNumber = last.jobOrderNumber + 1;
  59. }
  60. order.save();
  61. try {
  62. File folder = new File("pdf/orders");
  63. folder.mkdirs();
  64. File file = File.createTempFile("order", ".pdf");
  65. new JobOrderPdfGenerator().generate(order, file);
  66. order.pdf = new S3RealBlob();
  67. order.pdf.set(new FileInputStream(file), MimeTypes.getContentType(file.getName()));
  68. } catch (IOException e) {
  69. throw new RuntimeException(e);
  70. }
  71. order.save();
  72. new PrestationService().addJobOrderToPrestations(order, prestations);
  73. new SpecificPrestationService().addJobOrderToSpecificPrestations(order, specificPrestations);
  74. }
  75. public JobOrder getByIdAndUser(long id, User user) {
  76. Query query = JobOrder.em().createQuery("select jo from JobOrder jo where jo.user = :user and jo.id = :id");
  77. query.setParameter("user", user)
  78. .setParameter("id", id);
  79. try {
  80. return (JobOrder) query.getSingleResult();
  81. } catch (NoResultException e) {
  82. return null;
  83. }
  84. }
  85. public void delete(JobOrder jobOrder) {
  86. Query query = JobOrder.em().createQuery("update Prestation p set p.jobOrder = null " +
  87. "where p.jobOrder = :jobOrder");
  88. query.setParameter("jobOrder", jobOrder);
  89. query.executeUpdate();
  90. query = JobOrder.em().createQuery("update SpecificPrestation p set p.jobOrder = null " +
  91. "where p.jobOrder = :jobOrder");
  92. query.setParameter("jobOrder", jobOrder);
  93. query.executeUpdate();
  94. jobOrder.delete();
  95. }
  96. }