Advertisement
Guest User

Untitled

a guest
Mar 10th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 51.14 KB | None | 0 0
  1. import java.awt.ModalEventFilter.ApplicationModalEventFilter;
  2.  
  3. import java.text.NumberFormat;
  4. import java.util.List;
  5. import java.util.logging.Logger;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8.  
  9. import javax.activation.DataHandler;
  10. import javax.mail.util.ByteArrayDataSource;
  11.  
  12. import org.bonitasoft.engine.bpm.document.Document;
  13. import org.bonitasoft.engine.bpm.document.DocumentNotFoundException;
  14.  
  15. import com.bonitasoft.engine.api.ProcessAPI;
  16. import com.google.common.base.Optional;
  17. import com.tieto.zumis.utils.data.text.ZumisMoneyFormatter;
  18.  
  19. import lt.inntec.b2bintegrations.kppais.ws.types.Kp2KontaktInfoOtUser;
  20. import lt.inntec.b2bintegrations.kppais.ws.types.Kp2ParSutDuomenysOtUser;
  21. import lt.inntec.b2bintegrations.kppais.ws.types.Kp2TektinuByluSarOtUser;
  22. import lt.inntec.b2bintegrations.kppais.ws.types.Kp2TurimuBylSarasasOtUser;
  23. import lt.inntec.b2bintegrations.kppaisDok.builder.AsmuoBuilder;
  24. import lt.inntec.b2bintegrations.kppaisDok.builder.FinansavimoSaltinisBuilder;
  25. import lt.inntec.b2bintegrations.kppaisDok.builder.IlgalaikisTurtasBuilder;
  26. import lt.inntec.b2bintegrations.kppaisDok.builder.IslaidaBuilder;
  27. import lt.inntec.b2bintegrations.kppaisDok.builder.IslaiduEiluteBuilder;
  28. import lt.inntec.b2bintegrations.kppaisDok.builder.Kp2PrDuomWsBuilder;
  29. import lt.inntec.b2bintegrations.kppaisDok.builder.PagrindimasBuilder;
  30. import lt.inntec.b2bintegrations.kppaisDok.builder.PiaDuomBuilder;
  31. import lt.inntec.b2bintegrations.kppaisDok.builder.PapildomaInformacijaBuilder;
  32. import lt.inntec.b2bintegrations.kppaisDok.builder.AsmuoBuilder.DalyvavimoProjekteTipas;
  33. import lt.inntec.b2bintegrations.kppaisDok.builder.PapildomaInformacijaBuilder.PapildomosInfoKategorija;
  34. import lt.inntec.b2bintegrations.kppaisDok.builder.PriedasBuilder;
  35. import lt.inntec.b2bintegrations.kppaisDok.builder.PriesagaBuilder;
  36. import lt.inntec.b2bintegrations.kppaisDok.builder.PrieziurosRodiklisBuilder;
  37. import lt.inntec.b2bintegrations.kppaisDok.builder.ProdukcijaBuilder;
  38. import lt.inntec.b2bintegrations.kppaisDok.builder.ProdukcijaBuilder.PienoKvotosIsigijimoSaltinis;
  39. import lt.inntec.b2bintegrations.kppaisDok.builder.ProdukcijaBuilder.ProdukcijosTipas;
  40. import lt.inntec.b2bintegrations.kppaisDok.builder.ProjektoIgyvendinimoAtaskaitaBuilder.AtaskaitosTipas;
  41.  
  42. import lt.inntec.b2bintegrations.kppaisDok.builder.ZemevalduInfoBuilder;
  43. import lt.inntec.b2bintegrations.kppaisDok.ws.DokPriesagaWs;
  44. import lt.inntec.b2bintegrations.kppaisDok.ws.Kp2ErrParmListOt;
  45. import lt.inntec.b2bintegrations.kppaisDok.ws.Kp2ErrorOt;
  46. import lt.inntec.b2bintegrations.kppaisDok.ws.Kp2InvIlgMaterTurtoEilOt;
  47. import lt.inntec.b2bintegrations.kppaisDok.ws.Kp2InvZemevInfoEilOt;
  48. import lt.inntec.b2bintegrations.pris.ws.PrsDpgOtUser;
  49.  
  50. import static lt.inntec.b2bintegrations.kppaisDok.builder.ZemevalduInfoBuilder.ZemevaldosNuosavybesTipas.NUOMOJAMA
  51. import static lt.inntec.b2bintegrations.kppaisDok.builder.ZemevalduInfoBuilder.ZemevaldosNuosavybesTipas.NUOSAVA
  52. import static lt.inntec.b2bintegrations.kppaisDok.builder.ZemevalduInfoBuilder.ZemevaldosRodiklioMetai.ATASKAITINIAI
  53. import static lt.inntec.b2bintegrations.kppaisDok.builder.ZemevalduInfoBuilder.ZemevaldosRodiklioMetai.PARAISKOS_PATEIKIMO
  54.  
  55. import java.util.logging.Logger; // FIXME
  56.  
  57. public static final Double getTotalExpensesWithVat_I64(List<Map> expensesMultipleGroup){   
  58.         Double total = Double.valueOf(0);
  59.         for (Map oneExpenseGroup: expensesMultipleGroup){
  60.           Double enteredExpensesWithoutVats = ZumisWidgetHelper.getFieldsGroupSumAsDouble(oneExpenseGroup.get("expenses_data"), "sum_wo_vat");
  61.           Double enteredExpensesVats = ZumisWidgetHelper.getFieldsGroupSumAsDouble(oneExpenseGroup.get("expenses_data"), "sum_vat");
  62.      
  63.           Double enteredExpensesWithoutVatsSafe = enteredExpensesWithoutVats? enteredExpensesWithoutVats: Double.valueOf(0);
  64.           Double enteredExpensesVatsSafe = enteredExpensesVats? enteredExpensesVats: Double.valueOf(0);
  65.           total += enteredExpensesWithoutVatsSafe;
  66.           total += enteredExpensesVatsSafe;
  67.         }
  68.         return total;
  69. }
  70.  
  71. public static final Double getTotalExpensesSum(List<Map> expensesMultipleGroup, final String sumFieldKey){
  72.     Double total = Double.valueOf(0);
  73.     for (Map oneExpenseGroup: expensesMultipleGroup){
  74.       Double enteredExpensesWithoutVats = ZumisWidgetHelper.getFieldsGroupSumAsDouble(oneExpenseGroup.get("expenses_data"), sumFieldKey);
  75.  
  76.       if (enteredExpensesWithoutVats != null && enteredExpensesWithoutVats.doubleValue() >= Double.valueOf(0.0)) {
  77.           total += enteredExpensesWithoutVats.doubleValue();
  78.       }
  79.     }
  80.     return total;
  81. }
  82.  
  83. public static final Double getTotalFinancing_I64(Map financialSourcesGroup){
  84.     Double total = Double.valueOf(0);
  85.     NumberFormat formatter = NumberFormat.getInstance(new Locale("lt"));
  86.     String supportFundsAsString = financialSourcesGroup.get("support_funds_group")?.get("support_funds");
  87.     String applicantFundsAsString = financialSourcesGroup.get("applicant_funds_group")?.get("applicant_funds");
  88.     String creditFundsAsString = financialSourcesGroup.get("credit_funds_group")?.get("credit_funds");
  89.     Double supportFunds = ZumisWidgetHelper.parseStringToDouble(supportFundsAsString, formatter);
  90.     Double applicantFunds = ZumisWidgetHelper.parseStringToDouble(applicantFundsAsString, formatter);
  91.     Double creditFunds = ZumisWidgetHelper.parseStringToDouble(creditFundsAsString, formatter);
  92.     total += supportFunds ? supportFunds : Double.valueOf(0);
  93.     total += applicantFunds ? applicantFunds : Double.valueOf(0);
  94.     total += creditFunds ? creditFunds : Double.valueOf(0);
  95.     return total;
  96. }
  97.  
  98. /**
  99.  * Calculates project end date by project stages list
  100.  * @param stages
  101.  * @return
  102.  */
  103. public static Date calcProjectEndDate(final List<Map<String, Object>> stages) {
  104.     if (stages != null && !stages.isEmpty()) {
  105.         Map<String, Object> lastStage = stages.get(stages.size() - 1);
  106.        
  107.         if (lastStage != null && !lastStage.isEmpty()) {
  108.             Object d = lastStage.get("stage_date");
  109.            
  110.             if (d != null && d instanceof Date) {
  111.                 return (Date) d;
  112.             }
  113.         }
  114.     }
  115.    
  116.     return null;
  117. }
  118.  
  119. /**
  120.  * @deprecated - use KPPAISHelper_PR.addMonitoringIndicators(Kp2PrDuomWsBuilder, List, String, String, Map)
  121.  */
  122. @Deprecated
  123. public static void addMonitoringData(final Kp2PrDuomWsBuilder builder, final Map monitoringIndicatorsData, final Map<String, Date> monitoringIndicatorDates) {
  124.     if (monitoringIndicatorsData != null && !monitoringIndicatorsData.isEmpty()) {
  125.         for (final String key : monitoringIndicatorsData.keySet()) {
  126.             Object value = monitoringIndicatorsData.get(key);
  127.            
  128.             if (value != null && value instanceof Map) {
  129.                 Map<String, Object> mainMap = (Map<String, Object>) value;
  130.                
  131.                 if (!mainMap.isEmpty()) {
  132.                     for (final String subKey : mainMap.keySet()) {
  133.                         Object subValue = mainMap.get(subKey);
  134.                        
  135.                         if (subValue != null && subValue instanceof List) {
  136.                             List<Object> pprMainList = (List<Object>) subValue;
  137.                            
  138.                             if (!pprMainList.isEmpty()) {
  139.                                 for (final Object row : pprMainList) {
  140.                                     if (row instanceof Map) {
  141.                                         final Map<String, Object> rowMap = (Map<String, Object>) row;
  142.                                        
  143.                                         PrieziurosRodiklisBuilder prb = new PrieziurosRodiklisBuilder();
  144.                                         boolean added = false;
  145.                                         String code = null;
  146.  
  147.                                         for (final String rowKey : rowMap.keySet()) {
  148.                                             final Object rowValue = rowMap.get(rowKey);
  149.                                             if (rowKey != null && rowValue != null) {
  150.                                                 if (rowKey.startsWith("PPR_positive_sales_delta")) {
  151.                                                     prb.teigiamasPokytus("T".equals(rowValue));
  152.                                                     added = true;
  153.                                                 } else if (rowKey.startsWith("PPR_measure_unit")) {
  154.                                                     final String val = rowValue.toString().trim();
  155.                                                     prb.matavimoVienetas(val.equalsIgnoreCase("null") ? null : val);
  156.                                                     added = true;
  157.                                                 } else if (rowKey.startsWith("PPR_label_code")) {
  158.                                                     prb.kodas(rowValue.toString().trim());
  159.                                                     code = rowValue.toString().trim();
  160.                                                     added = true;
  161.                                                 } else if (rowKey.startsWith("PPR_sales_income")) {
  162.                                                     prb.reiksmePries(ZumisWidgetHelper.objectToDouble(rowValue));
  163.                                                     added = true;
  164.                                                 }
  165.                                             }
  166.                                         }
  167.                                        
  168.                                         if (added) {
  169.                                             prb.galiojaNuo(monitoringIndicatorDates.get(code));
  170.                                             builder.prieziurosRodiklis(prb.build());
  171.                                         }
  172.                                     }
  173.                                 }
  174.                             }
  175.                         }
  176.                     }
  177.                 }
  178.             }
  179.         }
  180.     }
  181. }
  182.  
  183. public static void addFinancialSources(Kp2PrDuomWsBuilder builder, final Map financialSourcesData, final Map<String, Date> financialSourceDates) {
  184.     if (financialSourcesData != null && !financialSourcesData.isEmpty()) {
  185.         NumberFormat formatter = NumberFormat.getInstance(new Locale("lt"));
  186.        
  187.         for (final String key : financialSourcesData.keySet()) {
  188.             final Object value = financialSourcesData.get(key);        
  189.             if (value != null && value instanceof Map) {
  190.                 Map<String, Object> fundsMap = (Map) value;
  191.                
  192.                 if (!fundsMap.isEmpty()) {
  193.                     boolean sumExists = false;
  194.                     boolean codeExists = false;
  195.                     String code = null;
  196.                     FinansavimoSaltinisBuilder fsb = new FinansavimoSaltinisBuilder();
  197.                     StringBuilder link = new StringBuilder();
  198.                    
  199.                     for (final String rowKey : fundsMap.keySet()) {
  200.                         Object rowValue = fundsMap.get(rowKey);                
  201.                         if (rowValue != null) {
  202.                             if (rowKey.endsWith("_funds")) {
  203.                                 String v = rowValue.toString().replaceAll("\\s+", "").replace(".", ",");               
  204.                                 if (!v.isEmpty() && v.matches("[0-9]+,?[0-9]*")) {
  205.                                     fsb.suma(formatter.parse(v).doubleValue());
  206.                                     sumExists = true;
  207.                                 }
  208.                             } else if (rowKey.endsWith("_funds_link")) {               
  209.                                 link.append(link.length() > 0 ? "; " : "").append(rowValue.toString());
  210.                                 //added = true;
  211.                             } else if (rowKey.endsWith("_funds_code")) {                       
  212.                                 fsb.kodas(rowValue.toString().trim());
  213.                                 code = rowValue.toString().trim();
  214.                                 codeExists = true;
  215.                             } else if (rowKey.endsWith("_funds_sub_code")) {
  216.                                 if (rowValue instanceof List) {
  217.                                     for (final String scode : (List<String>) rowValue) {
  218.                                         link.append(link.length() > 0 ? "; " : "").append(scode);
  219.                                     }
  220.                                 } else if (rowValue instanceof String) {
  221.                                     link.append(link.length() > 0 ? "; " : "").append((String) rowValue);
  222.                                 }
  223.                                 //added = true;
  224.                             } else if (rowKey.endsWith("_funds_from")) {
  225.                                 final String v = rowValue?.toString()?.trim();
  226.                                 link.append(link.length() > 0 ? "; " : "").append(v);
  227.                             }
  228.                         }
  229.                     }
  230.                    
  231.                     if (sumExists && codeExists) {
  232.                         fsb.galiojaNuo(financialSourceDates.get(code));
  233.                         fsb.nuoroda(link.toString().trim().substring(0, Math.min(link.toString().trim().length(), 250)));
  234.                         builder.finansavimoSaltinis(fsb.build());
  235.                     }
  236.                 }
  237.             }
  238.         }
  239.     }
  240. }
  241.  
  242. /**
  243.  *
  244.  * @param builder
  245.  * @param projectInovations
  246.  * @deprecated - use KPPAISHelper_PR.addProjectInovations(Kp2PrDuomWsBuilder, List, String, String)
  247.  */
  248. @Deprecated
  249. public static void addProjectInovations(Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> projectInovations) {
  250.     if (projectInovations != null && !projectInovations.isEmpty()) {
  251.         for (final Map<String, Object> row : projectInovations) {
  252.             PapildomaInformacijaBuilder pib = new PapildomaInformacijaBuilder();
  253.             pib.papildomosInfoKategorija(PapildomosInfoKategorija.INOVATYVUMAS);
  254.             pib.pazymetas(true);
  255.            
  256.             boolean activeAndHasId = false;
  257.            
  258.             for (final String key : row.keySet()) {
  259.                 final Object value = row.get(key);
  260.  
  261.                 if (value != null) {
  262.                     if (key.endsWith("_active")) {
  263.                         if (value instanceof Boolean) {
  264.                             if (!Boolean.TRUE.equals((Boolean) value)) {
  265.                                 activeAndHasId = false;
  266.                                 continue;
  267.                             }
  268.                         } else if (!Boolean.TRUE.equals(Boolean.valueOf(value.toString()))) {
  269.                             activeAndHasId = false;
  270.                             continue;
  271.                         }
  272.                         activeAndHasId = true;
  273.                     } else if (key.endsWith("_code") && value.toString().matches("[0-9]+")) {
  274.                         pib.papildomosInfoId(Long.parseLong(value.toString(), 10));
  275.                         activeAndHasId = true;
  276.                     } else if (key.endsWith("_argument")) {
  277.                         pib.patikslinimas(value.toString());
  278.                     }
  279.                 }
  280.             }
  281.            
  282.             if (activeAndHasId) {
  283.                 builder.papildomaInformacija(pib.build());
  284.             }
  285.         }
  286.     }
  287. }
  288.  
  289. public static void addMilkProductData(Kp2PrDuomWsBuilder builder, final Map<String, Object> milkData) {
  290.     if (milkData != null && !milkData.isEmpty()) {
  291.         final Object list = milkData.get("PG_main");
  292.        
  293.         if (list != null && list instanceof List) {
  294.             Map<String, String> map = new HashMap<String, String>();
  295.             map.put(ProdukcijosTipas.P.code, ProdukcijosTipas.P.code);
  296.             addProducts(builder, (List<Map<String, Object>>) list, map, true);
  297.         }
  298.        
  299.         final boolean increase = "T".equalsIgnoreCase(milkData.get("PG_question_about_milk_quantity"));
  300.         final Object incGroup = milkData.get("PG_increasing_milk_quantity_group");
  301.        
  302.         if (increase && incGroup != null && incGroup instanceof Map) {
  303.             Map<String, Object> quotaMap = (Map<String, Object>) incGroup;
  304.             final Object sources = quotaMap.get("PG_milk_quota_source");
  305.             final String sourceCustom = String.valueOf(quotaMap.get("PG_other_milk_quota_source"));
  306.            
  307.             if (sources != null && sources instanceof List) {
  308.                
  309.                 PienoKvotosIsigijimoSaltinis saltinis = null;
  310.                 List<String> sourcesList = (List<String>) sources;
  311.                
  312.                 if (sourcesList.contains(PienoKvotosIsigijimoSaltinis.PERKAMA.code)) {
  313.                     if (sourcesList.contains(PienoKvotosIsigijimoSaltinis.KITI.code)) {
  314.                         saltinis = PienoKvotosIsigijimoSaltinis.PERKAMA_IR_KITI;
  315.                     } else {
  316.                         saltinis = PienoKvotosIsigijimoSaltinis.PERKAMA;
  317.                     }
  318.                 } else if (sourceCustom.contains(PienoKvotosIsigijimoSaltinis.KITI.code)) {
  319.                     saltinis = PienoKvotosIsigijimoSaltinis.KITI;
  320.                 }
  321.                
  322.                 if (saltinis != null) {
  323.                     builder.produkcija(new ProdukcijaBuilder()
  324.                                 .kvotosIsigijimoSaltinis(saltinis)
  325.                                 .patikslinimas(String.valueOf(sourceCustom))
  326.                                 .produkcijosTipas(ProdukcijosTipas.P)
  327.                                 .produkcijosRusiesTipas(ProdukcijosTipas.P.code)
  328.                                 .planuojaDidintiPienoGamyba(increase)
  329.                                 .produkcijosRusis("PK")
  330.                                 .build(false, false));
  331.                 }
  332.             }
  333.         }
  334.     }
  335. }
  336.  
  337. public static void addProducts(Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> data, final Map<String, String> codeToTypeMap, final boolean autoCalc) {
  338.     if (data != null && !data.isEmpty()) {
  339.         for (final Map<String, Object> row : data) {
  340.             ProdukcijaBuilder pb = new ProdukcijaBuilder();
  341.             String code = null;
  342.            
  343.             for (final String key : row.keySet()) {
  344.                 Object value = row.get(key);
  345.                
  346.                 if (value != null) {
  347.                     if (key.endsWith("_income_from_sales")) {
  348.                         pb.pardavimoPajamos(ZumisWidgetHelper.objectToDouble(value));
  349.                     } else if (key.endsWith("_area")) {
  350.                         pb.plotas(ZumisWidgetHelper.objectToDouble(value));
  351.                     } else if (key.endsWith("_sold_amount") || key.endsWith("_sold_milk")) {
  352.                         pb.parduota(ZumisWidgetHelper.objectToDouble(value));
  353.                     } else if (key.endsWith("_product")) {
  354.                         String pr = value.toString().trim();
  355.                         if ("Pienas".equals(pr)) {
  356.                             pb.produkcijosRusis("P");
  357.                             code = "P";
  358.                         } else {
  359.                             pb.produkcijosRusis(pr);
  360.                             code = pr;
  361.                         }
  362.                     } else if (key.endsWith("_fertility")) {
  363.                         pb.derlingumas(ZumisWidgetHelper.objectToDouble(value));
  364.                     } else if (key.endsWith("_produced_count")) {
  365.                         pb.pagaminta(ZumisWidgetHelper.objectToDouble(value));
  366.                     } else if (key.endsWith("_avrg_price")) {
  367.                         pb.vidutineKaina(ZumisWidgetHelper.objectToDouble(value));
  368.                     } else if (key.endsWith("_milk_quota")) {
  369.                         pb.pienoKvota(ZumisWidgetHelper.objectToDouble(value));
  370.                     } else if (key.endsWith("_cow_count")) {
  371.                         pb.karviuSkaicius(ZumisWidgetHelper.objectToDouble(value));
  372.                     } else if (key.endsWith("_avrg_milk_quantity")) {
  373.                         pb.vidutinisPrimilzis(ZumisWidgetHelper.objectToDouble(value));
  374.                     }
  375.                 }
  376.             }
  377.            
  378.             if (code != null) {
  379.                 pb
  380.                     .produkcijosTipas(codeToTypeMap?.get(code))
  381.                     .produkcijosRusiesTipas(codeToTypeMap?.get(code))
  382.                     .planuojaDidintiPienoGamyba(false);
  383.                 builder.produkcija(pb.build(autoCalc, false));
  384.             }
  385.         }
  386.     }
  387. }
  388.  
  389. public static void addAssets(Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> map, final String prefix) {
  390.     if (map != null && !map.isEmpty()) {
  391.         for (final Map<String, Object> row : map) {
  392.             IlgalaikisTurtasBuilder itb = new IlgalaikisTurtasBuilder();
  393.             final String type = row.get(prefix + "_entering_type") == null ? "" : row.get(prefix + "_entering_type").toString();
  394.            
  395.             if (type.startsWith("Pasirenkama")) {
  396.                 String suggestor = (String) row.get(prefix + "_suggestor");
  397.                
  398.                 if (suggestor != null && !suggestor.trim().isEmpty()) {
  399.                     suggestor = suggestor.trim();
  400.                     int index1 = suggestor.indexOf(",");
  401.                     int index2 = suggestor.lastIndexOf(",");
  402.                    
  403.                     if (index1 > 0) {
  404.                         itb.unikalusObjektoNumeris(suggestor.substring(0, index1).trim());
  405.                     }
  406.                     if (index2 > 0) {
  407.                         final String year = suggestor.substring(index2 + 1);
  408.                         if (year.trim().matches("^[0-9]{4}\\s?.*")) {
  409.                             itb.pagaminimoMetai(Integer.valueOf(year.trim().substring(0, 4), 10));
  410.                         }
  411.                     }
  412.                    
  413.                     itb.turtoObjektas(suggestor.substring(index1 + 1, suggestor.trim().length()).trim());
  414.                 }
  415.             } else {
  416.                 itb.unikalusObjektoNumeris(row.get(prefix + "_no") != null ? row.get(prefix + "_no").toString().trim() : null);
  417.                 itb.turtoObjektas(row.get(prefix + "_name") != null ? row.get(prefix + "_name").toString().trim() : null);
  418.                 String year = row.get(prefix + "_year") == null ? "" : (String) row.get(prefix + "_year");
  419.                
  420.                 if (year.trim().matches("^[0-9]{4}\$")) {
  421.                     itb.pagaminimoMetai(Integer.parseInt(year, 10));
  422.                 }
  423.             }
  424.            
  425.             Kp2InvIlgMaterTurtoEilOt turtas = itb.build();
  426.            
  427.             if (turtas.getImtUnikObjNr() != null) {
  428.                 builder.ilgalaikisTurtas(turtas);
  429.             }
  430.         }
  431.     }
  432. }
  433.  
  434.  
  435.  
  436. public static void addDocuments(Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> documents, final String suffix, final ProcessAPI api, final long procInstanceId) {
  437.     if (documents != null && !documents.isEmpty()) {
  438.         for (final Map<String, Object> document : documents) {
  439.             String code = (String) document.get("document_type_code" + suffix);
  440.             String pages = (String) document.get("document_pages" + suffix);
  441.             String notes = (String) document.get("document_notes" + suffix);
  442.             Object files = document.get("document_files" + suffix);
  443.            
  444.             if (code != null && !code.trim().isEmpty() && files != null && files instanceof List && !((List) files).isEmpty()) {
  445.                 boolean hasFiles = false;
  446.                 PriedasBuilder pb = new PriedasBuilder()
  447.                         .dokKodas(code.trim())
  448.                         .lapuSkaicus(pages != null && pages.matches("^[0-9]+\$") ? Long.parseLong(pages, 10) : 1)
  449.                         .pastabos(notes);
  450.                
  451.                 for (final Map<String, Object> file : (List<Map<String, Object>>) files) {
  452.                     String docHash = (String) file.get("document_file" + suffix);
  453.                    
  454.                     if (docHash != null && !docHash.trim().isEmpty()) {
  455.                         DokPriesagaWs priesaga = getFile(docHash, api, procInstanceId);
  456.                        
  457.                         if (priesaga != null) {
  458.                             hasFiles = true;
  459.                             pb.priesaga(priesaga);
  460.                         }
  461.                     }
  462.                 }
  463.                
  464.                 if (hasFiles) {
  465.                     builder.dokumentas(pb.build());
  466.                 }
  467.             }
  468.         }
  469.     }
  470. }
  471.  
  472. public static void addApplicantOwners(final Kp2PrDuomWsBuilder builder, final Map<Long, Double> applicationOwners) {
  473.     if (builder == null) {
  474.         throw new IllegalArgumentException("KPPAISHelper.addApplicantOwners(): Kp2PrDuomWsBuilder parameter must be provided");
  475.     }
  476.     if (applicationOwners != null && !applicationOwners.isEmpty()) {
  477.         for (final Long prisId : applicationOwners.keySet()) {
  478.             builder.addPareiskejoValdymoDalyvis(prisId, applicationOwners.get(prisId));
  479.         }
  480.     }
  481. }
  482.  
  483. public static void addApplicantCompanies(final Kp2PrDuomWsBuilder builder, final Map<Long, Double> applicationCompanies) {
  484.     if (builder == null) {
  485.         throw new IllegalArgumentException("KPPAISHelper.addApplicantCompanies(): Kp2PrDuomWsBuilder parameter must be provided");
  486.     }
  487.     if (applicationCompanies != null && !applicationCompanies.isEmpty()) {
  488.         for (final Long prisId : applicationCompanies.keySet()) {
  489.             builder.addPareiskejoValdomasSubjektas(prisId, applicationCompanies.get(prisId));
  490.         }
  491.     }
  492. }
  493.  
  494.  
  495. public static void addDocuments(PiaDuomBuilder builder, final List<Map<String, Object>> documents, final String suffix, final ProcessAPI api, final long procInstanceId) {
  496.     if (builder == null) {
  497.         throw new IllegalArgumentException("KPPAISHelper.addDocuments(): PiaDuomBuilder parameter must be provided");
  498.     }
  499.    
  500.     if (documents != null && !documents.isEmpty()) {
  501.         for (final Map<String, Object> document : documents) {
  502.             String code = (String) document.get("document_type_code" + suffix);
  503.             String pages = (String) document.get("document_pages" + suffix);
  504.             String notes = (String) document.get("document_notes" + suffix);
  505.             Object files = document.get("document_files" + suffix);
  506.            
  507.             if (code != null && !code.trim().isEmpty() && files != null && files instanceof List && !((List) files).isEmpty()) {
  508.                 boolean hasFiles = false;
  509.                 PriedasBuilder pb = new PriedasBuilder()
  510.                         .dokKodas(code.trim())
  511.                         .lapuSkaicus(pages != null && pages.matches("^[0-9]+\$") ? Long.parseLong(pages, 10) : 1)
  512.                         .pastabos(notes);
  513.                
  514.                 for (final Map<String, Object> file : (List<Map<String, Object>>) files) {
  515.                     String docHash = (String) file.get("document_file" + suffix);
  516.                    
  517.                     if (docHash != null && !docHash.trim().isEmpty()) {
  518.                         DokPriesagaWs priesaga = getFile(docHash, api, procInstanceId);
  519.                        
  520.                         if (priesaga != null) {
  521.                             hasFiles = true;
  522.                             pb.priesaga(priesaga);
  523.                         }
  524.                     }
  525.                 }
  526.                
  527.                 if (hasFiles) {
  528.                     builder.dokumentas(pb.build());
  529.                 }
  530.             }
  531.         }
  532.     }
  533. }
  534.  
  535.  
  536. public static DokPriesagaWs getFile(final String hash, final ProcessAPI processApi, final long procInstanceId) {
  537.     PriesagaBuilder b = new PriesagaBuilder();
  538.     Document d = null;
  539.     byte[] content = null;
  540.    
  541.     try {
  542.         d = processApi.getLastDocument(procInstanceId, hash);
  543.         content = processApi.getDocumentContent(d.getContentStorageId());
  544.     } catch (DocumentNotFoundException e) {
  545.         //
  546.    
  547.         return null;
  548.     }
  549.    
  550.     b
  551.         .pavadinimas(d.getContentFileName())
  552.         .tipas(d.getContentMimeType())
  553.         .failas(new DataHandler(new ByteArrayDataSource(content, d.getContentMimeType())));
  554.    
  555.     return b.build();
  556. }
  557.  
  558. public static final void addLandTenuresInfo(final Kp2PrDuomWsBuilder builder, Map zemesValduWidgetOutput, final Map<String, Date> validFromDatesByLandTenuresCodes){
  559.     if (builder == null) {
  560.         throw new IllegalArgumentException("KPPAISHelper.addLandTenuresInfo(): Kp2PrDuomWsBuilder parameter must be provided");
  561.     }
  562.     List<Kp2InvZemevInfoEilOt> beansToAdd = PRIS_1VMS_ATIDAVIMAS_createZemesValduInfoBeanFrom(zemesValduWidgetOutput, validFromDatesByLandTenuresCodes);
  563.     for (final Kp2InvZemevInfoEilOt beanToAdd : beansToAdd) {
  564.         builder.zemevalduInfo(beanToAdd);
  565.     }
  566. }
  567.  
  568. /**
  569.  * Adds additional information entry for application (PR)
  570.  *
  571.  * @param builder - application data builder (cannot be <code>NULL</code>)
  572.  * @param category - additional information category (cannot be <code>NULL</code>)
  573.  * @param ids - list of information ID (may be <code>NULL</code> or empty)
  574.  * @deprecated - use KPPAISHelper_PR.addAdditionlInformation(Kp2PrDuomWsBuilder, PapildomosInfoKategorija, List, Map)
  575.  */
  576. @Deprecated
  577. public static final void addAdditionalInformation(final Kp2PrDuomWsBuilder builder, final PapildomosInfoKategorija category, final List<String> ids) {
  578.     if (builder == null) {
  579.         throw new IllegalArgumentException("KPPAISHelper.addAdditionalInformation(): Kp2PrDuomWsBuilder parameter must be provided");
  580.     }
  581.     if (category == null) {
  582.         throw new IllegalArgumentException("KPPAISHelper.addAdditionalInformation(): PapildomosInfoKategorija parameter must be provided");
  583.     }
  584.     if (ids != null && !ids.isEmpty()) {
  585.         for (final String id : ids) {
  586.             if (id != null && id.matches("^[1-9][0-9]*\$")) {
  587.                 builder.papildomaInformacija(
  588.                     new PapildomaInformacijaBuilder()
  589.                     .papildomosInfoId(Long.parseLong(id, 10))
  590.                     .papildomosInfoKategorija(category)
  591.                     .pazymetas(true)
  592.                     .build());
  593.             }
  594.         }
  595.     }
  596. }
  597.  
  598. /**
  599.  * Adds project person entry for application (PR)
  600.  *
  601.  * @param builder - application data builder (cannot be <code>NULL</code>)
  602.  * @param personType - project person type (cannot be <code>NULL</code>)
  603.  * @param firstName - person first name
  604.  * @param lastName - person last name
  605.  * @param phone - person phone number
  606.  * @param fax - person fax number
  607.  * @param email - person email address
  608.  * @deprecated - use KPPAISHelper_PR.addProjectPerson(Kp2PrDuomWsBuilder, DalyvavimoProjekteTipas, Map, String, String)
  609.  */
  610. @Deprecated
  611. public static final void addProjectPerson(final Kp2PrDuomWsBuilder builder, final DalyvavimoProjekteTipas personType, final String firstName, final String lastName, final String phone, final String fax, final String email) {
  612.     if (builder == null) {
  613.         throw new IllegalArgumentException("KPPAISHelper.addProjectPerson(): Kp2PrDuomWsBuilder parameter must be provided");
  614.     }
  615.     if (personType == null) {
  616.         throw new IllegalArgumentException("KPPAISHelper.addProjectPerson(): DalyvavimoProjekteTipas parameter must be provided");
  617.     }
  618.     if ((firstName != null && !firstName.trim().isEmpty()) || (lastName != null && !lastName.trim().isEmpty()) || (phone != null && !phone.trim().isEmpty()) || (fax != null && !fax.trim().isEmpty()) || (email != null && !email.trim().isEmpty())) {
  619.         builder.asmuo(new AsmuoBuilder()
  620.             .vardas(firstName)
  621.             .pavarde(lastName)
  622.             .telefonoNr(phone)
  623.             .faksoNr(fax)
  624.             .elektroninisPastas(email)
  625.             .dalyvavimoProjekteTipas(personType)
  626.             .build());
  627.     }
  628. }
  629.  
  630. /**
  631.  * Išlaidos
  632.  *
  633.  * @param builder - application data builder (cannot be <code>NULL</code>)
  634.  * @param expenses - expenses data (may be <code>NULL</code>)
  635.  * @deprecated - use KPPAISHelper_PR.addExpenses(Kp2PrDuomWsBuilder, List)
  636.  */
  637. @Deprecated
  638. public static final void addExpenses(final Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> expenses) {
  639.     if (builder == null) {
  640.         throw new IllegalArgumentException("KPPAISHelper.addExpenses(): Kp2PrDuomWsBuilder parameter must be provided");
  641.     }
  642.    
  643.     if (expenses != null && !expenses.isEmpty()) {
  644.         for (final Map<String, Object> sectorRow : expenses) {
  645.             final List<Map<String, Object>> expensesData = (List<Map<String, Object>>) sectorRow.get("expenses_data");
  646.             for (final Map<String, Object> row : expensesData) {
  647.                 builder.addIslaida(new IslaidaBuilder()
  648.                     .veiklosSritis("1VMS-3") // hardcoded for 1VMS
  649.                     .irsKodas((String) row.get("expense_name"))
  650.                     .galiojaNuo((Date) row.get("expense_date"))
  651.                     .islaiduPatikslinimas((String) row.get("expense_detail"))
  652.                     .islaiduPagrindimas((String) row.get("expense_desc"))
  653.                     .pirkimoVykdymoBudas((String) row.get("expense_method"))
  654.                     .prasomaParamosSuma(ZumisWidgetHelper.objectToDouble(row.get("sum_request")))
  655.                     .pvmSuma(ZumisWidgetHelper.objectToDouble(row.get("sum_vat")))
  656.                     .islaiduEilute(new IslaiduEiluteBuilder()
  657.                         .sumaBePvm(ZumisWidgetHelper.objectToDouble(row.get("sum_wo_vat")))
  658.                         .pvmSuma(ZumisWidgetHelper.objectToDouble(row.get("sum_vat")))
  659.                         .prasomaSuma(ZumisWidgetHelper.objectToDouble(row.get("sum_request")))
  660.                         .build(true))
  661.                     .build()
  662.                 );
  663.             }
  664.         }
  665.     }
  666. }
  667.  
  668. /**
  669.  * Pagrindimai
  670.  *
  671.  * @param builder - application data builder (cannot be <code>NULL</code>)
  672.  * @param expenses - expenses data (may be <code>NULL</code>)
  673.  * @deprecated - use KPPAISHelper_PR.addSubstantiation(Kp2PrDuomWsBuilder, List)
  674.  */
  675. @Deprecated
  676. public static final void addSubstantiation(final Kp2PrDuomWsBuilder builder, final List<Map<String, Object>> expenses) {
  677.     if (builder == null) {
  678.         throw new IllegalArgumentException("KPPAISHelper.addSubstantiation(): Kp2PrDuomWsBuilder parameter must be provided");
  679.     }
  680.    
  681.     if (expenses != null && !expenses.isEmpty()) {
  682.         for (final Map<String, Object> sectorRow : expenses) {
  683.             final List<Map<String, Object>> expensesData = (List<Map<String, Object>>) sectorRow.get("expenses_data");
  684.             for (final Map<String, Object> row : expensesData) {
  685.                 builder.addPagrindimas(new PagrindimasBuilder()
  686.                     .vsrKodas("1VMS-3") // hardcoded for 1VMS
  687.                     .irsKodas((String) row.get("expense_name"))
  688.                     .galiojaNuo((Date) row.get("expense_date"))
  689.                     .islaiduPatikslinimas((String) row.get("expense_detail"))
  690.                     .pagrindimas((String) row.get("expense_desc"))
  691.                     .build()
  692.                 );
  693.             }
  694.         }
  695.     }
  696. }
  697.  
  698. /**
  699.  * Filters beneficiary participation entries by statuses and roles
  700.  *
  701.  * @param participations - all participations list
  702.  * @param statuses - filtered statuses list (may be <code>NULL</code>)
  703.  * @param roles - filtered roles list (may be <code>NULL</code>)
  704.  * @return filtered participations list (never <code>NULL</code>)
  705.  */
  706. public static final List<PrsDpgOtUser> getParticipationEntries(final List<PrsDpgOtUser> participations, final List<String> statuses, final List<String> roles) {
  707.     List<PrsDpgOtUser> list = new ArrayList<PrsDpgOtUser>();
  708.    
  709.     if (participations != null && !participations.isEmpty()) {
  710.         for (final PrsDpgOtUser dpg : participations) {
  711.             if (statuses == null || statuses.contains(dpg.getDpgBusena())) {
  712.                 if (roles == null || roles.contains(dpg.getDrlPavadinimas())) {
  713.                     list.add(dpg);
  714.                 }
  715.             }
  716.         }
  717.     }
  718.    
  719.     return list;
  720. }
  721.  
  722. /**
  723.  * Dynamic project title for form 2NM
  724.  * @param index - project index
  725.  * @deprecated move this method to KPPAISHelper_2NM
  726.  */
  727. @Deprecated
  728. public static final String getProjectTitle2NM(final int index) {
  729.     return "Miško veisimo projektas Nr. <span class=\"project-index\">" + index + "</span><span class=\"expand-button\" style=\"padding:0px 10px;margin:0px 10px;\"></span>";
  730. }
  731.  
  732. public static final String getChangeTitle4VP(final int index) {
  733.     return "Vietos plėtros strategijos keitimas Nr. <span class=\"project-index\">" + index + "</span><span class=\"expand-button\" style=\"padding:0px 10px;margin:0px 10px;\"></span>";
  734. }
  735.  
  736. /**
  737.  * Calculate percents of particular tree group
  738.  * @param dataList - list of data rows
  739.  * @param conifiers - (spygliuociai)
  740.  */
  741. public static final String getTreeGroupPercents(final List<Map<String, Object>> dataList, final boolean conifiers) {
  742.     double groupCount = 0;
  743.     double totalCount = 0;
  744.     if (dataList != null) {
  745.         for (final Map<String, Object> row : dataList) {
  746.             Double d = ZumisWidgetHelper.objectToDouble(row.get("trees_amount"));
  747.             if (d != null) {
  748.                 boolean conifier = !"Taip".equals(row.get("tree_deciduous"));
  749.                 totalCount += d;
  750.                 if (conifier == conifiers) {
  751.                     groupCount += d;
  752.                 }
  753.             }
  754.         }
  755.     }
  756.    
  757.     if (totalCount == 0) {
  758.         return ZumisMoneyFormatter.format(0);
  759.     }
  760.     return ZumisMoneyFormatter.format((groupCount / totalCount) * 100.0);
  761. }
  762.  
  763. private static final List<Kp2InvZemevInfoEilOt> PRIS_1VMS_ATIDAVIMAS_createZemesValduInfoBeanFrom(final Map zemesValduWidgetOutput, final Map<String, Date> validFromDatesByLandTenuresCodes) {
  764.     List<Kp2InvZemevInfoEilOt> output = new ArrayList<Kp2InvZemevInfoEilOt>();
  765.     initLandTenuresViewedAsTree(zemesValduWidgetOutput, output, validFromDatesByLandTenuresCodes);
  766.     initOptionalLandTenures(zemesValduWidgetOutput, output, validFromDatesByLandTenuresCodes);
  767.     initRequiredLandTenures(zemesValduWidgetOutput, output, validFromDatesByLandTenuresCodes);
  768.     return output;
  769. }
  770.  
  771. private static void initLandTenuresViewedAsTree(Map landTenuresData, List<Kp2InvZemevInfoEilOt> output, final Map<String, Date> validFromDatesByLandTenuresCodes) {
  772.     landTenuresData.get("ZVI_list_item_with_subgroup").each() {
  773.         final String parentCode = it.get("ZVI_list_item_code")?.trim();
  774.         final Double parentAtaskaitiniaiNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_owned_property_sub_sum"));
  775.         final Double parentAtaskaitiniaiNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_reneted_property_sub_sum"));
  776.         final Double parentNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_owned_property_sub_sum"));
  777.         final Double parentNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_rented_property_sub_sum"));
  778.        
  779.         if ((parentAtaskaitiniaiNuosava != null || parentAtaskaitiniaiNuomojama != null || parentNuosava != null || parentNuomojama != null) && parentCode != null && !parentCode.trim().isEmpty()) {
  780.             ZemevalduInfoBuilder zemevalduInfoBuilder = new ZemevalduInfoBuilder();
  781.             zemevalduInfoBuilder
  782.                     .zemevaldosKodas(parentCode)
  783.                     .zemevaldaGaliojaNuo(getValidFromDateByCodeFrom(parentCode, validFromDatesByLandTenuresCodes))
  784.                     .zemevaldosPlotas(parentAtaskaitiniaiNuosava, ATASKAITINIAI, NUOSAVA)
  785.                     .zemevaldosPlotas(parentAtaskaitiniaiNuomojama, ATASKAITINIAI, NUOMOJAMA)
  786.                     .visasZemevaldosPlotas(Optional.<Double>of((parentAtaskaitiniaiNuosava == null ? Double.valueOf(0.0) : parentAtaskaitiniaiNuosava) + (parentAtaskaitiniaiNuomojama == null ? Double.valueOf(0.0) : parentAtaskaitiniaiNuomojama)), ATASKAITINIAI)
  787.                     .zemevaldosPlotas(parentNuosava, PARAISKOS_PATEIKIMO, NUOSAVA)
  788.                     .zemevaldosPlotas(parentNuomojama, PARAISKOS_PATEIKIMO, NUOMOJAMA)
  789.                     .visasZemevaldosPlotas(Optional.<Double>of((parentNuosava == null ? Double.valueOf(0.0) : parentNuosava) + (parentNuomojama == null ? Double.valueOf(0.0) : parentNuomojama)), PARAISKOS_PATEIKIMO);
  790.             output.add(zemevalduInfoBuilder.build());
  791.         }
  792.        
  793.         it.get("ZVI_list_item_subitems_required").each() {
  794.             ZemevalduInfoBuilder zemevalduInfoBuilder = new ZemevalduInfoBuilder();
  795.             final String landTenureCode = it.get("ZVI_sublist_item_code_required");
  796.             final Double ataskaitiniaiNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_owned_property_sub_required"));
  797.             final Double ataskaitiniaiNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_reneted_property_sub_required"));
  798.             final Double nuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_owned_property_sub_required"));
  799.             final Double nuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_rented_property_sub_required"));
  800.            
  801.             if ((ataskaitiniaiNuomojama != null || ataskaitiniaiNuosava != null || nuomojama != null || nuosava != null) && landTenureCode != null && !landTenureCode.trim().isEmpty()) {
  802.                 zemevalduInfoBuilder
  803.                         .zemevaldosKodas(landTenureCode)
  804.                         .zemevaldaGaliojaNuo(getValidFromDateByCodeFrom(landTenureCode, validFromDatesByLandTenuresCodes))
  805.                         .zemevaldosPlotas(ataskaitiniaiNuosava, ATASKAITINIAI, NUOSAVA)
  806.                         .zemevaldosPlotas(ataskaitiniaiNuomojama, ATASKAITINIAI, NUOMOJAMA)
  807.                         .visasZemevaldosPlotas(Optional.<Double>of((ataskaitiniaiNuosava == null ? Double.valueOf(0.0) : ataskaitiniaiNuosava) + (ataskaitiniaiNuomojama == null ? Double.valueOf(0.0) : ataskaitiniaiNuomojama)), ATASKAITINIAI)
  808.                         .zemevaldosPlotas(nuosava, PARAISKOS_PATEIKIMO, NUOSAVA)
  809.                         .zemevaldosPlotas(nuomojama, PARAISKOS_PATEIKIMO, NUOMOJAMA)
  810.                         .visasZemevaldosPlotas(Optional.<Double>of((nuosava == null ? Double.valueOf(0.0) : nuosava) + (nuomojama == null ? Double.valueOf(0.0) : nuomojama)), PARAISKOS_PATEIKIMO);
  811.                 output.add(zemevalduInfoBuilder.build());
  812.             }
  813.         };
  814.  
  815.         it.get("ZVI_list_item_subitems_optional").each() {
  816.             ZemevalduInfoBuilder zemevalduInfoBuilder = new ZemevalduInfoBuilder();
  817.             final String landTenureCode = it.get("ZVI_sublist_item_code_optional");
  818.             final Double ataskaitiniaiNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_owned_property_sub_optional"));
  819.             final Double ataskaitiniaiNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_reneted_property_sub_optional"));
  820.             final Double nuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_owned_property_sub_optional"));
  821.             final Double nuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_rented_property_sub_optional"));
  822.            
  823.             if ((ataskaitiniaiNuomojama != null || ataskaitiniaiNuosava != null || nuomojama != null || nuosava != null) && landTenureCode != null && !landTenureCode.trim().isEmpty()) {
  824.                 zemevalduInfoBuilder
  825.                         .zemevaldosKodas(landTenureCode)
  826.                         .zemevaldaGaliojaNuo(getValidFromDateByCodeFrom(landTenureCode, validFromDatesByLandTenuresCodes))
  827.                         .zemevaldosPlotas(ataskaitiniaiNuosava, ATASKAITINIAI, NUOSAVA)
  828.                         .zemevaldosPlotas(ataskaitiniaiNuomojama, ATASKAITINIAI, NUOMOJAMA)
  829.                         .visasZemevaldosPlotas(Optional.<Double>of((ataskaitiniaiNuosava == null ? Double.valueOf(0.0) : ataskaitiniaiNuosava) + (ataskaitiniaiNuomojama == null ? Double.valueOf(0.0) : ataskaitiniaiNuomojama)), ATASKAITINIAI)
  830.                         .zemevaldosPlotas(nuosava, PARAISKOS_PATEIKIMO, NUOSAVA)
  831.                         .zemevaldosPlotas(nuomojama, PARAISKOS_PATEIKIMO, NUOMOJAMA)
  832.                         .visasZemevaldosPlotas(Optional.<Double>of((nuosava == null ? Double.valueOf(0.0) : nuosava) + (nuomojama == null ? Double.valueOf(0.0) : nuomojama)), PARAISKOS_PATEIKIMO);
  833.                 output.add(zemevalduInfoBuilder.build());
  834.             }
  835.         };
  836.     };
  837. }
  838.  
  839.  
  840. private static void initOptionalLandTenures(Map landTenuresData, List<Kp2InvZemevInfoEilOt> output, final Map<String, Date> validFromDatesByLandTenuresCodes) {
  841.     landTenuresData.get("ZVI_list_item_optional").each() {
  842.         ZemevalduInfoBuilder zemevalduInfoBuilder = new ZemevalduInfoBuilder();
  843.         final String landTenureCode = it.get("ZVI_list_simple_item_code_opt");
  844.         final Double ataskaitiniaiNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_owned_property_nosub_opt"));
  845.         final Double ataskaitiniaiNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_reneted_property_nosub_opt"));
  846.         final Double nuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_owned_property_nosub_opt"));
  847.         final Double nuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_rented_property_nosub_opt"));
  848.        
  849.         if ((ataskaitiniaiNuomojama != null || ataskaitiniaiNuosava != null || nuomojama != null || nuosava != null) && landTenureCode != null && !landTenureCode.trim().isEmpty()) {
  850.             zemevalduInfoBuilder
  851.                     .zemevaldosKodas(landTenureCode)
  852.                     .zemevaldaGaliojaNuo(getValidFromDateByCodeFrom(landTenureCode, validFromDatesByLandTenuresCodes))
  853.                     .zemevaldosPlotas(ataskaitiniaiNuosava, ATASKAITINIAI, NUOSAVA)
  854.                     .zemevaldosPlotas(ataskaitiniaiNuomojama, ATASKAITINIAI, NUOMOJAMA)
  855.                     .visasZemevaldosPlotas(Optional.<Double>of((ataskaitiniaiNuosava == null ? Double.valueOf(0.0) : ataskaitiniaiNuosava) + (ataskaitiniaiNuomojama == null ? Double.valueOf(0.0) : ataskaitiniaiNuomojama)), ATASKAITINIAI)
  856.                     .zemevaldosPlotas(nuosava, PARAISKOS_PATEIKIMO, NUOSAVA)
  857.                     .zemevaldosPlotas(nuomojama, PARAISKOS_PATEIKIMO, NUOMOJAMA)
  858.                     .visasZemevaldosPlotas(Optional.<Double>of((nuosava == null ? Double.valueOf(0.0) : nuosava) + (nuomojama == null ? Double.valueOf(0.0) : nuomojama)), PARAISKOS_PATEIKIMO);
  859.             output.add(zemevalduInfoBuilder.build());
  860.         }
  861.     };
  862. }
  863.  
  864.  
  865. private static void initRequiredLandTenures(Map landTenuresData, List<Kp2InvZemevInfoEilOt> output, final Map<String, Date> validFromDatesByLandTenuresCodes) {
  866.     landTenuresData.get("ZVI_list_item_required").each() {
  867.         ZemevalduInfoBuilder zemevalduInfoBuilder = new ZemevalduInfoBuilder();
  868.         final String landTenureCode = it.get("ZVI_list_simple_item_code_rq");
  869.         final Double ataskaitiniaiNuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_owned_property_nosub_rq"));
  870.         final Double ataskaitiniaiNuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_crnt_year_reneted_property_nosub_rq"));
  871.         final Double nuosava = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_owned_property_nosub_rq"));
  872.         final Double nuomojama = ZumisWidgetHelper.objectToDouble(it.get("ZVI_application_year_rented_property_nosub_rq"));
  873.        
  874.         if ((ataskaitiniaiNuomojama != null || ataskaitiniaiNuosava != null || nuomojama != null || nuosava != null) && landTenureCode != null && !landTenureCode.trim().isEmpty()) {
  875.             zemevalduInfoBuilder
  876.                     .zemevaldosKodas(landTenureCode)
  877.                     .zemevaldaGaliojaNuo(getValidFromDateByCodeFrom(landTenureCode, validFromDatesByLandTenuresCodes))
  878.                     .zemevaldosPlotas(ataskaitiniaiNuosava, ATASKAITINIAI, NUOSAVA)
  879.                     .zemevaldosPlotas(ataskaitiniaiNuomojama, ATASKAITINIAI, NUOMOJAMA)
  880.                     .visasZemevaldosPlotas(Optional.<Double>of((ataskaitiniaiNuosava == null ? Double.valueOf(0.0) : ataskaitiniaiNuosava) + (ataskaitiniaiNuomojama == null ? Double.valueOf(0.0) : ataskaitiniaiNuomojama)), ATASKAITINIAI)
  881.                     .zemevaldosPlotas(nuosava, PARAISKOS_PATEIKIMO, NUOSAVA)
  882.                     .zemevaldosPlotas(nuomojama, PARAISKOS_PATEIKIMO, NUOMOJAMA)
  883.                     .visasZemevaldosPlotas(Optional.<Double>of((nuosava == null ? Double.valueOf(0.0) : nuosava) + (nuomojama == null ? Double.valueOf(0.0) : nuomojama)), PARAISKOS_PATEIKIMO);
  884.             output.add(zemevalduInfoBuilder.build());
  885.         }
  886.     };
  887. }
  888.  
  889. private static final Date getValidFromDateByCodeFrom(final String landTenureCode, final Map<String, Date> validFromDatesByLandTenuresCodes) {
  890.     return validFromDatesByLandTenuresCodes.get(landTenureCode);
  891. }
  892.  
  893. /**
  894.  * Iš bylos numerio ištraukia projekto numerį.
  895.  */
  896. public static final String extractProjektoNumeris(String pblNumeris) {
  897.     if (pblNumeris == null) {
  898.         return "";
  899.     }
  900.     if (!pblNumeris.contains("-")) {
  901.         return "";
  902.     }
  903.     return pblNumeris.substring(0, pblNumeris.lastIndexOf("-"));
  904. }
  905.  
  906. /**
  907.  * Patikrina ar byla buvo pateikta nuo 2009-09-04 (imtinai).
  908.  * @return <code>NULL</code> - jei bylos objektas nenurodytas arba nėra bylos gavimo datos. <code>TRUE</code> - jei byla pateikta 2009-09-04 ar vėliau. <code>FALSE</code> - jei byla pateikta iki 2009-09-03 imtinai.
  909.  */
  910. public static final Boolean applicationSubmittedFrom20090904(final Kp2TurimuBylSarasasOtUser application) {
  911.     if (application == null || application.getDokGavimoData() == null) {
  912.         return null;
  913.     }
  914.    
  915.     final Calendar sc = application.getDokGavimoData().toGregorianCalendar();
  916.     sc.clear(Calendar.HOUR);
  917.     sc.clear(Calendar.MINUTE);
  918.     sc.clear(Calendar.SECOND);
  919.     sc.clear(Calendar.MILLISECOND);
  920.    
  921.     final Calendar tc = GregorianCalendar.getInstance();
  922.     tc.set(2009, Calendar.SEPTEMBER, 4, 0, 0, 0);
  923.     tc.set(Calendar.MILLISECOND, 0);
  924.    
  925.     return !sc.before(tc);
  926. }
  927.  
  928. /**
  929.  * Extracst email from agreement contact info
  930.  * @param agreement - agreement object (may be <code>NULL</code>)
  931.  * @param defaultValue - default value to be returned if nothing found (may be <code>NULL</code>)
  932.  * @return email value
  933.  */
  934. public static final String getEmailFromAgreement(final Kp2ParSutDuomenysOtUser agreement, final String defaultValue) {
  935.     return getContactFromAgreement(agreement, "E", defaultValue);
  936. }
  937.  
  938. /**
  939.  * Extracst phone from agreement contact info
  940.  * @param agreement - agreement object (may be <code>NULL</code>)
  941.  * @param defaultValue - default value to be returned if nothing found (may be <code>NULL</code>)
  942.  * @return phone value
  943.  */
  944. public static final String getPhoneFromAgreement(final Kp2ParSutDuomenysOtUser agreement, final String defaultValue) {
  945.     return getContactFromAgreement(agreement, "T", defaultValue);
  946. }
  947.  
  948. /**
  949.  * Extracst fax from agreement contact info
  950.  * @param agreement - agreement object (may be <code>NULL</code>)
  951.  * @param defaultValue - default value to be returned if nothing found (may be <code>NULL</code>)
  952.  * @return fax value
  953.  */
  954. public static final String getFaxFromAgreement(final Kp2ParSutDuomenysOtUser agreement, final String defaultValue) {
  955.     return getContactFromAgreement(agreement, "F", defaultValue);
  956. }
  957.  
  958. /**
  959.  * Extracst any contact from agreement contact info, which value is a single string
  960.  * @param agreement - agreement object (may be <code>NULL</code>)
  961.  * @param contactType - contact type code (may be <code>NULL</code>)
  962.  * @param defaultValue - default value to be returned if nothing found (may be <code>NULL</code>)
  963.  * @return contact value
  964.  */
  965. public static final String getContactFromAgreement(final Kp2ParSutDuomenysOtUser agreement, final String contactType, final String defaultValue) {
  966.     final List<Kp2KontaktInfoOtUser> list = agreement?.getKontaktineInformacija()?.getArray();
  967.    
  968.     if (list != null && !list.isEmpty() && contactType != null && !contactType.isEmpty()) {
  969.         for (final Kp2KontaktInfoOtUser contact : list) {
  970.             if (contactType.equals(contact.getAktTipas())) {
  971.                 return contact.getAktReiksme();
  972.             }
  973.         }
  974.     }
  975.    
  976.     return defaultValue;
  977. }
  978.  
  979. /**
  980.  * Translates all provided error messages with specified translations (if any)
  981.  * @param errors - errors list (may be <code>NULL</code> or empty)
  982.  * @param translations - available translations, where <code>key</code> - error code, <code>value</code> - translated error message. (may be <code>NULL</code> or empty)
  983.  * @return errors list with translated messages
  984.  */
  985. public static final List<Kp2ErrorOt> getTranslatedErrors(final List<Kp2ErrorOt> errors, final Map<String, String> translations) {
  986.     final Logger logger = Logger.getLogger("com.tieto.zumis.bpm.groovy");
  987.     final List<Kp2ErrorOt> list = new ArrayList<Kp2ErrorOt>();
  988.    
  989.     int totalCount = errors == null ? 0 : errors.size();
  990.     int criticalCount = 0;
  991.     int errorCount = 0;
  992.     int warningCount = 0;
  993.    
  994.     logger.fine("KPPAISHelper.getTranslatedErrors(): " + totalCount + " to be translated. Translations available: " + (translations == null ? 0 : translations.size()));
  995.    
  996.     if (errors != null && !errors.isEmpty()) {
  997.         final Pattern pattern = Pattern.compile("\\{(\\d+)\\}");
  998.        
  999.         for (final Kp2ErrorOt error : errors) {
  1000.             if ("".equals(error.getErrSeverity()) || "C".equals(error.getErrSeverity())) {
  1001.                 criticalCount++;
  1002.             } else if ("E".equals(error.getErrSeverity())) {
  1003.                 errorCount++;
  1004.             } else if ("W".equals(error.getErrSeverity())) {
  1005.                 warningCount++;
  1006.             }
  1007.            
  1008.             if (translations != null && translations.containsKey(error.getErrCode())) {
  1009.                 String translated = translations.get(error.getErrCode());
  1010.                 if (error.getErrParam() != null && !error.getErrParam().getKp2ErrParmListOt().isEmpty()) {
  1011.                     final List<Kp2ErrParmListOt> params = error.getErrParam().getKp2ErrParmListOt();
  1012.                     final Matcher m = pattern.matcher(translated);
  1013.                    
  1014.                     while (m.find()) {
  1015.                         final int index = Integer.parseInt(m.group(1), 10);
  1016.                         if (index >= 0 && index < params.size()) {
  1017.                             translated = translated.replaceAll("\\{" + index + "\\}", params.get(index));
  1018.                         }
  1019.                     }
  1020.                 }
  1021.                
  1022.                 // replace
  1023.                 error.setErrText(translated);
  1024.             }
  1025.            
  1026.             list.add(error);
  1027.         }
  1028.     }
  1029.    
  1030.     logger.fine("KPPAISHelper.getTranslatedErrors(): Total errors: " + totalCount + " (critical=" + criticalCount + ", error=" + errorCount + ", warning=" + warningCount + "). Translated: " + list.size());
  1031.    
  1032.     return list;
  1033. }
  1034.  
  1035. /**
  1036.  * Generates HTML component with error messages
  1037.  * @param errors - errors list (may be <code>NULL</code>)
  1038.  * @param showWarnings - include warning messages or not (TRUE - include; FALSE - skip)
  1039.  * @return HTML component with errors messages
  1040.  */
  1041. public static final String getKppaisErrorsHtml(final List<Kp2ErrorOt> errors, final boolean showWarnings) {
  1042.     StringBuilder message = new StringBuilder("<div class=\"errors_container\">");
  1043.    
  1044.     List<Kp2ErrorOt> warnings = new LinkedList<Kp2ErrorOt>();
  1045.    
  1046.     if (hasKppaisErrors(errors)) {
  1047.         message.append("<ul class=\"error_messages\"><div class=\"messages_title\">Kritinės klaidos</div>");
  1048.         for (final Kp2ErrorOt error : errors) {
  1049.             if ("C".equals(error.getErrSeverity()) || "E".equals(error.getErrSeverity()) || "".equals(error.getErrSeverity())) {
  1050.                 message.append("<li class=\"message_content\">(").append(error.getErrCode()).append(") ").append(error.getErrText()).append("</li>");
  1051.             } else if ("W".equals(error.getErrSeverity())) {
  1052.                 warnings.add(error);
  1053.             }
  1054.         }
  1055.         message.append("</ul>");
  1056.     }
  1057.    
  1058.     if (showWarnings && !warnings.isEmpty()) {
  1059.         message.append("<ul class=\"warning_messages\"><div class=\"messages_title\">Pastabos</div>");
  1060.         for (final Kp2ErrorOt warning : warnings) {
  1061.             message.append("<li class=\"message_content\">(").append(warning.getErrCode()).append(") ").append(warning.getErrText()).append("</li>");
  1062.         }
  1063.         message.append("</ul>");
  1064.     }
  1065.    
  1066.     message.append("</div>");
  1067.    
  1068.     return message.toString();
  1069. }
  1070.  
  1071. /**
  1072.  * Checks if specified list of callback messages has errors of severuty C (critical) or E (error)
  1073.  *
  1074.  * @param errors - errors list (may be <code>NULL</code>)
  1075.  * @return TRUE if there is at least one error message of severity C or E. FALSE - otherwise
  1076.  */
  1077. public static final boolean hasKppaisErrors(final List<Kp2ErrorOt> errors) {
  1078.     if (errors != null && !errors.isEmpty()) {
  1079.         for (final Kp2ErrorOt error : errors) {
  1080.             if ("E".equals(error.getErrSeverity()) || "C".equals(error.getErrSeverity()) || "".equals(error.getErrSeverity())) {
  1081.                 return true;
  1082.             }
  1083.         }
  1084.     }
  1085.    
  1086.     return false;
  1087. }
  1088.  
  1089. /**
  1090.  * Current application status name regarding current status in KPPAIS and ZUMIS
  1091.  *
  1092.  * @param kppaisStatusName - KPPAIS status name
  1093.  * @param zumisStatusCode - ZUMIS status code
  1094.  * @return application status name
  1095.  */
  1096. public static final String getApplicationStatus(final String kppaisStatusName, final String zumisStatusCode) {
  1097.     if ("CANCELED".equals(zumisStatusCode)) {
  1098.         return "Atšaukta";
  1099.     }
  1100.     return kppaisStatusName;
  1101. }
  1102.  
  1103. /**
  1104.  * Checks pending applications for the earliest unsubmitted one by the specified report type which belongs to the specified parent application.
  1105.  * @param apps - pending applications list (may be <code>NULL</code>)
  1106.  * @param parentAppCode - parent application code/number (may be <code>NULL</code>, but result will be unpredictable)
  1107.  * @param reportType - report type code (mat be <code>NULL</code>, but result will be unpredictable)
  1108.  * @return earliest unsubmitted application date or <code>NULL</code> if not found
  1109.  */
  1110. public static final Date getEarliestReportSubmittionDate(final List<Kp2TektinuByluSarOtUser> apps, final String parentAppCode, final String reportType) {
  1111.     Date earliestDate = null;
  1112.     Logger.getLogger("com.tieto.zumis.bpm.groovy").info(" *** Getting the earliest report submittion date. Apps: " + apps?.size() + ", Parent app code: " + parentAppCode + ", Report type: " + reportType);
  1113.     if (apps != null && !apps.isEmpty()) {
  1114.         for (final Kp2TektinuByluSarOtUser app : apps) {
  1115.             if (app.getFaktPateikData() == null && app.getBylPagrindoNumeris().equals(parentAppCode) && app.getDtpVeiklosKodas().equals(reportType)) {
  1116.                 if (earliestDate == null || (app.getPlanPateikData() != null && earliestDate.after(app.getPlanPateikData().toGregorianCalendar().getTime()))) {
  1117.                     earliestDate = app.getPlanPateikData()?.toGregorianCalendar()?.getTime();
  1118.                 }
  1119.             }
  1120.         }
  1121.     }
  1122.    
  1123.     return earliestDate;
  1124. }
  1125.  
  1126. /**
  1127.  * Searches for the current project status code
  1128.  *
  1129.  * @param applicationCode - application code/number (cannot be <code>NULL</code>)
  1130.  * @param apps - owned applications list (may be <code>NULL</code>)
  1131.  * @return current project status code or <code>NULL</code> if nothing was found
  1132.  */
  1133. public static final String getProjectStatus(final String applicationCode, final List<Kp2TurimuBylSarasasOtUser> apps) {
  1134.     final Logger logger = Logger.getLogger("com.tieto.zumis.bpm.groovy");
  1135.    
  1136.     if (apps != null && !apps.isEmpty()) {
  1137.         for (final Kp2TurimuBylSarasasOtUser app : apps) {
  1138.             if (applicationCode.equals(app.getBylNumeris())) {
  1139.                 logger.info("KPPAISHelper.getProjectStatus(" + applicationCode + "): found status code [" + app.getPblProjektoBusena() + "]");
  1140.                 return app.getPblProjektoBusena();
  1141.             }
  1142.         }
  1143.     }
  1144.    
  1145.     logger.info("KPPAISHelper.getProjectCode(" + applicationCode + "): status not found in the owned applications list of size " + (apps == null ? "null" : apps.size()));
  1146.     return null;
  1147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement