Ejemplo n.º 1
0
        /// <summary>
        /// 采购入库
        /// </summary>
        /// <param name="inputDto">采购入库相关信息</param>
        /// <returns></returns>
        public ReturnInfo InstorageAss(AssInStorageInputDto inputDto)
        {
            ReturnInfo    RInfo        = new ReturnInfo();
            StringBuilder sb           = new StringBuilder();
            string        ValidateInfo = Helper.BasicValidate(inputDto).ToString();

            sb.Append(ValidateInfo);
            if (sb.Length == 0)
            {
                try
                {
                    //先确定数量是否超出
                    AssPurchaseOrderRow row = _assPoRowRepository
                                              .GetByPOIDandTemplateID(inputDto.POID, inputDto.TEMPLATEID).FirstOrDefault();
                    if (row != null)
                    {
                        if (row.QUANTPURCHASED < row.QUANTSTORED + inputDto.SnList.Count)
                        {
                            RInfo.IsSuccess = false;
                            RInfo.ErrorInfo = "入库量超过采购量!";
                            return(RInfo);
                        }
                        else
                        {
                            row.QUANTSTORED = row.QUANTSTORED + inputDto.SnList.Count;
                            var asspo = _assPurchaseOrderRepository.GetById(inputDto.POID).FirstOrDefault();
                            if (asspo != null)
                            {
                                asspo.STATUS = (int)PurchaseOrderStatus.入库中;
                                if (row.QUANTPURCHASED == row.QUANTSTORED)
                                {
                                    row.STATUS = (int)PurchaseOrderStatus.已完成;

                                    //判断是否需要将整个采购单状态改为"已完成"
                                    //得到采购单的行项数
                                    var count = _assPoRowRepository.GetByPOID(inputDto.POID).Count();
                                    //得到已完成的行项数
                                    var count2 = _assPoRowRepository.GetByPOID(inputDto.POID)
                                                 .Count(a => a.STATUS == (int)PurchaseOrderStatus.已完成);
                                    if (count == count2 + 1)
                                    {
                                        //包括当前行项,所有行项均已完成,则更新整个采购单状态为"已完成"
                                        asspo.STATUS = (int)PurchaseOrderStatus.已完成;
                                        _unitOfWork.RegisterDirty(asspo);
                                    }
                                }
                                else
                                {
                                    row.STATUS = (int)PurchaseOrderStatus.入库中;
                                }
                            }
                            _unitOfWork.RegisterDirty(row);
                        }
                    }


                    AssTemplate assTemplate = _assTemplateRepository.GetById(inputDto.TEMPLATEID).AsNoTracking()
                                              .FirstOrDefault();
                    if (assTemplate != null)
                    {
                        for (int i = 0; i < inputDto.SnList.Count; i++)
                        {
                            //资产入库
                            string MaxId  = _assetsRepository.GetMaxID();
                            string ASSID  = Helper.GenerateASSID("ASS", MaxId, i);
                            Assets assets = new Assets
                            {
                                STATUS        = (int)STATUS.闲置,
                                ASSID         = ASSID,
                                BUYDATE       = DateTime.Now,
                                CREATEUSER    = inputDto.UserId,
                                EXPIRYDATE    = DateTime.Now.AddYears(1),
                                IMAGE         = assTemplate.IMAGE,
                                ISINWAREHOUSE = 1,
                                ISLOCKED      = 0,
                                MODIFYUSER    = inputDto.UserId,
                                NAME          = assTemplate.NAME,
                                NOTE          = assTemplate.NOTE,
                                PRICE         = assTemplate.PRICE,
                                SLID          = inputDto.SLID,
                                WAREID        = inputDto.WAREID,
                                STID          = inputDto.STID,
                                SPECIFICATION = assTemplate.SPECIFICATION,
                                TYPEID        = assTemplate.TYPEID,
                                UNIT          = assTemplate.UNIT,
                                VENDOR        = assTemplate.VENDOR,
                                CREATEDATE    = DateTime.Now,
                                MODIFYDATE    = DateTime.Now,
                                SN            = inputDto.SnList[i],
                                TEMPLATEID    = inputDto.TEMPLATEID
                            };
                            _unitOfWork.RegisterNew(assets);
                            var pr = new AssProcessRecord
                            {
                                ASSID          = ASSID,
                                CREATEDATE     = DateTime.Now,
                                CREATEUSER     = inputDto.UserId,
                                HANDLEDATE     = DateTime.Now,
                                HANDLEMAN      = inputDto.UserId,
                                MODIFYDATE     = DateTime.Now,
                                MODIFYUSER     = inputDto.UserId,
                                PROCESSCONTENT = inputDto.UserId + "入库了" + ASSID + ",数量为1",
                                PROCESSMODE    = (int)PROCESSMODE.入库,
                                QUANTITY       = 1
                            };
                            _unitOfWork.RegisterNew(pr);
                            string SN = inputDto.SnList[i];
                            //添加采购入库关联表
                            AssPurchaseOrderInstorage instorage = new AssPurchaseOrderInstorage
                            {
                                POID       = inputDto.POID,
                                SN         = SN,
                                TEMPLATEID = inputDto.TEMPLATEID,
//                                Time = DateTime.Now
                            };
                            _unitOfWork.RegisterNew(instorage);
                        }
                        bool result = _unitOfWork.Commit();
                        RInfo.IsSuccess = result;
                        RInfo.ErrorInfo = "";
                        return(RInfo);
                    }
                    else
                    {
                        RInfo.IsSuccess = false;
                        RInfo.ErrorInfo = "该资产模板不存在!";
                        return(RInfo);
                    }
                }
                catch (Exception ex)
                {
                    _unitOfWork.Rollback();
                    sb.Append(ex.Message);
                    RInfo.IsSuccess = false;
                    RInfo.ErrorInfo = sb.ToString();
                    return(RInfo);
                }
            }
            else
            {
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = sb.ToString();
                return(RInfo);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 入库
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Press(object sender, EventArgs e)
        {
            try
            {
                string WareId = "";
                string STID   = "";
                string SLID   = "";
                if (txtSLID.Tag != null)
                {
                    string[] Ids = txtSLID.Tag.ToString().Split('/');
                    WareId = Ids[0];
                    if (Ids.Length == 3)
                    {
                        STID = Ids[1];
                        SLID = Ids[2];
                    }
                }
                if (string.IsNullOrEmpty(SLID))
                {
                    throw new Exception("请扫描正确的库位!");
                }
                if (snList.Count == 0)
                {
                    throw new Exception("请添加要入库的序列号!");
                }
                ReturnInfo           rInfo    = new ReturnInfo();
                AssInStorageInputDto inputDto = new AssInStorageInputDto
                {
                    POID       = txtPOID.Text,
                    SLID       = SLID,
                    STID       = STID,
                    WAREID     = WareId,
                    TEMPLATEID = btnTemplate.Tag.ToString(),
                    UserId     = UserId,
                    SnList     = snList
                };
                rInfo = _autofacConfig.AssPurchaseOrderService.InstorageAss(inputDto);
                if (rInfo.IsSuccess)
                {
                    ShowResult = ShowResult.Yes;
//                    Toast("入库成功!");
                    btnTemplate.Text = "选择(必填)   > ";
                    btnTemplate.Tag  = null;
                    txtSLID.Text     = "(必填)";
                    txtSLID.Tag      = null;
                    snList.Clear();
                    lvSN.Rows.Clear();
                    SNTable.Rows.Clear();
                    //查询采购单状态
                    var po = _autofacConfig.AssPurchaseOrderService.GetById(txtPOID.Text);
                    if (IsFromPO)
                    {
                        //如果全部完成,则关闭
                        if (po.STATUS == (int)PurchaseOrderStatus.已完成)
                        {
                            Toast("该订单已全部入库完成!");
                            Close();
                        }
                        else
                        {
                            Toast("入库成功!");
                            DealLastTemp();
                            GetTotal();
                            lblQuant.Text = GetRest();
                        }
                    }
                    else
                    {
                        //如果全部完成,则提示该订单已经完成入库
                        if (po.STATUS == (int)PurchaseOrderStatus.已完成)
                        {
                            Toast("该订单已全部入库完成!");
                            txtPOID.Text = "";
                            txtPOID.Tag  = null;
                        }
                        else
                        {
                            Toast("入库成功!");
                            DealLastTemp();
                            GetTotal();
                            lblQuant.Text = GetRest();
                        }
                    }
                }
                else
                {
                    Toast(rInfo.ErrorInfo);
                }
            }
            catch (Exception ex)
            {
                Toast(ex.Message);
            }
        }