Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.75 KB | None | 0 0
  1. package ext.report;
  2.  
  3. import com.aspose.cells.TextAlignmentType;
  4. import hr.candidate.CandidateBean;
  5. import hr.candidate.CandidateFrame;
  6. import hr.candidate.CandidateMessage;
  7. import hr.vacancy.VacancyBean;
  8. import hr.vacancy.VacancyFrame;
  9. import hr.vacancy.procedure.VacancyProcedureBean;
  10. import hr.vacancy.procedure.VacancyProcedureService;
  11. import lms.core.newprocedure.ProcedureBean;
  12. import lms.core.newprocedure.ProcedureService;
  13. import lms.core.newprocedure.member.PRMemberBean;
  14. import lms.core.newprocedure.member.PRMemberService;
  15. import lms.core.qua.profile.ReqQuaBean;
  16. import mira.vv.VVMessage;
  17. import org.mirapolis.mvc.model.entity.datafields.LookupField;
  18. import org.mirapolis.mvc.model.entity.fields.LookupFieldBuilder;
  19. import org.mirapolis.mvc.model.entity.fields.processors.ConstraintsFieldComponentProcessor;
  20. import org.mirapolis.mvc.view.clientscript.builders.LookupExpressionBuilder;
  21. import org.mirapolis.mvc.view.clientscript.expressions.BlockExpression;
  22. import org.mirapolis.mvc.view.clientscript.expressions.Expression;
  23. import org.mirapolis.orm.EntityManager;
  24. import org.mirapolis.orm.constraint.NotNull;
  25. import org.mirapolis.report.ReportTemplateParams;
  26. import org.mirapolis.report.creator.builder.java.JavaReport;
  27. import org.mirapolis.report.creator.format.Font;
  28. import org.mirapolis.report.creator.format.ReportRow;
  29. import org.mirapolis.report.creator.format.ReportStyle;
  30. import org.mirapolis.util.DateHelper;
  31. import org.mirapolis.util.StringHelper;
  32.  
  33. import java.util.*;
  34.  
  35. /**
  36. * PORTAL-33320
  37. * [ЭЙ-ПИ Трейд] Разработать отчетную форму по оценке кандидатов
  38. *
  39. * @author Anatoly Petrov
  40. * @since 19.09.2017
  41. */
  42. public class Report33320 extends JavaReport {
  43.  
  44. private static final String CANDIDATE = "candidate";
  45. private static final String VACANCY = "vacancy";
  46.  
  47. private ReportStyle titleStyle;
  48. private ReportStyle titleBoldUnderlineStyle;
  49. private ReportStyle tableMainStyle;
  50. private ReportStyle tableBoldStyle;
  51. private ReportStyle tableItalicUnderlineStyle; //для названий категорий компетенций
  52. private ReportStyle tableNumberStyle; //для ячеек с цифрами
  53.  
  54. @Override
  55. protected void buildReport() {
  56. initStyles();
  57.  
  58. CandidateBean candidate = getCandidate();
  59. VacancyBean vacancy = getVacancy();
  60.  
  61. writeTitle(candidate, vacancy);
  62. writeTableBody(candidate, vacancy);
  63. writer.setAllColumnsAutoWidth();
  64. }
  65.  
  66. private void initStyles() {
  67. titleStyle = writer.style().fontSize(11).setFont(Font.CALIBRI).setIsWrap(true);
  68. titleBoldUnderlineStyle = titleStyle.copy().bold().underline();
  69. tableMainStyle = titleStyle.copy().setBorder().verticalAlignment(TextAlignmentType.CENTER);
  70. tableBoldStyle = tableMainStyle.copy().bold();
  71. tableItalicUnderlineStyle = tableMainStyle.copy().underline().italic();
  72. tableNumberStyle = tableMainStyle.copy().horizontalAlignment(TextAlignmentType.CENTER);
  73. }
  74.  
  75. @SuppressWarnings("unchecked")
  76. private void writeTitle(CandidateBean candidate, VacancyBean vacancy) {
  77. writer.row().values(titleBoldUnderlineStyle, "Итоговый бланк оценки кандидата");
  78. writer.row().values(titleStyle, "Вакансия: " + vacancy.getTitle());
  79. writer.row().values(titleStyle, "Кандидат: " + candidate.getAtt().getFullName());
  80. writer.row().values(titleStyle, "Дата построения отчета: " + DateHelper.getInverseDate(new Date()));
  81. }
  82.  
  83. private void writeTableBody(CandidateBean candidate, VacancyBean vacancy) {
  84. writeTestingResultTablePart();
  85. writeCompetencesPart(candidate, vacancy);
  86. writeOutcomePart();
  87. }
  88.  
  89. private void writeTestingResultTablePart() {
  90. writeRowAndMergeFirstThreeColumns(tableBoldStyle, "БЛОК: «Результаты тестирования»");
  91. writeRowAndMergeSecondWithThird("Результаты тестирования КОТ (балл)");
  92. writeRowAndMergeSecondWithThird("Интерпретация результатов тестирования по КОТ");
  93. writeRowAndMergeSecondWithThird("Статус кандидата по итогам тестирования");
  94. writeRow(tableBoldStyle, "", "Тип мотивации", "Балл");
  95. writeRow("Результаты тестирования Герчиков (балл)");
  96. writeRow();
  97. writeRow("Результаты тестирования Герчиков");
  98. writeRow();
  99. writeRowAndMergeSecondWithThird("Рекомендации для руководителя по результатам тестирования");
  100. writeRow(tableBoldStyle, "", "Тип личности", "Интерпретация");
  101. writeRow("Результаты опросника MBTI (определение типа личности)");
  102. writeRow("Интерпретация результатов Герчиков");
  103. writeRow();
  104. writeRow("Результаты профессиональных тестов", "Баллы", "Интерпретация");
  105. writeRow();
  106. writeRow();
  107. writeRow();
  108. }
  109.  
  110. private void writeCompetencesPart(CandidateBean candidate, VacancyBean vacancy) {
  111. VacancyProcedureBean vacancyProcedure = VacancyProcedureService.getInstance().getVacancyProcedure(vacancy.getId());
  112. ProcedureBean procedure = vacancyProcedure != null ? ProcedureService.getProcedure(vacancyProcedure.getProcedureId()) : null;
  113. String memberId = getCandidateMemberId(candidate, vacancyProcedure);
  114. List<ReqQuaBean> requirements = vacancyProcedure == null ?
  115. new ArrayList<>() :
  116. VacancyProcedureService.getInstance().getRequirements(vacancyProcedure);
  117. Collections.sort(requirements, new ReqQuaBean.ByOrderComparator());
  118. writer.getDefaultMargin();
  119. }
  120.  
  121. private void writeOutcomePart() {
  122. writeRowAndMergeSecondWithThird("Заключение по кандидату");
  123. writeRowAndMergeSecondWithThird("Позиции на котороые кандидат может соответствовать");
  124. }
  125.  
  126. @SuppressWarnings("unchecked")
  127. private void writeRowAndMergeFirstThreeColumns(ReportStyle style, String value) {
  128. writer.row().values(style, value, "", "");
  129. writer.mergeCells(0, 1, 3);
  130. }
  131.  
  132. private void writeRowAndMergeSecondWithThird(String firstValue) {
  133. writeRowAndMergeSecondWithThird(tableMainStyle, firstValue);
  134. }
  135.  
  136. private void writeRowAndMergeSecondWithThird(ReportStyle style, String firstValue) {
  137. writeRowAndMergeSecondWithThird(style, firstValue, "");
  138. }
  139.  
  140. @SuppressWarnings("unchecked")
  141. private void writeRowAndMergeSecondWithThird(ReportStyle style, String firstValue, String secondValue) {
  142. writer.row().values(style, firstValue, secondValue, "");
  143. writer.mergeCells(1, 1, 2);
  144. }
  145.  
  146. private void writeRow() {
  147. writeRow(tableMainStyle);
  148. }
  149.  
  150. /**
  151. * @param style - хотя пишем пустые строки, но стиль все равно нужен для border-линий ячейки
  152. */
  153. private void writeRow(ReportStyle style) {
  154. writeRow(style, "");
  155. }
  156.  
  157. private void writeRow(String firstValue) {
  158. writeRow(tableMainStyle, firstValue);
  159. }
  160.  
  161. private void writeRow(ReportStyle style, String firstValue) {
  162. writeRow(style, firstValue, "", "");
  163. }
  164.  
  165. private void writeRow(String firstValue, String secondValue, String thirdValue) {
  166. writeRow(tableMainStyle, firstValue, secondValue, thirdValue);
  167. }
  168.  
  169. @SuppressWarnings("unchecked")
  170. private void writeRow(ReportStyle style, String firstValue, String secondValue, String thirdValue) {
  171. writer.row().values(style, firstValue, secondValue, thirdValue);
  172. }
  173.  
  174. @SuppressWarnings("unchecked")
  175. private void writeCompetenceCategoryRow(String categoryName) {
  176. ReportRow row = writer.row();
  177. row.cell().value(tableItalicUnderlineStyle, categoryName);
  178. row.values(tableMainStyle, "", "Комментарий");
  179. }
  180.  
  181. @Override
  182. public ReportTemplateParams createParams() {
  183. return new ReportTemplateParams()
  184. .addField(new LookupFieldBuilder(new LookupField(CANDIDATE, CandidateMessage.candidate, CandidateFrame.NAME))
  185. .setScriptOnChange(getCandidateExpression(true))
  186. .setScriptOnInit(getCandidateExpression(false))
  187. .addFieldComponentProcessor(new ConstraintsFieldComponentProcessor(new NotNull()))
  188. .getDataField())
  189. .addField(new LookupFieldBuilder(new LookupField(VACANCY, VVMessage.vacancy, VacancyFrame.NAME))
  190. .addFieldComponentProcessor(new ConstraintsFieldComponentProcessor(new NotNull()))
  191. .getDataField());
  192. }
  193.  
  194. private Expression getCandidateExpression(boolean change) {
  195. BlockExpression expression = new BlockExpression()
  196. .add(LookupExpressionBuilder.createExpressionForSetChoosingParamWithoutPrefix(VACANCY))
  197. .add(LookupExpressionBuilder.createExpressionForDisableFieldsIfEmptyElseEnable(VACANCY));
  198. if (change) {
  199. expression.add(LookupExpressionBuilder.createExpressionForClearFieldsIfCurrentEmpty(VACANCY));
  200. expression.add(LookupExpressionBuilder.createExpressionForClearFieldsIfCurrentNotEmpty(VACANCY));
  201. }
  202. return expression;
  203. }
  204.  
  205. private CandidateBean getCandidate() {
  206. CandidateBean candidate = new CandidateBean();
  207. candidate.setId(inputValues.getValue(CANDIDATE));
  208. EntityManager.loadWithChilds(candidate);
  209. return candidate;
  210. }
  211.  
  212. private VacancyBean getVacancy() {
  213. VacancyBean vacancy = new VacancyBean();
  214. vacancy.setId(inputValues.getValue(VACANCY));
  215. EntityManager.loadWithChilds(vacancy);
  216. return vacancy;
  217. }
  218.  
  219. private String getCandidateMemberId(CandidateBean candidate, VacancyProcedureBean vacancyProcedure) {
  220. if (vacancyProcedure == null || StringHelper.isEmpty(candidate.getPerson().getId())) {
  221. return null;
  222. }
  223. List<PRMemberBean> members = PRMemberService.listActiveProcedureMembersByPerson(candidate.getPerson().getId(), Collections.singletonList(vacancyProcedure.getProcedureId()));
  224. return members.isEmpty() ? null : members.get(0).getId();
  225. }
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement