Esempio n. 1
0
        /// <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;
                    }
                }
            }
        }
Esempio n. 2
0
        public void Status(string F_Id, string userName, List <SO_StockMakeBodyInfo> info)
        {
            using (DbTransactionScope <SO_StockMakeHeadInfo> dbtran = base.CreateTransactionScope())
            {
                DateTime time = DateTime.Now;
                try
                {
                    //更新登记单主表审核状态,审核人,审核时间
                    SO_StockMakeHeadInfo head = SO_StockMakeHead.Instance.FindByID(F_Id, dbtran.Transaction);
                    head.F_Status   = 1;
                    head.F_Verify   = userName;
                    head.F_VeriDate = DateTime.Now.ToShortDateString();
                    SO_StockMakeHead.Instance.Update(head, F_Id, dbtran.Transaction);
                    //查询所有库存
                    List <Sys_StockInfo> StockList = BLLFactory <Sys_Stock> .Instance.GetAll();

                    //库存更新履历
                    List <Sys_StockHistoryInfo> StockHisList = new List <Sys_StockHistoryInfo>();
                    //添加盘点履历
                    List <Sys_StockMaskHistoryInfo> list = new List <Sys_StockMaskHistoryInfo>();

                    //更新产品库存
                    foreach (SO_StockMakeBodyInfo item in info)
                    {
                        Sys_StockInfo Info = StockList.Find(u => u.F_WarehouseId == item.F_WarehouseId && u.F_CargoPositionId == item.F_CargoPositionId && u.F_GoodsId == item.F_GoodsId);
                        Hashtable     hash = new Hashtable();
                        hash.Add("F_Number", item.F_RealNumber);
                        Sys_Stock.Instance.Update(Info.F_Id, hash, dbtran.Transaction);


                        //添加盘点履历
                        Sys_StockMaskHistoryInfo maskInfo = new Sys_StockMaskHistoryInfo();
                        maskInfo.F_GoodsId           = item.F_GoodsId;
                        maskInfo.F_GoodsName         = item.F_GoodsName;
                        maskInfo.F_WarehouseId       = item.F_WarehouseId;
                        maskInfo.F_WarehouseName     = item.F_WarehouseName;
                        maskInfo.F_CargoPositionId   = item.F_CargoPositionId;
                        maskInfo.F_CargoPositionName = item.F_CargoPositionName;
                        maskInfo.F_Unit        = item.F_Unit;
                        maskInfo.F_Batch       = item.F_Batch;
                        maskInfo.F_Date        = time;
                        maskInfo.F_Description = item.F_Description;
                        maskInfo.F_EnCode      = head.F_EnCode;
                        maskInfo.F_Number      = item.F_Number;
                        maskInfo.F_RealNumber  = int.Parse(item.F_RealNumber);
                        maskInfo.F_Unit        = item.F_Unit;
                        maskInfo.F_DiffNumber  = Math.Abs(int.Parse(item.F_RealNumber) - item.F_Number);
                        list.Add(maskInfo);

                        //添加库存信息
                        Sys_StockHistoryInfo HistoryInfo = new Sys_StockHistoryInfo();
                        HistoryInfo.F_CargoPositionId   = item.F_CargoPositionId;
                        HistoryInfo.F_CargoPositionName = item.F_CargoPositionName;
                        HistoryInfo.F_WarehouseId       = item.F_WarehouseId;
                        HistoryInfo.F_WarehouseName     = item.F_WarehouseName;
                        HistoryInfo.F_EnCode            = head.F_EnCode;
                        HistoryInfo.F_Batch             = item.F_Batch;
                        HistoryInfo.F_BllCategory       = "盘点";
                        HistoryInfo.F_OperationNum      = int.Parse(item.F_RealNumber) - item.F_Number;
                        HistoryInfo.F_SpecifModel       = item.F_SpecifModel;
                        HistoryInfo.F_Vendor            = userName;
                        HistoryInfo.F_GoodsId           = item.F_GoodsId;
                        HistoryInfo.F_GoodsName         = item.F_GoodsName;
                        HistoryInfo.F_Unit = item.F_Unit;
                        //HistoryInfo.F_VendorName = head.;
                        //HistoryInfo.F_Contacts = head.F_Contacts;
                        //HistoryInfo.F_TelePhone = head.F_TelePhone;
                        HistoryInfo.F_Maker  = head.F_Operator;
                        HistoryInfo.F_Verify = head.F_Verify;


                        StockHisList.Add(HistoryInfo);
                    }
                    Sys_StockHistory.Instance.InsertRange(StockHisList, dbtran.Transaction);
                    //添盘点记录
                    Sys_StockMaskHistory.Instance.InsertRange(list, dbtran.Transaction);
                    dbtran.Commit();
                }
                catch (Exception ex)
                {
                    dbtran.RollBack();
                    throw ex;
                }
            }
        }
