protected JSONObject execute(Map<String, Object> parameters, String data) { final DataToJsonConverter jsonConverter = new DataToJsonConverter(); JSONObject json = null; try { String orderId = (String) parameters.get("orderId"); Order objOrder = OBDal.getInstance().get(Order.class, orderId); Order objCloneOrder = (Order) DalUtil.copy(objOrder, false); BigDecimal bLineNetAmt = getLineNetAmt(orderId); objCloneOrder.setDocumentAction("CO"); objCloneOrder.setDocumentStatus("DR"); objCloneOrder.setPosted("N"); objCloneOrder.setProcessed(false); objCloneOrder.setSalesTransaction(true); objCloneOrder.setDocumentNo(null); objCloneOrder.setSalesTransaction(objOrder.isSalesTransaction()); // save the cloned order object OBDal.getInstance().save(objCloneOrder); objCloneOrder.setSummedLineAmount(objCloneOrder.getSummedLineAmount().subtract(bLineNetAmt)); objCloneOrder.setGrandTotalAmount(objCloneOrder.getGrandTotalAmount().subtract(bLineNetAmt)); // get the lines associated with the order and clone them to the new // order line. for (OrderLine ordLine : objOrder.getOrderLineList()) { String strPriceVersionId = getPriceListVersion(objOrder.getPriceList().getId(), objOrder.getClient().getId()); BigDecimal bdPriceList = getPriceList(ordLine.getProduct().getId(), strPriceVersionId); OrderLine objCloneOrdLine = (OrderLine) DalUtil.copy(ordLine, false); objCloneOrdLine.setReservedQuantity(new BigDecimal("0")); objCloneOrdLine.setDeliveredQuantity(new BigDecimal("0")); objCloneOrdLine.setInvoicedQuantity(new BigDecimal("0")); if (!"".equals(bdPriceList) || bdPriceList != null || !bdPriceList.equals(BigDecimal.ZERO.setScale(bdPriceList.scale()))) { objCloneOrdLine.setListPrice(bdPriceList); } objCloneOrder.getOrderLineList().add(objCloneOrdLine); objCloneOrdLine.setSalesOrder(objCloneOrder); } OBDal.getInstance().save(objCloneOrder); OBDal.getInstance().flush(); OBDal.getInstance().refresh(objCloneOrder); json = jsonConverter.toJsonObject(objCloneOrder, DataResolvingMode.FULL); OBDal.getInstance().commitAndClose(); return json; } catch (Exception e) { throw new OBException(e); } }