public void Status(string F_Id, string userName) { using (DbTransactionScope <PI_ReturnHeadInfo> dbtran = base.CreateTransactionScope()) { try { //更新登记单主表审核状态,审核人,审核时间 PI_ReturnHeadInfo head = PI_ReturnHead.Instance.FindByID(F_Id, dbtran.Transaction); head.F_Status = 1; head.F_Verify = userName; head.F_VeriDate = DateTime.Now; PI_ReturnHead.Instance.Update(head, F_Id, dbtran.Transaction); //找到登记单子表 SearchCondition condition = new SearchCondition(); condition.AddCondition("F_HId", F_Id, SqlOperator.Equal); List <PI_ReturnBodyInfo> list = PI_ReturnBody.Instance.Find(condition.BuildConditionSql().Replace("Where (1=1) AND ", string.Empty), dbtran.Transaction); //资产编号 foreach (PI_ReturnBodyInfo item in list) { for (int i = 0; i < item.F_InStockNum; i++) { PI_ReturnBodyInfo entity = new PI_ReturnBodyInfo(); entity.F_Id = Guid.NewGuid().ToString(); entity.F_EnCode = item.F_EnCode; entity.F_FullName = item.F_FullName; entity.F_OrderNo = item.F_OrderNo; entity.F_Unit = item.F_Unit; entity.F_Description = item.F_Description; PI_ReturnBody.Instance.Insert(entity, dbtran.Transaction); } } dbtran.Commit(); } catch (Exception ex) { dbtran.RollBack(); throw ex; } } }
/// <summary> ///审核单据 /// </summary> /// <param name="date">审核日期</param> /// <param name="Id">审核单据</param> /// <param name="user">审核人</param> public string Audit(string date, string user, string Id, List <PI_ReturnBodyInfo> stockinfo) { string SqlAuditSel = "select F_Status from PI_ReturnHead where F_Id='" + Id + "'"; string AuditState = this.GetDataTableBySql(SqlAuditSel).Rows[0][0].ToString(); if (AuditState == "1") { return("单据已被审核"); } else { using (DbTransactionScope <PI_ReturnHeadInfo> dbtran = base.CreateTransactionScope()) { try { Hashtable hash = new Hashtable(); //查询所有库存信息 List <Sys_StockInfo> StockList = BLLFactory <Sys_Stock> .Instance.GetAll(); PI_ReturnHeadInfo hinfo = BLLFactory <PI_ReturnHead> .Instance.FindByID(Id); SearchCondition condition = new SearchCondition(); //condition.AddCondition("F_EnCode", hinfo.F_InStockCode, SqlOperator.Equal); //PI_HeadInfo pih = BLLFactory<PI_Head>.Instance.Find(condition.BuildConditionSql().Replace("Where (1=1) AND ", string.Empty))[0]; for (int i = 0; i < stockinfo.Count; i++) { //查询子表信息 condition = new SearchCondition(); condition.AddCondition("F_Id", stockinfo[i].F_Id, SqlOperator.Equal); PI_ReturnBodyInfo bodyinfo = BLLFactory <PI_ReturnBody> .Instance.Find(condition.BuildConditionSql().Replace("Where (1=1) AND ", string.Empty))[0]; if (bodyinfo.F_WarehouseId == "" || bodyinfo.F_CargoPositionId == "") { return("该单据中仓库或仓位为空,审核未通过"); } Sys_StockInfo stock = StockList.Find(u => u.F_WarehouseId == bodyinfo.F_WarehouseId && u.F_CargoPositionId == bodyinfo.F_CargoPositionId && u.F_GoodsId == bodyinfo.F_GoodsId && u.F_Batch == bodyinfo.F_SerialNum); //查询库存表是否存在该仓库中的产品 if (stock == null) { dbtran.RollBack(); return("该仓库无此产品"); } if (stock.F_Number - bodyinfo.F_ReturnNum < 0) { return("产品数量发生了变化,请重新选择审核退回"); } //判断库存数量是否足够 if (stock.F_Number >= bodyinfo.F_ReturnNum) { //扣减库存 hash = new Hashtable(); hash.Add("F_Number", stock.F_Number - bodyinfo.F_ReturnNum); Sys_Stock.Instance.Update(stock.F_Id, hash, dbtran.Transaction); //标记为已退货 //hash = new Hashtable(); //hash.Add("F_DocumentNum", 1); //PI_Head.Instance.Update(pih.F_Id, hash, dbtran.Transaction); //添加履历 Sys_InReturnHistoryInfo inRec = new Sys_InReturnHistoryInfo(); inRec.F_Id = Guid.NewGuid().ToString(); inRec.F_EnCode = bodyinfo.F_OrderNo; inRec.F_Batch = bodyinfo.F_SerialNum; inRec.F_Vendor = bodyinfo.F_Vendor; inRec.F_VendorName = bodyinfo.F_VendorName; inRec.F_Verify = user; inRec.F_Maker = hinfo.F_Maker; inRec.F_Contacts = hinfo.F_Contacts; inRec.F_TelePhone = hinfo.F_TelePhone; inRec.F_Address = hinfo.F_Address; inRec.F_VeriDate = DateTime.Now; inRec.F_WarehouseId = bodyinfo.F_WarehouseId; inRec.F_WarehouseName = bodyinfo.F_WarehouseName; inRec.F_GoodsName = bodyinfo.F_GoodsName; inRec.F_GoodsId = bodyinfo.F_GoodsId; inRec.F_CargoPositionId = bodyinfo.F_CargoPositionId; inRec.F_CargoPositionName = bodyinfo.F_CargoPositionName; inRec.F_SpecifModel = bodyinfo.F_SpecifModel; inRec.F_SellingPrice = bodyinfo.F_SellingPrice; inRec.F_PurchasePrice = bodyinfo.F_PurchasePrice; inRec.F_Unit = bodyinfo.F_Unit; inRec.F_InStockNum = bodyinfo.F_InStockNum; inRec.F_ReturnNum = bodyinfo.F_ReturnNum; inRec.F_CreatorTime = DateTime.Now; Sys_InReturnHistory.Instance.Insert(inRec, dbtran.Transaction); //添加库存履历 Sys_StockHistoryInfo instockHistory = new Sys_StockHistoryInfo(); instockHistory.F_Id = Guid.NewGuid().ToString(); instockHistory.F_EnCode = bodyinfo.F_OrderNo; instockHistory.F_Batch = bodyinfo.F_SerialNum; instockHistory.F_Vendor = hinfo.F_Vendor; instockHistory.F_VendorName = bodyinfo.F_VendorName; instockHistory.F_Verify = user; instockHistory.F_Maker = hinfo.F_Maker; instockHistory.F_Contacts = hinfo.F_Contacts; instockHistory.F_TelePhone = hinfo.F_TelePhone; instockHistory.F_Address = hinfo.F_Address; instockHistory.F_VeriDate = DateTime.Now; instockHistory.F_WarehouseId = bodyinfo.F_WarehouseId; instockHistory.F_WarehouseName = bodyinfo.F_WarehouseName; instockHistory.F_BllCategory = "入库退货"; instockHistory.F_GoodsName = bodyinfo.F_GoodsName; instockHistory.F_GoodsId = bodyinfo.F_GoodsId; instockHistory.F_CargoPositionId = bodyinfo.F_CargoPositionId; instockHistory.F_CargoPositionName = bodyinfo.F_CargoPositionName; instockHistory.F_SpecifModel = bodyinfo.F_SpecifModel; instockHistory.F_Unit = bodyinfo.F_Unit; instockHistory.F_OperationNum = 0 - bodyinfo.F_ReturnNum; instockHistory.F_CreatorTime = DateTime.Now; Sys_StockHistory.Instance.Insert(instockHistory, dbtran.Transaction); //更新主表入库状态 hash = new Hashtable(); hash.Add("F_State", 1); PI_ReturnHead.Instance.Update(bodyinfo.F_HId, hash, dbtran.Transaction); } else { return(bodyinfo.F_WarehouseName + "仓库库存不足,产品:" + bodyinfo.F_GoodsName + "库存为:" + stock.F_Number); } //更新审核状态 string sql = string.Format("update PI_ReturnHead set F_Status=1,F_VeriDate='{0}',F_Verify='{1}' where F_Id='{2}'", date, user, Id); hash = new Hashtable(); base.ExecuteNonQuery(sql, hash, dbtran.Transaction); } dbtran.Commit(); return("单据审核成功"); } catch (Exception ex) { dbtran.RollBack(); return("操作失败"); throw ex; } } } }