예제 #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);
            }
        }
예제 #2
0
        /// <summary>
        /// 修改入库价格信息
        /// </summary>
        /// <param name="entryInfo"></param>
        /// <returns></returns>
        public bool EditEntryDetail(I_EntryDetail info, ref string errorMsg)
        {
            //创建事务
            using (var tran = db.Database.BeginTransaction())
            {
                try
                {
                    new I_EntryDetailDAL().Modify(info, "Remark", "TotalPrice");
                    I_InventoryRecord inInfo = new I_InventoryRecord();
                    inInfo.EntryDetailCode = info.EntryDetailCode;
                    inInfo.SurplusPrice    = info.TotalPrice;
                    inInfo.ID = (from u in db.I_InventoryRecord
                                 where u.EntryDetailCode == info.EntryDetailCode
                                 select u.ID).First();
                    new I_InventoryRecordDAL().Modify(inInfo, "SurplusPrice");

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

                    return(true);
                }
                catch (Exception ex)
                {
                    if (tran != null)
                    {
                        tran.Rollback();  //回滚事务
                    }
                    errorMsg = "修改入库价格失败! 操作已取消!~~" + ex.Message;
                    return(false);
                }
            }
        }
예제 #3
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);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// 保存入库结余信息
        /// TODO: 1.先查询入库结余  2.如果有则更新结余  3.如没有则新增结余  4.插入出库入库流水
        /// </summary>
        /// <param name="info">入库从表</param>
        public void SaveEntrySurplusInfo(I_EntryDetail info, string strEntryType, ref string errorMsg)
        {
            try
            {
                //查结余 注意查原剩余信息时候 要用非追踪查询 否则修改失败
                I_Surplus surplusinfo = base.GetModelWithOutTrace(s => s.BatchNo == info.BatchNo && s.MaterialID == info.MaterialID && s.StorageCode == info.StorageCode && s.RealBatchNo == info.RealBatchNo);
                if (surplusinfo != null) //有结余数据
                {
                    surplusinfo.EntryCounts  = surplusinfo.EntryCounts + info.EntryCounts;
                    surplusinfo.Surplus      = surplusinfo.Surplus + info.EntryCounts;
                    surplusinfo.SurplusPrice = surplusinfo.SurplusPrice + info.TotalPrice;

                    //更新结余信息
                    base.Modify(surplusinfo, "EntryCounts", "Surplus", "SurplusPrice");
                }
                else
                {
                    surplusinfo              = new I_Surplus();
                    surplusinfo.BatchNo      = info.BatchNo;      //批次号
                    surplusinfo.RealBatchNo  = info.RealBatchNo;  //真实批次号
                    surplusinfo.EntryCounts  = info.EntryCounts;  //入库数量
                    surplusinfo.MaterialID   = info.MaterialID;   //物资ID
                    surplusinfo.StorageCode  = info.StorageCode;  //仓储ID
                    surplusinfo.Surplus      = info.EntryCounts;  // 剩余数量 = 入库数量
                    surplusinfo.SurplusPrice = info.TotalPrice;   // 剩余金额 = 入库金额
                    surplusinfo.ValidityDate = info.ValidityDate; //有效期

                    base.Add(surplusinfo);                        //新增结余信息
                }

                #region 2.记录入库信息
                I_InventoryRecord record = new I_InventoryRecord();
                record.BatchNo           = info.BatchNo;                         //批次号
                record.RealBatchNo       = info.RealBatchNo;                     //真实批次号
                record.DeliveryEntryType = strEntryType;                         //出入库类型
                record.EntryDetailCode   = info.EntryDetailCode;                 //入库详细编码
                record.Is_Entry          = true;                                 //入库标识
                record.MaterialID        = info.MaterialID;                      //物资编码
                record.OperatorDateTime  = info.EntryDate;                       //入库日期
                record.StorageCode       = info.StorageCode;                     //仓储编码

                record.OriginalSurplus = surplusinfo.Surplus - info.EntryCounts; // 原结余数量= 当前库存结余数量-入库数量
                record.ChangeSurplus   = info.EntryCounts;                       //改变数量=入库数量
                record.Surplus         = surplusinfo.Surplus;                    //当前库存结余数量
                record.SurplusPrice    = surplusinfo.SurplusPrice;               //当前库存结余价格
                record.OperatorCode    = info.OperatorCode;                      //操作人员编码

                //插入出入流水
                dalContext.II_InventoryRecordDAL.Add(record);
                #endregion
            }
            catch (Exception e)
            {
                errorMsg = "结余操作失败!原因: " + e.Message;
                throw new Exception(errorMsg);
            }
        }
