public ResponseModel ChangeStatusValueInMasterTable(InvOutletPOReturnMaster aObj)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    if (aObj.Status != null)
                    {
                        DateTime aDate = DateTime.Now;
                        InvOutletPOReturnMaster aOutletPOReturnMaster = _db.InvOutletPOReturnMasters.Find(aObj.OutletPOReturnMasterId);
                        aOutletPOReturnMaster.ModifiedDate = aDate;
                        aOutletPOReturnMaster.IsReturned   = 2;
                        aOutletPOReturnMaster.IsActive     = false;

                        _db.InvOutletPOReturnMasters.Attach(aOutletPOReturnMaster);
                        _db.Entry(aOutletPOReturnMaster).State = EntityState.Modified;
                        _db.SaveChanges();

                        if (aObj.IsReturned == 2)
                        {
                            var data = (from m in _db.InvOutletPOReturnMasters
                                        join d in _db.InvOutletPOReturnDetails on m.OutletPOReturnMasterId equals d.OutletPOReturnMasterId
                                        where m.OutletPOReturnMasterId == aObj.OutletPOReturnMasterId
                                        select
                                        new
                            {
                                m.WarehouseId,
                                m.OutletId,
                                d.OutletPOReturnMasterId,
                                d.OutletPOReturnDetailsId,
                                d.ProductId,
                                d.ProductQuantity,
                            }).ToList();
                            foreach (var p in data)
                            {
                                //InvOutletPOReturnDetail aOutletPOReturnDetail = new InvOutletPOReturnDetail()
                                InvOutletPOReturnDetail aOutletPOReturnDetail = _db.InvOutletPOReturnDetails.Find(aObj.OutletPOReturnMasterId);

                                aOutletPOReturnDetail.ModifiedDate = aDate;
                                aOutletPOReturnDetail.IsReturned   = 2;
                                aOutletPOReturnDetail.IsActive     = false;
                                _db.InvOutletPOReturnDetails.Attach(aOutletPOReturnDetail);
                                _db.Entry(aOutletPOReturnDetail).State = EntityState.Modified;
                                _db.SaveChanges();


                                InvOutletStock aOutletStock = new InvOutletStock()
                                {
                                    WarehouseId         = p.WarehouseId,
                                    ProductId           = p.ProductId,
                                    OutletId            = p.OutletId,
                                    InOut               = 2,
                                    Note                = "Returned",
                                    OutletStockQuantity = p.ProductQuantity,
                                    IsActive            = true,
                                    IsReturned          = 2,
                                    CreatedDate         = DateTime.Now
                                };
                                _db.InvOutletStocks.Add(aOutletStock);
                                _db.SaveChanges();

                                InvWarehouseStock aWarehouseStock = new InvWarehouseStock()
                                {
                                    WarehouseId            = p.WarehouseId,
                                    OutletId               = p.OutletId,
                                    ProductId              = p.ProductId,
                                    InOut                  = 1,
                                    Note                   = "ReturnReceived",
                                    WarehouseStockQuantity = p.ProductQuantity,
                                    IsActive               = true,
                                    IsReturned             = 0,
                                    IsReceived             = true,
                                    CreatedDate            = DateTime.Now
                                };
                                _db.InvWarehouseStocks.Add(aWarehouseStock);
                                _db.SaveChanges();
                            }
                            transaction.Commit();
                            return(_aModel.Respons(true, "Return successfully received."));
                        }
                    }
                    transaction.Commit();
                    return(_aModel.Respons(false, "Failed to return receive."));
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    return(_aModel.Respons(false, "Sorry! Some  Error Happned."));
                }
            }
        }
        public ResponseModel OutletPoReturnDetails(OutletPOReturnDetailsViewModel OutletPOReturnData, List <ProductOutletPOReturnVM> productList)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    DateTime aDate = DateTime.Now;

                    InvOutletPOReturnMaster aOutletPOReturnMaster = new InvOutletPOReturnMaster()
                    {
                        OutletPOReturnMasterId    = OutletPOReturnData.OutletPOReturnMasterId,
                        Original_OutletPOMasterId = OutletPOReturnData.OutletPOMasterId,
                        WarehouseId = OutletPOReturnData.WarehouseId, ///////When Identity will complete then we takeidies from WarehouseId and Outletet Id w
                        OutletId    = OutletPOReturnData.OutletId,

                        //WarehouseId=1,
                        //OutletId =1,
                        Status      = 0,
                        IsActive    = true,
                        IsChanged   = false,
                        IsDeleted   = false,
                        IsEdited    = false,
                        IsReceived  = false,
                        IsReturned  = 1,
                        CreatedDate = aDate,
                    };

                    if (OutletPOReturnData.OutletPOReturnMasterId == 0)
                    {
                        _db.InvOutletPOReturnMasters.Add(aOutletPOReturnMaster);
                        _db.SaveChanges();

                        foreach (var aData in productList)
                        {
                            InvOutletPOReturnDetail aOutletPOReturnDetail = new InvOutletPOReturnDetail()
                            {
                                OutletPOReturnMasterId     = aOutletPOReturnMaster.OutletPOReturnMasterId,
                                OutletPOReturnDetailsId    = aData.OutletPOReturnDetailsId,
                                Original_OutletPODetailsId = aData.OutletPODetailsId,
                                ProductId       = aData.ProductId,
                                ProductQuantity = aData.ProductQuantity,
                                IsActive        = true,
                                IsChanged       = false,
                                IsDeleted       = false,
                                IsEdited        = false,
                                IsReceived      = false,
                                IsReturned      = 1,
                                CreatedDate     = aDate,
                            };
                            _db.InvOutletPOReturnDetails.Add(aOutletPOReturnDetail);
                            _db.SaveChanges();
                        }
                        _db.SaveChanges();
                        transaction.Commit();
                        return(_aModel.Respons(true, "Outlet PO return request Successful."));
                    }

                    else if (OutletPOReturnData.OutletPOReturnMasterId > 0)
                    {
                        _db.InvOutletPOReturnMasters.Attach(aOutletPOReturnMaster);
                        _db.Entry(aOutletPOReturnMaster).State = EntityState.Modified;
                        _db.SaveChanges();

                        var invOutletPOReturnDetails = _db.InvOutletPOReturnDetails.Find(OutletPOReturnData.OutletPOReturnDetailsId);

                        invOutletPOReturnDetails.IsActive     = false;
                        invOutletPOReturnDetails.ModifiedDate = aDate;

                        _db.InvOutletPOReturnDetails.Add(invOutletPOReturnDetails);
                        _db.Entry(invOutletPOReturnDetails).State = EntityState.Modified;
                        _db.SaveChanges();

                        foreach (var aData in productList)
                        {
                            InvOutletPOReturnDetail aOutletPOReturnDetail = new InvOutletPOReturnDetail()
                            {
                                OutletPOReturnMasterId     = aOutletPOReturnMaster.OutletPOReturnMasterId,
                                OutletPOReturnDetailsId    = aData.OutletPOReturnDetailsId,
                                Original_OutletPODetailsId = aData.OutletPODetailsId,
                                ProductId       = aData.ProductId,
                                ProductQuantity = aData.ProductQuantity,
                                IsActive        = true,
                                CreatedDate     = aDate
                            };
                            _db.InvOutletPOReturnDetails.Add(aOutletPOReturnDetail);
                            _db.Entry(aOutletPOReturnDetail).State = EntityState.Modified;
                            _db.SaveChanges();
                        }
                        transaction.Commit();
                        return(_aModel.Respons(true, "Successfully  Outlet PO returned "));
                    }
                    _db.SaveChanges();
                    transaction.Commit();
                    return(_aModel.Respons(true, "Sorry Outlet PO returned failed"));
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return(_aModel.Respons(true, "Sorry Some Error Happned"));
                }
            }
        }
        public ResponseModel OutletPoReturnByMarterId(OutletPOReturnDetailsViewModel OutletPOReturnData, List <ProductOutletPOReturnVM> productList)
        {
            using (var transaction = _db.Database.BeginTransaction())
            {
                try
                {
                    if (OutletPOReturnData.OutletPOReturnMasterId > 0)
                    {
                        DateTime aDate = DateTime.Now;

                        var invOutletPOReturnMaster = _db.InvOutletPOReturnMasters.Find(OutletPOReturnData.OutletPOReturnMasterId);


                        InvOutletPOReturnMaster aOutletPOReturnMaster = new InvOutletPOReturnMaster()
                        {
                            OutletPOReturnMasterId = OutletPOReturnData.OutletPOReturnMasterId,
                            WarehouseId            = 1,
                            OutletId     = 1,
                            Status       = 0,
                            IsActive     = true,
                            CreatedDate  = aDate,
                            ModifiedDate = DateTime.Now,
                            Note         = "Return",
                            IsReturned   = 2,
                        };


                        _db.InvOutletPOReturnMasters.Attach(aOutletPOReturnMaster);
                        _db.Entry(aOutletPOReturnMaster).State = EntityState.Modified;
                        _db.SaveChanges();

                        foreach (var aData in productList)
                        {
                            var invPoInvoiceDetails = _db.InvOutletPOReturnDetails.Find(OutletPOReturnData.OutletPOReturnMasterId);
                            invPoInvoiceDetails.IsActive     = false;
                            invPoInvoiceDetails.ModifiedDate = aDate;
                            _db.InvOutletPOReturnDetails.Attach(invPoInvoiceDetails);
                            _db.Entry(invPoInvoiceDetails).State = EntityState.Modified;
                            _db.SaveChanges();

                            InvOutletPOReturnDetail aOutletPOReturnDetail = new InvOutletPOReturnDetail()
                            {
                                OutletPOReturnMasterId     = aOutletPOReturnMaster.OutletPOReturnMasterId,
                                OutletPOReturnDetailsId    = aData.OutletPOReturnDetailsId,
                                Original_OutletPODetailsId = aData.OutletPODetailsId,
                                ProductId       = aData.ProductId,
                                ProductQuantity = aData.ProductQuantity,
                                IsActive        = true,
                                IsReturned      = 2,
                                CreatedDate     = DateTime.Now
                            };
                            _db.InvOutletPOReturnDetails.Add(aOutletPOReturnDetail);
                            _db.Entry(aOutletPOReturnDetail).State = EntityState.Modified;
                            _db.SaveChanges();


                            InvOutletStock aOutletStock = new InvOutletStock()
                            {
                                ProductId           = aData.ProductId,
                                OutletId            = OutletPOReturnData.OutletId,
                                OutletStockQuantity = aData.ProductQuantity,
                                InOut       = 2,
                                Note        = "Returned",
                                IsActive    = true,
                                IsReturned  = 2,
                                CreatedDate = DateTime.Now
                            };
                            _db.InvOutletStocks.Add(aOutletStock);
                            _db.SaveChanges();

                            InvWarehouseStock aWarehouseStock = new InvWarehouseStock()
                            {
                                ProductId = aData.ProductId,
                                OutletId  = OutletPOReturnData.OutletId,
                                InOut     = 1,
                                Note      = "ReturnReceived",
                                WarehouseStockQuantity = aData.ProductQuantity,
                                IsActive    = true,
                                IsReceived  = true,
                                CreatedDate = DateTime.Now
                            };
                            _db.InvWarehouseStocks.Add(aWarehouseStock);
                            _db.SaveChanges();
                        }
                        transaction.Commit();
                        return(_aModel.Respons(true, "Successfully received  Outlet PO return"));
                    }
                    _db.SaveChanges();
                    transaction.Commit();
                    return(_aModel.Respons(true, "Sorry Outlet PO returned Failed"));
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return(_aModel.Respons(true, "Sorry Some Error Happned"));
                }
            }
        }