/** Business logic to execute. */ public final Response executeCommand( Object inputPar, UserSessionParameters userSessionPars, HttpServletRequest request, HttpServletResponse response, HttpSession userSession, ServletContext context) { String serverLanguageId = ((JAIOUserSessionParameters) userSessionPars).getServerLanguageId(); Connection conn = null; PreparedStatement pstmt = null; try { conn = ConnectionManager.getConnection(context); // fires the GenericEvent.CONNECTION_CREATED event... EventsManager.getInstance() .processEvent( new GenericEvent( this, getRequestName(), GenericEvent.CONNECTION_CREATED, (JAIOUserSessionParameters) userSessionPars, request, response, userSession, context, conn, inputPar, null)); DetailSaleDocVO docVO = (DetailSaleDocVO) inputPar; // retrieve internationalization settings (Resources object)... ServerResourcesFactory factory = (ServerResourcesFactory) context.getAttribute(Controller.RESOURCES_FACTORY); Resources resources = factory.getResources(userSessionPars.getLanguageId()); // insert header... docVO.setDocStateDOC01(ApplicationConsts.HEADER_BLOCKED); Response res = insDocBean.insertSaleDoc( conn, docVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } SaleDocPK refPK = new SaleDocPK( docVO.getCompanyCodeSys01Doc01DOC01(), docVO.getDocTypeDoc01DOC01(), docVO.getDocYearDoc01DOC01(), docVO.getDocNumberDoc01DOC01()); // retrieve ref. document item rows... GridParams gridParams = new GridParams(); gridParams.getOtherGridParams().put(ApplicationConsts.SALE_DOC_PK, refPK); res = rowsAction.executeCommand( gridParams, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } java.util.List rows = ((VOListResponse) res).getRows(); // create rows.. GridSaleDocRowVO gridRowVO = null; DetailSaleDocRowVO rowVO = null; java.util.List discRows = null; SaleDocRowPK docRowPK = null; SaleItemDiscountVO itemDiscVO = null; gridParams = new GridParams(); for (int i = 0; i < rows.size(); i++) { gridRowVO = (GridSaleDocRowVO) rows.get(i); // retrieve row detail... docRowPK = new SaleDocRowPK( gridRowVO.getCompanyCodeSys01DOC02(), gridRowVO.getDocTypeDOC02(), gridRowVO.getDocYearDOC02(), gridRowVO.getDocNumberDOC02(), gridRowVO.getItemCodeItm01DOC02(), gridRowVO.getVariantTypeItm06DOC02(), gridRowVO.getVariantCodeItm11DOC02(), gridRowVO.getVariantTypeItm07DOC02(), gridRowVO.getVariantCodeItm12DOC02(), gridRowVO.getVariantTypeItm08DOC02(), gridRowVO.getVariantCodeItm13DOC02(), gridRowVO.getVariantTypeItm09DOC02(), gridRowVO.getVariantCodeItm14DOC02(), gridRowVO.getVariantTypeItm10DOC02(), gridRowVO.getVariantCodeItm15DOC02()); res = rowAction.executeCommand( docRowPK, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } rowVO = (DetailSaleDocRowVO) ((VOResponse) res).getVo(); rowVO.setDocTypeDOC02(docVO.getDocTypeDOC01()); rowVO.setDocNumberDOC02(docVO.getDocNumberDOC01()); if (rowVO.getInvoiceQtyDOC02().doubleValue() < rowVO.getQtyDOC02().doubleValue() && rowVO.getQtyDOC02().doubleValue() == rowVO.getOutQtyDOC02().doubleValue()) { rowVO.setQtyDOC02( rowVO .getQtyDOC02() .subtract( rowVO .getInvoiceQtyDOC02() .setScale( rowVO.getDecimalsReg02DOC02().intValue(), BigDecimal.ROUND_HALF_UP))); rowVO.setTaxableIncomeDOC02( rowVO .getQtyDOC02() .multiply(rowVO.getValueSal02DOC02()) .setScale(docVO.getDecimalsREG03().intValue(), BigDecimal.ROUND_HALF_UP)); rowVO.setTotalDiscountDOC02(new BigDecimal(0)); // calculate row vat... double vatPerc = rowVO.getValueReg01DOC02().doubleValue() * (1d - rowVO.getDeductibleReg01DOC02().doubleValue() / 100d) / 100; rowVO.setVatValueDOC02( rowVO .getTaxableIncomeDOC02() .multiply(new BigDecimal(vatPerc)) .setScale(docVO.getDecimalsREG03().intValue(), BigDecimal.ROUND_HALF_UP)); // calculate row total... rowVO.setValueDOC02(rowVO.getTaxableIncomeDOC02().add(rowVO.getVatValueDOC02())); res = insRowBean.insertSaleItem( conn, rowVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } // create item discounts... gridParams.getOtherGridParams().put(ApplicationConsts.SALE_DOC_ROW_PK, docRowPK); res = itemDiscAction.executeCommand( gridParams, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } discRows = ((VOListResponse) res).getRows(); for (int j = 0; j < discRows.size(); j++) { itemDiscVO = (SaleItemDiscountVO) discRows.get(j); itemDiscVO.setDocTypeDOC04(docVO.getDocTypeDOC01()); itemDiscVO.setDocNumberDOC04(docVO.getDocNumberDOC01()); res = insItemDiscBean.insertSaleDocRowDiscount( conn, itemDiscVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } } } } // create charges... gridParams = new GridParams(); gridParams.getOtherGridParams().put(ApplicationConsts.SALE_DOC_PK, refPK); res = chargesAction.executeCommand( gridParams, userSessionPars, request, response, userSession, context); SaleDocChargeVO chargeVO = null; if (res.isError()) { conn.rollback(); return res; } rows = ((VOListResponse) res).getRows(); for (int i = 0; i < rows.size(); i++) { chargeVO = (SaleDocChargeVO) rows.get(i); chargeVO.setDocTypeDOC03(docVO.getDocTypeDOC01()); chargeVO.setDocNumberDOC03(docVO.getDocNumberDOC01()); if (chargeVO.getValueDOC03() == null || chargeVO.getValueDOC03() != null && chargeVO.getInvoicedValueDOC03().doubleValue() < chargeVO.getValueDOC03().doubleValue()) { if (chargeVO.getValueDOC03() != null) chargeVO.setValueDOC03( chargeVO .getValueDOC03() .subtract(chargeVO.getInvoicedValueDOC03()) .setScale(docVO.getDecimalsREG03().intValue(), BigDecimal.ROUND_HALF_UP)); res = insChargeBean.insertSaleDocCharge( conn, chargeVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } } } // create activities... res = actAction.executeCommand( gridParams, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } SaleDocActivityVO actVO = null; rows = ((VOListResponse) res).getRows(); for (int i = 0; i < rows.size(); i++) { actVO = (SaleDocActivityVO) rows.get(i); actVO.setDocTypeDOC13(docVO.getDocTypeDOC01()); actVO.setDocNumberDOC13(docVO.getDocNumberDOC01()); if (actVO.getInvoicedValueDOC13().doubleValue() < actVO.getValueDOC13().doubleValue()) { actVO.setValueDOC13( actVO .getValueDOC13() .subtract(actVO.getInvoicedValueDOC13()) .setScale(docVO.getDecimalsREG03().intValue(), BigDecimal.ROUND_HALF_UP)); res = insActBean.insertSaleActivity( conn, actVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } } } // create header discounts... res = discAction.executeCommand( gridParams, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } SaleDocDiscountVO discVO = null; rows = ((VOListResponse) res).getRows(); for (int i = 0; i < rows.size(); i++) { discVO = (SaleDocDiscountVO) rows.get(i); discVO.setDocTypeDOC05(docVO.getDocTypeDOC01()); discVO.setDocNumberDOC05(docVO.getDocNumberDOC01()); res = insDiscBean.insertSaleDocDiscount( conn, discVO, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } } // recalculate all taxable incomes, vats, totals... SaleDocPK pk = new SaleDocPK( docVO.getCompanyCodeSys01DOC01(), docVO.getDocTypeDOC01(), docVO.getDocYearDOC01(), docVO.getDocNumberDOC01()); res = totals.updateTaxableIncomes( conn, pk, userSessionPars, request, response, userSession, context); if (res.isError()) { conn.rollback(); return res; } // reload doc header with updated totals... Response answer = docAction.loadSaleDoc(conn, pk, userSessionPars, request, response, userSession, context); // fires the GenericEvent.BEFORE_COMMIT event... EventsManager.getInstance() .processEvent( new GenericEvent( this, getRequestName(), GenericEvent.BEFORE_COMMIT, (JAIOUserSessionParameters) userSessionPars, request, response, userSession, context, conn, inputPar, answer)); conn.commit(); // fires the GenericEvent.AFTER_COMMIT event... EventsManager.getInstance() .processEvent( new GenericEvent( this, getRequestName(), GenericEvent.AFTER_COMMIT, (JAIOUserSessionParameters) userSessionPars, request, response, userSession, context, conn, inputPar, answer)); return answer; } catch (Throwable ex) { Logger.error( userSessionPars.getUsername(), this.getClass().getName(), "executeCommand", "Error while creating a sale invoice from a sale document", ex); try { conn.rollback(); } catch (Exception ex3) { } return new ErrorResponse(ex.getMessage()); } finally { try { pstmt.close(); } catch (Exception ex2) { } try { ConnectionManager.releaseConnection(conn, context); } catch (Exception ex1) { } } }
/** Business logic to execute. */ public VOListResponse loadOutDeliveryNotesForSaleDoc( GridParams pars, String serverLanguageId, String username, ArrayList companiesList) throws Throwable { PreparedStatement pstmt = null; Connection conn = null; try { if (this.conn == null) conn = getConn(); else conn = this.conn; // retrieve companies list... String companies = ""; for (int i = 0; i < companiesList.size(); i++) companies += "'" + companiesList.get(i).toString() + "',"; companies = companies.substring(0, companies.length() - 1); String sql = "select DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE," + "DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER,DOC08_DELIVERY_NOTES.DOC_DATE, " + "DOC08_DELIVERY_NOTES.DESTINATION_CODE_REG18,DOC08_DELIVERY_NOTES.DESCRIPTION," + "DOC08_DELIVERY_NOTES.DOC_SEQUENCE " + " from DOC08_DELIVERY_NOTES where " + "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01 in (" + companies + ") and " + "DOC08_DELIVERY_NOTES.ENABLED='Y' and " + "DOC08_DELIVERY_NOTES.DOC_TYPE=? and " + "DOC08_DELIVERY_NOTES.DOC_STATE=? and " + "(DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE,DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER) " + " in (select DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER " + " from DOC10_OUT_DELIVERY_NOTE_ITEMS where " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER_DOC01=? "; DetailSaleDocVO docVO = (DetailSaleDocVO) pars.getOtherGridParams().get(ApplicationConsts.SALE_DOC_VO); // invoice document... if (docVO.getDocNumberDOC01() == null) sql += " and DOC10_OUT_DELIVERY_NOTE_ITEMS.QTY-DOC10_OUT_DELIVERY_NOTE_ITEMS.INVOICE_QTY>0)"; else sql += ")"; Map attribute2dbField = new HashMap(); attribute2dbField.put("companyCodeSys01DOC08", "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01"); attribute2dbField.put("docTypeDOC08", "DOC08_DELIVERY_NOTES.DOC_TYPE"); attribute2dbField.put("docYearDOC08", "DOC08_DELIVERY_NOTES.DOC_YEAR"); attribute2dbField.put("docNumberDOC08", "DOC08_DELIVERY_NOTES.DOC_NUMBER"); attribute2dbField.put("docDateDOC08", "DOC08_DELIVERY_NOTES.DOC_DATE"); attribute2dbField.put( "destinationCodeReg18DOC08", "DOC08_DELIVERY_NOTES.DESTINATION_CODE_REG18"); attribute2dbField.put("descriptionDOC08", "DOC08_DELIVERY_NOTES.DESCRIPTION"); attribute2dbField.put("docSequenceDOC08", "DOC08_DELIVERY_NOTES.DOC_SEQUENCE"); ArrayList values = new ArrayList(); values.add(ApplicationConsts.OUT_DELIVERY_NOTE_DOC_TYPE); values.add(ApplicationConsts.CLOSED); values.add(docVO.getCompanyCodeSys01DOC01()); values.add(docVO.getDocTypeDoc01DOC01()); values.add(docVO.getDocYearDoc01DOC01()); values.add(docVO.getDocNumberDoc01DOC01()); // read from DOC08 table... Response res = QueryUtil.getQuery( conn, new UserSessionParameters(username), sql, values, attribute2dbField, OutDeliveryNotesVO.class, "Y", "N", null, pars, true); if (res.isError()) throw new Exception(res.getErrorMessage()); // check if the invoice document has been already created and there exists delivery notes // linked to it... if (docVO.getDocNumberDOC01() != null) { pstmt = conn.prepareStatement( "select DOC08_DELIVERY_NOTES.DOC_NUMBER from DOC08_DELIVERY_NOTES where " + "DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01 in (" + companies + ") and " + "DOC08_DELIVERY_NOTES.ENABLED='Y' and " + "DOC08_DELIVERY_NOTES.DOC_TYPE=? and " + "DOC08_DELIVERY_NOTES.DOC_STATE=? and " + "(DOC08_DELIVERY_NOTES.COMPANY_CODE_SYS01,DOC08_DELIVERY_NOTES.DOC_TYPE,DOC08_DELIVERY_NOTES.DOC_YEAR,DOC08_DELIVERY_NOTES.DOC_NUMBER) " + " in (select DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR,DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER " + " from DOC10_OUT_DELIVERY_NOTE_ITEMS,DOC02_SELLING_ITEMS where " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_TYPE_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_YEAR_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.DOC_NUMBER_DOC01=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.COMPANY_CODE_SYS01=DOC02_SELLING_ITEMS.COMPANY_CODE_SYS01 and " + " DOC02_SELLING_ITEMS.DOC_TYPE=? and " + " DOC02_SELLING_ITEMS.DOC_YEAR=? and " + " DOC02_SELLING_ITEMS.DOC_NUMBER=? and " + " DOC10_OUT_DELIVERY_NOTE_ITEMS.ITEM_CODE_ITM01=DOC02_SELLING_ITEMS.ITEM_CODE_ITM01)"); pstmt.setString(1, ApplicationConsts.OUT_DELIVERY_NOTE_DOC_TYPE); pstmt.setString(2, ApplicationConsts.CLOSED); pstmt.setString(3, docVO.getCompanyCodeSys01DOC01()); pstmt.setString(4, docVO.getDocTypeDoc01DOC01()); pstmt.setBigDecimal(5, docVO.getDocYearDoc01DOC01()); pstmt.setBigDecimal(6, docVO.getDocNumberDoc01DOC01()); pstmt.setString(7, docVO.getDocTypeDOC01()); pstmt.setBigDecimal(8, docVO.getDocYearDOC01()); pstmt.setBigDecimal(9, docVO.getDocNumberDOC01()); HashSet docNumberDOC08s = new HashSet(); ResultSet rset = pstmt.executeQuery(); while (rset.next()) docNumberDOC08s.add(rset.getBigDecimal(1)); rset.close(); java.util.List rows = ((VOListResponse) res).getRows(); OutDeliveryNotesVO vo = null; for (int i = 0; i < rows.size(); i++) { vo = (OutDeliveryNotesVO) rows.get(i); if (docNumberDOC08s.contains(vo.getDocNumberDOC08())) vo.setSelected(Boolean.TRUE); } } Response answer = res; if (answer.isError()) throw new Exception(answer.getErrorMessage()); else return (VOListResponse) answer; } catch (Throwable ex) { Logger.error( username, this.getClass().getName(), "executeCommand", "Error while fetching out delivery notes list, related to the specified sale document", ex); throw new Exception(ex.getMessage()); } finally { try { pstmt.close(); } catch (Exception exx) { } try { if (this.conn == null && conn != null) { // close only local connection conn.commit(); conn.close(); } } catch (Exception exx) { } } }