Ejemplo n.º 1
0
        /// <summary>
        /// 入库操作
        /// </summary>
        /// <param name="entryInfo"></param>
        /// <param name="entryDetailInfos"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        internal void DoEntry(I_Entry entryInfo, List <I_EntryDetail> entryDetailInfos, ref string errorMsg)
        {
            //1 先插入主表
            I_Entry tempEntry = (from e in db.I_Entry
                                 where e.EntryCode == entryInfo.EntryCode
                                 select e).FirstOrDefault();

            if (tempEntry == null)
            {
                dalContext.II_EntryDAL.Add(entryInfo);
            }


            foreach (I_EntryDetail info in entryDetailInfos)
            {
                I_EntryDetail tempEntryDetail = (from e in db.I_EntryDetail
                                                 where e.EntryDetailCode == info.EntryDetailCode
                                                 select e).FirstOrDefault();
                if (tempEntryDetail != null)
                {
                    info.EntryDetailCode = (Convert.ToInt32(info.EntryDetailCode) + 1).ToString();
                }
                //2. 再插入从表信息   红充流程注意记录RedEntryDetailCode信息
                dalContext.II_EntryDetailDAL.Add(info);

                //3. 保存剩余流水表
                dalContext.II_SurplusDAL.SaveEntrySurplusInfo(info, entryInfo.EntryType, ref errorMsg);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 红充操作
        /// </summary>
        /// <param name="newEntryInfo">新入库单</param>
        /// <param name="orientryDetailInfo">原入单从表</param>
        /// <param name="newEntryDetailInfo">新入库单从表</param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        public bool EntryRedOperate(I_Entry newEntryInfo, I_EntryDetail orientryDetailInfo, I_EntryDetail newEntryDetailInfo, ref string errorMsg)
        {
            //创建事务
            using (var tran = db.Database.BeginTransaction())
            {
                try
                {
                    //修改红冲入库单号  orientryDetailInfo 不能被EF框架跟踪
                    dalContext.II_EntryDetailDAL.Modify(orientryDetailInfo, "RedEntryDetailCode"); //更新被红充编码

                    List <I_EntryDetail> entryDetailInfos = new List <I_EntryDetail>();
                    entryDetailInfos.Add(newEntryDetailInfo);
                    this.DoEntry(newEntryInfo, entryDetailInfos, ref errorMsg); //做入库操作

                    tran.Commit();                                              //提交事务

                    return(true);
                }
                catch (Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();  //回滚事务
                    }
                    errorMsg = "入库操作失败! 操作已取消!~~" + ex.Message;
                    return(false);
                }
            }
        }
Ejemplo n.º 3
0
        public ActionResult SaveEntry()
        {
            string sEntryDetailInfo       = Request.Form["sEntryDetailInfo"].ToString();
            List <EntryDetailInfo> relist = JsonHelper.GetJsonInfoBy <List <EntryDetailInfo> >(sEntryDetailInfo);
            I_Entry entryInfo             = new I_Entry();

            entryInfo.EntryCode      = DateTime.Now.AddSeconds(1).ToString("yyyyMMddHHmmss") + entryInfo.OperatorCode; //生成入库编码
            entryInfo.EntryDate      = Convert.ToDateTime(Request.Form["EntryDate"]);
            entryInfo.EntryType      = "MatertalInType-1";
            entryInfo.OperationTime  = DateTime.Now;
            entryInfo.OperatorCode   = UserOperateContext.Current.Session_UsrInfo.ID;
            entryInfo.EntryStorageID = int.Parse(Request.Form["StorageCode"]);
            entryInfo.Remark         = Request.Form["Remark"].ToString().Trim();
            List <I_EntryDetail> list = new List <Model.I_EntryDetail>();
            int ind = 0;

            foreach (EntryDetailInfo item in relist)
            {
                ind++;
                I_EntryDetail detailinfo = new I_EntryDetail();
                detailinfo.EntryDetailCode    = entryInfo.EntryCode + entryInfo.OperatorCode + ind.ToString();
                detailinfo.BatchNo            = item.BatchNo;
                detailinfo.RealBatchNo        = item.RealBatchNo;
                detailinfo.EntryCode          = entryInfo.EntryCode;
                detailinfo.EntryCounts        = item.EntryCounts;
                detailinfo.EntryDate          = item.EntryDate;
                detailinfo.MaterialID         = item.MaterialID;
                detailinfo.OperatorCode       = UserOperateContext.Current.Session_UsrInfo.ID;
                detailinfo.RedEntryDetailCode = "";
                detailinfo.RelatedOrderNum    = item.RelatedOrderNum;
                detailinfo.Remark             = item.Remark.Trim();
                detailinfo.Specification      = item.Specification;
                detailinfo.StorageCode        = item.StorageCode;
                detailinfo.TotalPrice         = item.TotalPrice;
                detailinfo.Unit = item.Unit;
                if (item.ValidityDateStr == "无有效期")
                {
                    detailinfo.ValidityDate = DateTime.MaxValue;
                }
                else
                {
                    detailinfo.ValidityDate = Convert.ToDateTime(item.ValidityDateStr);
                }
                list.Add(detailinfo);
            }
            string errorMsg = "";

            if (new I_EntryBLL().EntryOperate(entryInfo, list, ref errorMsg))
            {
                return(this.JsonResult(Utility.E_JsonResult.OK, "入库信息成功!", null, null));
            }
            else
            {
                return(this.JsonResult(Utility.E_JsonResult.Error, errorMsg, null, null));
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 入库操作
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="entryInfo"></param>
        /// <param name="entryDetailInfos"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        public bool EntryOperate(I_Entry entryInfo, List <I_EntryDetail> entryDetailInfos, ref string errorMsg)
        {
            //创建事务
            using (var tran = db.Database.BeginTransaction())
            {
                try
                {
                    this.DoEntry(entryInfo, entryDetailInfos, ref errorMsg);

                    tran.Commit(); //提交事务

                    return(true);
                }
                catch (Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();  //回滚事务
                    }
                    errorMsg = "入库操作失败! 操作已取消!~~" + ex.Message;
                    return(false);
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 保存出库结余信息
        /// TODO:1.先查询出库结余  2.如果有则更新结余  3.如没有则提示错误  4.插入出库入库流水
        /// </summary>
        /// <param name="info"></param>
        /// <param name="strEntryType"></param>
        public void SaveDeliverySurplusInfo(I_DeliveryDetail info, string strDeliveryType, ref string errorMsg)
        {
            decimal price = 0;

            try
            {
                //查结余
                I_Surplus surplusinfo = base.GetModelWithOutTrace(s => s.BatchNo == info.BatchNo && s.MaterialID == info.MaterialID && s.StorageCode == info.EntryStorageCode && s.RealBatchNo == info.RealBatchNo);
                if (surplusinfo != null) //有结余数据
                {
                    double surplus = surplusinfo.Surplus - info.DeliveryCounts;

                    if (surplusinfo.Surplus > 0) //剩余必须大于 0  才能计算出平均单价
                    {
                        price = surplusinfo.SurplusPrice / Convert.ToDecimal(surplusinfo.Surplus);
                    }

                    if (surplus >= 0)
                    {
                        surplusinfo.Surplus = surplusinfo.Surplus - info.DeliveryCounts;
                    }
                    else
                    {
                        errorMsg = "该批次号库存不足,出库失败!";
                        throw new Exception(errorMsg);
                    }

                    surplusinfo.SurplusPrice = surplusinfo.SurplusPrice - price * Convert.ToDecimal(info.DeliveryCounts);

                    base.Modify(surplusinfo, "Surplus", "SurplusPrice"); //更新结余信息
                }
                else
                {
                    errorMsg = "未找到该批次号商品信息,出库失败!";
                    throw new Exception(errorMsg);
                }

                #region  2.记录出库信息

                I_InventoryRecord record = new I_InventoryRecord();
                record.BatchNo            = info.BatchNo;                           //批次号
                record.RealBatchNo        = info.RealBatchNo;                       //真实批次号
                record.DeliveryEntryType  = strDeliveryType;                        //出入库类型
                record.DeliveryDetailCode = info.DeliveryDetailCode;                //出库详细编码
                record.Is_Entry           = false;                                  //入库标识
                record.MaterialID         = info.MaterialID;                        //物资编码
                record.OperatorDateTime   = info.DeliveryTime;                      //出库日期
                record.StorageCode        = info.EntryStorageCode;                  //仓储编码

                record.OriginalSurplus = surplusinfo.Surplus + info.DeliveryCounts; // 原结余数量= 当前库存结余数量+ 出库数量
                record.ChangeSurplus   = -info.DeliveryCounts;                      //改变数量=出库数量

                record.Surplus      = surplusinfo.Surplus;                          //当前库存结余数量
                record.SurplusPrice = surplusinfo.SurplusPrice;                     //当前库存结余价格
                record.OperatorCode = info.OperatorCode;                            //操作人员编码
                //插入出入库流水
                dalContext.II_InventoryRecordDAL.Add(record);
                #endregion

                #region 3.自动生成转库入库单

                I_Entry entry = new I_Entry();                 // 入库主表
                entry.EntryCode      = info.DeliveryCode;      //出库编码
                entry.EntryDate      = info.DeliveryTime;      // 出库时间
                entry.EntryStorageID = info.TargetStorageCode; //入库仓库编码=出库目的编码

                if (info.RedDeliveryDetailCode != null)
                {
                    entry.EntryType = "MatertalInType-3";  //红充入库单
                }
                else
                {
                    entry.EntryType = "MatertalInType-2"; //转库入库单
                }
                entry.OperationTime = DateTime.Now;       // 操作时刻
                entry.OperatorCode  = info.OperatorCode;
                entry.Remark        = "";

                I_EntryDetail entryDetail = new I_EntryDetail();       //入库从表
                entryDetail.BatchNo         = info.BatchNo;
                entryDetail.RealBatchNo     = info.RealBatchNo;        //真实批次号
                entryDetail.EntryCode       = info.DeliveryCode;       //入库编码=出库编码
                entryDetail.EntryCounts     = info.DeliveryCounts;     //入库数量 = 出库数量
                entryDetail.EntryDate       = info.DeliveryTime;       // 入库时间 = 出库时间
                entryDetail.EntryDetailCode = info.DeliveryDetailCode; //出库子编码
                entryDetail.MaterialID      = info.MaterialID;
                entryDetail.OperatorCode    = info.OperatorCode;
                entryDetail.StorageCode     = info.TargetStorageCode;
                entryDetail.TotalPrice      = price;                    //当前库存结余价格;
                entryDetail.ValidityDate    = surplusinfo.ValidityDate; //有效期

                //如果被红充的出库信息不为空
                if (info.RedDeliveryDetailCode != null)
                {
                    entryDetail.RedEntryDetailCode = info.RedDeliveryDetailCode; //被红充入库编码 = 被红充出库编码
                }

                List <I_EntryDetail> list = new List <I_EntryDetail>();
                list.Add(entryDetail);

                //入库操作
                new I_EntryDAL().DoEntry(entry, list, ref errorMsg); //调用入库流程

                #endregion
            }
            catch (Exception e)
            {
                errorMsg = "结余操作失败!原因: " + e.Message;
                throw new Exception(errorMsg);
            }
        }