public async void newWeek(Order order, TGDDContext _context, long yearId, long monthId, int Week)
        {
            long newWeekId = _context.WeekStatisticals.Max(w => w.Id) + 1;

            WeekStatistical weekStatistical = new WeekStatistical
            {
                Id        = newWeekId,
                MonthId   = monthId,
                YearId    = yearId,
                TotalWeek = order.Total,
                Week      = Week
            };

            //_context.SaveChanges();

            _context.WeekStatisticals.Add(weekStatistical);
            await _context.SaveChangesAsync();
        }
        public async Task <ActionResult <Order> > Excute()
        {
            AssigndataUtils AssigndataUtils = new AssigndataUtils();

            var _context = new TGDDContext();
            var order    = new Order();

            order = await AssigndataUtils.AssignOrder(OrderDTO, 0);

            // update stock, buying time
            {
                ProductsAutoUpdate productsAutoUpdate = new ProductsAutoUpdate();

                List <OrderDetail> orderDetails = order.OrderDetails.ToList();

                foreach (OrderDetail orderDetail in orderDetails)
                {
                    Product product = await _context.Products.FindAsync(orderDetail.ProductId);

                    product.BuyingTimes += orderDetail.Quantity;
                    product.Stock       -= orderDetail.Quantity;

                    _context.Entry(product).State = EntityState.Modified;
                }
                await _context.SaveChangesAsync();
            }


            //thống kê


            _context.Orders.Add(order);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                bool orderExist = _context.Orders.Any(o => o.Id == order.Id);
                if (orderExist)
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            {
                DateTime dateTime = order.Date.Value;

                int day  = dateTime.DayOfYear;
                int week = dateTime.DayOfYear / 7 - 1;
                if (week < 1)
                {
                    week = 1;
                }
                else if (week > 52)
                {
                    week = 52;
                }
                int month = dateTime.Month;
                int year  = dateTime.Year;

                YearStatistical yearStatisticals = await _context.YearStatisticals.FirstOrDefaultAsync(y => y.Year == year);

                if (yearStatisticals != null)
                {
                    yearStatisticals.TotalYear            += order.Total;
                    _context.Entry(yearStatisticals).State = EntityState.Modified;
                    await _context.SaveChangesAsync();


                    MonthStatistical monthStatistical = await _context.MonthStatisticals.FirstOrDefaultAsync(m => m.Month == month && m.YearId == yearStatisticals.Id);

                    if (monthStatistical != null)
                    {
                        monthStatistical.TotalMonth           += order.Total;
                        _context.Entry(monthStatistical).State = EntityState.Modified;
                        await _context.SaveChangesAsync();

                        WeekStatistical weekStatistical = await _context.WeekStatisticals.FirstOrDefaultAsync(w => w.Week == week && yearStatisticals.Id == w.YearId);

                        if (weekStatistical != null)
                        {
                            weekStatistical.TotalWeek            += order.Total;
                            _context.Entry(weekStatistical).State = EntityState.Modified;
                            await _context.SaveChangesAsync();

                            //DayStatistical dayStatistical = await _context.DayStatisticals.FirstOrDefaultAsync(d => d.Day == day && d.YearId == yearStatisticals.Id);
                        }
                        else
                        {
                            long MonthId = _context.MonthStatisticals.Max(m => m.Id) + 1;
                            long WeekId  = _context.WeekStatisticals.Max(w => w.Id) + 1;

                            newWeek(order, _context, yearStatisticals.Id, MonthId, week);
                            //newday(order, _context, yearStatisticals.Id, MonthId, WeekId, day);
                        }
                    }
                    else
                    {
                        long MonthId = _context.MonthStatisticals.Max(m => m.Id) + 1;
                        long WeekId  = _context.WeekStatisticals.Max(w => w.Id) + 1;


                        newMonth(order, _context, yearStatisticals.Id, month);
                        newWeek(order, _context, yearStatisticals.Id, MonthId, week);
                        //newday(order, _context, yearStatisticals.Id, MonthId, WeekId, day);
                    }
                }
                else
                {
                    long MonthId = _context.MonthStatisticals.Max(m => m.Id) + 1;
                    long WeekId  = _context.WeekStatisticals.Max(w => w.Id) + 1;

                    newYear(order, _context, year);
                    newMonth(order, _context, yearStatisticals.Id, month);
                    newWeek(order, _context, yearStatisticals.Id, MonthId, week);
                    //newday(order, _context, yearStatisticals.Id, MonthId, WeekId, day);
                }
            }

            return(CreatedAtAction("GetOrders", new { id = order.Id }, order));
        }