|
|
@@ -1,408 +0,0 @@
|
|
|
-package com.awspaas.user.apps.donenow_ctt.service;
|
|
|
-
|
|
|
-import com.actionsoft.bpms.bo.engine.BO;
|
|
|
-import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
|
|
|
-import com.actionsoft.bpms.commons.database.RowMap;
|
|
|
-import com.actionsoft.bpms.server.UserContext;
|
|
|
-import com.actionsoft.bpms.util.DBSql;
|
|
|
-import com.actionsoft.sdk.local.SDK;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-/**
|
|
|
- * 发票服务
|
|
|
- */
|
|
|
-public class invoiceService {
|
|
|
- // 单例模式
|
|
|
- private static volatile invoiceService instance;
|
|
|
-
|
|
|
- private invoiceService() {
|
|
|
- }
|
|
|
-
|
|
|
- public static invoiceService getInstance() {
|
|
|
- if (instance == null) {
|
|
|
- synchronized (invoiceService.class) {
|
|
|
- if (instance == null) {
|
|
|
- instance = new invoiceService();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return instance;
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- *处理发票
|
|
|
- * @param uc
|
|
|
- * @param accDeduIds
|
|
|
- */
|
|
|
- public List<String> ProcessInvoice(UserContext uc, String accDeduIds, InvoiceDealDto param, boolean isDeal) {
|
|
|
- if (StringUtils.isBlank(accDeduIds))
|
|
|
- return null;
|
|
|
-
|
|
|
- String sqlWhere = " (";
|
|
|
- String[] arr = accDeduIds.split(",");
|
|
|
- for (int i = 0; i < arr.length; i++) {
|
|
|
- sqlWhere += "?,";
|
|
|
- }
|
|
|
- sqlWhere = sqlWhere.substring(0, sqlWhere.length() - 1) + ")";
|
|
|
-
|
|
|
- List<RowMap> thisAccDtoList = DBSql.getMaps("SELECT * FROM VIEW_EU_DNV_POSTED_ALL WHERE ID IN " + sqlWhere, Arrays.stream(arr).toArray());
|
|
|
- if (thisAccDtoList.isEmpty())
|
|
|
- return null;
|
|
|
-
|
|
|
- //把里面的key转成大写
|
|
|
- for (RowMap rowMap : thisAccDtoList) {
|
|
|
- rowMap.forEach((key, value) -> rowMap.put(key.toUpperCase(), value));
|
|
|
- //rowMap.forEach((key, value) -> rowMap.put(key.toLowerCase(), value));
|
|
|
- }
|
|
|
-
|
|
|
- List<RowMap> thisAccList = DBSql.getMaps("SELECT * FROM BO_EU_DNCRM_ACCOUNT_DEDUCTION WHERE ID IN " + sqlWhere, Arrays.stream(arr).toArray());
|
|
|
-
|
|
|
- Map<String, List<RowMap>> dicList = thisAccList.stream().filter(rowMap -> rowMap.get("BILL_ACCOUNT_ID") != null).collect(
|
|
|
- Collectors.groupingBy(rowMap -> rowMap.get("BILL_ACCOUNT_ID").toString())
|
|
|
- );
|
|
|
- if (dicList.isEmpty())
|
|
|
- return null;
|
|
|
-
|
|
|
- List<RowMap> itemTypeList = DBSql.getMaps("SELECT OID,NAME FROM BO_EU_DND_GENERAL WHERE GENERAL_TABLE_ID='121'");
|
|
|
-
|
|
|
- List<String> invoiceIds = new ArrayList<>();
|
|
|
- for (String key : dicList.keySet()) {
|
|
|
-
|
|
|
- RowMap account = DBSql.getMap("SELECT * FROM BO_EU_DNCRM_ACCOUNT WHERE ID = ?", key);
|
|
|
- // 客户的客户顾问在发票中是必填项,没有客户顾问暂时不创建发票
|
|
|
- if (StringUtils.isBlank(account.getString("RESOURCE_ID"))) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- List<RowMap> noPurOrderList = dicList.get(key).stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("PURCHASE_ORDER_NO"))).collect(Collectors.toList());
|
|
|
- if (noPurOrderList.size() > 0) {
|
|
|
- //没有销售订单的条目,计费到这个客户的和这个客户的条目
|
|
|
- List<RowMap> thisNoPurOrdList = thisAccDtoList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("PURCHASE_ORDER_NO")) && rowMap.get("ACCOUNT_ID").equals(key)).collect(Collectors.toList());
|
|
|
- List<RowMap> billToThisNoPurOrdList = thisAccDtoList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("PURCHASE_ORDER_NO")) && !rowMap.get("ACCOUNT_ID").equals(key) && rowMap.get("BILL_ACCOUNT_ID").equals(key)).collect(Collectors.toList());
|
|
|
-
|
|
|
- BO invoice = new BO();
|
|
|
- //汇总
|
|
|
- Double totalMoney = thisNoPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("DOLLARS")).sum() + billToThisNoPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("DOLLARS")).sum();
|
|
|
- Double totalTax = thisNoPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum() + billToThisNoPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum();
|
|
|
- invoice.set("TOTAL_MONEY", totalMoney);//总额
|
|
|
- invoice.set("TOTAL_TAX", totalTax);//税
|
|
|
- Double totalPrice = totalMoney - totalTax;//总价
|
|
|
- invoice.set("TOTAL_PRICE", totalPrice);//总价(不含税)
|
|
|
- Double noBillHours = thisNoPurOrdList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisNoPurOrdList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
-
|
|
|
- invoice.set("NOBILL_HOURS", noBillHours);//不计费工时
|
|
|
- Double billHours = thisNoPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisNoPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
- invoice.set("BILL_HOURS", billHours);//计费工时
|
|
|
- Double prepaidHours = thisNoPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("CONTRACT_BLOCK_ID"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisNoPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("CONTRACT_BLOCK_ID"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
- invoice.set("PREPAID_HOURS", prepaidHours);//预付工时
|
|
|
-
|
|
|
-
|
|
|
- StringBuilder thisIds = new StringBuilder();
|
|
|
- if (thisNoPurOrdList.size() > 0) {
|
|
|
- thisNoPurOrdList.forEach(rowMap -> thisIds.append(rowMap.get("ID").toString() + ","));
|
|
|
- }
|
|
|
- if (billToThisNoPurOrdList.size() > 0) {
|
|
|
- billToThisNoPurOrdList.forEach(rowMap -> thisIds.append(rowMap.get("ID").toString() + ","));
|
|
|
- }
|
|
|
- String stringIds = thisIds.toString();
|
|
|
- if (StringUtils.isNotBlank(stringIds)) {
|
|
|
- stringIds = stringIds.substring(0, stringIds.length() - 1);
|
|
|
- }
|
|
|
- String invoiceNo = SDK.getRuleAPI().executeAtScript("@year()-@sequence(@concat(@companyId(),@year(),INVOICE),6)");//发票编号
|
|
|
- ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_a7d46a9dd4df40b899ddcf02113fe0d2", uc.getUID(), "新增账单" + invoiceNo);
|
|
|
-
|
|
|
-
|
|
|
- invoice.set("INVOICE_NO", invoiceNo);//发票编号
|
|
|
- invoice.set("INVOICE_DATE", param.getInvoiceDate());
|
|
|
- invoice.set("TOTAL", dicList.get(key).stream().mapToDouble(rowMap -> rowMap.getDouble("EXTENDED_PRICE")).sum());//总价
|
|
|
- invoice.set("TAX_VALUE", dicList.get(key).stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum());//税
|
|
|
- invoice.set("DATE_RANGE_FROM", param.getDateRangeFrom());//开始时间
|
|
|
- invoice.set("DATE_RANGE_TO", param.getDateRangeTo());//结束时间
|
|
|
- invoice.set("PAYMENT_TERM_ID", param.getPaymentTermId());//付款条款
|
|
|
- invoice.set("PURCHASE_ORDER_NO", "");
|
|
|
- invoice.set("NOTES", param.getNotes());
|
|
|
- invoice.set("TAX_REGION_NAME", account.getString("TAX_REGION_ID") == null ? "" : DBSql.getString("SELECT NAME FROM BO_EU_DND_GENERAL WHERE OID = ?", new Object[]{account.getString("TAX_REGION_ID")}));
|
|
|
- invoice.setBindId(processInstance.getId());
|
|
|
-
|
|
|
- dn.recordFormChanges.record(uc, invoice, "保存发票");
|
|
|
-
|
|
|
- SDK.getBOAPI().create("BO_EU_DNCTT_INVOICE", invoice, processInstance, uc);
|
|
|
-
|
|
|
- int invoice_line = 1;
|
|
|
- for (RowMap param_item : thisNoPurOrdList) {
|
|
|
-
|
|
|
- RowMap accDedItem = dicList.get(key).stream().filter(rowMap -> rowMap.get("ID").equals(param_item.get("ID"))).findFirst().get();
|
|
|
-
|
|
|
- String billable_hours = param_item.getString("BILLABLE_HOURS");
|
|
|
-
|
|
|
- if (param_item.getString("CONTRACT_TYPE_ID").equals("1199") || param_item.getString("CONTRACT_TYPE_ID").equals("1201")) {
|
|
|
- billable_hours = "合同已包";
|
|
|
- } else if (param_item.getString("CONTRACT_TYPE_ID").equals("1202") || param_item.getString("CONTRACT_TYPE_ID").equals("1203")) {
|
|
|
- if (StringUtils.isNotBlank(param_item.getString("BILLABLE")))
|
|
|
- billable_hours = "预支付";
|
|
|
- }
|
|
|
-
|
|
|
- BO invoiceItem = new BO();
|
|
|
- invoiceItem.setBindId(invoice.getBindId());
|
|
|
- invoiceItem.set("INVOICE_ID", invoice.getId());
|
|
|
- invoiceItem.set("ITEM_DATE", param_item.get("ITEM_DATE"));
|
|
|
- invoiceItem.set("ITEM_DESC", param_item.get("ITEM_DESC"));
|
|
|
- invoiceItem.set("ITEM_TYPE", param_item.get("ITEM_TYPE"));
|
|
|
- invoiceItem.set("RESOURCE_NAME", param_item.get("RESOURCE_NAME"));
|
|
|
- invoiceItem.set("billable_hours", billable_hours);
|
|
|
- invoiceItem.set("QUANTITY", param_item.get("QUANTITY"));
|
|
|
- invoiceItem.set("RATE", param_item.get("RATE"));
|
|
|
- invoiceItem.set("EFFECTIVE_TAX_RATE", accDedItem.getDouble("EFFECTIVE_TAX_RATE") * 100);
|
|
|
- invoiceItem.set("TAX_CATEGORY_NAME", accDedItem.get("TAX_CATEGORY_NAME"));
|
|
|
- String itemType = itemTypeList.stream().filter(rowMap -> rowMap.get("OID").equals(param_item.get("ITEM_TYPE"))).findFirst().get().getString("NAME");
|
|
|
- invoiceItem.set("ITEM_TYPE", itemType);
|
|
|
- invoiceItem.set("DOLLARS", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("HOURLY_RATE", param_item.get("HOURLY_RATE"));
|
|
|
- invoiceItem.set("ROLE_NAME", param_item.get("ROLE_NAME"));
|
|
|
- invoiceItem.set("WORK_TYPE", param_item.get("WORK_TYPE"));
|
|
|
- invoiceItem.set("TAX_INCLUSIVE", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("ACCOUNT_DEDUCTION_ID", param_item.get("ID"));
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_INVOICE_DETAIL", invoiceItem, uc);
|
|
|
-
|
|
|
- //更新账户抵扣条目
|
|
|
- if (isDeal)// 处理,区分预览和实际生成
|
|
|
- {
|
|
|
- BO thisacc_ded = SDK.getBOAPI().get("BO_EU_DNCRM_ACCOUNT_DEDUCTION", accDedItem.getString("ID"));
|
|
|
- thisacc_ded.set("INVOICE_ID", invoice.getId());
|
|
|
- thisacc_ded.set("INVOICE_LINE_ITEM_NO", invoice_line);
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", thisacc_ded);
|
|
|
- }
|
|
|
- invoice_line++;
|
|
|
- }
|
|
|
- //付费到这个客户的条目
|
|
|
- if (billToThisNoPurOrdList.size() > 0) {
|
|
|
- Map<String, List<RowMap>> dicBillToThis = billToThisNoPurOrdList.stream().collect(Collectors.groupingBy(rowMap -> rowMap.getString("account_id")));
|
|
|
- for (String bkey : dicBillToThis.keySet()) {
|
|
|
-
|
|
|
- for (RowMap param_item : dicBillToThis.get(bkey)) {
|
|
|
- RowMap accDedItem = dicList.get(key).stream().filter(rowMap -> rowMap.get("ID").equals(param_item.get("ID"))).findFirst().get();
|
|
|
-
|
|
|
- String billable_hours = param_item.getString("BILLABLE_HOURS");
|
|
|
-
|
|
|
- if (param_item.getString("CONTRACT_TYPE_ID").equals("1199") || param_item.getString("CONTRACT_TYPE_ID").equals("1201")) {
|
|
|
- billable_hours = "合同已包";
|
|
|
- } else if (param_item.getString("CONTRACT_TYPE_ID").equals("1202") || param_item.getString("CONTRACT_TYPE_ID").equals("1203")) {
|
|
|
- if (StringUtils.isNotBlank(param_item.getString("BILLABLE")))
|
|
|
- billable_hours = "预支付";
|
|
|
- }
|
|
|
-
|
|
|
- BO invoiceItem = new BO();
|
|
|
- invoiceItem.setBindId(invoice.getBindId());
|
|
|
- invoiceItem.set("INVOICE_ID", invoice.getId());
|
|
|
- invoiceItem.set("ITEM_DATE", param_item.get("ITEM_DATE"));
|
|
|
- invoiceItem.set("ITEM_DESC", param_item.get("ITEM_DESC"));
|
|
|
- invoiceItem.set("ITEM_TYPE", param_item.get("ITEM_TYPE"));
|
|
|
- invoiceItem.set("RESOURCE_NAME", param_item.get("RESOURCE_NAME"));
|
|
|
- invoiceItem.set("billable_hours", billable_hours);
|
|
|
- invoiceItem.set("QUANTITY", param_item.get("QUANTITY"));
|
|
|
- invoiceItem.set("RATE", param_item.get("RATE"));
|
|
|
- invoiceItem.set("EFFECTIVE_TAX_RATE", accDedItem.getDouble("EFFECTIVE_TAX_RATE") * 100);
|
|
|
- invoiceItem.set("TAX_CATEGORY_NAME", accDedItem.get("TAX_CATEGORY_NAME"));
|
|
|
- String itemType = itemTypeList.stream().filter(rowMap -> rowMap.get("OID").equals(param_item.get("ITEM_TYPE"))).findFirst().get().getString("NAME");
|
|
|
- invoiceItem.set("ITEM_TYPE", itemType);
|
|
|
- invoiceItem.set("DOLLARS", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("HOURLY_RATE", param_item.get("HOURLY_RATE"));
|
|
|
- invoiceItem.set("ROLE_NAME", param_item.get("ROLE_NAME"));
|
|
|
- invoiceItem.set("WORK_TYPE", param_item.get("WORK_TYPE"));
|
|
|
- invoiceItem.set("TAX_INCLUSIVE", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("ACCOUNT_DEDUCTION_ID", param_item.get("ID"));
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_INVOICE_DETAIL", invoiceItem, uc);
|
|
|
-
|
|
|
-
|
|
|
- //更新账户抵扣条目
|
|
|
- if (isDeal)// 处理,区分预览和实际生成
|
|
|
- {
|
|
|
- BO thisacc_ded = SDK.getBOAPI().get("BO_EU_DNCRM_ACCOUNT_DEDUCTION", accDedItem.getString("ID"));
|
|
|
- thisacc_ded.set("INVOICE_ID", invoice.getId());
|
|
|
- thisacc_ded.set("INVOICE_LINE_ITEM_NO", invoice_line);
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", thisacc_ded);
|
|
|
- }
|
|
|
- invoice_line++;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //有采购订单的条目
|
|
|
- List<RowMap> purchOrderList = dicList.get(key).stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("purchase_order_no"))).collect(Collectors.toList());
|
|
|
-
|
|
|
- if (purchOrderList.size() > 0) {
|
|
|
- Map<String, List<RowMap>> poDic = purchOrderList.stream().collect(Collectors.groupingBy(rowMap -> rowMap.getString("purchase_order_no")));
|
|
|
- for (String poKey : poDic.keySet()) {
|
|
|
-
|
|
|
- //采购订单的条目
|
|
|
- List<RowMap> thisPurOrdList = poDic.get(poKey).stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("purchase_order_no")) && rowMap.getString("account_id").equals(key) && rowMap.getString("bill_account_id").equals(key)).collect(Collectors.toList());
|
|
|
-
|
|
|
- //采购订单的条目
|
|
|
- List<RowMap> billToThisPurOrdList = poDic.get(poKey).stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("purchase_order_no")) && !rowMap.getString("account_id").equals(key) && rowMap.getString("bill_account_id").equals(key)).collect(Collectors.toList());
|
|
|
-
|
|
|
-
|
|
|
- BO invoice = new BO();
|
|
|
- //汇总
|
|
|
- Double totalMoney = thisPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("DOLLARS")).sum() + billToThisPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("DOLLARS")).sum();
|
|
|
- Double totalTax = thisPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum() + billToThisPurOrdList.stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum();
|
|
|
- invoice.set("TOTAL_MONEY", totalMoney);//总额
|
|
|
- invoice.set("TOTAL_TAX", totalTax);//税
|
|
|
- Double totalPrice = totalMoney - totalTax;//总价
|
|
|
- invoice.set("TOTAL_PRICE", totalPrice);//总价(不含税)
|
|
|
- Double noBillHours = thisPurOrdList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisPurOrdList.stream().filter(rowMap -> StringUtils.isBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
-
|
|
|
- invoice.set("NOBILL_HOURS", noBillHours);//不计费工时
|
|
|
- Double billHours = thisPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("BILLABLE"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
- invoice.set("BILL_HOURS", billHours);//计费工时
|
|
|
- Double prepaidHours = thisPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("CONTRACT_BLOCK_ID"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum() + billToThisPurOrdList.stream().filter(rowMap -> StringUtils.isNotBlank(rowMap.getString("CONTRACT_BLOCK_ID"))).mapToDouble(rowMap -> rowMap.getDouble("BILLABLE_HOURS")).sum();
|
|
|
- invoice.set("PREPAID_HOURS", prepaidHours);//预付工时
|
|
|
-
|
|
|
-
|
|
|
- String invoiceNo = SDK.getRuleAPI().executeAtScript("@year()-@sequence(@concat(@companyId(),@year(),INVOICE),6)");//发票编号
|
|
|
- ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_a7d46a9dd4df40b899ddcf02113fe0d2", uc.getUID(), "新增账单" + invoiceNo);
|
|
|
-
|
|
|
-
|
|
|
- invoice.set("INVOICE_NO", invoiceNo);//发票编号
|
|
|
- invoice.set("INVOICE_DATE", param.getInvoiceDate());
|
|
|
- invoice.set("TOTAL", poDic.get(key).stream().mapToDouble(rowMap -> rowMap.getDouble("EXTENDED_PRICE")).sum());//总价
|
|
|
- invoice.set("TAX_VALUE", poDic.get(key).stream().mapToDouble(rowMap -> rowMap.getDouble("TAX_DOLLARS")).sum());//税
|
|
|
- invoice.set("DATE_RANGE_FROM", param.getDateRangeFrom());//开始时间
|
|
|
- invoice.set("DATE_RANGE_TO", param.getDateRangeTo());//结束时间
|
|
|
- invoice.set("PAYMENT_TERM_ID", param.getPaymentTermId());//付款条款
|
|
|
- invoice.set("PURCHASE_ORDER_NO", "");
|
|
|
- invoice.set("NOTES", param.getNotes());
|
|
|
- invoice.set("TAX_REGION_NAME", account.getString("TAX_REGION_ID") == null ? "" : DBSql.getString("SELECT NAME FROM BO_EU_DND_GENERAL WHERE OID = ?", new Object[]{account.getString("TAX_REGION_ID")}));
|
|
|
- invoice.setBindId(processInstance.getId());
|
|
|
-
|
|
|
- dn.recordFormChanges.record(uc, invoice, "保存发票");
|
|
|
-
|
|
|
- SDK.getBOAPI().create("BO_EU_DNCTT_INVOICE", invoice, processInstance, uc);
|
|
|
-
|
|
|
-
|
|
|
- int invoice_line = 1;
|
|
|
- for (RowMap param_item : thisPurOrdList) {
|
|
|
-
|
|
|
- RowMap accDedItem = dicList.get(key).stream().filter(rowMap -> rowMap.get("ID").equals(param_item.get("ID"))).findFirst().get();
|
|
|
-
|
|
|
- String billable_hours = param_item.getString("BILLABLE_HOURS");
|
|
|
-
|
|
|
- if (param_item.getString("CONTRACT_TYPE_ID").equals("1199") || param_item.getString("CONTRACT_TYPE_ID").equals("1201")) {
|
|
|
- billable_hours = "合同已包";
|
|
|
- } else if (param_item.getString("CONTRACT_TYPE_ID").equals("1202") || param_item.getString("CONTRACT_TYPE_ID").equals("1203")) {
|
|
|
- if (StringUtils.isNotBlank(param_item.getString("BILLABLE")))
|
|
|
- billable_hours = "预支付";
|
|
|
- }
|
|
|
-
|
|
|
- BO invoiceItem = new BO();
|
|
|
- invoiceItem.setBindId(invoice.getBindId());
|
|
|
- invoiceItem.set("INVOICE_ID", invoice.getId());
|
|
|
- invoiceItem.set("ITEM_DATE", param_item.get("ITEM_DATE"));
|
|
|
- invoiceItem.set("ITEM_DESC", param_item.get("ITEM_DESC"));
|
|
|
- invoiceItem.set("ITEM_TYPE", param_item.get("ITEM_TYPE"));
|
|
|
- invoiceItem.set("RESOURCE_NAME", param_item.get("RESOURCE_NAME"));
|
|
|
- invoiceItem.set("billable_hours", billable_hours);
|
|
|
- invoiceItem.set("QUANTITY", param_item.get("QUANTITY"));
|
|
|
- invoiceItem.set("RATE", param_item.get("RATE"));
|
|
|
- invoiceItem.set("EFFECTIVE_TAX_RATE", accDedItem.getDouble("EFFECTIVE_TAX_RATE") * 100);
|
|
|
- invoiceItem.set("TAX_CATEGORY_NAME", accDedItem.get("TAX_CATEGORY_NAME"));
|
|
|
- String itemType = itemTypeList.stream().filter(rowMap -> rowMap.get("OID").equals(param_item.get("ITEM_TYPE"))).findFirst().get().getString("NAME");
|
|
|
- invoiceItem.set("ITEM_TYPE", itemType);
|
|
|
- invoiceItem.set("DOLLARS", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("HOURLY_RATE", param_item.get("HOURLY_RATE"));
|
|
|
- invoiceItem.set("ROLE_NAME", param_item.get("ROLE_NAME"));
|
|
|
- invoiceItem.set("WORK_TYPE", param_item.get("WORK_TYPE"));
|
|
|
- invoiceItem.set("TAX_INCLUSIVE", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("ACCOUNT_DEDUCTION_ID", param_item.get("ID"));
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_INVOICE_DETAIL", invoiceItem, uc);
|
|
|
-
|
|
|
- //更新账户抵扣条目
|
|
|
- if (isDeal)// 处理,区分预览和实际生成
|
|
|
- {
|
|
|
- BO thisacc_ded = SDK.getBOAPI().get("BO_EU_DNCRM_ACCOUNT_DEDUCTION", accDedItem.getString("ID"));
|
|
|
- thisacc_ded.set("INVOICE_ID", invoice.getId());
|
|
|
- thisacc_ded.set("INVOICE_LINE_ITEM_NO", invoice_line);
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", thisacc_ded);
|
|
|
- }
|
|
|
- invoice_line++;
|
|
|
- }
|
|
|
- //付费到这个客户的条目
|
|
|
- if (billToThisPurOrdList.size() > 0) {
|
|
|
- Map<String, List<RowMap>> dicBillToThis = billToThisPurOrdList.stream().collect(Collectors.groupingBy(rowMap -> rowMap.getString("account_id")));
|
|
|
- for (String bkey : dicBillToThis.keySet()) {
|
|
|
-
|
|
|
- for (RowMap param_item : dicBillToThis.get(bkey)) {
|
|
|
- RowMap accDedItem = dicList.get(key).stream().filter(rowMap -> rowMap.get("ID").equals(param_item.get("ID"))).findFirst().get();
|
|
|
-
|
|
|
- String billable_hours = param_item.getString("BILLABLE_HOURS");
|
|
|
-
|
|
|
- if (param_item.getString("CONTRACT_TYPE_ID").equals("1199") || param_item.getString("CONTRACT_TYPE_ID").equals("1201")) {
|
|
|
- billable_hours = "合同已包";
|
|
|
- } else if (param_item.getString("CONTRACT_TYPE_ID").equals("1202") || param_item.getString("CONTRACT_TYPE_ID").equals("1203")) {
|
|
|
- if (StringUtils.isNotBlank(param_item.getString("BILLABLE")))
|
|
|
- billable_hours = "预支付";
|
|
|
- }
|
|
|
-
|
|
|
- BO invoiceItem = new BO();
|
|
|
- invoiceItem.setBindId(invoice.getBindId());
|
|
|
- invoiceItem.set("INVOICE_ID", invoice.getId());
|
|
|
- invoiceItem.set("ITEM_DATE", param_item.get("ITEM_DATE"));
|
|
|
- invoiceItem.set("ITEM_DESC", param_item.get("ITEM_DESC"));
|
|
|
- invoiceItem.set("ITEM_TYPE", param_item.get("ITEM_TYPE"));
|
|
|
- invoiceItem.set("RESOURCE_NAME", param_item.get("RESOURCE_NAME"));
|
|
|
- invoiceItem.set("billable_hours", billable_hours);
|
|
|
- invoiceItem.set("QUANTITY", param_item.get("QUANTITY"));
|
|
|
- invoiceItem.set("RATE", param_item.get("RATE"));
|
|
|
- invoiceItem.set("EFFECTIVE_TAX_RATE", accDedItem.getDouble("EFFECTIVE_TAX_RATE") * 100);
|
|
|
- invoiceItem.set("TAX_CATEGORY_NAME", accDedItem.get("TAX_CATEGORY_NAME"));
|
|
|
- String itemType = itemTypeList.stream().filter(rowMap -> rowMap.get("OID").equals(param_item.get("ITEM_TYPE"))).findFirst().get().getString("NAME");
|
|
|
- invoiceItem.set("ITEM_TYPE", itemType);
|
|
|
- invoiceItem.set("DOLLARS", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("HOURLY_RATE", param_item.get("HOURLY_RATE"));
|
|
|
- invoiceItem.set("ROLE_NAME", param_item.get("ROLE_NAME"));
|
|
|
- invoiceItem.set("WORK_TYPE", param_item.get("WORK_TYPE"));
|
|
|
- invoiceItem.set("TAX_INCLUSIVE", param_item.get("DOLLARS"));
|
|
|
- invoiceItem.set("ACCOUNT_DEDUCTION_ID", param_item.get("ID"));
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_INVOICE_DETAIL", invoiceItem, uc);
|
|
|
-
|
|
|
-
|
|
|
- //更新账户抵扣条目
|
|
|
- if (isDeal)// 处理,区分预览和实际生成
|
|
|
- {
|
|
|
- BO thisacc_ded = SDK.getBOAPI().get("BO_EU_DNCRM_ACCOUNT_DEDUCTION", accDedItem.getString("ID"));
|
|
|
- thisacc_ded.set("INVOICE_ID", invoice.getId());
|
|
|
- thisacc_ded.set("INVOICE_LINE_ITEM_NO", invoice_line);
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCRM_ACCOUNT_DEDUCTION", thisacc_ded);
|
|
|
- }
|
|
|
- invoice_line++;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- return invoiceIds;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- private boolean addInvoiceItem(UserContext uc, List<RowMap> invoiceItemList) {
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-}
|