|
|
@@ -1701,4 +1701,103 @@ public class contractService {
|
|
|
return DBSql.getDouble("SELECT( IFNULL(( SELECT rate FROM BO_EU_DNCTT_CONTRACT_INTERNAL_COST WHERE contract_id = p.contract_id AND resource_id = p.resource_id AND role_id = p.role_id LIMIT 1), ( SELECT hourly_rate FROM bo_eu_dnsys_resource_internal_cost WHERE resource_id = p.resource_id AND IFNULL(start_date, '1970-01-01') <= FROM_UNIXTIME(p.start_time / 1000) AND IFNULL(end_date, '9999-01-01') > FROM_UNIXTIME(p.start_time / 1000)) ) * p.hours_billed ) AS COST FROM bo_eu_dnsdk_work_entry p JOIN bo_eu_dnd_cost_code cc ON p.cost_code_id = cc.id JOIN bo_eu_dnsdk_task t ON p.task_id = t.id LEFT JOIN bo_eu_dnctt_contract c ON p.contract_id = c.id WHERE p.id = '" + id + "'", "COST");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交佣金
|
|
|
+ * @param uc
|
|
|
+ * @param approveDate
|
|
|
+ * @param approveIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean approveCommission(UserContext uc, String approveDate, String approveIds) throws SQLException {
|
|
|
+
|
|
|
+ Connection connUpdate = null;
|
|
|
+ try {
|
|
|
+ connUpdate = DBSql.open();
|
|
|
+ connUpdate.setAutoCommit(false);
|
|
|
+
|
|
|
+ for (String approveId : approveIds.split(",")) {
|
|
|
+
|
|
|
+ BO cad = new BO();// crm_account_deduction();//审批并提交表实体对象
|
|
|
+ String TAX_CATEGORY_ID = null;//物料计费代码
|
|
|
+ String CONTRACT_SERVICE_ID = null;//合同服务ID
|
|
|
+ String CONTRACT_ID = null;//合同ID
|
|
|
+
|
|
|
+ String ORGID = uc.getCompanyModel().getId();
|
|
|
+
|
|
|
+ //BO_EU_DNCTT_COMMISSION_PERIOD
|
|
|
+ BO bo = SDK.getBOAPI().get("BO_EU_DNCTT_COMMISSION_PERIOD", approveId);//佣金
|
|
|
+ BO commissionBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_COMMISSION", bo.getBindId());
|
|
|
+ if (bo != null) {
|
|
|
+ bo.set("APPROVE_AND_POST_DATE", approveDate);
|
|
|
+ bo.set("SETUP_FEE_APPROVE_POST_USER_ID", uc.getUID());
|
|
|
+ SDK.getBOAPI().update("BO_EU_DNCTT_COMMISSION_PERIOD", bo, connUpdate);
|
|
|
+
|
|
|
+ cad.set("TYPE_ID", cttConstant.ACCOUNT_DEDUCTION_TYPE_COMMISSION);//类型(佣金)
|
|
|
+ cad.set("OBJECT_ID", approveId);
|
|
|
+ cad.set("CONTRACT_ID", approveId);
|
|
|
+ cad.set("QUANTITY", 1);
|
|
|
+ cad.set("BILL_CREATE_USER_ID", bo.getCreateUser());//创建人
|
|
|
+ cad.set("ACCOUNT_ID", commissionBO.getString("ISP"));
|
|
|
+ cad.set("BILL_ACCOUNT_ID", commissionBO.getString("ISP"));
|
|
|
+ cad.set("EXTENDED_PRICE", bo.get("PERIOD_ADJUSTED_PRICE"));
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(bo.getString("COST_CODE_ID"))) {
|
|
|
+ TAX_CATEGORY_ID = DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=? and ORGID=?", new Object[]{bo.getString("COST_CODE_ID"), ORGID});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ RowMap ca = DBSql.getMap("select TAX_REGION_ID,IS_TAX_EXEMPT from BO_EU_DNCRM_ACCOUNT where ID=?", new Object[]{cad.get("ACCOUNT_ID")});
|
|
|
+ String tax_category_name = null;//税收种类
|
|
|
+ String tax_region_name = null;//税区
|
|
|
+ double tax_rate = 0;//税率
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(TAX_CATEGORY_ID)) {
|
|
|
+ tax_category_name = DBSql.getString("SELECT NAME FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{TAX_CATEGORY_ID, uc.getCompanyModel().getId()});
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ca.containsKey("TAX_REGION_ID") && StringUtils.isNotBlank(ca.getString("TAX_REGION_ID"))) {
|
|
|
+ tax_region_name = DBSql.getString("SELECT NAME FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{ca.getString("TAX_REGION_ID"), uc.getCompanyModel().getId()});
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tax_category_name != null && tax_region_name != null)
|
|
|
+ tax_rate = DBSql.getDouble("SELECT TOTAL_EFFECTIVE_TAX_RATE FROM BO_EU_DND_TAX_REGION_CATE WHERE TAX_REGION_ID='" + ca.getString("TAX_REGION_ID") + "' AND TAX_CATE_ID='" + TAX_CATEGORY_ID + "' AND ORGID='" + uc.getCompanyModel().getId() + "' ", "TOTAL_EFFECTIVE_TAX_RATE");
|
|
|
+
|
|
|
+ cad.set("POSTED_DATE", approveDate);
|
|
|
+ cad.set("TAX_CATEGORY_NAME", tax_category_name);
|
|
|
+ cad.set("TAX_CATEGORY_ID", TAX_CATEGORY_ID);
|
|
|
+ cad.set("TAX_REGION_ID", ca.getString("TAX_REGION_ID"));
|
|
|
+ cad.set("TAX_REGION_NAME", tax_region_name);
|
|
|
+ cad.set("EFFECTIVE_TAX_RATE", tax_rate);
|
|
|
+
|
|
|
+ //是否免税
|
|
|
+ if (!ca.getString("IS_TAX_EXEMPT").equals("1") && ca.get("EXTENDED_PRICE") != null && tax_rate > 0) {
|
|
|
+ double tax_dollars = cad.get("EXTENDED_PRICE", Double.class) * (1 - 1 / (1 + tax_rate));//税额
|
|
|
+ cad.set("TAX_DOLLARS", tax_dollars);
|
|
|
+ }
|
|
|
+
|
|
|
+ //计费客户
|
|
|
+ if (StringUtils.isBlank(cad.getString("BILL_ACCOUNT_ID")) && StringUtils.isNotBlank(cad.getString("ACCOUNT_ID")))
|
|
|
+ cad.set("BILL_ACCOUNT_ID", cad.get("ACCOUNT_ID"));
|
|
|
+
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCRM_ACCOUNT_DEDUCTION", cad, uc, connUpdate);
|
|
|
+ dn.recordFormChanges.record(uc, cad, "提交佣金");
|
|
|
+ }
|
|
|
+ connUpdate.commit();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed())
|
|
|
+ try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed())
|
|
|
+ DBSql.close(connUpdate);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|