public IEnumerable <DTO.SaleOrderMng.LoadingPlan2> GetLoadingPlan(int saleOrderID, out Library.DTO.Notification notification)
        {
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            try
            {
                using (ReturnGoodsFromSaleOrderEntities context = CreateContext())
                {
                    List <int?> loadingPlanIDs = context.SaleOrderMng_LoadingPlanDetail2_View.Where(o => o.SaleOrderID == saleOrderID).Select(x => x.LoadingPlanID).ToList();
                    loadingPlanIDs.AddRange(context.SaleOrderMng_LoadingPlanSparepartDetail2_View.Where(o => o.SaleOrderID == saleOrderID).Select(x => x.LoadingPlanID).ToList());
                    loadingPlanIDs = loadingPlanIDs.Distinct().ToList();

                    var result = context.SaleOrderMng_LoadingPlan2_View.Include("SaleOrderMng_LoadingPlanDetail2_View").Include("SaleOrderMng_LoadingPlanSparepartDetail2_View").Where(o => loadingPlanIDs.Contains(o.LoadingPlanID));
                    return(converter.DB2DTO_LoadingPlan2(result.ToList()));
                }
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message))
                {
                    notification.DetailMessage.Add(ex.InnerException.Message);
                }
                return(new List <DTO.SaleOrderMng.LoadingPlan2>());
            }
        }
        public bool CreateReturnData(List <DTO.SaleOrderMng.LoadingPlan2> dtoReturns, out Library.DTO.Notification notification)
        {
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success, Message = "You have been returned goods success"
            };
            try
            {
                using (ReturnGoodsFromSaleOrderEntities context = CreateContext())
                {
                    WarehouseImport dbWHImport = new WarehouseImport();
                    dbWHImport.ImportTypeID = 3; //RETURN TYPE
                    dbWHImport.ImportedDate = DateTime.Now;
                    dbWHImport.Season       = DALBase.Helper.GetCurrentSeason();

                    WarehouseImportAreaDetail dbWHArea;

                    foreach (var dtoReturn in dtoReturns)
                    {
                        foreach (var dtoProduct in dtoReturn.LoadingPlanDetail2s.Where(o => o.ReturnQnt.HasValue && o.ReturnQnt > 0))
                        {
                            WarehouseImportProductDetail dbProduct = new WarehouseImportProductDetail();
                            dbProduct.ProductID           = dtoProduct.ProductID;
                            dbProduct.ProductStatusID     = dtoProduct.ProductStatusID;
                            dbProduct.Quantity            = dtoProduct.ReturnQnt;
                            dbProduct.LoadingPlanDetailID = dtoProduct.LoadingPlanDetailID;
                            dbWHImport.WarehouseImportProductDetail.Add(dbProduct);

                            //distribute to warehouse area
                            dbWHArea = new WarehouseImportAreaDetail();
                            dbWHArea.WarehouseAreaID = 1;
                            dbWHArea.Quantity        = dtoProduct.ReturnQnt;
                            dbProduct.WarehouseImportAreaDetail.Add(dbWHArea);
                        }
                        foreach (var dtoSparepart in dtoReturn.LoadingPlanSparepartDetail2s.Where(o => o.ReturnQnt.HasValue && o.ReturnQnt > 0))
                        {
                            WarehouseImportSparepartDetail dbSparepart = new WarehouseImportSparepartDetail();
                            dbSparepart.SparepartID     = dtoSparepart.SparepartID;
                            dbSparepart.ProductStatusID = dtoSparepart.ProductStatusID;
                            dbSparepart.Quantity        = dtoSparepart.ReturnQnt;
                            dbSparepart.LoadingPlanSparepartDetailID = dtoSparepart.LoadingPlanSparepartDetailID;
                            dbWHImport.WarehouseImportSparepartDetail.Add(dbSparepart);

                            //distribute to warehouse area
                            dbWHArea = new WarehouseImportAreaDetail();
                            dbWHArea.WarehouseAreaID = 1;
                            dbWHArea.Quantity        = dtoSparepart.ReturnQnt;
                            dbSparepart.WarehouseImportAreaDetail.Add(dbWHArea);
                        }
                    }

                    context.WarehouseImport.Add(dbWHImport);
                    context.SaveChanges();
                    context.WarehouseImportMng_function_GenerateReceipNo(dbWHImport.WarehouseImportID, dbWHImport.Season);
                }
                return(true);
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message))
                {
                    notification.DetailMessage.Add(ex.InnerException.Message);
                }
                return(false);
            }
        }