Пример #1
0
        /// <summary>
        /// 更新采购单
        /// </summary>
        /// <param name="inputDto"></param>
        /// <returns></returns>
        public ReturnInfo UpdateSalesOrder(ConSalesOrderInputDto inputDto)
        {
            ReturnInfo    RInfo = new ReturnInfo();
            StringBuilder sb    = new StringBuilder();
            ConSalesOrder Order = _ConSalesOrderReposity.GetById(inputDto.SOID).FirstOrDefault();

            if (Order == null)
            {
                sb.Append("该采购单不存在,请检查!");
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = sb.ToString();
                return(RInfo);
            }
            else      //采购单存在
            {
                Order.REALID      = inputDto.REALID;
                Order.NAME        = inputDto.NAME;
                Order.CUSID       = inputDto.CUSID;
                Order.SALESPERSON = inputDto.SALESPERSON;
                Order.MODIFYDATE  = inputDto.MODIFYDATE;
                Order.MODIFYUSER  = inputDto.MODIFYUSER;
                _unitOfWork.RegisterDirty(Order);

                //如果原来存在行项,则先删除
                List <ConSalesOrderRow> Rows = _ConSalesOrderRowReposity.GetBySOID(inputDto.SOID).ToList();
                if (Rows.Count > 0)    //如果存在行项
                {
                    foreach (ConSalesOrderRow Row in Rows)
                    {
                        _unitOfWork.RegisterDeleted(Row);
                    }
                }
                ///添加新的选择行项
                foreach (ConSalesOrderRowInputDto Row in inputDto.RowData)
                {
                    ConSalesOrderRow salesOrderRow = new ConSalesOrderRow();
                    salesOrderRow            = Mapper.Map <ConSalesOrderRowInputDto, ConSalesOrderRow>(Row);
                    salesOrderRow.SOID       = inputDto.SOID;
                    salesOrderRow.CREATEUSER = inputDto.CREATEUSER;
                    salesOrderRow.CREATEDATE = DateTime.Now;
                    salesOrderRow.MODIFYUSER = inputDto.MODIFYUSER;
                    salesOrderRow.MODIFYDATE = DateTime.Now;
                    salesOrderRow.STATUS     = 0;
                    _unitOfWork.RegisterNew(salesOrderRow);
                }
                try
                {
                    _unitOfWork.Commit();
                    RInfo.IsSuccess = true;
                    return(RInfo);
                }
                catch (Exception ex)
                {
                    sb.Append(ex.Message);
                    RInfo.IsSuccess = false;
                    RInfo.ErrorInfo = sb.ToString();
                    return(RInfo);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 得到所有耗材销售单
        /// </summary>
        /// <returns></returns>
        public DataTable GetOrders()
        {
            var FirstOrders = _ConSalesOrderReposity.GetAll().AsNoTracking();
            var result      = from Order in FirstOrders
                              join User in _SMOWMSDbContext.coreUsers on Order.SALESPERSON equals User.USER_ID
                              select new ConSalesOrderOutputDto()
            {
                SOID            = Order.SOID,
                NAME            = Order.NAME,
                REALID          = Order.REALID,
                STATUS          = Order.STATUS,
                SALESPERSON     = Order.SALESPERSON,
                SALESPERSONNAME = User.USER_NAME,
                CREATEDATE      = Order.CREATEDATE,
                CANEDIT         = "",
                CANDELETE       = "",
                CANSTART        = "",
                TIME            = ""
            };
            var OrderTable = LINQToDataTable.ToDataTable(result);

            foreach (DataRow Row in OrderTable.Rows)
            {
                ConSalesOrderRow conSalesOrderRow = _ConSalesOrderRowReposity.GetBySOID(Row["SOID"].ToString()).FirstOrDefault();
                Consumables      consumables      = _consumablesRepository.GetByID(conSalesOrderRow.CID).FirstOrDefault();
                Row["Image"] = consumables.IMAGE;

                Row["STATUSNAME"] = Enum.GetName(typeof(SalesOrderStatus), int.Parse(Row["STATUS"].ToString()));
                Row["TIME"]       = DateTime.Parse(Row["CREATEDATE"].ToString()).ToShortDateString();
            }
            return(OrderTable);
        }
Пример #3
0
        /// <summary>
        /// 创建销售单
        /// </summary>
        /// <param name="inputDto"></param>
        /// <returns></returns>
        public ReturnInfo AddSalesOrder(ConSalesOrderInputDto inputDto)
        {
            ReturnInfo RInfo = new ReturnInfo();

            if (string.IsNullOrEmpty(inputDto.NAME))
            {
                throw new Exception("销售单名称不能为空!");
            }
            if (string.IsNullOrEmpty(inputDto.SALESPERSON))
            {
                throw new Exception("请选择销售人!");
            }
            String MaxID = _ConSalesOrderReposity.GetMaxID();       //获取最大采购单ID
            String NowID = Helper.GenerateID("SO", MaxID);

            //产生销售单编号
            inputDto.SOID = NowID;
            try
            {
                ConSalesOrder salesOrder = new ConSalesOrder();
                salesOrder        = Mapper.Map <ConSalesOrderInputDto, ConSalesOrder>(inputDto);
                salesOrder.STATUS = 0;
                _unitOfWork.RegisterNew(salesOrder);

                foreach (var Row in inputDto.RowData)
                {
                    ConSalesOrderRow salesOrderRow = new ConSalesOrderRow();
                    salesOrderRow            = Mapper.Map <ConSalesOrderRowInputDto, ConSalesOrderRow>(Row);
                    salesOrderRow.SOID       = NowID;
                    salesOrderRow.CREATEUSER = inputDto.CREATEUSER;
                    salesOrderRow.CREATEDATE = DateTime.Now;
                    salesOrderRow.MODIFYUSER = inputDto.MODIFYUSER;
                    salesOrderRow.MODIFYDATE = DateTime.Now;
                    salesOrderRow.STATUS     = 0;
                    _unitOfWork.RegisterNew(salesOrderRow);
                }
                bool result = _unitOfWork.Commit();
                RInfo.IsSuccess = result;
                RInfo.ErrorInfo = inputDto.SOID;
                return(RInfo);
            }
            catch (Exception ex)
            {
                _unitOfWork.Rollback();
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = ex.Message;
                return(RInfo);
            }
        }
Пример #4
0
        /// <summary>
        /// 耗材销售单退货
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public ReturnInfo RetConSalesOrder(ConSOOutboundInputDto entity)
        {
            ReturnInfo    RInfo = new ReturnInfo();
            StringBuilder sb    = new StringBuilder();

            foreach (ConSalesOrderRowInputDto Row in entity.RowDatas)
            {
                //新增退库行项
                List <ConSalesOrderOutbound> orderOutList = _ConSalesOrderOutboundReposity.GetBySOIDAndSOROWID(entity.SOID, Row.SOROWID).AsNoTracking().ToList();
                ConSalesOrderRow             orderRow     = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault();
                decimal hasRet  = orderRow.QUANTRETREATED;  //已经退货数
                decimal waitRet = Row.QUANTRETREATED;       //等待退货数
                foreach (ConSalesOrderOutbound orderOut in orderOutList)
                {
                    if (waitRet > 0)
                    {
                        if (hasRet >= orderOut.QUANT)
                        {
                            hasRet -= orderOut.QUANT;
                        }
                        else
                        {
                            //新增退库单数据
                            decimal canRetNum = orderOut.QUANT - hasRet;    //此行项可退库数量
                            ConSalesOrderRetiring orderRetiring = _ConSalesOrderRetiringReposity.GetBySOIDAndWareID(entity.SOID, Row.SOROWID, orderOut.WAREID, orderOut.STID, orderOut.SLID).FirstOrDefault();
                            if (orderRetiring == null)
                            {
                                ConSalesOrderRetiring orderNewRetiring = new ConSalesOrderRetiring();
                                orderNewRetiring.SOID    = entity.SOID;
                                orderNewRetiring.SOROWID = Row.SOROWID;
                                orderNewRetiring.WAREID  = orderOut.WAREID;
                                orderNewRetiring.STID    = orderOut.STID;
                                orderNewRetiring.SLID    = orderOut.SLID;
                                if (waitRet > canRetNum)
                                {
                                    waitRet -= canRetNum;
                                    orderNewRetiring.QUANT = canRetNum;
                                }
                                else
                                {
                                    orderNewRetiring.QUANT = waitRet;
                                    waitRet = 0;
                                }
                                _unitOfWork.RegisterNew(orderNewRetiring);
                                //新增或者修改ConQuant数据
                                ConQuant conQuant = _ConQuantRepository.GetByCID(Row.CID, orderNewRetiring.WAREID, orderNewRetiring.STID, orderNewRetiring.SLID).FirstOrDefault();
                                if (conQuant == null)  //当前库位不存在库存,则新增
                                {
                                    ConQuant newQuant = new ConQuant();
                                    newQuant.CID        = Row.CID;
                                    newQuant.WAREID     = orderNewRetiring.WAREID;
                                    newQuant.STID       = orderNewRetiring.STID;
                                    newQuant.SLID       = orderNewRetiring.SLID;
                                    newQuant.QUANTITY   = orderNewRetiring.QUANT;
                                    newQuant.CREATEUSER = entity.CREATEUSER;
                                    newQuant.CREATEDATE = DateTime.Now;
                                    newQuant.MODIFYUSER = entity.CREATEUSER;
                                    newQuant.MODIFYDATE = DateTime.Now;
                                    _unitOfWork.RegisterNew(newQuant);
                                }
                                else          //当前库位存在库存,则添加数量
                                {
                                    conQuant.QUANTITY += orderNewRetiring.QUANT;
                                    _unitOfWork.RegisterDirty(conQuant);
                                }
                                hasRet -= orderNewRetiring.QUANT;
                            }
                            else
                            {
                                decimal retNumThisTime = 0;
                                if (waitRet > canRetNum)
                                {
                                    waitRet            -= canRetNum;
                                    retNumThisTime      = canRetNum;
                                    orderRetiring.QUANT = orderRetiring.QUANT + canRetNum;
                                }
                                else
                                {
                                    orderRetiring.QUANT = orderRetiring.QUANT + waitRet;
                                    retNumThisTime      = waitRet;
                                    waitRet             = 0;
                                }
                                _unitOfWork.RegisterDirty(orderRetiring);
                                //新增或者修改ConQuant数据
                                ConQuant conQuant = _ConQuantRepository.GetByCID(Row.CID, orderRetiring.WAREID, orderRetiring.STID, orderRetiring.SLID).FirstOrDefault();
                                if (conQuant == null)  //当前库位不存在库存,则新增
                                {
                                    ConQuant newQuant = new ConQuant();
                                    newQuant.CID        = Row.CID;
                                    newQuant.WAREID     = orderRetiring.WAREID;
                                    newQuant.STID       = orderRetiring.STID;
                                    newQuant.SLID       = orderRetiring.SLID;
                                    newQuant.QUANTITY   = retNumThisTime;
                                    newQuant.CREATEUSER = entity.CREATEUSER;
                                    newQuant.CREATEDATE = DateTime.Now;
                                    newQuant.MODIFYUSER = entity.CREATEUSER;
                                    newQuant.MODIFYDATE = DateTime.Now;
                                    _unitOfWork.RegisterNew(newQuant);
                                }
                                else          //当前库位存在库存,则添加数量
                                {
                                    conQuant.QUANTITY += retNumThisTime;
                                    _unitOfWork.RegisterDirty(conQuant);
                                }
                                hasRet -= retNumThisTime;
                            }
                        }
                    }
                }

                //修改OrderRow行项表退库数量
                ConSalesOrderRow conSalesOrderRow = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault();
                conSalesOrderRow.QUANTRETREATED = conSalesOrderRow.QUANTRETREATED + Row.QUANTRETREATED;
                if (conSalesOrderRow.QUANTRETREATED > conSalesOrderRow.QUANTOUT)
                {
                    throw new Exception("退货数量不能大于出库数量!");
                }
                _unitOfWork.RegisterDirty(conSalesOrderRow);
            }
            try
            {
                _unitOfWork.Commit();
                RInfo.IsSuccess = true;
                return(RInfo);
            }
            catch (Exception ex)
            {
                _unitOfWork.Rollback();
                sb.Append(ex.Message);
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = sb.ToString();
                return(RInfo);
            }
        }
Пример #5
0
        /// <summary>
        /// 耗材销售单出库
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public ReturnInfo OutboundConSalesOrder(ConSOOutboundInputDto entity)
        {
            ReturnInfo    RInfo    = new ReturnInfo();
            StringBuilder sb       = new StringBuilder();
            int           thisOver = 0; //此次完成出库的行项数

            foreach (ConSalesOrderRowInputDto Row in entity.RowDatas)
            {
                decimal quantSum = _ConQuantRepository.GetSumByCID(Row.CID);
                if (quantSum < Row.QUANTOUT)
                {
                    throw new Exception("耗材" + Row.CID + "库存不足,请先补充库存!");
                }
                List <ConQuant> conQuantList = _ConQuantRepository.GetQuantByCID(Row.CID).ToList();
                decimal         quantOut     = Row.QUANTOUT;
                while (quantOut > 0)
                {
                    foreach (ConQuant conQuant in conQuantList)
                    {
                        ConSalesOrderOutbound outbound = new ConSalesOrderOutbound();
                        outbound.SOID    = entity.SOID;
                        outbound.SOROWID = Row.SOROWID;
                        outbound.WAREID  = conQuant.WAREID;
                        outbound.STID    = conQuant.STID;
                        outbound.SLID    = conQuant.SLID;
                        if (conQuant.QUANTITY > quantOut)
                        {
                            conQuant.QUANTITY = conQuant.QUANTITY - quantOut;
                            _unitOfWork.RegisterDirty(conQuant);
                            outbound.QUANT = quantOut;
                            quantOut       = 0;
                            _unitOfWork.RegisterNew(outbound);
                            break;
                        }
                        else if (conQuant.QUANTITY == quantOut)
                        {
                            outbound.QUANT = quantOut;
                            _unitOfWork.RegisterDeleted(conQuant);
                            quantOut = 0;
                            _unitOfWork.RegisterNew(outbound);
                            break;
                        }
                        else
                        {
                            outbound.QUANT = conQuant.QUANTITY;
                            quantOut       = quantOut - conQuant.QUANTITY;
                            _unitOfWork.RegisterDeleted(conQuant);
                            _unitOfWork.RegisterNew(outbound);
                        }
                    }
                }

                ConSalesOrderRow orderRow = _ConSalesOrderRowReposity.GetOrderRowByCID(entity.SOID, Row.CID).FirstOrDefault();
                orderRow.QUANTOUT = orderRow.QUANTOUT + Row.QUANTOUT;
                orderRow.STATUS   = (int)SalesOrderStatus.出库中;
                if (orderRow.QUANTOUT == orderRow.QUANTSALED)
                {
                    orderRow.STATUS = (int)PurchaseOrderStatus.已完成;
                    thisOver       += 1;
                }
                if (orderRow.QUANTOUT > orderRow.QUANTSALED)
                {
                    throw new Exception("出库数量不可大于实际销售数量!");
                }
                _unitOfWork.RegisterDirty(orderRow);
            }

            ConSalesOrder conSalesOrder = _ConSalesOrderReposity.GetById(entity.SOID).AsNoTracking().FirstOrDefault();
            int           allRowsCount  = _ConSalesOrderRowReposity.GetBySOID(entity.SOID).ToList().Count;
            int           hasOverCount  = _ConSalesOrderRowReposity.GetOrderRowsByStatus(entity.SOID, (int)PurchaseOrderStatus.已完成).ToList().Count;

            if (allRowsCount == hasOverCount + thisOver)
            {
                conSalesOrder.STATUS = (int)PurchaseOrderStatus.已完成;
            }
            else
            {
                conSalesOrder.STATUS = (int)PurchaseOrderStatus.入库中;
            }
            _unitOfWork.RegisterDirty(conSalesOrder);
            try
            {
                _unitOfWork.Commit();
                RInfo.IsSuccess = true;
                return(RInfo);
            }
            catch (Exception ex)
            {
                _unitOfWork.Rollback();
                sb.Append(ex.Message);
                RInfo.IsSuccess = false;
                RInfo.ErrorInfo = sb.ToString();
                return(RInfo);
            }
        }