Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ext.report;
- import com.aspose.cells.TextAlignmentType;
- import hr.candidate.CandidateBean;
- import hr.candidate.CandidateFrame;
- import hr.candidate.CandidateMessage;
- import hr.vacancy.VacancyBean;
- import hr.vacancy.VacancyFrame;
- import hr.vacancy.procedure.VacancyProcedureBean;
- import hr.vacancy.procedure.VacancyProcedureService;
- import lms.core.newprocedure.ProcedureBean;
- import lms.core.newprocedure.ProcedureService;
- import lms.core.newprocedure.member.PRMemberBean;
- import lms.core.newprocedure.member.PRMemberService;
- import lms.core.qua.profile.ReqQuaBean;
- import mira.vv.VVMessage;
- import org.mirapolis.mvc.model.entity.datafields.LookupField;
- import org.mirapolis.mvc.model.entity.fields.LookupFieldBuilder;
- import org.mirapolis.mvc.model.entity.fields.processors.ConstraintsFieldComponentProcessor;
- import org.mirapolis.mvc.view.clientscript.builders.LookupExpressionBuilder;
- import org.mirapolis.mvc.view.clientscript.expressions.BlockExpression;
- import org.mirapolis.mvc.view.clientscript.expressions.Expression;
- import org.mirapolis.orm.EntityManager;
- import org.mirapolis.orm.constraint.NotNull;
- import org.mirapolis.report.ReportTemplateParams;
- import org.mirapolis.report.creator.builder.java.JavaReport;
- import org.mirapolis.report.creator.format.Font;
- import org.mirapolis.report.creator.format.ReportRow;
- import org.mirapolis.report.creator.format.ReportStyle;
- import org.mirapolis.util.DateHelper;
- import org.mirapolis.util.StringHelper;
- import java.util.*;
- /**
- * PORTAL-33320
- * [ЭЙ-ПИ Трейд] Разработать отчетную форму по оценке кандидатов
- *
- * @author Anatoly Petrov
- * @since 19.09.2017
- */
- public class Report33320 extends JavaReport {
- private static final String CANDIDATE = "candidate";
- private static final String VACANCY = "vacancy";
- private ReportStyle titleStyle;
- private ReportStyle titleBoldUnderlineStyle;
- private ReportStyle tableMainStyle;
- private ReportStyle tableBoldStyle;
- private ReportStyle tableItalicUnderlineStyle; //для названий категорий компетенций
- private ReportStyle tableNumberStyle; //для ячеек с цифрами
- @Override
- protected void buildReport() {
- initStyles();
- CandidateBean candidate = getCandidate();
- VacancyBean vacancy = getVacancy();
- writeTitle(candidate, vacancy);
- writeTableBody(candidate, vacancy);
- writer.setAllColumnsAutoWidth();
- }
- private void initStyles() {
- titleStyle = writer.style().fontSize(11).setFont(Font.CALIBRI).setIsWrap(true);
- titleBoldUnderlineStyle = titleStyle.copy().bold().underline();
- tableMainStyle = titleStyle.copy().setBorder().verticalAlignment(TextAlignmentType.CENTER);
- tableBoldStyle = tableMainStyle.copy().bold();
- tableItalicUnderlineStyle = tableMainStyle.copy().underline().italic();
- tableNumberStyle = tableMainStyle.copy().horizontalAlignment(TextAlignmentType.CENTER);
- }
- @SuppressWarnings("unchecked")
- private void writeTitle(CandidateBean candidate, VacancyBean vacancy) {
- writer.row().values(titleBoldUnderlineStyle, "Итоговый бланк оценки кандидата");
- writer.row().values(titleStyle, "Вакансия: " + vacancy.getTitle());
- writer.row().values(titleStyle, "Кандидат: " + candidate.getAtt().getFullName());
- writer.row().values(titleStyle, "Дата построения отчета: " + DateHelper.getInverseDate(new Date()));
- }
- private void writeTableBody(CandidateBean candidate, VacancyBean vacancy) {
- writeTestingResultTablePart();
- writeCompetencesPart(candidate, vacancy);
- writeOutcomePart();
- }
- private void writeTestingResultTablePart() {
- writeRowAndMergeFirstThreeColumns(tableBoldStyle, "БЛОК: «Результаты тестирования»");
- writeRowAndMergeSecondWithThird("Результаты тестирования КОТ (балл)");
- writeRowAndMergeSecondWithThird("Интерпретация результатов тестирования по КОТ");
- writeRowAndMergeSecondWithThird("Статус кандидата по итогам тестирования");
- writeRow(tableBoldStyle, "", "Тип мотивации", "Балл");
- writeRow("Результаты тестирования Герчиков (балл)");
- writeRow();
- writeRow("Результаты тестирования Герчиков");
- writeRow();
- writeRowAndMergeSecondWithThird("Рекомендации для руководителя по результатам тестирования");
- writeRow(tableBoldStyle, "", "Тип личности", "Интерпретация");
- writeRow("Результаты опросника MBTI (определение типа личности)");
- writeRow("Интерпретация результатов Герчиков");
- writeRow();
- writeRow("Результаты профессиональных тестов", "Баллы", "Интерпретация");
- writeRow();
- writeRow();
- writeRow();
- }
- private void writeCompetencesPart(CandidateBean candidate, VacancyBean vacancy) {
- VacancyProcedureBean vacancyProcedure = VacancyProcedureService.getInstance().getVacancyProcedure(vacancy.getId());
- ProcedureBean procedure = vacancyProcedure != null ? ProcedureService.getProcedure(vacancyProcedure.getProcedureId()) : null;
- String memberId = getCandidateMemberId(candidate, vacancyProcedure);
- List<ReqQuaBean> requirements = vacancyProcedure == null ?
- new ArrayList<>() :
- VacancyProcedureService.getInstance().getRequirements(vacancyProcedure);
- Collections.sort(requirements, new ReqQuaBean.ByOrderComparator());
- writer.getDefaultMargin();
- }
- private void writeOutcomePart() {
- writeRowAndMergeSecondWithThird("Заключение по кандидату");
- writeRowAndMergeSecondWithThird("Позиции на котороые кандидат может соответствовать");
- }
- @SuppressWarnings("unchecked")
- private void writeRowAndMergeFirstThreeColumns(ReportStyle style, String value) {
- writer.row().values(style, value, "", "");
- writer.mergeCells(0, 1, 3);
- }
- private void writeRowAndMergeSecondWithThird(String firstValue) {
- writeRowAndMergeSecondWithThird(tableMainStyle, firstValue);
- }
- private void writeRowAndMergeSecondWithThird(ReportStyle style, String firstValue) {
- writeRowAndMergeSecondWithThird(style, firstValue, "");
- }
- @SuppressWarnings("unchecked")
- private void writeRowAndMergeSecondWithThird(ReportStyle style, String firstValue, String secondValue) {
- writer.row().values(style, firstValue, secondValue, "");
- writer.mergeCells(1, 1, 2);
- }
- private void writeRow() {
- writeRow(tableMainStyle);
- }
- /**
- * @param style - хотя пишем пустые строки, но стиль все равно нужен для border-линий ячейки
- */
- private void writeRow(ReportStyle style) {
- writeRow(style, "");
- }
- private void writeRow(String firstValue) {
- writeRow(tableMainStyle, firstValue);
- }
- private void writeRow(ReportStyle style, String firstValue) {
- writeRow(style, firstValue, "", "");
- }
- private void writeRow(String firstValue, String secondValue, String thirdValue) {
- writeRow(tableMainStyle, firstValue, secondValue, thirdValue);
- }
- @SuppressWarnings("unchecked")
- private void writeRow(ReportStyle style, String firstValue, String secondValue, String thirdValue) {
- writer.row().values(style, firstValue, secondValue, thirdValue);
- }
- @SuppressWarnings("unchecked")
- private void writeCompetenceCategoryRow(String categoryName) {
- ReportRow row = writer.row();
- row.cell().value(tableItalicUnderlineStyle, categoryName);
- row.values(tableMainStyle, "", "Комментарий");
- }
- @Override
- public ReportTemplateParams createParams() {
- return new ReportTemplateParams()
- .addField(new LookupFieldBuilder(new LookupField(CANDIDATE, CandidateMessage.candidate, CandidateFrame.NAME))
- .setScriptOnChange(getCandidateExpression(true))
- .setScriptOnInit(getCandidateExpression(false))
- .addFieldComponentProcessor(new ConstraintsFieldComponentProcessor(new NotNull()))
- .getDataField())
- .addField(new LookupFieldBuilder(new LookupField(VACANCY, VVMessage.vacancy, VacancyFrame.NAME))
- .addFieldComponentProcessor(new ConstraintsFieldComponentProcessor(new NotNull()))
- .getDataField());
- }
- private Expression getCandidateExpression(boolean change) {
- BlockExpression expression = new BlockExpression()
- .add(LookupExpressionBuilder.createExpressionForSetChoosingParamWithoutPrefix(VACANCY))
- .add(LookupExpressionBuilder.createExpressionForDisableFieldsIfEmptyElseEnable(VACANCY));
- if (change) {
- expression.add(LookupExpressionBuilder.createExpressionForClearFieldsIfCurrentEmpty(VACANCY));
- expression.add(LookupExpressionBuilder.createExpressionForClearFieldsIfCurrentNotEmpty(VACANCY));
- }
- return expression;
- }
- private CandidateBean getCandidate() {
- CandidateBean candidate = new CandidateBean();
- candidate.setId(inputValues.getValue(CANDIDATE));
- EntityManager.loadWithChilds(candidate);
- return candidate;
- }
- private VacancyBean getVacancy() {
- VacancyBean vacancy = new VacancyBean();
- vacancy.setId(inputValues.getValue(VACANCY));
- EntityManager.loadWithChilds(vacancy);
- return vacancy;
- }
- private String getCandidateMemberId(CandidateBean candidate, VacancyProcedureBean vacancyProcedure) {
- if (vacancyProcedure == null || StringHelper.isEmpty(candidate.getPerson().getId())) {
- return null;
- }
- List<PRMemberBean> members = PRMemberService.listActiveProcedureMembersByPerson(candidate.getPerson().getId(), Collections.singletonList(vacancyProcedure.getProcedureId()));
- return members.isEmpty() ? null : members.get(0).getId();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement