示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }