/// <summary> /// 新增销售订单 /// </summary> /// <param name="UserCode"></param> /// <param name="PlainPassword"></param> /// <param name="StrAccID"></param> /// <param name="AccYear"></param> /// <param name="Act"></param> /// <param name="entity"></param> /// <returns></returns> public string AddSale(string UserCode, string PlainPassword, string StrAccID, int AccYear, string Act, EntitySaleHead entity, out int success) { success = 0; SoMainBll bll = new SoMainBll(StrAccID, AccYear, UserCode, PlainPassword); #region 验证 // 字段必填项验证 string msg = ""; if (!entity.CheckEntity(out msg)) { return(msg); } foreach (EntitySaleBody entitybody in entity.Details) { if (!entitybody.CheckEntity(out msg)) { return(msg); } } if (bll.GetGlmendFlag(entity.dDate.Year, entity.dDate.Month, "bflag_SA") == true) { return(string.Format("U8单据{0}日期所在月份已经结账!", entity.cSOCode)); } //销售部门 string deptName = GetDepartmentName(entity.cDepCode); if (string.IsNullOrWhiteSpace(deptName)) { return(string.Format("U8中不存在部门编码:{0},或者部门编码非末级!", entity.cDepCode)); } // 客户 string cusName = GetCustomerName(entity.cCusCode); if (string.IsNullOrWhiteSpace(cusName)) { return(string.Format("U8中不存在客户编号:{0}!", entity.cCusCode)); } entity.cCusName = cusName; //销售类型 if (string.IsNullOrWhiteSpace(GetStName(entity.cSTCode))) { return(string.Format("U8中不存在销售类型编码:{0}!", entity.cSTCode)); } // 仓库 string warehouseName = GetWarehouseName(entity.cDefine12); if (string.IsNullOrWhiteSpace(warehouseName)) { return(string.Format("U8中不存在仓库编码:{0}!", entity.cDefine12)); } #endregion var inventorys = GetInventorys("'" + string.Join("','", entity.Details.Select(p => p.cInvCode).Distinct()) + "'"); for (int i = 0; i < entity.Details.Count; i++) { EntitySaleBody body = entity.Details[i]; #region 验证单据明细 var invInfo = inventorys.FirstOrDefault(p => p.cInvCode == body.cInvCode); // 存货编号 if (invInfo == null) { return(string.Format("U8中不存在存货编码:{0}!", body.cInvCode)); } int bInvType = GetbInvType(body.cInvCode); if (body.iQuantity == 0 && bInvType == 0) { return(string.Format("数量不能为0!")); } //金额验证 if (bInvType != 1 && body.iQuotedPrice == 0 && body.iSum != 0) { return(string.Format("存货编码:{0}金额异常!", body.cInvCode)); } body.cInvName = invInfo.cInvName; #endregion #region 明细栏目计算 body.iRowNo = (i + 1); body.bOrderBOM = 0; body.dPreDate = entity.dDate; body.dPreMoDate = entity.dDate; body.fcusminprice = 0; body.ballpurchase = 0; body.bOrderBOMOver = 0; body.busecusbom = 0; body.bsaleprice = 1; body.bgift = 0; body.KL = 100; body.cbSysBarCode = string.Format("||SA17|{0}|{1}", entity.cSOCode, body.iRowNo); if (bInvType == 1) { body.iTaxUnitPrice = 0; body.iUnitPrice = 0; body.iNatUnitPrice = 0; body.iQuantity = 0; body.iQuotedPrice = 0; body.KL2 = 100; } else if (body.iQuotedPrice == 0) { body.iTaxUnitPrice = 0; body.iUnitPrice = 0; body.iNatUnitPrice = 0; body.KL2 = 100; } else { body.iTaxUnitPrice = body.iSum / body.iQuantity; body.iUnitPrice = Math.Round(body.iTaxUnitPrice / ((body.iTaxRate / 100) + 1), 2); body.iNatUnitPrice = body.iUnitPrice; body.iDisCount = Math.Round(body.iQuotedPrice * body.iQuantity - body.iSum, 2); body.KL2 = (body.iSum / (body.iQuotedPrice * body.iQuantity)) * 100; } body.iMoney = Math.Round(body.iSum / ((body.iTaxRate / 100) + 1), 2); body.iTax = body.iSum - Math.Round(body.iSum / ((body.iTaxRate / 100) + 1), 2); body.fSaleCost = GetSA_InvPrice(body.cInvCode); body.fSalePrice = body.fSaleCost * body.iQuantity; body.iNatMoney = body.iMoney; body.iNatSum = body.iSum; body.iNatTax = body.iTax; #endregion // 订货平台过来的ID现在是存在自定义项25,以后一定要加表,以后一定要加表,以后一定要加表 } // 设置默认值 entity.cBusType = entity.cBusType == null ? "普通销售" : entity.cBusType; entity.cSTCode = entity.cSTCode == null ? "02" : entity.cSTCode; // 暂时 entity.cexch_name = "人民币"; //币种 entity.iExchRate = 1; //汇率 entity.bReturnFlag = 0; entity.iVTid = "95"; entity.cMaker = GetUserName(UserCode); entity.iStatus = 1;//审核状态(1-已审核,0-未审核) entity.cSysBarCode = string.Format("||SA17|{0}", entity.cSOCode); string id = InsertSale(entity); success = string.IsNullOrWhiteSpace(id) ? 0 : 1; return(id); }
/// <summary> /// 新增销售订单 /// </summary> /// <param name="saleHead"></param> /// <returns></returns> public string InsertSale(EntitySaleHead saleHead) { int?saleHeadId; if (saleHead == null || saleHead.Details == null || saleHead.Details.Count == 0) { throw new JRException("销售订单新增失败!没有订单数据!"); } #region 验证 int num = 0; num = GetSoMain(saleHead.cSOCode); if (num > 0) { throw new JRException("数据传递有误,已存在该订单号!"); } CreateDHColumn("SO_SODetails"); #endregion // 得到主表ID和从表ID int detailCount = saleHead.Details.Count; int head_id = 0; int body_end_Id = 0; GetId("00", "SOMain", detailCount, out head_id, out body_end_Id); string sql = string.Format(@" insert into SO_SOMain(cSOCode,dDate,cBusType,cSTCode,cCusCode,cPayCode,cDepCode,iTaxRate,cexch_name,cMemo,iExchRate,bReturnFlag,ID ,iVTid,cMaker, iMoney,iStatus,cDefine7,cCusName,dPreMoDateBT,dPreDateBT,ireturncount,bcashsale,bmustbook,cSysBarCode,contract_status, cDefine1,cDefine8,cDefine12,cCusOAddress,cVerifier,dverifydate,dverifysystime,cDefine14,cDefine3) VALUES(@cSOCode,@dDate,@cBusType,@cSTCode,@cCusCode,@cPayCode,@cDepCode,@iTaxRate,@cexch_name,left(@cMemo,255),@iExchRate,@bReturnFlag,@soMainId ,@iVTid,@cMaker, null,@iStatus,null,@cCusName,@dDate,@dDate,null,0,0,@cSysBarCode,1, @cDefine1,@cDefine8,@cDefine12,@cCusOAddress,@cMaker,@dverifydate,@dverifysystime,@cDefine14,@cDefine3 ) "); SqlParameter[] para = { new SqlParameter("@cSOCode", saleHead.cSOCode), new SqlParameter("@dDate", saleHead.dDate.ToShortDateString()), new SqlParameter("@cBusType", GetDBValue(saleHead.cBusType)), new SqlParameter("@cSTCode", GetDBValue(saleHead.cSTCode)), new SqlParameter("@cCusCode", GetDBValue(saleHead.cCusCode)), new SqlParameter("@cPayCode", GetDBValue(saleHead.cPayCode)), new SqlParameter("@cDepCode", GetDBValue(saleHead.cDepCode)), new SqlParameter("@iTaxRate", saleHead.iTaxRate), new SqlParameter("@cexch_name", saleHead.cexch_name), new SqlParameter("@cMemo", GetDBValue(saleHead.cMemo)), new SqlParameter("@iExchRate", saleHead.iExchRate), new SqlParameter("@bReturnFlag", saleHead.bReturnFlag), new SqlParameter("@iVTid", saleHead.iVTid), new SqlParameter("@cMaker", GetDBValue(saleHead.cMaker)), new SqlParameter("@cCusName", GetDBValue(saleHead.cCusName)), new SqlParameter("@cSysBarCode", GetDBValue(saleHead.cSysBarCode)), // U8 中特殊的规则 new SqlParameter("@cDefine1", GetDBValue(saleHead.cDefine1)), new SqlParameter("@cDefine8", GetDBValue(saleHead.cDefine8)), new SqlParameter("@cDefine12", GetDBValue(saleHead.cDefine12)), new SqlParameter("@cCusOAddress", GetDBValue(saleHead.cCusOAddress)), new SqlParameter("@soMainId", head_id), new SqlParameter("@iStatus", saleHead.iStatus), //审核状态 new SqlParameter("@dverifydate", DateTime.Now.ToShortDateString()), new SqlParameter("@dverifysystime", DateTime.Now), //审核时间 new SqlParameter("@cDefine14", GetDBValue(saleHead.cDefine14)), //促销政策 new SqlParameter("@cDefine3", GetDBValue(saleHead.cDefine3)), //计入任务 }; int headCount = this.DB_SqlHelper.ExecuteNonQuery(sql, para); if (headCount > 0) { try { List <ExecuteHelp> sqlList = new List <ExecuteHelp>(); saleHeadId = GetSaleID(saleHead.cSOCode); if (saleHeadId == null) { throw new JRException("销售订单表头新增失败!"); } // 组装SQL语句 for (int i = 0; i < detailCount; i++) { EntitySaleBody body = saleHead.Details[i]; string bodySql = string.Format(@" insert into SO_SODetails(cInvCode,iQuantity,iQuotedPrice,iUnitPrice,iMoney,bOrderBOM,iSOsID,ID,cSOCode,dPreDate, iSum,iTaxRate,iNum,iTaxUnitPrice,iTax,iNatUnitPrice,iNatMoney,iNatTax,iNatSum, iFHNum,iFHQuantity,iFHMoney,iKPQuantity,iKPNum,iKPMoney,KL, KL2,cInvName,fSaleCost,fSalePrice,dPreMoDate,iRowNo , fcusminprice,ballpurchase,bOrderBOMOver,busecusbom, bsaleprice,bgift,cbSysBarCode,DHID,cDefine22,cDefine23,iDisCount,iNatDisCount ) VALUES(@cInvCode,@iQuantity,@iQuotedPrice,@iUnitPrice,@iMoney,@bOrderBOM,@iSOsID,@ID,@cSOCode,@dPreDate, @iSum,@iTaxRate,null,@iTaxUnitPrice,@iTax,@iNatUnitPrice,@iNatMoney,@iNatTax,@iNatSum, null,null,null,null,null,null,@KL, @KL2,@cInvName,@fSaleCost,@fSalePrice,@dPreMoDate,@iRowNo , @fcusminprice,@ballpurchase,@bOrderBOMOver,@busecusbom, @bsaleprice,@bgift,@cbSysBarCode,@DHID,@cDefine22,@cDefine23,@iDisCount,@iNatDisCount) "); SqlParameter[] bodyPara = { new SqlParameter("@cSOCode", saleHead.cSOCode), new SqlParameter("@cInvCode", body.cInvCode), new SqlParameter("@iQuantity", body.iQuantity), new SqlParameter("@iQuotedPrice", body.iQuotedPrice), new SqlParameter("@iUnitPrice", body.iUnitPrice), new SqlParameter("@iMoney", body.iMoney), new SqlParameter("@bOrderBOM", body.bOrderBOM), new SqlParameter("@ID", saleHeadId), new SqlParameter("@DHID", body.DHID), new SqlParameter("@dPreDate", body.dPreDate.ToShortDateString()), new SqlParameter("@iSum", body.iSum), new SqlParameter("@iTaxRate", body.iTaxRate), new SqlParameter("@iTaxUnitPrice", body.iTaxUnitPrice), new SqlParameter("@iTax", body.iTax), new SqlParameter("@iNatUnitPrice", body.iNatUnitPrice), new SqlParameter("@iNatMoney", body.iNatMoney), new SqlParameter("@iNatTax", body.iNatTax), new SqlParameter("@iNatSum", body.iNatSum), new SqlParameter("@KL", body.KL), new SqlParameter("@KL2", body.KL2), new SqlParameter("@cInvName", GetDBValue(body.cInvName)), new SqlParameter("@fSaleCost", body.fSaleCost), new SqlParameter("@fSalePrice", body.fSalePrice), new SqlParameter("@dPreMoDate", body.dPreMoDate.ToShortDateString()), new SqlParameter("@iRowNo", body.iRowNo), new SqlParameter("@fcusminprice", body.fcusminprice), new SqlParameter("@ballpurchase", body.ballpurchase), new SqlParameter("@bOrderBOMOver", body.bOrderBOMOver), new SqlParameter("@busecusbom", body.busecusbom), new SqlParameter("@bsaleprice", body.bsaleprice), new SqlParameter("@bgift", body.bgift), new SqlParameter("@cbSysBarCode", body.cbSysBarCode), new SqlParameter("@iSOsID", (body_end_Id - detailCount + i + 1)), new SqlParameter("@cDefine22", GetDBValue(body.cDefine22)), new SqlParameter("@cDefine23", GetDBValue(body.cDefine23)), new SqlParameter("@iDisCount", body.iDisCount), new SqlParameter("@iNatDisCount", body.iDisCount), }; sqlList.Add(new ExecuteHelp() { SQL = bodySql, Parameters = bodyPara }); } // 执行SQL int bodyCount = this.DB_SqlHelper.ExecuteNonQuery(sqlList); } catch (Exception ex) { // 表体执行错误,表头也要回滚 DeleteSale(saleHead.cSOCode); throw ex; } } else { throw new JRException("销售订单表头新增失败!"); } return(saleHeadId == null ? null : saleHeadId.ToString()); }