예제 #5
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));
            }
        }
예제 #6
0
        /// <summary>
        /// 红充入库操作
        /// </summary>
        /// <param name="originalID">原入库ID</param>
        /// <param name="newID">新入库ID</param>
        /// <param name="newRemark">新备注</param>
        /// <param name="errorMsg">错误消息</param>
        /// <returns>返回值</returns>
        public bool EntryRedOperate(string oriEntryDetailCode, string newRemark, int StroageCode, ref string errorMsg)
        {
            I_Entry entryInfo = new I_Entry();

            entryInfo.EntryCode      = DateTime.Now.AddSeconds(1).ToString("yyyyMMddHHmmss") + UserOperateContext.Current.Session_UsrInfo.ID; //生成入库编码
            entryInfo.EntryDate      = DateTime.Now;                                                                                          //当前时间
            entryInfo.EntryType      = "MatertalInType-3";                                                                                    //红冲入库
            entryInfo.OperationTime  = DateTime.Now;                                                                                          //当前时间
            entryInfo.OperatorCode   = UserOperateContext.Current.Session_UsrInfo.ID;
            entryInfo.EntryStorageID = StroageCode;
            entryInfo.Remark         = "红冲入库";


            I_EntryDetail orientryDetailInfo = base.DALContext.II_EntryDetailDAL.GetModelWithOutTrace(e => e.EntryDetailCode == oriEntryDetailCode);

            if (orientryDetailInfo != null)
            {
                orientryDetailInfo.RedEntryDetailCode = oriEntryDetailCode;  //被红充入库编码 = 自己本身的入库编码  标识为“被红充单据”
            }
            else
            {
                errorMsg = "没有查到此入库单从表,操作失败!";
                return(false);
            }

            I_EntryDetail newdetailinfo = new I_EntryDetail();

            newdetailinfo.EntryDetailCode    = entryInfo.EntryCode + entryInfo.OperatorCode + "1";
            newdetailinfo.BatchNo            = orientryDetailInfo.BatchNo;
            newdetailinfo.RealBatchNo        = orientryDetailInfo.RealBatchNo;
            newdetailinfo.EntryCode          = entryInfo.EntryCode;
            newdetailinfo.EntryCounts        = -(orientryDetailInfo.EntryCounts); //入库数量为负数
            newdetailinfo.EntryDate          = DateTime.Now;
            newdetailinfo.MaterialID         = orientryDetailInfo.MaterialID;
            newdetailinfo.OperatorCode       = UserOperateContext.Current.Session_UsrInfo.ID;
            newdetailinfo.RedEntryDetailCode = oriEntryDetailCode; //红充入库编码
            newdetailinfo.RelatedOrderNum    = orientryDetailInfo.RelatedOrderNum;
            newdetailinfo.Remark             = newRemark;          //新备注
            newdetailinfo.Specification      = orientryDetailInfo.Specification;
            newdetailinfo.StorageCode        = orientryDetailInfo.StorageCode;
            newdetailinfo.TotalPrice         = -(orientryDetailInfo.TotalPrice); //钱为负数
            newdetailinfo.Unit         = orientryDetailInfo.Unit;
            newdetailinfo.ValidityDate = orientryDetailInfo.ValidityDate;

            return(dal.EntryRedOperate(entryInfo, orientryDetailInfo, newdetailinfo, ref errorMsg));
        }
예제 #7
0
        public ActionResult EditEntryTotalPriceDetiail()
        {
            string  EntryDetailCode = Request.Form["EntryDetailCode"].ToString();
            decimal TotalPrice      = Convert.ToDecimal(Request.Form["TotalPrice"]);
            string  EntryRemark     = Request.Form["EntryRemark"].ToString();
            string  errorMsg        = "";

            Model.I_EntryDetail info = new I_EntryDetail();
            info.EntryDetailCode = EntryDetailCode;
            info.Remark          = EntryRemark;
            info.TotalPrice      = TotalPrice;
            if (new I_EntryBLL().EditEntryDetail(info, ref errorMsg))
            {
                return(this.JsonResult(Utility.E_JsonResult.OK, "修改价格成功!", null, null));
            }
            else
            {
                return(this.JsonResult(Utility.E_JsonResult.Error, errorMsg, null, null));
            }
        }
예제 #8
0
 public bool EditEntryDetail(I_EntryDetail info, ref string errorMsg)
 {
     return(dal.EditEntryDetail(info, ref errorMsg));
 }
예제 #9
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);
            }
        }