//[HttpGet]
        //public ActionResult GetAllSalesReplacementDetails(int SlsReplacementId)
        //{
        //    //DatabaseFactory dbfactory = new DatabaseFactory();
        //    //var list = new SalesOrderService(new SalesOrderRepository(dbfactory),
        //    //    new SalesOrderDetailRepository(dbfactory),
        //    //    new SalesOrderApprovalRepository(dbfactory),
        //    //    new UnitOfWork(dbfactory)).GetAll();
        //    var list = _SalesReplacementDetailService.GetAll();
        //    if(list != null && list.Count() > 0)
        //    {
        //        list = list.Where(i => i.SlsReplacementId == SlsReplacementId).ToList();
        //    }
        //    return Json(list, JsonRequestBehavior.AllowGet);
        //}
        public ActionResult Save(SlsReplacementViewModel slsReplacement)
        {
            int companyId = Convert.ToInt32(Session["companyId"]);
            int userId = Convert.ToInt32(Session["userId"]);
            var dbfactory = new DatabaseFactory();

            Operation objOperation = new Operation { Success = false };
            if (ModelState.IsValid)
            {
                if (slsReplacement.Id == 0)
                {
                    if ((bool)Session["Add"])
                    {
                        slsReplacement.SecCompanyId = companyId;
                        slsReplacement.CreatedBy = userId;
                        slsReplacement.CreatedDate = DateTime.Now;
                        //invDamage.InvDamageDetails = null;
                        objOperation = _SalesReplacementService.Save(slsReplacement);

                        //int SalesReplacementId = Convert.ToInt32(objOperation.OperationId);
                        //List<SlsReplacementDetail> slsReplacementDetail = slsReplacement.SlsReplacementDetails.ToList();
                        ////slsReplacement.SalesOrderDetails;
                        //foreach (var item in slsReplacementDetail)
                        //{
                        //    SlsReplacementDetail objSlsReplacementDetail = _SalesReplacementDetailService.GetById(item.Id);
                        //    if (objSlsReplacementDetail != null)
                        //    {
                        //        objSlsReplacementDetail.SlsReplacementId= slsReplacement.Id;
                        //        objSlsReplacementDetail.SlsProductId = item.SlsProductId;
                        //        objSlsReplacementDetail.Quantity = item.Quantity;
                        //        objSlsReplacementDetail.Reason = item.Reason;
                        //        objSlsReplacementDetail.SlsUnitId = item.SlsUnitId;
                        //        _SalesReplacementDetailService.Update(objSlsReplacementDetail);
                        //    }
                        //    else
                        //    {
                        //        objSlsReplacementDetail = new SlsReplacementDetail();
                        //        objSlsReplacementDetail.SlsReplacementId = SalesReplacementId;
                        //        objSlsReplacementDetail.SlsProductId = item.SlsProductId;
                        //        objSlsReplacementDetail.Quantity = item.Quantity;
                        //        objSlsReplacementDetail.Reason = item.Reason;
                        //        objSlsReplacementDetail.SlsUnitId = item.SlsUnitId;
                        //        _SalesReplacementDetailService.Save(objSlsReplacementDetail);
                        //    }

                        //}

                    }

                }
                else
                {
                    if ((bool)Session["Edit"])
                    {
                        slsReplacement.SecCompanyId = companyId;
                        slsReplacement.ModifiedBy = userId;
                        slsReplacement.ModifiedDate = DateTime.Now;
                        objOperation = _SalesReplacementService.Update(slsReplacement);

                        List<SlsReplacementDetail> slsReplacementDetail = new List<SlsReplacementDetail>();
                        if (slsReplacement.SlsReplacementDetailVMs != null && slsReplacement.SlsReplacementDetailVMs.Count() > 0)
                        {
                            foreach (var detailVM in slsReplacement.SlsReplacementDetailVMs)
                            {
                                //make VMDetail from Detail model
                                var detail = SlsReplacementDetailMapVMToModel.MapToSlsReplacementDetail(detailVM);
                                slsReplacementDetail.Add(detail);
                            }
                        }

                        //slsReplacement.SalesOrderDetails;
                        foreach (var item in slsReplacementDetail)
                        {
                            SlsReplacementDetail objSlsReplacementDetail = _SalesReplacementDetailService.GetById(item.Id);
                            if (objSlsReplacementDetail != null)
                            {
                                objSlsReplacementDetail.SlsReplacementId = slsReplacement.Id;
                                objSlsReplacementDetail.SlsProductId = item.SlsProductId;
                                objSlsReplacementDetail.AdjustedAmount= item.AdjustedAmount;
                                objSlsReplacementDetail.Quantity = item.Quantity;
                                objSlsReplacementDetail.Reason = item.Reason;
                                objSlsReplacementDetail.SlsUnitId = item.SlsUnitId;
                                _SalesReplacementDetailService.Update(objSlsReplacementDetail);
                            }
                            else
                            {
                                objSlsReplacementDetail = new SlsReplacementDetail();
                                objSlsReplacementDetail.SlsReplacementId = slsReplacement.Id;
                                objSlsReplacementDetail.SlsProductId = item.SlsProductId;
                                objSlsReplacementDetail.AdjustedAmount = item.AdjustedAmount;
                                objSlsReplacementDetail.Quantity = item.Quantity;
                                objSlsReplacementDetail.Reason = item.Reason;
                                objSlsReplacementDetail.SlsUnitId = item.SlsUnitId;
                                _SalesReplacementDetailService.Save(objSlsReplacementDetail);
                            }

                        }

                    }

                }

                //objOperation = _IDamageService.Commit();
            }

            return Json(objOperation, JsonRequestBehavior.DenyGet);
        }
        public Operation Update(SlsReplacementViewModel objSlsReplacementVM)
        {
            SlsReplacement objSlsReplacement = SlsReplacementMapVMToModel.MapToSlsReplacement(objSlsReplacementVM);
               Operation objOperation = new Operation { Success = true, OperationId = objSlsReplacement.Id };
               _salesReplacementRepository.Update(objSlsReplacement);

               //Detail section.
               //if (objSlsReplacement.SlsReplacementDetails == null)
               //{
               //    objSlsReplacement.SlsReplacementDetails = new List<SlsReplacementDetail>();
               //}
               //if (objSlsReplacementVM.SlsReplacementDetailVMs != null && objSlsReplacementVM.SlsReplacementDetailVMs.Count() > 0)
               //{
               //    foreach (var detailVM in objSlsReplacementVM.SlsReplacementDetailVMs)
               //    {
               //        //make VMDetail from Detail model
               //        var detail = SlsReplacementDetailMapVMToModel.MapToSlsReplacementDetail(detailVM);
               //        objSlsReplacement.SlsReplacementDetails.Add(detail);
               //    }
               //}

               //if (objSlsReplacement.SlsReplacementDetails != null && objSlsReplacement.SlsReplacementDetails.Count() > 0)
               //{
               //    foreach (var detail in objSlsReplacement.SlsReplacementDetails)
               //    {
               //        new SalesReplacementDetailRepository(new DatabaseFactory()).Update(detail);
               //    }
               //}

               try
               {
               _UnitOfWork.Commit();
               }
               catch (Exception ex)
               {
               objOperation.Success = false;
               }
               return objOperation;
        }
        public static SlsReplacement MapToSlsReplacement(SlsReplacementViewModel obj)
        {
            SlsReplacement model = new SlsReplacement();

               model.Id = obj.Id;

               model.RefNo = obj.RefNo;
               model.Date = obj.Date;
               model.SlsSalesOrderId = obj.SlsSalesOrderId;
               model.SecCompanyId = obj.SecCompanyId;

               model.Remarks = obj.Remarks;

               model.CreatedBy = obj.CreatedBy;
               model.CreatedDate = obj.CreatedDate;
               model.ModifiedBy = obj.ModifiedBy;
               model.ModifiedDate = obj.ModifiedDate;

               return model;
        }
        public Operation Save(SlsReplacementViewModel objSlsReplacementVM)
        {
            SlsReplacement objSlsReplacement = SlsReplacementMapVMToModel.MapToSlsReplacement(objSlsReplacementVM);
               Operation objOperation = new Operation { Success = true };

               int Id = _salesReplacementRepository.AddEntity(objSlsReplacement);
               objOperation.OperationId = Id;

               //Detail section.
               if (objSlsReplacement.SlsReplacementDetails == null)
               {
               objSlsReplacement.SlsReplacementDetails = new List<SlsReplacementDetail>();
               }
               if (objSlsReplacementVM.SlsReplacementDetailVMs != null && objSlsReplacementVM.SlsReplacementDetailVMs.Count() > 0)
               {
               foreach (var detailVM in objSlsReplacementVM.SlsReplacementDetailVMs)
               {
                   //make VMDetail from Detail model
                   var detail = SlsReplacementDetailMapVMToModel.MapToSlsReplacementDetail(detailVM);
                   objSlsReplacement.SlsReplacementDetails.Add(detail);
               }
               }

               if (objSlsReplacement.SlsReplacementDetails != null && objSlsReplacement.SlsReplacementDetails.Count() > 0)
               {
               new SalesReplacementDetailRepository(new DatabaseFactory()).AddEntityList(objSlsReplacement.SlsReplacementDetails.ToList());
               }

               try
               {
               _UnitOfWork.Commit();
               }
               catch (Exception ex)
               {
               objOperation.Success = false;
               }

               return objOperation;
        }