public async Task <IActionResult> UploadExManifestFile(int userId, FileForUploadDto fileDto, [FromQuery] ManifestFileUploadUserParams userParams) { var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); if (currentUserId == 0) { return(Unauthorized()); } ArrayList returnRows = new ArrayList(); IFormFile file = Request.Form.Files[0]; string folderName = "Upload"; string webRootPath = _hostingEnvironment.WebRootPath; string newPath = System.IO.Path.Combine(webRootPath, folderName); if (!Directory.Exists(newPath)) { Directory.CreateDirectory(newPath); } if (file.Length > 0) { var uploadToAdd = new Upload(); uploadToAdd.FileName = fileDto.File.FileName; uploadToAdd.DateUploaded = DateTime.Now; uploadToAdd.UserId = currentUserId; uploadToAdd.GuestsAdded = 0; int uploadId = await _fileService.AddUpload(uploadToAdd); string sFileExtension = System.IO.Path.GetExtension(file.FileName).ToLower(); string fullPath = System.IO.Path.Combine(newPath, file.FileName); using (var stream = new FileStream(fullPath, FileMode.Create)) { file.CopyTo(stream); } var sheets = _fileReader.GetExcelSheets(fullPath); foreach (var sheet in sheets) { var headers = _fileReader.GetExcelSheetHeaders(sheet, 2); if (!headers.Contains("PERSONAL ID")) { continue; } for (int i = (sheet.FirstRowNum + 3); i <= sheet.LastRowNum; i++) //Read Excel File { IRow row = sheet.GetRow(i); if (row == null || row.Cells.All(d => d.CellType == CellType.Blank) || row.GetCell(0).StringCellValue.IndexOf("For Official Use", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } var rowForUpload = await _fileService.ParseExManifestExcelRow(row, headers, uploadId); if (rowForUpload == null) { continue; } int.TryParse(Regex.Replace(sheet.SheetName, @"[^\d]", ""), out int chalkNumber); if (chalkNumber != 0) { rowForUpload.Chalk = chalkNumber; } //stay buildingId is nullable if (rowForUpload.Gender == null || rowForUpload.FirstName == null || rowForUpload.LastName == null || rowForUpload.UnitId == 0) { returnRows.Add(rowForUpload); } else { rowForUpload = await _fileService.AutoRoomDataRow(rowForUpload, userParams); await _fileService.SaveFileRowAsync(rowForUpload); uploadToAdd.GuestsAdded += 1; } } } await _fileService.SaveUpload(uploadToAdd); if (System.IO.File.Exists(fullPath)) { System.IO.File.Delete(fullPath); } } return(Ok(returnRows)); }
public async Task <IActionResult> ExManifestDataRows(int userId, [FromBody] FileRowForUploadDto[] fileRows, [FromQuery] ManifestFileUploadUserParams userParams) { var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); if (currentUserId == 0) { return(Unauthorized()); } ArrayList returnRows = new ArrayList(); int uploadKickbacksId = fileRows[0].UploadId ?? default(int); var uploadKickbacks = await _fileService.GetUploadById(uploadKickbacksId); foreach (FileRowForUploadDto fileRow in fileRows) { //TODOTEST //await _fileService.SaveNewGuestFileRowAsync (fileRow, userParams); if (fileRow.Gender == null || fileRow.UnitId == 0 || fileRow.FirstName == null || fileRow.LastName == null) { returnRows.Add(fileRow); } else { //TODO add unit parse var fileRowForUpload = await _fileService.AutoRoomDataRow(fileRow, userParams); await _fileService.SaveFileRowAsync(fileRowForUpload); uploadKickbacks.GuestsAdded += 1; } } await _fileService.SaveUpload(uploadKickbacks); return(Ok(returnRows)); }
public async Task <FileRowForUploadDto> AutoRoomDataRow(FileRowForUploadDto fileRow, ManifestFileUploadUserParams userParams) { Room room = null; // Expression<Func<Building, bool>> queryFilter = null; // if (userParams.BuildingId != null) { // queryFilter = b => b.Id == userParams.BuildingId; // } // if (userParams.BuildingTypeId != null) { // Func<Room, int> capacityType = null; // queryFilter = b => b.BuildingCategoryId == userParams.BuildingTypeId; // var buildingType = await _buildingTypeRepo.GetByID (userParams.BuildingTypeId); // if (buildingType.InSurge) { // capacityType = r => r.SurgeCapacity; // } { // capacityType = r => r.Capacity; // } // var building = _buildingRepo.GetFirstOrDefault ( // b => // b.BuildingCategoryId == userParams.BuildingTypeId && // b.Rooms.Select ( // capacityType).Sum () > // b.Rooms.Select ( // r => r.Stays.Count ( // s => s.CheckedOut == false && // s.CheckedIn == true && // !(DateTime.Compare (s.CheckInDate, DateTime.Today) > 0))).Count () && // b.Rooms.Select ( // r => r.Stays.Count ( // s => s.CheckedOut == false && // s.CheckedIn == true && // !(DateTime.Compare (s.CheckInDate, DateTime.Today) > 0) && // !s.Guest.Gender.Equals (rowForUpload.Gender))).Count () == 0, // new Expression<Func<Building, object>>[] { // b => b.Rooms // }, // b => b.OrderBy (x => x.BuildingCategoryId).ThenBy (x => x.Number) // ); // room = building.Result.Rooms.FirstOrDefault ( // r => (r.Stays.Count ( // s => s.CheckedOut == false && // s.CheckedIn == true && // !(DateTime.Compare (s.CheckInDate, DateTime.Today) > 0)) < capacityType.Invoke (r)) && // r.Stays.Count ( // s => s.CheckedOut == false && // s.CheckedIn == true && // !(DateTime.Compare (s.CheckInDate, DateTime.Today) > 0) && // !s.Guest.Gender.Equals (rowForUpload.Gender)) == 0 // ); // } else { foreach (var buildingType in await _buildingTypeRepo.GetAsync()) { Building building; string capacityType; if (buildingType.InSurge) { capacityType = "SurgeCapacity"; } else { capacityType = "Capacity"; } building = (await _buildingRepo.GetBuildings(null, null, b => b.BuildingCategoryId == buildingType.Id && b.Rooms.Where( r => r.Stays.Where( s => s.CheckedOut == false && s.CheckedIn == true && !(DateTime.Compare(s.CheckInDate.Date, DateTime.Today) > 0) ).Count() < ((int)r.GetType().GetProperty(capacityType).GetValue(r))).Count() != 0 && b.Rooms.Where( r => r.Stays.Where( s => s.CheckedOut == false && s.CheckedIn == true && !(DateTime.Compare(s.CheckInDate.Date, DateTime.Today) > 0) && !s.Guest.Gender.Equals(fileRow.Gender)).Count() == 0).Count() != 0, true, b => b.OrderBy(x => x.BuildingCategoryId).ThenBy(x => x.Number))).FirstOrDefault(); if (building == null) { continue; } room = building.Rooms.FirstOrDefault( r => (r.Stays.Where( s => s.CheckedOut == false && s.CheckedIn == true && !(DateTime.Compare(s.CheckInDate.Date, DateTime.Today) > 0) ).Count() < ((int)r.GetType().GetProperty(capacityType).GetValue(r))) && r.Stays.Where( s => s.CheckedOut == false && s.CheckedIn == true && !(DateTime.Compare(s.CheckInDate.Date, DateTime.Today) > 0) && !s.Guest.Gender.Equals(fileRow.Gender)).Count() == 0 ); if (room != null) { break; } } fileRow.RoomId = room.Id; fileRow.BuildingId = room.BuildingId; return(fileRow); }