Esempio n. 3
0
        /// <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_BodyInfo> stockinfo)
        {
            string SqlAuditSel = "select F_Status from PI_Head where F_Id='" + Id + "'";
            string AuditState  = this.GetDataTableBySql(SqlAuditSel).Rows[0][0].ToString();

            if (AuditState == "1")
            {
                return("单据已被审核");
            }
            else
            {
                using (DbTransactionScope <PI_HeadInfo> dbtran = base.CreateTransactionScope())
                {
                    try
                    {
                        //查询所有库存信息
                        List <Sys_StockInfo> stockList = BLLFactory <Sys_Stock> .Instance.GetAll();

                        //查询主表信息
                        PI_HeadInfo hinfo = BLLFactory <PI_Head> .Instance.FindByID(Id);


                        foreach (PI_BodyInfo item in stockinfo)
                        {
                            //判断是否入库
                            PI_BodyInfo binfo = BLLFactory <PI_Body> .Instance.FindByID(item.F_Id);

                            if (binfo.F_AlreadyOperatedNum == "")
                            {
                                binfo.F_AlreadyOperatedNum = "0";
                            }
                            if (int.Parse(binfo.F_AlreadyOperatedNum) > 0)
                            {
                                return("该单据已入库,不能重复执行入库操作");
                            }

                            if (binfo.F_WarehouseId == "" || binfo.F_CargoPositionId == "")
                            {
                                return("该单据中仓库或仓位为空,审核未通过");
                            }

                            Sys_StockInfo stock = stockList.Find(u => u.F_WarehouseId == binfo.F_WarehouseId && u.F_CargoPositionId == binfo.F_CargoPositionId && u.F_GoodsId == binfo.F_GoodsId && u.F_Batch == binfo.F_SerialNum);
                            if (stock == null)
                            {
                                item.IsHave = false;
                            }
                            else
                            {
                                item.IsHave      = true;
                                item.StockID     = stock.F_Id;
                                item.StockNumber = stock.F_Number;
                            }

                            //查询库存表是否存在该仓库中的产品
                            //没有
                            if (!item.IsHave)
                            {
                                //新添加一条数据 库存表
                                Sys_StockInfo entity = new Sys_StockInfo();
                                entity.F_Id = Guid.NewGuid().ToString();
                                entity.F_CargoPositionId   = item.F_CargoPositionId;
                                entity.F_CargoPositionName = item.F_CargoPositionName;
                                entity.F_WarehouseId       = item.F_WarehouseId;
                                entity.F_WarehouseName     = item.F_WarehouseName;
                                entity.F_GoodsName         = item.F_FullName;
                                entity.F_Batch             = item.F_SerialNum;
                                entity.F_GoodsId           = item.F_GoodsId;
                                entity.F_SpecifModel       = item.F_SpecifModel;
                                entity.F_SellingPrice      = item.F_SellingPrice;
                                entity.F_PurchasePrice     = item.F_PurchasePrice;
                                entity.F_Unit   = item.F_Unit;
                                entity.F_Number = item.F_InStockNum;
                                Sys_Stock.Instance.Insert(entity, dbtran.Transaction);

                                //更新审核状态
                                string    sql  = string.Format("update PI_Head set F_Status=1,F_VeriDate='{0}',F_Verify='{1}' where F_Id='{2}'", date, user, Id);
                                Hashtable hash = new Hashtable();
                                base.ExecuteNonQuery(sql, hash, dbtran.Transaction);

                                //添加入库履历 入库履历
                                Sys_InRecordsInfo inRec = new Sys_InRecordsInfo();
                                inRec.F_Id                = Guid.NewGuid().ToString();
                                inRec.F_WarehouseId       = item.F_WarehouseId;
                                inRec.F_Vendor            = hinfo.F_Vendor;
                                inRec.F_VendorName        = hinfo.F_VendorName;
                                inRec.F_Contacts          = hinfo.F_Contacts;
                                inRec.F_TelePhone         = hinfo.F_TelePhone;
                                inRec.F_Verify            = user;
                                inRec.F_Maker             = hinfo.F_Maker;
                                inRec.F_VeriDate          = DateTime.Now;
                                inRec.F_EnCode            = item.F_OrderNo;
                                inRec.F_Batch             = item.F_SerialNum;
                                inRec.F_WarehouseName     = item.F_WarehouseName;
                                inRec.F_GoodsName         = item.F_FullName;
                                inRec.F_GoodsId           = item.F_GoodsId;
                                inRec.F_CargoPositionId   = item.F_CargoPositionId;
                                inRec.F_CargoPositionName = item.F_CargoPositionName;
                                inRec.F_SpecifModel       = item.F_SpecifModel;
                                inRec.F_SellingPrice      = item.F_SellingPrice;
                                inRec.F_PurchasePrice     = item.F_PurchasePrice;
                                inRec.F_Unit              = item.F_Unit;
                                inRec.F_InStockNum        = item.F_InStockNum;
                                inRec.F_CreatorTime       = DateTime.Now;
                                Sys_InRecords.Instance.Insert(inRec, dbtran.Transaction);



                                //添加  库存履历
                                Sys_StockHistoryInfo instock = new Sys_StockHistoryInfo();
                                instock.F_Id                = Guid.NewGuid().ToString();
                                instock.F_WarehouseId       = item.F_WarehouseId;
                                instock.F_Vendor            = hinfo.F_Vendor;
                                instock.F_VendorName        = hinfo.F_VendorName;
                                instock.F_Contacts          = hinfo.F_Contacts;
                                instock.F_TelePhone         = hinfo.F_TelePhone;
                                instock.F_Verify            = user;
                                instock.F_Maker             = hinfo.F_Maker;
                                instock.F_VeriDate          = DateTime.Now;
                                instock.F_EnCode            = item.F_OrderNo;
                                instock.F_Batch             = item.F_SerialNum;
                                instock.F_WarehouseName     = item.F_WarehouseName;
                                instock.F_BllCategory       = "入库";
                                instock.F_GoodsName         = item.F_FullName;
                                instock.F_GoodsId           = item.F_GoodsId;
                                instock.F_CargoPositionId   = item.F_CargoPositionId;
                                instock.F_CargoPositionName = item.F_CargoPositionName;
                                instock.F_SpecifModel       = item.F_SpecifModel;
                                instock.F_SellingPrice      = item.F_SellingPrice;
                                instock.F_PurchasePrice     = item.F_PurchasePrice;
                                instock.F_Unit              = item.F_Unit;
                                instock.F_OperationNum      = item.F_InStockNum;
                                instock.F_CreatorTime       = DateTime.Now;
                                Sys_StockHistory.Instance.Insert(instock, dbtran.Transaction);



                                //更新子表入库状态
                                hash = new Hashtable();
                                hash.Add("F_AlreadyOperatedNum", 1);
                                PI_Body.Instance.Update(item.F_Id, hash, dbtran.Transaction);

                                //更新主表入库状态
                                hash = new Hashtable();
                                hash.Add("F_State", 1);
                                PI_Head.Instance.Update(item.F_HId, hash, dbtran.Transaction);
                            }
                            else
                            {
                                //更新前库存数量
                                Hashtable hash = new Hashtable();
                                hash.Add("F_Number", item.StockNumber + item.F_InStockNum);
                                Sys_Stock.Instance.Update(item.StockID, hash, dbtran.Transaction);
                                for (int i = 0; i < stockinfo.Count; i++)
                                {
                                    if (stockinfo[i].StockID == item.StockID)
                                    {
                                        stockinfo[i].StockNumber += item.F_InStockNum;
                                    }
                                }

                                //更新审核状态
                                string sql = string.Format("update PI_Head 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);

                                //更新子表入库状态
                                hash = new Hashtable();
                                hash.Add("F_AlreadyOperatedNum", 1);
                                PI_Body.Instance.Update(item.F_Id, hash, dbtran.Transaction);

                                //更新主表入库状态
                                hash = new Hashtable();
                                hash.Add("F_State", 1);
                                PI_Head.Instance.Update(item.F_HId, hash, dbtran.Transaction);


                                //添加履历
                                Sys_InRecordsInfo inRec = new Sys_InRecordsInfo();
                                inRec.F_Id                = Guid.NewGuid().ToString();
                                inRec.F_WarehouseId       = item.F_WarehouseId;
                                inRec.F_EnCode            = item.F_OrderNo;
                                inRec.F_Batch             = item.F_SerialNum;
                                inRec.F_Vendor            = hinfo.F_Vendor;
                                inRec.F_VendorName        = hinfo.F_VendorName;
                                inRec.F_Contacts          = hinfo.F_Contacts;
                                inRec.F_TelePhone         = hinfo.F_TelePhone;
                                inRec.F_Verify            = user;
                                inRec.F_Maker             = hinfo.F_Maker;
                                inRec.F_VeriDate          = DateTime.Now;
                                inRec.F_WarehouseName     = item.F_WarehouseName;
                                inRec.F_GoodsName         = item.F_FullName;
                                inRec.F_GoodsId           = item.F_GoodsId;
                                inRec.F_CargoPositionId   = item.F_CargoPositionId;
                                inRec.F_CargoPositionName = item.F_CargoPositionName;
                                inRec.F_SpecifModel       = item.F_SpecifModel;
                                inRec.F_SellingPrice      = item.F_SellingPrice;
                                inRec.F_PurchasePrice     = item.F_PurchasePrice;
                                inRec.F_Unit              = item.F_Unit;
                                inRec.F_InStockNum        = item.F_InStockNum;
                                inRec.F_CreatorTime       = DateTime.Now;
                                Sys_InRecords.Instance.Insert(inRec, dbtran.Transaction);

                                //添加库存履历
                                Sys_StockHistoryInfo instock = new Sys_StockHistoryInfo();
                                instock.F_Id                = Guid.NewGuid().ToString();
                                instock.F_WarehouseId       = item.F_WarehouseId;
                                instock.F_EnCode            = item.F_OrderNo;
                                instock.F_Batch             = item.F_SerialNum;
                                instock.F_Vendor            = hinfo.F_Vendor;
                                instock.F_VendorName        = hinfo.F_VendorName;
                                instock.F_Contacts          = hinfo.F_Contacts;
                                instock.F_TelePhone         = hinfo.F_TelePhone;
                                instock.F_Verify            = user;
                                instock.F_Maker             = hinfo.F_Maker;
                                instock.F_VeriDate          = DateTime.Now;
                                instock.F_WarehouseName     = item.F_WarehouseName;
                                instock.F_BllCategory       = "入库";
                                instock.F_GoodsName         = item.F_FullName;
                                instock.F_GoodsId           = item.F_GoodsId;
                                instock.F_CargoPositionId   = item.F_CargoPositionId;
                                instock.F_CargoPositionName = item.F_CargoPositionName;
                                instock.F_SpecifModel       = item.F_SpecifModel;
                                instock.F_SellingPrice      = item.F_SellingPrice;
                                instock.F_PurchasePrice     = item.F_PurchasePrice;
                                instock.F_Unit              = item.F_Unit;
                                instock.F_OperationNum      = item.F_InStockNum;
                                instock.F_CreatorTime       = DateTime.Now;
                                Sys_StockHistory.Instance.Insert(instock, dbtran.Transaction);
                            }
                        }
                        dbtran.Commit();
                        return("单据审核成功");
                    }
                    catch (Exception ex)
                    {
                        dbtran.RollBack();
                        return("操作失败");

                        throw ex;
                    }
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        ///审核单据
        /// </summary>
        /// <param name="date">审核日期</param>
        /// <param name="Id">审核单据</param>
        /// <param name="user">审核人</param>
        public string Audit(string date, string user, string Id, List <Allocation_BodyInfo> DbInfo)
        {
            string SqlAuditSel = "select F_Status from Allocation_Head where F_Id='" + Id + "'";
            string AuditState  = this.GetDataTableBySql(SqlAuditSel).Rows[0][0].ToString();

            if (AuditState == "1")
            {
                return("单据已被审核");
            }
            else
            {
                using (DbTransactionScope <Allocation_HeadInfo> dbtran = base.CreateTransactionScope())
                {
                    try
                    {
                        Hashtable            hash      = new Hashtable();
                        List <Sys_StockInfo> StockList = BLLFactory <Sys_Stock> .Instance.GetAll();

                        //查询主表信息
                        Allocation_HeadInfo hinfo = BLLFactory <Allocation_Head> .Instance.FindByID(Id);

                        for (int i = 0; i < DbInfo.Count; i++)
                        {
                            //查询子表信息
                            SearchCondition condition = new SearchCondition();
                            condition.AddCondition("F_Id", DbInfo[i].F_Id, SqlOperator.Equal);
                            Allocation_BodyInfo bodyinfo = BLLFactory <Allocation_Body> .Instance.Find(condition.BuildConditionSql().Replace("Where (1=1)  AND ", string.Empty))[0];

                            //判断是否出库
                            if (bodyinfo.F_FreeTerm1 == "") //F_FreeTerm1--0未出库  1已出库
                            {
                                bodyinfo.F_FreeTerm1 = "0";
                            }
                            if (int.Parse(bodyinfo.F_FreeTerm1) > 0)
                            {
                                return("该单据已出库,不能重复执行出库操作");
                            }

                            if (bodyinfo.F_OutWareId == "" || bodyinfo.F_OutCargoPositionId == "" || bodyinfo.F_InWareId == "" || bodyinfo.F_InCargoPositionId == "")
                            {
                                return("该单据中仓库或仓位为空,审核未通过");
                            }

                            //查询库存表是否存在该仓库中的产品
                            Sys_StockInfo stock = StockList.Find(u => u.F_WarehouseId == bodyinfo.F_OutWareId && u.F_CargoPositionId == bodyinfo.F_OutCargoPositionId && u.F_GoodsId == bodyinfo.F_GoodsId && u.F_Batch == bodyinfo.F_SerialNum);

                            if (stock == null)
                            {
                                dbtran.RollBack();
                                return("该仓库无此产品");
                            }

                            //判断库存数量是否足够
                            if (stock.F_Number > bodyinfo.F_DbNum)
                            {
                                //扣减库存
                                hash = new Hashtable();
                                hash.Add("F_Number", stock.F_Number - bodyinfo.F_DbNum);
                                Sys_Stock.Instance.Update(stock.F_Id, hash, dbtran.Transaction);

                                //添加库存履历
                                Sys_StockHistoryInfo instockHistory = new Sys_StockHistoryInfo();
                                instockHistory.F_Id                = Guid.NewGuid().ToString();
                                instockHistory.F_WarehouseId       = bodyinfo.F_OutWareId;
                                instockHistory.F_EnCode            = bodyinfo.F_OrderNo;
                                instockHistory.F_Batch             = bodyinfo.F_SerialNum;
                                instockHistory.F_Verify            = user;
                                instockHistory.F_Maker             = hinfo.F_Maker;
                                instockHistory.F_VeriDate          = DateTime.Now;
                                instockHistory.F_WarehouseName     = bodyinfo.F_OutWareName;
                                instockHistory.F_BllCategory       = "调出";
                                instockHistory.F_GoodsName         = bodyinfo.F_GoodsName;
                                instockHistory.F_GoodsId           = bodyinfo.F_GoodsId;
                                instockHistory.F_CargoPositionId   = bodyinfo.F_OutCargoPositionId;
                                instockHistory.F_CargoPositionName = bodyinfo.F_OutCargoPositionName;
                                instockHistory.F_SpecifModel       = bodyinfo.F_SpecifModel;
                                instockHistory.F_Unit              = bodyinfo.F_Unit;
                                instockHistory.F_OperationNum      = 0 - bodyinfo.F_DbNum;
                                instockHistory.F_CreatorTime       = DateTime.Now;
                                Sys_StockHistory.Instance.Insert(instockHistory, dbtran.Transaction);

                                //更新出库状态
                                hash = new Hashtable();
                                hash.Add("F_FreeTerm1", 1);
                                Allocation_Body.Instance.Update(bodyinfo.F_Id, hash, dbtran.Transaction);
                            }
                            else
                            {
                                return(bodyinfo.F_OutWareName + "仓库库存不足,当前产品" + bodyinfo.F_GoodsName + "库存为" + stock.F_Number);
                            }

                            Sys_StockInfo instock = StockList.Find(u => u.F_WarehouseId == bodyinfo.F_InWareId && u.F_CargoPositionId == bodyinfo.F_InCargoPositionId && u.F_GoodsId == bodyinfo.F_GoodsId);
                            //如果不存在
                            if (instock == null)
                            {
                                //新添加一条数据
                                Sys_StockInfo entity = new Sys_StockInfo();
                                entity.F_Id                = Guid.NewGuid().ToString();
                                entity.F_GoodsId           = bodyinfo.F_GoodsId;
                                entity.F_GoodsName         = bodyinfo.F_GoodsName;
                                entity.F_WarehouseId       = bodyinfo.F_InWareId;
                                entity.F_WarehouseName     = bodyinfo.F_InWareName;
                                entity.F_CargoPositionId   = bodyinfo.F_InCargoPositionId;
                                entity.F_CargoPositionName = bodyinfo.F_InCargoPositionName;
                                entity.F_Batch             = bodyinfo.F_SerialNum;
                                entity.F_Unit              = bodyinfo.F_Unit;
                                entity.F_Number            = bodyinfo.F_DbNum;
                                Sys_Stock.Instance.Insert(entity, dbtran.Transaction);

                                //添加履历
                                Sys_AllocationHistoryInfo Dbinfo = new Sys_AllocationHistoryInfo();
                                Dbinfo.F_Id                   = Guid.NewGuid().ToString();
                                Dbinfo.F_GoodsId              = bodyinfo.F_GoodsId;
                                Dbinfo.F_InWareName           = bodyinfo.F_InWareName;
                                Dbinfo.F_EnCode               = bodyinfo.F_OrderNo;
                                Dbinfo.F_Batch                = bodyinfo.F_SerialNum;
                                Dbinfo.F_GoodsName            = bodyinfo.F_GoodsName;
                                Dbinfo.F_Verify               = user;
                                Dbinfo.F_Maker                = hinfo.F_Maker;
                                Dbinfo.F_VeriDate             = DateTime.Now;
                                Dbinfo.F_OutWareId            = bodyinfo.F_OutWareId;
                                Dbinfo.F_InWareId             = bodyinfo.F_InWareId;
                                Dbinfo.F_OutWareName          = bodyinfo.F_OutWareName;
                                Dbinfo.F_InCargoPositionId    = bodyinfo.F_InCargoPositionId;
                                Dbinfo.F_InCargoPositionName  = bodyinfo.F_InCargoPositionName;
                                Dbinfo.F_OutCargoPositionId   = bodyinfo.F_OutCargoPositionId;
                                Dbinfo.F_OutCargoPositionName = bodyinfo.F_OutCargoPositionName;
                                Dbinfo.F_Unit                 = bodyinfo.F_Unit;
                                Dbinfo.F_DBNum                = bodyinfo.F_DbNum;
                                Dbinfo.F_SpecifModel          = bodyinfo.F_SpecifModel;
                                Dbinfo.F_CreatorTime          = DateTime.Now;
                                Sys_AllocationHistory.Instance.Insert(Dbinfo, dbtran.Transaction);

                                //添加库存履历
                                Sys_StockHistoryInfo instockHistory = new Sys_StockHistoryInfo();
                                instockHistory.F_Id                = Guid.NewGuid().ToString();
                                instockHistory.F_WarehouseId       = bodyinfo.F_OutWareId;
                                instockHistory.F_EnCode            = bodyinfo.F_OrderNo;
                                instockHistory.F_Batch             = bodyinfo.F_SerialNum;
                                instockHistory.F_Verify            = user;
                                instockHistory.F_Maker             = hinfo.F_Maker;
                                instockHistory.F_VeriDate          = DateTime.Now;
                                instockHistory.F_WarehouseName     = bodyinfo.F_InWareName;
                                instockHistory.F_BllCategory       = "调入";
                                instockHistory.F_GoodsName         = bodyinfo.F_GoodsName;
                                instockHistory.F_GoodsId           = bodyinfo.F_GoodsId;
                                instockHistory.F_CargoPositionId   = bodyinfo.F_InCargoPositionName;
                                instockHistory.F_CargoPositionName = bodyinfo.F_InCargoPositionId;
                                instockHistory.F_SpecifModel       = bodyinfo.F_SpecifModel;
                                instockHistory.F_Unit              = bodyinfo.F_Unit;
                                instockHistory.F_OperationNum      = bodyinfo.F_DbNum;
                                instockHistory.F_CreatorTime       = DateTime.Now;
                                Sys_StockHistory.Instance.Insert(instockHistory, dbtran.Transaction);

                                //更新入库状态
                                hash = new Hashtable();
                                hash.Add("F_AlreadyOperatedNum", 1);
                                Allocation_Body.Instance.Update(bodyinfo.F_Id, hash, dbtran.Transaction);
                            }
                            //如果存在
                            else
                            {
                                //增加库存
                                hash = new Hashtable();
                                hash.Add("F_Number", instock.F_Number + bodyinfo.F_DbNum);
                                Sys_Stock.Instance.Update(instock.F_Id, hash, dbtran.Transaction);

                                //更新入库状态
                                hash = new Hashtable();
                                hash.Add("F_AlreadyOperatedNum", 1);
                                Allocation_Body.Instance.Update(bodyinfo.F_Id, hash, dbtran.Transaction);

                                //添加履历
                                Sys_AllocationHistoryInfo Dbinfo = new Sys_AllocationHistoryInfo();
                                Dbinfo.F_Id                   = Guid.NewGuid().ToString();
                                Dbinfo.F_GoodsId              = bodyinfo.F_GoodsId;
                                Dbinfo.F_Verify               = user;
                                Dbinfo.F_Maker                = hinfo.F_Maker;
                                Dbinfo.F_VeriDate             = DateTime.Now;
                                Dbinfo.F_EnCode               = bodyinfo.F_OrderNo;
                                Dbinfo.F_Batch                = bodyinfo.F_SerialNum;
                                Dbinfo.F_InWareName           = bodyinfo.F_InWareName;
                                Dbinfo.F_GoodsName            = bodyinfo.F_GoodsName;
                                Dbinfo.F_OutWareId            = bodyinfo.F_OutWareId;
                                Dbinfo.F_InWareId             = bodyinfo.F_InWareId;
                                Dbinfo.F_OutWareName          = bodyinfo.F_OutWareName;
                                Dbinfo.F_InCargoPositionId    = bodyinfo.F_InCargoPositionId;
                                Dbinfo.F_InCargoPositionName  = bodyinfo.F_InCargoPositionName;
                                Dbinfo.F_OutCargoPositionId   = bodyinfo.F_OutCargoPositionId;
                                Dbinfo.F_OutCargoPositionName = bodyinfo.F_OutCargoPositionName;
                                Dbinfo.F_Unit                 = bodyinfo.F_Unit;
                                Dbinfo.F_DBNum                = bodyinfo.F_DbNum;
                                Dbinfo.F_SpecifModel          = bodyinfo.F_SpecifModel;
                                Dbinfo.F_CreatorTime          = DateTime.Now;
                                Sys_AllocationHistory.Instance.Insert(Dbinfo, dbtran.Transaction);


                                //添加库存履历
                                Sys_StockHistoryInfo instockHistory = new Sys_StockHistoryInfo();
                                instockHistory.F_Id                = Guid.NewGuid().ToString();
                                instockHistory.F_WarehouseId       = bodyinfo.F_InWareId;
                                instockHistory.F_WarehouseName     = bodyinfo.F_InWareName;
                                instockHistory.F_EnCode            = bodyinfo.F_OrderNo;
                                instockHistory.F_Batch             = bodyinfo.F_SerialNum;
                                instockHistory.F_Verify            = user;
                                instockHistory.F_Maker             = hinfo.F_Maker;
                                instockHistory.F_VeriDate          = DateTime.Now;
                                instockHistory.F_BllCategory       = "调入";
                                instockHistory.F_GoodsName         = bodyinfo.F_GoodsName;
                                instockHistory.F_GoodsId           = bodyinfo.F_GoodsId;
                                instockHistory.F_CargoPositionId   = bodyinfo.F_InCargoPositionId;
                                instockHistory.F_CargoPositionName = bodyinfo.F_InCargoPositionName;
                                instockHistory.F_SpecifModel       = bodyinfo.F_SpecifModel;
                                instockHistory.F_Unit              = bodyinfo.F_Unit;
                                instockHistory.F_OperationNum      = bodyinfo.F_DbNum;
                                instockHistory.F_CreatorTime       = DateTime.Now;
                                Sys_StockHistory.Instance.Insert(instockHistory, dbtran.Transaction);
                            }
                        }

                        //更新审核状态
                        string sql = string.Format("update Allocation_Head set F_Status=1,F_AccountDate='{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;
                    }
                }
            }
        }
Esempio n. 5
0
        public string VerifyReturnGoods(string Id, string user)
        {
            using (DbTransactionScope <SO_ReturnedStockHeadInfo> dbtran = base.CreateTransactionScope())
            {
                try
                {
                    DateTime time = DateTime.Now;
                    //查询到退货子表单据
                    SO_ReturnedStockHeadInfo HeadInfo = BLLFactory <SO_ReturnedStockHead> .Instance.FindByID(Id);

                    SearchCondition search = new SearchCondition();
                    search.AddCondition("F_Hid", Id, SqlOperator.Equal);
                    List <SO_ReturnedStockBodyInfo> ReBodyinfo = BLLFactory <SO_ReturnedStockBody> .Instance.Find(search.BuildConditionSql().Replace("Where (1=1)  AND ", string.Empty).Replace("Where (1=1)", " ( 1 = 1 ) "));

                    //查询出所有产品的库存
                    List <Sys_StockInfo> StockList = BLLFactory <Sys_Stock> .Instance.GetAll();

                    //添加库存记录
                    List <Sys_StockHistoryInfo> HisList = new List <Sys_StockHistoryInfo>();
                    //添加出库记录
                    List <Sys_OutReturnInfo> list = new List <Sys_OutReturnInfo>();
                    //更新 产品库存
                    foreach (SO_ReturnedStockBodyInfo item in ReBodyinfo)
                    {
                        Sys_StockInfo StockInfo = StockList.Find(u => u.F_WarehouseId == item.F_WarehouseId && u.F_CargoPositionId == item.F_CargoPositionId && u.F_GoodsId == item.F_GoodsId);
                        Hashtable     hash      = new Hashtable();
                        hash.Add("F_Number", StockInfo.F_Number + item.F_ReturnNum);
                        Sys_Stock.Instance.Update(StockInfo.F_Id, hash, dbtran.Transaction);


                        Sys_OutReturnInfo outRec = new Sys_OutReturnInfo();
                        outRec.F_Id                = Guid.NewGuid().ToString();
                        outRec.F_EnCode            = HeadInfo.F_EnCode;
                        outRec.F_Batch             = item.F_EnCode;
                        outRec.F_Vendor            = HeadInfo.F_CustomerId;
                        outRec.F_VendorName        = HeadInfo.F_CustomerName;
                        outRec.F_Verify            = user;
                        outRec.F_Maker             = HeadInfo.F_Operator;
                        outRec.F_Contacts          = HeadInfo.F_Contacts;
                        outRec.F_TelePhone         = HeadInfo.F_TelePhone;
                        outRec.F_Address           = HeadInfo.F_Address;
                        outRec.F_VeriDate          = time;
                        outRec.F_WarehouseId       = item.F_WarehouseId;
                        outRec.F_WarehouseName     = item.F_WarehouseName;
                        outRec.F_GoodsName         = item.F_GoodsName;
                        outRec.F_GoodsId           = item.F_GoodsId;
                        outRec.F_CargoPositionId   = item.F_CargoPositionId;
                        outRec.F_CargoPositionName = item.F_CargoPositionName;
                        outRec.F_SpecifModel       = item.F_SpecifModel;
                        outRec.F_SellingPrice      = item.F_SellingPrice.ToString();
                        outRec.F_PurchasePrice     = item.F_PurchasePrice.ToString();
                        outRec.F_Unit              = item.F_Unit;
                        outRec.F_OutStockNum       = item.F_OutStockNum;
                        outRec.F_ReturnNum         = item.F_ReturnNum;
                        outRec.F_CreatorTime       = time;
                        list.Add(outRec);


                        //产品库存变更信息
                        Sys_StockHistoryInfo HistoryInfo = new Sys_StockHistoryInfo();
                        HistoryInfo.F_CargoPositionId   = item.F_CargoPositionId;
                        HistoryInfo.F_CargoPositionName = item.F_CargoPositionName;
                        HistoryInfo.F_GoodsName         = item.F_GoodsName;
                        HistoryInfo.F_Batch             = item.F_Batch;
                        HistoryInfo.F_WarehouseId       = item.F_WarehouseId;
                        HistoryInfo.F_WarehouseName     = item.F_WarehouseName;
                        HistoryInfo.F_BllCategory       = "出库退回";
                        HistoryInfo.F_OperationNum      = item.F_ReturnNum;
                        HistoryInfo.F_VendorName        = HeadInfo.F_CustomerName;
                        HistoryInfo.F_Contacts          = HeadInfo.F_Contacts;
                        HistoryInfo.F_TelePhone         = HeadInfo.F_TelePhone;
                        HistoryInfo.F_Address           = HeadInfo.F_Address;
                        HistoryInfo.F_Maker             = HeadInfo.F_Operator;
                        HistoryInfo.F_Verify            = HeadInfo.F_AuditingUser;
                        HistoryInfo.F_VeriDate          = time;
                        HistoryInfo.F_Unit        = item.F_Unit;
                        HistoryInfo.F_CreatorTime = time;
                        HistoryInfo.F_Description = HeadInfo.F_Description;
                        HistoryInfo.F_EnCode      = HeadInfo.F_EnCode;
                        HisList.Add(HistoryInfo);
                    }
                    Sys_OutReturn.Instance.InsertRange(list, dbtran.Transaction);
                    Sys_StockHistory.Instance.InsertRange(HisList, dbtran.Transaction);
                    //更该审核标识
                    Hashtable has = new Hashtable();
                    has.Add("F_AuditingUser", user);
                    has.Add("F_VeriDate", time);
                    has.Add("F_Status", 1);
                    SO_ReturnedStockHead.Instance.Update(Id, has, dbtran.Transaction);
                    dbtran.Commit();
                    return("操作成功");
                }
                catch (Exception)
                {
                    dbtran.RollBack();
                    return("操作失败");
                }
            }
        }