/// <summary>
        ///  销退申请单申请保存
        /// </summary>
        /// <param name="orderID"></param>
        /// <param name="detailList"></param>
        public void AddSalesOrderReturnAndDetail(SalesOrderReturn sor)
        {
            try
            {
                #region SalesOrer Save
                sor.OrderReturnCode = BusinessHandlerFactory.BillDocumentCodeBusinessHandler.GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.SalesOrderReturn).Code;
                sor.CreateTime      = DateTime.Now;
                sor.UpdateTime      = DateTime.Now;
                #endregion

                this.Add(sor);
                foreach (SalesOrderReturnDetail sord in sor.SalesOrderReturnDetails)
                {
                    if (sord.ReturnAmount > 0)
                    {
                        OutInventoryDetail oid = new OutInventoryDetail();
                        oid            = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Get(sord.OutInventoryDetailID);
                        oid.OutAmount -= sord.ReturnAmount;
                        BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Save(oid);

                        BusinessHandlerFactory.SalesOrderReturnDetailBusinessHandler.Add(sord);
                        sord.OrderReturnID = sor.Id;
                    }
                }

                this.Save();
            }
            catch (Exception ex)
            {
                this.HandleException("保存销退明细列表失败", ex);
            }
        }
Exemple #2
0
        /// <summary>
        /// 根据销售订单获取获取出库详细
        /// </summary>
        /// <param name="SalesOrderId"></param>
        /// <returns></returns>
        public List <OutInventoryDetail> GetOutInventoryDetailFromOrderDetail(Guid orderID)
        {
            try
            {
                List <SalesOrderDetail> salesOrderDetails = BusinessHandlerFactory.SalesOrderDetailBusinessHandler
                                                            .Fetch(p => p.SalesOrderID == orderID &&
                                                                   p.OutAmount < (p.Amount - p.ReturnAmount))        //还有未发的货
                                                            .ToList();

                List <OutInventoryDetail> detailList = new List <OutInventoryDetail>();
                foreach (var sDetail in salesOrderDetails)
                {
                    var detail = new OutInventoryDetail();
                    detail.ActualUnitPrice      = sDetail.ActualUnitPrice;
                    detail.Index                = sDetail.Index;
                    detail.productCode          = sDetail.productCode;
                    detail.productName          = sDetail.productName;
                    detail.BatchNumber          = sDetail.BatchNumber;
                    detail.UnitPrice            = sDetail.UnitPrice;
                    detail.Amount               = sDetail.Amount - sDetail.OutAmount - sDetail.ReturnAmount;
                    detail.Price                = sDetail.Price;
                    detail.DictionaryDosageCode = sDetail.DictionaryDosageCode;
                    detail.SpecificationCode    = sDetail.SpecificationCode;
                    detail.PruductDate          = sDetail.PruductDate;
                    detail.OutValidDate         = sDetail.OutValidDate;
                    detail.FactoryName          = sDetail.FactoryName;
                    detail.MeasurementUnit      = sDetail.MeasurementUnit;
                    detail.Origin               = sDetail.Origin;
                    detail.Description          = "数量正确";
                    DrugInventoryRecord drugInventoryRecord = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(sDetail.DrugInventoryRecordID);
                    if (drugInventoryRecord == null)
                    {
                        BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Delete(sDetail.Id);
                        continue;
                    }
                    WarehouseZone warehouseZone = BusinessHandlerFactory.WarehouseZoneBusinessHandler.Get(drugInventoryRecord.WarehouseZoneId);
                    warehouseZone.Warehouse  = BusinessHandlerFactory.WarehouseBusinessHandler.Get(warehouseZone.WarehouseId);
                    detail.WarehouseName     = warehouseZone.Warehouse.Name;
                    detail.WarehouseCode     = warehouseZone.Warehouse.Code;
                    detail.WarehouseZoneCode = warehouseZone.Code;
                    detail.WarehouseZoneName = warehouseZone.Name;
                    detail.CanSaleNum        = drugInventoryRecord.CanSaleNum;

                    detail.SalesOrderId       = sDetail.SalesOrderID;
                    detail.SalesOrderDetailId = sDetail.Id;

                    detailList.Add(detail);
                }
                return(detailList);
            }
            catch (Exception ex)
            {
                return(this.HandleException <List <OutInventoryDetail> >("根据销售订单好获取输出订单模型失败", ex));
            }
        }
 /// <summary>
 ///  销退申请单取消
 /// </summary>
 /// <param name="orderID"></param>
 /// <param name="detailList"></param>
 public void CancelSalesOrderReturn(SalesOrderReturn sor)
 {
     try
     {
         sor.OrderReturnCancelCode = BusinessHandlerFactory.BillDocumentCodeBusinessHandler.GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.OrderReturnCancel).Code;
         foreach (SalesOrderReturnDetail sord in sor.SalesOrderReturnDetails)
         {
             OutInventoryDetail oid = new OutInventoryDetail();
             oid            = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Get(sord.OutInventoryDetailID);
             oid.OutAmount += sord.ReturnAmount;
             BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Save(oid);
             BusinessHandlerFactory.SalesOrderReturnDetailBusinessHandler.Delete(sord.Id);
         }
         sor.OrderReturnCancelTime = DateTime.Now;
         this.Save(sor);
         this.Save();
     }
     catch (Exception ex)
     {
         this.HandleException("保存销退明细列表失败", ex);
     }
 }
        /// <summary>
        ///销退单入库保存
        /// </summary>
        /// <param name="so"></param>
        public void SaveReturnOrderInventory(SalesOrderReturn sor)
        {
            try
            {
                //处理库存的退库信息
                List <SalesOrderReturnDetail> salesOrderReturnDetailList = sor.SalesOrderReturnDetails.ToList();
                OutInventory oi    = null;
                int          index = 0;
                foreach (SalesOrderReturnDetail item in salesOrderReturnDetailList)
                {
                    index++;
                    Guid    drugInventoryID = item.DrugInventoryRecordID;
                    decimal returnQtyIn     = item.CanInAmount;

                    //获取药物库存实体
                    DrugInventoryRecord drugInventory = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(drugInventoryID);
                    //在销售单但未出库数量 累计当前订单明细数量
                    drugInventory.SalesCount            -= returnQtyIn;
                    drugInventory.CurrentInventoryCount += returnQtyIn;

                    if (item.IsReissue)
                    {
                        drugInventory.OnSalesOrderCount += returnQtyIn;
                        if (oi == null)
                        {
                            OutInventory oib = BusinessHandlerFactory.OutInventoryBusinessHandler.GetOutInventoryByOrderID(sor.SalesOrderID).ToList().First();
                            oi = new OutInventory();
                            oi.CreateUserId = oib.CreateUserId;
                            oi.OrderCode    = oib.OrderCode;
                            oi.OrderOutInventoryCheckNumber = oib.OrderOutInventoryCheckNumber;
                            oi.OrderOutInventoryCheckTime   = oib.OrderOutInventoryCheckTime;
                            oi.OrderOutInventoryCheckUserID = oib.OrderOutInventoryCheckUserID;
                            oi.OrderOutInventoryTime        = oib.OrderOutInventoryTime;
                            oi.OrderOutInventoryUserID      = oib.OrderOutInventoryUserID;
                            oi.OutInventoryDate             = DateTime.Now;
                            oi.OutInventoryNumber           = new BillDocumentCodeBusinessHandler(BusinessHandlerFactory.RepositoryProvider, null).GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.SalesOrderOutInventory).Code;
                            oi.ReviewerId    = new Guid();
                            oi.SalesOrderID  = oib.SalesOrderID;
                            oi.storekeeperId = oib.storekeeperId;

                            oi.Id                      = Guid.NewGuid();
                            oi.CreateTime              = DateTime.Now;
                            oi.Deleted                 = false;
                            oi.Description             = "销退补货出库单";
                            oi.OutInventoryStatus      = OutInventoryStatus.Outing;
                            oi.OutInventoryStatusValue = (int)OutInventoryStatus.Outing;
                            oi.OutInventoryType        = OutInventoryType.SalesReissue;
                            oi.OutInventoryTypeValue   = (int)OutInventoryType.SalesReissue;
                            oi.SalesOrderReturnID      = sor.Id;
                            oi.TotalMoney              = item.ActualUnitPrice * item.ReturnAmount;
                            BusinessHandlerFactory.OutInventoryBusinessHandler.Add(oi);
                        }
                        OutInventoryDetail oid = new OutInventoryDetail();
                        oid.ActualUnitPrice       = item.ActualUnitPrice;
                        oid.Amount                = item.ReturnAmount;
                        oid.BatchNumber           = item.BatchNumber;
                        oid.CanSaleNum            = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(item.DrugInventoryRecordID).CanSaleNum + item.CanInAmount;
                        oid.CreateTime            = DateTime.Now;
                        oid.CreateUserId          = item.CreateUserId;
                        oid.Deleted               = false;
                        oid.Description           = "销退补货出库细节";
                        oid.DictionaryDosageCode  = item.DictionaryDosageCode;
                        oid.DrugInventoryRecordID = item.DrugInventoryRecordID;
                        oid.FactoryName           = item.FactoryName;
                        oid.Id                       = Guid.NewGuid();
                        oid.Index                    = index;
                        oid.MeasurementUnit          = item.MeasurementUnit;
                        oid.Origin                   = item.Origin;
                        oid.OutAmount                = item.ReturnAmount;
                        oid.OutValidDate             = item.OutValidDate;
                        oid.Price                    = item.Price;
                        oid.productCode              = item.productCode;
                        oid.productName              = item.productName;
                        oid.PruductDate              = item.PruductDate;
                        oid.SalesOrderDetailId       = item.SalesOrderDetailID;
                        oid.SalesOrderDetailReturnId = item.Id;
                        oid.SalesOrderId             = sor.SalesOrderID;
                        oid.SalesOrderReturnId       = sor.Id;
                        oid.SalesOutInventoryID      = oi.Id;
                        oid.SpecificationCode        = item.SpecificationCode;
                        oid.StoreId                  = item.StoreId;
                        oid.UnitPrice                = item.UnitPrice;
                        oid.UpdateTime               = DateTime.Now;
                        oid.UpdateUserId             = item.UpdateUserId;
                        OutInventoryDetail outinv = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Get(item.OutInventoryDetailID);
                        oid.WarehouseCode     = outinv.WarehouseCode;
                        oid.WarehouseName     = outinv.WarehouseName;
                        oid.WarehouseZoneCode = outinv.WarehouseZoneCode;
                        oid.WarehouseZoneName = outinv.WarehouseZoneName;

                        BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Add(oid);
                    }
                    //drugInventory.PurchaseReturnNumber = item.ReturnAmount;
                    drugInventory.Valid = true;
                    BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Save(drugInventory);


                    //在销售单但未出库数量 累计当前订单明细数量

                    if (item.IsReissue)
                    {
                        drugInventory.OnSalesOrderCount += returnQtyIn;
                    }
                }
                this.Save(sor);
                this.Save();
            }
            catch (Exception ex)
            {
                this.HandleException("销退单入库保存失败", ex);
            }
        }