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); } }