Esempio n. 1
0
        public async Task <List <TradezoneResponse> > InsertTradezone(List <TradezoneRequest> list, int brandId)
        {
            List <TradeZone> insertList = new List <TradeZone>();

            foreach (var item in list)
            {
                TradeZone insertItem = new TradeZone()
                {
                    Name         = item.Name,
                    GroupZoneId  = item.GroupzoneId,
                    Geom         = item.Geom,
                    WeightNumber = item.WeightNumber,
                };
                insertList.Add(insertItem);
            }
            await _unitOfWork.Repository <TradeZone>().InsertRangeAsync(insertList.AsQueryable());

            await _unitOfWork.CommitAsync();

            var result = insertList.Select(x => new TradezoneResponse {
                Id = x.Id, Geom = x.Geom, WeightNumber = x.WeightNumber
            }).ToList();

            return(result);
        }
        public async Task <TradeZoneVersionResponse> CreateTradeZoneVersion(PostTradeZoneVerison model, int brandId)
        {
            List <TradeZone> zones = new List <TradeZone>();

            try
            {
                var stores = await _unitOfWork.Repository <Store>().GetAll().Where(x => x.BrandId == brandId).Select(x => new { x.Id, x.Geom }).AsNoTracking().ToListAsync();

                stores = stores.Where(x => model.TradeZones.Any(c => x.Id == c.StoreId)).ToList();
                var insertVersion = new TradeZoneVersion()
                {
                    BrandId     = brandId,
                    DateFilter  = Convert.ToInt32(model.DateFilter, 2),
                    Description = model.Description,
                    Distance    = model.Distance,
                    TimeSlot    = model.TimeSlot,
                    Name        = model.Name,
                    CreateDate  = TimeZoneInfo.ConvertTime(DateTime.Now,
                                                           TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time"))
                };
                await _unitOfWork.Repository <TradeZoneVersion>().InsertAsync(insertVersion);

                await _unitOfWork.CommitAsync();

                var groupzoneId = model.TradeZones.Select(x => x.GroupzoneId).Distinct();
                var groupzone   = await _unitOfWork.Repository <GroupZone>().GetAll().Where(x => groupzoneId.Any(c => c == x.Id)).Select(x => new { x.Id, x.Geom }).ToListAsync();

                foreach (var item in model.TradeZones)
                {
                    var groupTradezoneArea = groupzone.Where(x => x.Id == item.GroupzoneId).Select(x => x.Geom.Area).SingleOrDefault();
                    var insertTradezone    = new TradeZone()
                    {
                        TradeZoneVersionId = insertVersion.Id,
                        Geom         = item.Geom,
                        Name         = item.Name,
                        GroupZoneId  = item.GroupzoneId,
                        WeightNumber = item.WeightNumber,
                        Coverage     = item.Geom.Area / groupTradezoneArea,
                    };

                    zones.Add(insertTradezone);
                }

                await _unitOfWork.Repository <TradeZone>().InsertRangeAsync(zones.AsQueryable());

                await _unitOfWork.CommitAsync();

                List <Data.Entity.StoreTradeZone> insertList = new List <Data.Entity.StoreTradeZone>();
                foreach (var item in stores)
                {
                    var tradezoneId = zones.Where(x => x.Geom.Contains(item.Geom)).Select(x => x.Id).FirstOrDefault();
                    Data.Entity.StoreTradeZone insertItem = new Data.Entity.StoreTradeZone()
                    {
                        StoreId     = item.Id,
                        TradeZoneId = tradezoneId
                    };
                    zones.Remove(zones.Where(x => x.Id == tradezoneId).SingleOrDefault());
                    insertList.Add(insertItem);
                }
                await _unitOfWork.Repository <Data.Entity.StoreTradeZone>().InsertRangeAsync(insertList.AsQueryable());

                await _unitOfWork.CommitAsync();

                return(new TradeZoneVersionResponse()
                {
                    Id = insertVersion.Id,
                    Name = insertVersion.Name,
                });
            }
            catch (Exception e)
            {
                throw new CrudException(HttpStatusCode.BadRequest, "Insert TradeZone Version Error!!!", e.InnerException?.Message);
            }
        }