// if this is the case, then the linked document will be updated...
if ((docVO.getDocTypeDOC01().equals(ApplicationConsts.SALE_INVOICE_FROM_DN_DOC_TYPE) ||
docVO.getDocTypeDOC01().equals(ApplicationConsts.SALE_INVOICE_FROM_SD_DOC_TYPE)) &&
docVO.getDocNumberDoc01DOC01()!=null
) {
SaleDocPK refPK = new SaleDocPK(
docVO.getCompanyCodeSys01Doc01DOC01(),
docVO.getDocTypeDoc01DOC01(),
docVO.getDocYearDoc01DOC01(),
docVO.getDocNumberDoc01DOC01()
);
// retrieve ref. document item rows...
GridSaleDocRowVO vo = null;
DetailSaleDocRowVO refDetailVO = null;
BigDecimal qty = null;
BigDecimal invoiceQty = null;
String docType = null;
BigDecimal docYear = null;
BigDecimal docNumber = null;
BigDecimal rowNumber = null;
for(int i=0;i<rows.size();i++) {
vo = (GridSaleDocRowVO)rows.get(i);
res = loadSaleDocRowBean.loadSaleDocRow(
variant1Descriptions,variant2Descriptions,variant3Descriptions,variant4Descriptions,variant5Descriptions,
new SaleDocRowPK(
docVO.getCompanyCodeSys01Doc01DOC01(),
docVO.getDocTypeDoc01DOC01(),
docVO.getDocYearDoc01DOC01(),
docVO.getDocNumberDoc01DOC01(),
vo.getItemCodeItm01DOC02(),
vo.getVariantTypeItm06DOC02(),
vo.getVariantCodeItm11DOC02(),
vo.getVariantTypeItm07DOC02(),
vo.getVariantCodeItm12DOC02(),
vo.getVariantTypeItm08DOC02(),
vo.getVariantCodeItm13DOC02(),
vo.getVariantTypeItm09DOC02(),
vo.getVariantCodeItm14DOC02(),
vo.getVariantTypeItm10DOC02(),
vo.getVariantCodeItm15DOC02()
),
serverLanguageId,
username
);
if (res.isError()) {
throw new Exception(res.getErrorMessage());
}
refDetailVO = (DetailSaleDocRowVO)((VOResponse)res).getVo();
refDetailVO.setInvoiceQtyDOC02(
refDetailVO.getInvoiceQtyDOC02().add(vo.getQtyDOC02()).setScale(docVO.getDecimalsREG03().intValue(),BigDecimal.ROUND_HALF_UP)
);
if (refDetailVO.getInvoiceQtyDOC02().doubleValue()>refDetailVO.getQtyDOC02().doubleValue())
refDetailVO.setInvoiceQtyDOC02( refDetailVO.getQtyDOC02() );
// update ref. item row...
pstmt = conn.prepareStatement(
"update DOC02_SELLING_ITEMS set INVOICE_QTY=?,LAST_UPDATE_USER=?,LAST_UPDATE_DATE=? where "+
"COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and ITEM_CODE_ITM01=? and "+
"VARIANT_TYPE_ITM06=? and VARIANT_CODE_ITM11=? and "+
"VARIANT_TYPE_ITM07=? and VARIANT_CODE_ITM12=? and "+
"VARIANT_TYPE_ITM08=? and VARIANT_CODE_ITM13=? and "+
"VARIANT_TYPE_ITM09=? and VARIANT_CODE_ITM14=? and "+
"VARIANT_TYPE_ITM10=? and VARIANT_CODE_ITM15=? "
);
pstmt.setBigDecimal(1,refDetailVO.getInvoiceQtyDOC02());
pstmt.setString(2,username);
pstmt.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));
pstmt.setString(4,refDetailVO.getCompanyCodeSys01DOC02());
pstmt.setString(5,refDetailVO.getDocTypeDOC02());
pstmt.setBigDecimal(6,refDetailVO.getDocYearDOC02());
pstmt.setBigDecimal(7,refDetailVO.getDocNumberDOC02());
pstmt.setString(8,refDetailVO.getItemCodeItm01DOC02());
pstmt.setString(9,refDetailVO.getVariantTypeItm06DOC02());
pstmt.setString(10,refDetailVO.getVariantCodeItm11DOC02());
pstmt.setString(11,refDetailVO.getVariantTypeItm07DOC02());
pstmt.setString(12,refDetailVO.getVariantCodeItm12DOC02());
pstmt.setString(13,refDetailVO.getVariantTypeItm08DOC02());
pstmt.setString(14,refDetailVO.getVariantCodeItm13DOC02());
pstmt.setString(15,refDetailVO.getVariantTypeItm09DOC02());
pstmt.setString(16,refDetailVO.getVariantCodeItm14DOC02());
pstmt.setString(17,refDetailVO.getVariantTypeItm10DOC02());
pstmt.setString(18,refDetailVO.getVariantCodeItm15DOC02());
pstmt.execute();
pstmt.close();
// update ref. item row in the out delivery note...
pstmt2 = conn.prepareStatement(
"select QTY,INVOICE_QTY,DOC_TYPE,DOC_YEAR,DOC_NUMBER,ROW_NUMBER from DOC10_OUT_DELIVERY_NOTE_ITEMS where "+
"COMPANY_CODE_SYS01=? and DOC_TYPE_DOC01=? and DOC_YEAR_DOC01=? and DOC_NUMBER_DOC01=? and ITEM_CODE_ITM01=? and INVOICE_QTY<QTY and "+
"VARIANT_TYPE_ITM06=? and VARIANT_CODE_ITM11=? and "+
"VARIANT_TYPE_ITM07=? and VARIANT_CODE_ITM12=? and "+
"VARIANT_TYPE_ITM08=? and VARIANT_CODE_ITM13=? and "+
"VARIANT_TYPE_ITM09=? and VARIANT_CODE_ITM14=? and "+
"VARIANT_TYPE_ITM10=? and VARIANT_CODE_ITM15=? "
);
qty = null;
invoiceQty = null;
pstmt2.setString(1,refDetailVO.getCompanyCodeSys01DOC02());
pstmt2.setString(2,refDetailVO.getDocTypeDOC02());
pstmt2.setBigDecimal(3,refDetailVO.getDocYearDOC02());
pstmt2.setBigDecimal(4,refDetailVO.getDocNumberDOC02());
pstmt2.setString(5,refDetailVO.getItemCodeItm01DOC02());
pstmt2.setString(6,refDetailVO.getVariantTypeItm06DOC02());
pstmt2.setString(7,refDetailVO.getVariantCodeItm11DOC02());
pstmt2.setString(8,refDetailVO.getVariantTypeItm07DOC02());
pstmt2.setString(9,refDetailVO.getVariantCodeItm12DOC02());
pstmt2.setString(10,refDetailVO.getVariantTypeItm08DOC02());
pstmt2.setString(11,refDetailVO.getVariantCodeItm13DOC02());
pstmt2.setString(12,refDetailVO.getVariantTypeItm09DOC02());
pstmt2.setString(13,refDetailVO.getVariantCodeItm14DOC02());
pstmt2.setString(14,refDetailVO.getVariantTypeItm10DOC02());
pstmt2.setString(15,refDetailVO.getVariantCodeItm15DOC02());
rset = pstmt2.executeQuery();
// it only updates one row, that matches the where clause...
if(rset.next()) {
qty = rset.getBigDecimal(1);
invoiceQty = rset.getBigDecimal(2);
docType = rset.getString(3);
docYear = rset.getBigDecimal(4);
docNumber = rset.getBigDecimal(5);
rowNumber = rset.getBigDecimal(6);
}
rset.close();
pstmt2.close();
if (qty!=null && invoiceQty!=null) {
if (invoiceQty.doubleValue()+vo.getQtyDOC02().doubleValue()<=qty.doubleValue())
qty = invoiceQty.add(vo.getQtyDOC02());
pstmt = conn.prepareStatement(
"update DOC10_OUT_DELIVERY_NOTE_ITEMS set INVOICE_QTY=?,LAST_UPDATE_USER=?,LAST_UPDATE_DATE=? where "+
"COMPANY_CODE_SYS01=? and DOC_TYPE_DOC01=? and DOC_YEAR_DOC01=? and DOC_NUMBER_DOC01=? and ITEM_CODE_ITM01=? and "+
"DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and ROW_NUMBER=? and "+
"VARIANT_TYPE_ITM06=? and VARIANT_CODE_ITM11=? and "+
"VARIANT_TYPE_ITM07=? and VARIANT_CODE_ITM12=? and "+
"VARIANT_TYPE_ITM08=? and VARIANT_CODE_ITM13=? and "+
"VARIANT_TYPE_ITM09=? and VARIANT_CODE_ITM14=? and "+
"VARIANT_TYPE_ITM10=? and VARIANT_CODE_ITM15=? "
);
pstmt.setBigDecimal(1,qty);
pstmt.setString(2,username);
pstmt.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));
pstmt.setString(4,refDetailVO.getCompanyCodeSys01DOC02());
pstmt.setString(5,refDetailVO.getDocTypeDOC02());
pstmt.setBigDecimal(6,refDetailVO.getDocYearDOC02());
pstmt.setBigDecimal(7,refDetailVO.getDocNumberDOC02());
pstmt.setString(8,refDetailVO.getItemCodeItm01DOC02());
pstmt.setString(9,docType);
pstmt.setBigDecimal(10,docYear);
pstmt.setBigDecimal(11,docNumber);
pstmt.setBigDecimal(12,rowNumber);
pstmt.setString(13,refDetailVO.getVariantTypeItm06DOC02());
pstmt.setString(14,refDetailVO.getVariantCodeItm11DOC02());
pstmt.setString(15,refDetailVO.getVariantTypeItm07DOC02());
pstmt.setString(16,refDetailVO.getVariantCodeItm12DOC02());
pstmt.setString(17,refDetailVO.getVariantTypeItm08DOC02());
pstmt.setString(18,refDetailVO.getVariantCodeItm13DOC02());
pstmt.setString(19,refDetailVO.getVariantTypeItm09DOC02());
pstmt.setString(20,refDetailVO.getVariantCodeItm14DOC02());
pstmt.setString(21,refDetailVO.getVariantTypeItm10DOC02());
pstmt.setString(22,refDetailVO.getVariantCodeItm15DOC02());
pstmt.execute();
pstmt.close();
}
} // end for (used to update invoice qtys in referred docs...)
// retrieve document value charges...
gridParams = new GridParams();
gridParams.getOtherGridParams().put(ApplicationConsts.SALE_DOC_PK,pk);
res = rowsAction.loadSaleDocCharges(gridParams,serverLanguageId,username);
if (res.isError()) {
throw new Exception(res.getErrorMessage());
}
SaleDocChargeVO chargeVO = null;
rows = new ArrayList(((VOListResponse)res).getRows());
BigDecimal valueDOC03,invoicedValueDOC03 = new BigDecimal(0);
for(int i=0;i<rows.size();i++) {
chargeVO = (SaleDocChargeVO)rows.get(i);
if (chargeVO.getValueDOC03()!=null) {
pstmt = conn.prepareStatement(
"select VALUE,INVOICED_VALUE from DOC03_SELLING_CHARGES where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and CHARGE_CODE_SAL06=?"
);
pstmt.setString(1,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(2,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(3,refPK.getDocYearDOC01());
pstmt.setBigDecimal(4,refPK.getDocNumberDOC01());
pstmt.setString(5,chargeVO.getChargeCodeSal06DOC03());
rset = pstmt.executeQuery();
if (rset.next()) {
valueDOC03 = rset.getBigDecimal(1);
invoicedValueDOC03 = rset.getBigDecimal(2);
invoicedValueDOC03 = invoicedValueDOC03.add(chargeVO.getValueDOC03()).setScale(docVO.getDecimalsREG03().intValue(),BigDecimal.ROUND_HALF_UP);
if (invoicedValueDOC03.doubleValue()>valueDOC03.doubleValue())
invoicedValueDOC03 = valueDOC03;
}
rset.next();
pstmt.close();
pstmt = conn.prepareStatement(
"update DOC03_SELLING_CHARGES set INVOICED_VALUE=?,LAST_UPDATE_USER=?,LAST_UPDATE_DATE=? where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and CHARGE_CODE_SAL06=?"
);
pstmt.setBigDecimal(1,invoicedValueDOC03);
pstmt.setString(2,username);
pstmt.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));
pstmt.setString(4,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(5,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(6,refPK.getDocYearDOC01());
pstmt.setBigDecimal(7,refPK.getDocNumberDOC01());
pstmt.setString(8,chargeVO.getChargeCodeSal06DOC03());
pstmt.execute();
pstmt.close();
}
} // end for (used to update invoice qtys in referred docs...)
// retrieve document activities...
gridParams = new GridParams();
gridParams.getOtherGridParams().put(ApplicationConsts.SALE_DOC_PK,pk);
res = rowsAction.loadSaleDocActivities(gridParams,serverLanguageId,username);
if (res.isError()) {
throw new Exception(res.getErrorMessage());
}
BigDecimal valueDOC13,invoicedValueDOC13 = new BigDecimal(0);
SaleDocActivityVO actVO = null;
rows = new ArrayList(((VOListResponse)res).getRows());
for(int i=0;i<rows.size();i++) {
actVO = (SaleDocActivityVO)rows.get(i);
pstmt = conn.prepareStatement(
"select VALUE,INVOICED_VALUE from DOC13_SELLING_ACTIVITIES where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and ACTIVITY_CODE_SAL09=?"
);
pstmt.setString(1,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(2,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(3,refPK.getDocYearDOC01());
pstmt.setBigDecimal(4,refPK.getDocNumberDOC01());
pstmt.setString(5,actVO.getActivityCodeSal09DOC13());
rset = pstmt.executeQuery();
if (rset.next()) {
valueDOC13 = rset.getBigDecimal(1);
invoicedValueDOC13 = rset.getBigDecimal(2);
invoicedValueDOC13 = invoicedValueDOC03.add(actVO.getValueDOC13()).setScale(docVO.getDecimalsREG03().intValue(),BigDecimal.ROUND_HALF_UP);
if (invoicedValueDOC13.doubleValue()>valueDOC13.doubleValue())
invoicedValueDOC13 = valueDOC13;
}
rset.next();
pstmt.close();
pstmt = conn.prepareStatement(
"update DOC13_SELLING_ACTIVITIES set INVOICED_VALUE=?,LAST_UPDATE_USER=?,LAST_UPDATE_DATE=? where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and ACTIVITY_CODE_SAL09=?"
);
pstmt.setBigDecimal(1,invoicedValueDOC13);
pstmt.setString(2,username);
pstmt.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));
pstmt.setString(4,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(5,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(6,refPK.getDocYearDOC01());
pstmt.setBigDecimal(7,refPK.getDocNumberDOC01());
pstmt.setString(8,actVO.getActivityCodeSal09DOC13());
pstmt.execute();
pstmt.close();
} // end for (used to update invoice qtys in referred docs...)
// check if linked document can be closed...
boolean canCloseLinkedDoc = true;
pstmt = conn.prepareStatement(
"select QTY from DOC02_SELLING_ITEMS where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and QTY-INVOICE_QTY>0"
);
pstmt.setString(1,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(2,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(3,refPK.getDocYearDOC01());
pstmt.setBigDecimal(4,refPK.getDocNumberDOC01());
rset = pstmt.executeQuery();
if (rset.next())
canCloseLinkedDoc = false;
rset.close();
pstmt.close();
if (canCloseLinkedDoc) {
pstmt = conn.prepareStatement(
"select VALUE from DOC13_SELLING_ACTIVITIES where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and VALUE-INVOICED_VALUE>0"
);
pstmt.setString(1,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(2,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(3,refPK.getDocYearDOC01());
pstmt.setBigDecimal(4,refPK.getDocNumberDOC01());
rset = pstmt.executeQuery();
if (rset.next())
canCloseLinkedDoc = false;
rset.close();
pstmt.close();
if (canCloseLinkedDoc) {
pstmt = conn.prepareStatement(
"select VALUE from DOC03_SELLING_CHARGES where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=? and VALUE is not null and VALUE-INVOICED_VALUE>0"
);
pstmt.setString(1,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(2,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(3,refPK.getDocYearDOC01());
pstmt.setBigDecimal(4,refPK.getDocNumberDOC01());
rset = pstmt.executeQuery();
if (rset.next())
canCloseLinkedDoc = false;
rset.close();
pstmt.close();
if (canCloseLinkedDoc) {
// the linked document can be closed...
pstmt = conn.prepareStatement("update DOC01_SELLING set DOC_STATE=?,LAST_UPDATE_USER=?,LAST_UPDATE_DATE=? where COMPANY_CODE_SYS01=? and DOC_TYPE=? and DOC_YEAR=? and DOC_NUMBER=?");
pstmt.setString(1,ApplicationConsts.CLOSED);
pstmt.setString(2,username);
pstmt.setTimestamp(3,new java.sql.Timestamp(System.currentTimeMillis()));
pstmt.setString(4,refPK.getCompanyCodeSys01DOC01());
pstmt.setString(5,refPK.getDocTypeDOC01());
pstmt.setBigDecimal(6,refPK.getDocYearDOC01());
pstmt.setBigDecimal(7,refPK.getDocNumberDOC01());
pstmt.execute();
}
}
}