/** * 保存發票信息 * @param controller * @return * @throws ParseException * @throws ActiveRecordException */ @Before(Tx.class) public boolean addInvoice(QhyfController controller) throws Exception{ BizInvoiceInfo bizInvoiceInfo = new BizInvoiceInfo(); //參數獲取 String uuid = controller.getPara("uuid"); boolean isTrue = false; String payId = controller.getPara("pay"); StringTools.isNotBlank(payId); if (this.maxHisId(payId)==0) { //履歷表沒有數據時,更新前,保存一次履歷 saveHistoryInfo(payId, controller); } String invoiceNo = controller.getPara("invoiceNo"); String checkResult = controller.getPara("checkResult"); String invoiceMemo = controller.getPara("invoiceMemo"); String originalInvoiceNo = controller.getPara("originalInvoiceNo"); String invoiceName = controller.getPara("invoiceName"); BigDecimal invoiceNoTaxAmount =null; String checkCode = controller.getPara("checkCode"); String invoiceType = controller.getPara("invoiceType"); String invoiceCode = controller.getPara("invoiceCode"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //需求變更,菜單修改發票信息,可不選開票日期 2016/09/24 黎旭 START Date invoiceDate =null; if(StringUtils.notBlank(controller.getPara("invoiceDate"))){ invoiceDate = format.parse(controller.getPara("invoiceDate")); } // Date invoiceDate = format.parse(controller.getPara("invoiceDate")); //需求變更,菜單修改發票信息,可不選開票日期 2016/09/24 黎旭 END //需求變更,新增,修改發票信息發票金額和應收賬款金額可以為空, 2016/09/26 劉果 START BigDecimal invoiceAmount = null; BigDecimal accountReceivable = null; String invoiceAmountTmp = controller.getPara("invoiceAmount"); String accountReceivableTmp = controller.getPara("accountReceivable"); String invoiceNoTaxAmountTmp = controller.getPara("invoiceNoTaxAmount"); if (StringUtils.notBlank(invoiceAmountTmp)) { // 發票金額不為空 invoiceAmount = new BigDecimal(invoiceAmountTmp.replace(",", "")); } else { // } if (StringUtils.notBlank(accountReceivableTmp)) { // 應收賬款金額不為空 accountReceivable = new BigDecimal(accountReceivableTmp.replace(",", "")); } else { // } if (StringUtils.notBlank(invoiceNoTaxAmountTmp)) { // 應收賬款金額不為空 invoiceNoTaxAmount = new BigDecimal(invoiceNoTaxAmountTmp.replace(",", "")); } else { // } // 發票金額、應收賬款金額 不為空時 if (invoiceAmount != null && accountReceivable != null ) { // 發票應收賬款金額 accountReceivable 四舍五入 double resultInvoiceAccountReceivableB = accountReceivable.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); // 獲取發票金額 invoiceAmount 四舍五入 double resultInvoiceAmountB = invoiceAmount.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); List<String> para = new ArrayList<String>(); //根據發票號和付款確認書編號查詢當前發票已抵扣金額合計 para.add(invoiceNo); para.add(payId); String sql="CALL invoice_deduction_amount(?,?) "; // 執行SQL Record record = Db.findFirst(sql, para.toArray()); // 當前發票已抵扣金額 BigDecimal invoiceAmountCall = null; // 獲取發票已抵扣金額 if(record!=null){ invoiceAmountCall = record.getBigDecimal("accountReceivable"); } // 發票剩余可用抵扣金額 double deductibleAmountAvailable = resultInvoiceAmountB ; // 發票已抵扣金額不為空 if (invoiceAmountCall != null ) { // 發票剩余可用抵扣金額 = 發票金額 - 當前發票已抵扣金額 deductibleAmountAvailable = resultInvoiceAmountB - invoiceAmountCall.doubleValue(); } // 該發票的應收賬款金額不能大於發票剩余可用抵扣金額(已抵扣金額【%s】) AssertUtils.isTrue(resultInvoiceAccountReceivableB <= deductibleAmountAvailable, AlertUtils.getErrMsgWithCode("ME414E015",invoiceAmountCall == null ? 0 : invoiceAmountCall.doubleValue())); } if (!StringUtils.isBlank(uuid)) { //更新 StringTools.isNotBlank(uuid); if(!originalInvoiceNo.equals(invoiceNo)){ //查詢是否存在相同發票 Record sameInvoiceRecord = null; String sameInvoiceSql = String.format( " SELECT" + " a.uuid,a.invoice_no" + " FROM %s a" + " WHERE a.sys_status = %s AND" + " a.invoice_no = ? AND" + " a.pay_id = ? ", BizInvoiceInfo.dao.getTable().getName(), BlConstant.SYS_STATUS_VALUE); sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId); if(sameInvoiceRecord != null){ AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"發票已存在"); } } bizInvoiceInfo.set("uuid", uuid); //設置發票編號 bizInvoiceInfo.set("invoiceNo", invoiceNo); //設置發票名稱 bizInvoiceInfo.set("invoiceName", invoiceName); //設置開票日期 bizInvoiceInfo.set("invoiceDate", invoiceDate); bizInvoiceInfo.set("checkResult", checkResult); bizInvoiceInfo.set("invoiceMemo", invoiceMemo); //設置發票金額 bizInvoiceInfo.set("invoiceAmount", invoiceAmount); bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount); if(StringUtils.notBlank(checkCode)) bizInvoiceInfo.set("checkCode", checkCode); bizInvoiceInfo.set("invoiceType", invoiceType); bizInvoiceInfo.set("invoiceCode", invoiceCode); //設置應收賬款金額 bizInvoiceInfo.set("accountReceivable", accountReceivable); isTrue = controller.merge(bizInvoiceInfo.getTable().getName(), bizInvoiceInfo); controller.setSessionAttr("historyFlag", true); } else { //查詢是否存在相同發票 Record sameInvoiceRecord = null; String sameInvoiceSql = String.format( " SELECT" + " a.uuid,a.invoice_no" + " FROM %s a" + " WHERE a.sys_status = %s AND" + " a.invoice_no = ? AND" + " a.pay_id = ? ", BizInvoiceInfo.dao.getTable().getName(), BlConstant.SYS_STATUS_VALUE); sameInvoiceRecord = Db.findFirst(sameInvoiceSql, invoiceNo,payId); if(sameInvoiceRecord != null){ AssertUtils.isNull(sameInvoiceRecord.getStr("uuid"), sameInvoiceRecord.getStr("invoiceNo")+"發票已存在"); } //新增 //參數設置 bizInvoiceInfo.set("payId", payId); //設置發票編號 bizInvoiceInfo.set("invoiceNo", invoiceNo); //設置發票名稱 bizInvoiceInfo.set("invoiceName", invoiceName); //設置開票日期 bizInvoiceInfo.set("invoiceDate", invoiceDate); //設置發票金額 bizInvoiceInfo.set("invoiceAmount", invoiceAmount); bizInvoiceInfo.set("checkResult", checkResult); bizInvoiceInfo.set("invoiceMemo", invoiceMemo); //設置應收賬款金額 bizInvoiceInfo.set("accountReceivable", accountReceivable); bizInvoiceInfo.set("invoiceNoTaxAmount", invoiceNoTaxAmount); if(StringUtils.notBlank(checkCode)) bizInvoiceInfo.set("checkCode", checkCode); bizInvoiceInfo.set("invoiceType", invoiceType); bizInvoiceInfo.set("invoiceCode", invoiceCode); isTrue = controller.merge(BizInvoiceInfo.dao.getTable().getName(),bizInvoiceInfo); controller.setSessionAttr("historyFlag", true); } return isTrue; }