В EWA реалізоване налаштування візуальних форм для друку договору. Є декілька видів друкованих форм, які можна підключити до продукту:
* Дізнатись більш детально про додавання PDF-файлів в продукт ви можете за посиланням
|
НАЛАШТУВАННЯ ДРУКОВАНОЇ ФОРМИ
--------------------------------------------------------------------------------------------------------------------------------------------------------
1. Встановлення програми "Jasper"
--------------------------------------------------------------------------------------------------------------------------------------------------------
1. Установлення JDK (Windows):
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- В розділі Java SE Development Kit завантажуємо необхідний архівв (останню версію). Наприклад, для Windows x64 - jdk-8u251-windows-x64.exe
- Запускаємо та встановлюємо
2. В перемінному середовищі (Start -> Правою кнопкою на "Мій компьютер" -> Властивості -> Додаткові параметри системи -> Перемінні середовища -> Системні перемінні -> Створити) JAVA_HOME прописуємо шлях до JDK (наприклад, C:\Program Files\Java\jdk_версія).
3. Залишаючись в цьому вікні, обираємо перемінну середовища Path і додаємо в нього значення %JAVA_HOME%\bin (важно додати на початку перемінної)
4. Установлення TIBCO Jaspersoft Studio
https://community.jaspersoft.com/project/jaspersoft-studio/releases
- Завантажуємо останню версію Jaspersoft Studio (згідно вимог розрядності системи користувача)
- Запускаємо та встановлюємо
--------------------------------------------------------------------------------------------------------------------------------------------------------
2. Стиснення зображень/заливка на сервер
--------------------------------------------------------------------------------------------------------------------------------------------------------
1. У відкритому Microsoft Office через принтер Foxit Reader PDF створюємо PDF (https://www.foxitsoftware.com/ru/pdf-reader/)
2. Стискаємо PDF https://pdfcompressor.com/ru/ (також використовуємо якщо треба PDF файл залити в EWA)
3. Конвертуємо PDF в PNG https://pdf2png.com/ru/
4. Стискаємо PNG https://compresspng.com/ru/
5. Генеруємо GUID для перейменування файлів https://www.guidgenerator.com/online-guid-generator.aspx
6. Якщо сторінок декілька, то перейменовуємо, резервуючи останні символи для нумерації сторінок
ℹ️ Використання "подложки" значно спрощує налаштування друкованої форми, але дає мало можливостей для її подальшого коригування. За бажанням, друковану форму в програмі Jasper можна налаштовувати з нуля, додавая різні види полей та не використовуючи подложку. |
--------------------------------------------------------------------------------------------------------------------------------------------------------
3. Витягування даних з договору в ПФ
--------------------------------------------------------------------------------------------------------------------------------------------------------
1. Запускаємо конструктор друкованих форм TIBCO JaspersoftStudio.
2. Обираємо: File -> New -> Jasper Report -> Blank A4 -> Next -> Вказати назву (напр.: MyReport.jrxml) -> Finish
(за замовчуванням ДФ зберігаються в папку С:\Users\Користувач\JaspersoftWorkspace\MyReports\ ).
* Якщо для ДФ була попередньо залита подложка, на цьому етапі необхідно відкрити її, а не створювати нову ДФ
3. Блоки (Bands) Title, Page Header, Column Header, Column Footer, Page Footer, Summary необхідно видалити (виділити блок і натиснути Del), залишаємо тільки Detail 1.
4. Робимо активним блок Detail 1, далі натискаємо правою кнопкою миші та обираємо Maximize Band Height.
5. Далі можна конструєвати друковану форму шляхом вибору на вкладці Palette необхідного компоненту (як правило, для ДФ достатньо лише 3 компонентів: Text Field, Static Text, Image).
⚠️ Дозволяється використовуватиь тільки шріфти Arial Narrow и Times New Romans для коректної роботи друку та імпорту в PDF. |
Основні параметри для відображення на ДФ:
Типи договорів
ОСЦПВ | $F{contract} | ua.nexstep.evo.shared.model.Policy - ua.nexstep.evo.shared.model.tariff.policy.TariffPolicy |
Е-поліс ОСЦПВ | $F{contract} | ua.nexstep.evo.shared.model.EPolicy - ua.nexstep.evo.shared.model.tariff.policy.TariffEPolicy |
ДЦВ | $F{contract} | ua.nexstep.evo.shared.model.Vcl - ua.nexstep.evo.shared.model.tariff.vcl.TariffVcl |
Зелена картка | $F{contract} | ua.nexstep.evo.shared.model.GreenCard - ua.nexstep.evo.shared.model.tariff.greencard.TariffGreenCard |
Майно | $F{contract} | ua.nexstep.evo.shared.model.Property - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom |
КАСКО | $F{contract} | ua.nexstep.evo.shared.model.Kasko - ua.nexstep.evo.shared.model.tariff.kasko.TariffKasko |
Нещасний випадок | $F{contract} | ua.nexstep.evo.shared.model.Accident - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom |
Туризм | $F{contract} | ua.nexstep.evo.shared.model.Tourism - ua.nexstep.evo.shared.model.tariff.tourism.TariffTourism |
ДМС | $F{contract} | ua.nexstep.evo.shared.model.LiabilityMedicine - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom |
ЗНБ | $F{contract} | ua.nexstep.evo.shared.model.Health - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom |
Кастомний | $F{contract} | ua.nexstep.evo.shared.model.CustomContract - ua.nexstep.evo.shared.model.tariff.custom.TariffCustom |
Типи об'єктів страхування
Автомобіль | $F{insuranceObject} | ua.nexstep.evo.shared.model. InsuranceObjectAuto |
Марка, модель | $F{insuranceObject}.asAuto().getModelText() | java.lang.String |
Регістраційний номер | $F{insuranceObject}.asAuto().getStateNumber() | java.lang.String |
Ознака відсутності номеру кузова | $F{insuranceObject}.isDontHaveBodyNumber() | java.lang.Boolean |
Номер кузова | $F{insuranceObject}.asAuto().getBodyNumber() | java.lang.String |
За межами Україны (ознака) | $F{insuranceObject}.isOutsideUkraine() | java.lang.Boolean |
Місце реєстрації | $F{insuranceObject}.asAuto(). getRegistrationPlace().getNameFull() | java.lang.String |
Особа | $F{insuranceObject} | ua.nexstep.evo.shared.model. InsuranceObjectPerson |
"Назва (ПІБ)" | $F{insuranceObject}.getObjectName() | |
Прізвище (1 застрахований) | $F{contract}.getInsuranceObjects().get(0). asPerson().getNameLast() | |
Ім'я (1 застрахований) | $F{contract}.getInsuranceObjects().get(0). asPerson().getNameFirst() | |
По-батькові (1 застрахованни) | $F{contract}.getInsuranceObjects().get(0). asPerson().getNameMiddle() | |
Дата народження | $F{insuranceObject}.getBirthDate() пример: $F{insuranceObject}.getBirthDate(). format(DateUtils.DEFAULT_DATE_FORMATTER) | java.util.Date |
Код ЕДРПОУ/ІПН | $F{insuranceObject}.getCode() | java.lang.String |
Серія документу | $F{insuranceObject}.getDocument().getSeries() | java.lang.String |
Номер документу | $F{insuranceObject}.getDocument().getNumber() | java.lang.String |
Ким виданий документ | $F{insuranceObject}.getDocument().getIssuedBy() | java.lang.String |
Дата видачі документу | $F{insuranceObject}.getDocument().getDate() | java.util.Date |
Майно | $F{insuranceObject} | ua.nexstep.evo.shared.model. InsuranceObjectProperty |
Назва | $F{insuranceObject}.getObjectName() | java.lang.String |
Адреса об'єкту | $F{insuranceObject}.getAddress() | java.lang.String |
Договір
EWA-код договору | $F{contract}.getCode() пример: "№ EWA-" + ($F{contract}.getCode() != null ? $F{contract}.getCode() : "") | java.lang.String |
Номер договору | $F{number} пример: ($F{number} != null ? $F{number} : $F{code}) | java.lang.String |
Серія та номер бланку без пробілу | $V{varNumberTrim} != null ? $V{varNumberTrim} : $F{code} | java.lang.String |
Номер бланку без серії | $F{number} != null ? $F{number}.substring($F{number}.indexOf(" ") + 1) : "" | java.lang.String |
Номер договору з додаванням нулів | <variable name="varNumberList" class="java.util.List"> <variableExpression><![CDATA[Arrays.asList($F{number}.replaceAll("\\p{Z}","-").split("-", 2))]]></variableExpression> </variable> <variable name="varContractNumber" class="java.lang.String"> <variableExpression><![CDATA[$V{varNumberList}.size() > 1 ? $V{varNumberList}.get(1) : ""]]></variableExpression> </variable> <variable name="varContractSeries" class="java.lang.String"> <variableExpression><![CDATA[$V{varNumberList}.size() > 0 ? $V{varNumberList}.get(0) : ""]]></variableExpression> </variable> <variable name="varContractSeriesAndNumber" class="java.lang.String"> <variableExpression><![CDATA[($V{varContractSeries} != null ? ($V{varContractSeries} + " ") : "") + ($V{varContractNumber} != null ? new DecimalFormat("0000000").format(Integer.parseInt ($V{varContractNumber})) : "")]]></variableExpression> </variable> | |
Дата договору | $F{date} пример: $F{date}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy р.")) | java.util.Date |
Дата початку | $F{dateFrom} пример: $F{dateFrom}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")) | java.util.Date |
Дата закінчення | $F{dateTo} пример: $F{dateTo}.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")) | java.util.Date |
Дата створення договору | $F{created} | java.util.Date |
Страхова сума (ліміт) | $F{limit} | java.math.BigDecimal |
Страхова сума | $F{insuranceAmount} | java.math.BigDecimal |
Страховий платіж | $F{payment} | java.math.BigDecimal |
Франшиза | $F{franchise} | java.math.BigDecimal |
Договір Туризм | ||
Кількість днів | $F{contract}.getCoverageDays() | java.lang.Long |
Кількість застрахованих | $F{contract}.getInsuranceObjects().size() | java.lang.Long |
Програма страхування | $F{contract}.getCustomFieldValue("travel_program") | java.lang.String |
Кількість поїздок | $F{contract}.isMultivisa() | java.lang.Boolean |
Зона покриття | $F{contract}.getCoverageTerritory().getShortName() | java.lang.String |
Країна поїздки | $F{contract}.getCountry().getNameInEnglish() |
Страхувальник
Назва (ПІБ) | $F{customer}.getName() | java.lang.String |
Прізвище | $F{customer}.getNameLast() | java.lang.String |
Ім'я | $F{customer}.getNameFirst() | java.lang.String |
По-батькові | $F{customer}.getNameMiddle() | java.lang.String |
Дата народження | $F{customer}.getBirthDate() пример: (!$F{customer}.isLegal() && $F{customer}.getBirthDate() != null) ? $F{customer}.getBirthDate().format(DateTimeFormatter.ofPattern("dd.MM.yyyy р.")) : "") | java.util.Date |
Адреса | $F{customer}.getAddress() пример: ($F{customer}.getAddress() != null ? $F{customer}.getAddress() : "") | java.lang.String |
ЕДРПОУ/ ІПН | $F{customer}.getCode() пример: ($F{customer}.getCode() != null ? $F{customer}.getCode() : "") | java.lang.String |
OTP-пароль | $F{customerOtp} пример: ($F{customerOtp} != null ? $F{customerOtp} : "") | |
Коротко ПІБ (для підпису) | $F{customer}.getShortName() | java.lang.String |
Телефон | $F{customer}.getPhone() пример: ($F{customer}.getPhone() != null ? $F{customer}.getPhone() : "") | java.lang.String |
Е-mail | $F{customer}.getEmail() пример: ($F{customer}.getEmail() != null ? $F{customer}.getEmail() : "") | java.lang.String |
Юр. особа (ознака) | $F{customer}.isLegal() | java.lang.Boolean |
Тип документу | ServerMessages.MESSAGES.customerDocumentTypeText ($F{customer}.getDocument().getType(), ServerMessages.UKRAINIAN) предварительно добавить библиотеку ua.nexstep.evo.server.internationalization.* | |
Серія документу | $F{customer}.getDocument().getSeries() пример: ($F{customer}.getDocument().getSeries() != null ? $F{customer}.getDocument().getSeries(): "") | java.lang.String |
Номер документу | $F{customer}.getDocument().getNumber() пример: ($F{customer}.getDocument().getNumber() != null ? $F{customer}.getDocument().getNumber(): "") | java.lang.String |
Ким виданий документ | $F{customer}.getDocument().getIssuedBy() пример: ($F{customer}.getDocument().getIssuedBy() != null ? (" виданий " + $F{customer}.getDocument().getIssuedBy()) : "") | java.lang.String |
Дата видачі документу | $F{customer}.getDocument().getDate() пример: ($F{customer}.getDocument().getDate() != null ? (" від " + $F{customer}.getDocument().getDate(). format(DateTimeFormatter.ofPattern("dd.MM.yyyy р."))) : "") | java.util.Date |
Документ Страхувальника | (ServerMessages.MESSAGES.customerDocumentTypeText ($F{customer}.getDocument().getType(), ServerMessages.UKRAINIAN) +": " + ($F{customer}.getDocument() != null ? ($F{customer}.getDocument().getSeries() != null ? ($F{customer}.getDocument().getSeries()+ " ") : "") + ($F{customer}.getDocument().getNumber() != null ? $F{customer}.getDocument().getNumber() : "___________") + ($F{customer}.getDocument().getIssuedBy() != null ? (" виданий " + $F{customer}.getDocument().getIssuedBy()) : "") + ($F{customer}.getDocument().getDate() != null ? (" від " + $F{customer}.getDocument().getDate().format (DateTimeFormatter.ofPattern("dd.MM.yyyy р."))) : "") : "")) |
Платежи
Платежі за договор | $F{contract}.getPayments() |
1 платіж | $F{contract}.getPayments().size() > 0 ? (new DecimalFormat("#,##0.00").format($F{contract}.getPayments().get(0).getPayment())) : (new DecimalFormat("#,##0.00").format($F{payment})) |
2 платежі | $F{contract}.getPayments().size() > 1 ? (new DecimalFormat("#,##0.00").format($F{contract}.getPayments().get(1).getPayment())) : "" |
Дата 2-го платежа | ($F{contract}.getPayments().size() > 1 ? ("до 24.00 " + $F{contract}.getPayments().get(1).getDate().format(DateUtils.DEFAULT_DATE_FORMATTER) + " р.") : "") |
Даты (преобразование)
Перемінні | TRANSFER_DATE_FORMAT = "yyyy-MM-dd" TRANSFER_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" DEFAULT_DATE_FORMAT = "dd.MM.yyyy" DEFAULT_DATE_TIME_FORMAT = "dd.MM.yyyy HH:mm:ss" |
Перетворення дати з кастомного поля | LocalDate.parse($F{contract}.getCustomFieldValue("osago_date"), DateUtils.TRANSFER_DATE_FORMATTER).format(DateUtils.DEFAULT_DATE_FORMATTER) |
Періоди страхування по рокам | "<b>5.2.1.</b> Перший період страхування – з 00.00 год. " + $F{dateFrom}.format(DateUtils.DEFAULT_DATE_FORMATTER) + " по 24.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR).format(DateUtils.DEFAULT_DATE_FORMATTER) + " р." + "\n" + ((DateUtils.yearsBetween($F{dateFrom}.toLocalDate(), $F{dateTo}) > 1) ? ( "<b>5.2.2.</b> Другий період страхування – з 00.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR).plusDays(1).format(DateUtils.DEFAULT_DATE_FORMATTER) + " по 24.00 год. " + DateUtils.addMonthsToDateMinusOneDay($F{dateFrom}.toLocalDate(), DateUtils.MONTHS_IN_YEAR * 2).format(DateUtils.DEFAULT_DATE_FORMATTER) + " р." + "\n") : "") |
Місяць рядком | $F{dateFrom}.format(DateTimeFormatter.ofPattern("«dd» MMMM yyyy", new Locale("uk"))) |
Кількість днів дії договору | DateUtils.daysBetween($F{dateTo}, $F{dateFrom}.toLocalDate()) |
Суми/числові значення
Страховий платіж | $F{payment} пример: ($F{payment} != null ? new DecimalFormat("#,##0.00").format($F{payment}) : "") |
Страхова сума | $F{insuranceAmount} пример: ($F{insuranceAmount} != null ? new DecimalFormat("#,##0.00").format($F{insuranceAmount}) : "") |
Дійсна вартість ТЗ (КАСКО) | new DecimalFormat("#,##0.00").format($F{insuranceObject}.getPrice()) |
Страхова сума прописом | (Long.toString($F{insuranceAmount}.longValue()) + " грн. " + String.format("%02d", $F{insuranceAmount}.subtract($F{insuranceAmount}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().longValue()) + " коп. (" + String.format( "%s грн. %02d коп.", new RuleBasedNumberFormat(new Locale("uk"), RuleBasedNumberFormat.SPELLOUT).format( $F{insuranceAmount}.longValue(), "%spellout-cardinal-feminine"), $F{insuranceAmount}.subtract($F{insuranceAmount}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().intValue()) + ") ") |
Страховий платіж прописом | (Long.toString($F{payment}.longValue()) + " грн. " + String.format("%02d", $F{payment}.subtract($F{payment}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().longValue()) + " коп. (" + String.format( "%s грн. %d коп.", new RuleBasedNumberFormat(new Locale("uk"), RuleBasedNumberFormat.SPELLOUT).format( $F{payment}.longValue(), "%spellout-cardinal-feminine"), $F{payment}.subtract($F{payment}.setScale(0, RoundingMode.DOWN)).setScale(2, RoundingMode.HALF_DOWN).unscaledValue().intValue()) + ") ") |
Страховой тариф (розрахунковий) | ($F{insuranceAmount} != null ? new DecimalFormat("#,##0.00##").format($F{payment}. divide($F{insuranceAmount}, new MathContext(8)).multiply(new BigDecimal("100"), new MathContext(4))) : "") |
Інші поля
Зовнішній ідентифікатор точки продаж | ($F{contract}.getSalePoint().getCode() != null ? $F{contract}.getSalePoint().getCode() : "") |
Кастомні (настраюваня) поля
на рівні договору | $F{contract}.getCustomFieldValue("iznos") |
на рівні договору (значення коефіцієнта) | $F{contract}.getCustomFieldCoeff("region_im") |
на рівні об'єкту страхування | $F{insuranceObject}.getCustomFieldValue("kasko_expert") |
на рівні ризику | $F{contract}.getRisk(1L).getCustomFieldValue("sport") |
якщо поле типу "список", можна витягувати "назву" зі списку | $F{contract}.getCustomFieldDisplayValue("representative_insurer_new") |
--------------------------------------------------------------------------------------------------------------------------------------------------------
4. Загрузка друкованої форми в EWA
--------------------------------------------------------------------------------------------------------------------------------------------------------
Друковані форми в EWA знаходяться в меню налаштувань - "Шаблони друкованих форм":
Для додання нової друкованої форми можна обрати варіант "Створити" або "Копіювати" (для використання параметрів вже існуючої друкованої форми).
Для створення нової ДФ необхідно натиснути кнопку "Створити", обрати тип форми "Jasper".
На вкладці "Основна інформація" необхідно заповнити поля:
Назва | Вказати назву ДФ |
Вміст | Необхідно завантажити файл друкованої форми з розширенням *.jrxml. Натиснувши на кнопку "Обрати", завантажити файл з вашого компьютера. Щоб скачати файл вже існуючої форми на компьютер користувача, необхідно натиснути на кнопку "Завантажити файл друкованої форми" |
Чорновик Накладення ЕЦП Відправляти ДФ Страхувальнику Тип договору | Відмітити галочками необхідні поля |
Параметри | Зазначити параметрі відображення ДФ |
Примітки | За необхідимості до друкованої форми можна додати коментар |
Період дії | Зазначити період дії друкованої форми |
На вкладці “Страхові продукти” будуть відображені страхові продукти, до яких дана друкована форма прикріплена.