public IHttpActionResult InsertStockAdjustment(StockAdjustmentTransferModel data)
        {
            try
            {
                using (Restaurants context = new Restaurants())
                {
                    using (var dbContextTransaction = context.Database.BeginTransaction())
                    {
                        try
                        {
                            data.Master.ForEach(x =>
                            {
                                x.B_Sync   = true;
                                x.SyncDate = DateTime.Now;
                            });
                            data.ItemMoves.ForEach(x => x.B_Sync = true);
                            context.Stock_Adjst_MST.AddRange(data.Master);
                            context.Stock_Adjst_DTL.AddRange(data.Detail);
                            context.Item_Move.AddRange(data.ItemMoves);
                            context.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            dbContextTransaction.Rollback();
                            return(Ok(new AjaxResponse <object>()
                            {
                                Success = false, ErrorMessage = ex.GetLastException()
                            }));
                        }
                    }
                    context.Stock_Adjst_MST.AddRange(data.Master);
                    context.Stock_Adjst_DTL.AddRange(data.Detail);
                    context.Item_Move.AddRange(data.ItemMoves);
                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                return(Ok(new AjaxResponse <object>()
                {
                    Success = false, ErrorMessage = ex.GetLastException()
                }));
            }

            return(Ok(new AjaxResponse <object>()
            {
                Success = true, SuccessMessage = "Successfully"
            }));
        }
        public IHttpActionResult InsertMaintaince(MainatainceTransferModel data)
        {
            try
            {
                using (Restaurants context = new Restaurants())
                {
                    data.Master.ForEach(x =>
                    {
                        x.B_Sync   = true;
                        x.SyncDate = DateTime.Now;
                    });
                    context.MNTNC_REQ.AddRange(data.Master);
                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                return(Ok(new AjaxResponse <object>()
                {
                    Success = false, ErrorMessage = ex.GetLastException()
                }));
            }

            return(Ok(new AjaxResponse <object>()
            {
                Success = true, SuccessMessage = "Successfully"
            }));
        }
        public IHttpActionResult InsertUserIncome(UserIncomeModel data)
        {
            try
            {
                using (Restaurants context = new Restaurants())
                {
                    using (var dbContextTransaction = context.Database.BeginTransaction())
                    {
                        //try
                        //{
                        data.Master.ForEach(x =>
                        {
                            x.B_Sync   = true;
                            x.SyncDate = DateTime.Now;
                        });
                        context.User_Income.AddRange(data.Master);
                        context.SaveChanges();
                        dbContextTransaction.Commit();
                        //}
                        //catch (Exception ex)
                        //{
                        //    dbContextTransaction.Rollback();
                        //    return Ok(new AjaxResponse<object>() { Success = false, ErrorMessage = ex.GetLastException() });
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                var error = ex as SqlException;
                if (error != null && error.Number == 2627 &&
                    ex.GetLastException().Contains("Violation of PRIMARY KEY constraint"))
                {
                    DeleteDuplicateUserIncomes(data);
                }
                if (ex.GetLastException().Contains("Cannot insert duplicate key row in object"))
                {
                    DeleteDuplicateUserIncomes(data);
                }
                else
                {
                    return(Ok(new AjaxResponse <object>()
                    {
                        Success = false, ErrorMessage = ex.GetLastException()
                    }));
                }
            }

            return(Ok(new AjaxResponse <object>()
            {
                Success = true, SuccessMessage = "Successfully"
            }));
        }
        public IHttpActionResult InsertInsurances(InsuranceTransferModel data)
        {
            try
            {
                using (Restaurants context = new Restaurants())
                {
                    using (var dbContextTransaction = context.Database.BeginTransaction())
                    {
                        try
                        {
                            data.Master.ForEach(x =>
                            {
                                x.B_Sync   = true;
                                x.SyncDate = DateTime.Now;
                            });
                            context.Insurances.AddRange(data.Master);
                            context.Insurance_Bills_DTL.AddRange(data.Detail);
                            context.Insurances_Closed.AddRange(data.Closed);
                            context.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            dbContextTransaction.Rollback();
                            return(Ok(new AjaxResponse <object>()
                            {
                                Success = false, ErrorMessage = ex.GetLastException()
                            }));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(Ok(new AjaxResponse <object>()
                {
                    Success = false, ErrorMessage = ex.GetLastException()
                }));
            }

            return(Ok(new AjaxResponse <object>()
            {
                Success = true, SuccessMessage = "Successfully"
            }));
        }
        public IHttpActionResult InsertSpends(SpendsTransferModel data)
        {
            try
            {
                using (Restaurants context = new Restaurants())
                {
                    using (var dbContextTransaction = context.Database.BeginTransaction())
                    {
                        try
                        {
                            data.Master.ForEach(x =>
                            {
                                x.B_Sync   = true;
                                x.SyncDate = DateTime.Now;
                            });
                            context.Spends.AddRange(data.Master);
                            context.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            dbContextTransaction.Rollback();
                            return(Ok(new AjaxResponse <object>()
                            {
                                Success = false, ErrorMessage = ex.GetLastException()
                            }));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var error = ex as SqlException;
                if (error != null && error.Number == 2627 &&
                    ex.GetLastException().Contains("Violation of PRIMARY KEY constraint"))
                {
                    using (var tranasactionScope = new TransactionScope())
                    {
                        using (var context = new Restaurants())
                        {
                            var branch = data.Master.Select(x => x.Branch_No).FirstOrDefault();
                            var date   = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

                            var allEntities = context.Spends
                                              .Where(x => x.Branch_No == branch &&
                                                     DbFunctions.TruncateTime(x.SyncDate) >= DbFunctions.TruncateTime(date))
                                              .ToList();

                            var similarEntities = data.Master.Intersect(allEntities,
                                                                        new LambdaComparer <Spend>(
                                                                            (x, y) => x.Branch_No == y.Branch_No && x.Sp_No == y.Sp_No &&
                                                                            x.User_ID == y.User_ID)).ToList();
                            foreach (var entity in similarEntities)
                            {
                                data.Master.Remove(entity);
                            }
                            EFBatchOperation.For(context, context.Spends).InsertAll(data.Master);
                            tranasactionScope.Complete();
                        }
                    }
                }
                else
                {
                    return(Ok(new AjaxResponse <object>()
                    {
                        Success = false, ErrorMessage = ex.GetLastException()
                    }));
                }
            }

            return(Ok(new AjaxResponse <object>()
            {
                Success = true, SuccessMessage = "Successfully"
            }));
        }