Пример #1
0
        private async Task ParseDlsRoom(string roomNumber, FileRowForUploadDto rowForUpload)
        {
            var room = await _roomRepo.GetFirstOrDefault(
                r => r.RoomNumber.Equals (roomNumber, StringComparison.CurrentCultureIgnoreCase) &&
                r.Building.BuildingCategory.Type.Equals("Lodging"),
                new Expression <Func <Room, object> >[] { r => r.Building });

            if (room != null)
            {
                rowForUpload.RoomId         = room.Id;
                rowForUpload.RoomNumber     = room.RoomNumber;
                rowForUpload.BuildingId     = room.BuildingId;
                rowForUpload.BuildingNumber = room.Building.Number;
            }
            // return rowForUpload;
        }
Пример #2
0
        public async Task <FileRowForUploadDto> ParseDlsReportRow(string dataRow, int uploadId = 0)
        {
            var rowForUpload = new FileRowForUploadDto();

            if (!Regex.Match(dataRow, @"^\d").Success)
            {
                return(null);
            }

            string[] stayData = dataRow.Split(" ");

            await ParseDlsRoom(stayData[0], rowForUpload);

            rowForUpload.LastName = stayData[1];
            await ParseDlsRank(rowForUpload, stayData);

            //removes tailing ',' from lastname
            rowForUpload.LastName = rowForUpload.LastName.Remove(stayData[1].Length - 1).ToUpper();

            int firstnameIndex = ParseDlsFirstName(rowForUpload, stayData);

            //logic to find checkin and out date of row
            for (int j = firstnameIndex; j < stayData.Length; j++)
            {
                if (DateTime.TryParseExact(
                        stayData[j],
                        "MM/dd/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out DateTime checkInDate))
                {
                    //TODO account for the open column
                    rowForUpload.CheckedIn    = true;
                    rowForUpload.CheckInDate  = checkInDate;
                    rowForUpload.CheckOutDate = DateTime.Parse(stayData[j + 1]);
                    break;
                }
            }

            if (uploadId != 0)
            {
                rowForUpload.UploadId = uploadId;
            }

            return(rowForUpload);
        }
Пример #3
0
        private int ParseDlsFirstName(FileRowForUploadDto rowForUpload, string[] stayData)
        {
            int firstnameIndex = 0;

            //Indices of the data are not static, they vary depending on the data included
            //if index was not rank, check if followinging index is MI or account number
            //meaning the rank was not include. The else means that the rank was included but was not found in DB
            if (rowForUpload.RankId == null && (stayData[3].Length == 1 || Regex.Match(stayData[3], @"^\d").Success))
            {
                rowForUpload.FirstName = stayData[2].ToUpper();
                firstnameIndex         = 2;
            }
            else
            {
                rowForUpload.FirstName = stayData[3].ToUpper();
                firstnameIndex         = 3;
            }

            return(firstnameIndex);
        }
Пример #4
0
        public async Task SaveFileRowAsync(FileRowForUploadDto rowForUpload)
        {
            //TODO add unit parse
            var guest = new Guest();
            var stay  = new Stay();

            guest = _mapper.Map <Guest> (rowForUpload);
            stay  = _mapper.Map <Stay> (rowForUpload);

            if ((guest.Gender == null) || (guest.Gender == ""))
            {
                guest.Gender = "Male";
            }

            if (guest.UnitId == 0)
            {
                guest.UnitId = null;
            }

            if (guest.RankId == 0)
            {
                guest.RankId = null;
            }

            stay.CheckedIn   = true;
            stay.DateCreated = DateTime.Now;
            if (DateTime.Compare(stay.CheckInDate, DateTime.MinValue) == 0)
            {
                stay.CheckInDate = DateTime.Now;
            }
            await _guestRepo.Insert(guest);

            await _guestRepo.SaveAsync();

            stay.GuestId = guest.Id;
            await _stayRepo.Insert(stay);

            await _stayRepo.SaveAsync();
        }
Пример #5
0
        public async Task <FileRowForUploadDto> ParseDataRow(FileRowForUploadDto fileRow)
        {
            await ParseBuilding(fileRow.BuildingNumber, fileRow);

            if (fileRow.BuildingId != 0)
            {
                var roomResult = await _roomRepo.GetFirstOrDefault(r => r.RoomNumber == fileRow.RoomNumber &&
                                                                   r.BuildingId == fileRow.BuildingId
                                                                   );

                fileRow.RoomId = roomResult != null ? roomResult.Id : 0;
            }

            if (fileRow.UnitName != null)
            {
                var unitResult = GetRowUnit(fileRow.UnitName);
                fileRow.UnitId   = unitResult.Id;
                fileRow.UnitName = unitResult.Name;
            }

            return(fileRow);
        }
Пример #6
0
        private async Task ParseDlsRank(FileRowForUploadDto rowForUpload, string[] stayData)
        {
            Rank rank;

            // accounts to spaced (two) last names
            // in file, last name is always followed by a comma
            if (rowForUpload.LastName.EndsWith(','))
            {
                var retrievedRank = await _rankRepo.GetFirstOrDefault(r => r.RankName.Equals(stayData[2]));

                rank = retrievedRank;
            }
            else
            {
                var retrievedRank = await _rankRepo.GetFirstOrDefault(r => r.RankName.Equals(stayData[3]));

                rank = retrievedRank;
            }

            if (rank != null)
            {
                rowForUpload.RankId = rank.Id;
            }
        }
Пример #7
0
 private async Task ParseBuilding(int rowBldgNum, FileRowForUploadDto rowForUpload)
 {
     rowForUpload.BuildingNumber = rowBldgNum;
     rowForUpload.BuildingId     = (await _buildingRepo.GetFirstOrDefault(b => b.Number == rowForUpload.BuildingNumber))?.Id ?? 0;
 }
Пример #8
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);
        }
Пример #9
0
        public async Task <FileRowForUploadDto> ParseExManifestExcelRow(IRow row, ArrayList headers, int uploadId = 0)
        {
            var rowForUpload = new FileRowForUploadDto();

            for (int j = row.FirstCellNum; j < headers.Count; j++)
            {
                if (row.GetCell(j) == null)
                {
                    continue;
                }

                if (headers[j].ToString().Equals("ATTACHED PAS", StringComparison.OrdinalIgnoreCase))
                {
                    var yup  = row.GetCell(j).ToString().Trim();
                    var unit = await GetRowUnitAbbreviation(yup);

                    if (unit != null)
                    {
                        rowForUpload.UnitId   = unit.Id;
                        rowForUpload.UnitName = unit.Name;
                    }
                }

                if (headers[j].ToString().Equals("NAME", StringComparison.OrdinalIgnoreCase))
                {
                    var name       = row.GetCell(j).ToString().Trim();
                    var commaIndex = name.IndexOf(',');
                    rowForUpload.LastName = name.Substring(0, commaIndex);
                    var endOfFirstName = (name.IndexOf(' ', commaIndex + 2) == -1) ? name.Length : name.IndexOf(' ', commaIndex + 2);
                    rowForUpload.FirstName = name.Substring((commaIndex + 2), (endOfFirstName - (commaIndex + 2)));
                }

                if ((headers[j].ToString().Equals("Grade", StringComparison.OrdinalIgnoreCase)) || (headers[j].ToString().Equals("Rank", StringComparison.OrdinalIgnoreCase)))
                {
                    var strRank = _rankConverter.Standardize(row.GetCell(j).ToString().Trim());
                    var rank    = await _rankRepo.GetFirstOrDefault(r => r.RankName.Equals(strRank, StringComparison.OrdinalIgnoreCase));

                    rowForUpload.RankId   = rank?.Id;
                    rowForUpload.RankName = rank?.RankName;
                }

                if (headers[j].ToString().Equals("Service", StringComparison.OrdinalIgnoreCase))
                {
                    var strService = _serviceParser.StandardizeString(row.GetCell(j).ToString().Trim());
                    var service    = await _serviceRepo.GetFirstOrDefault(s => s.ServiceName.Equals(strService, StringComparison.OrdinalIgnoreCase));

                    rowForUpload.ServiceId   = service?.Id;
                    rowForUpload.ServiceName = service?.ServiceName;
                }

                if ((headers[j].ToString().Equals("Gender", StringComparison.OrdinalIgnoreCase)) || (headers[j].ToString().Equals("Sex", StringComparison.OrdinalIgnoreCase)))
                {
                    var gender = row.GetCell(j).ToString().Trim();

                    if (gender.Equals("M", StringComparison.OrdinalIgnoreCase))
                    {
                        gender = "Male";
                    }

                    if (gender.Equals("F", StringComparison.OrdinalIgnoreCase))
                    {
                        gender = "Female";
                    }

                    rowForUpload.Gender = gender;

                    //rowForUpload.Gender = (gender.First().ToString().ToUpper() + gender.Substring(1));
                }
            }

            if (uploadId != 0)
            {
                rowForUpload.UploadId = uploadId;
            }
            return(rowForUpload);
        }
Пример #10
0
        public async Task <FileRowForUploadDto> ParseUnaccompaniedExcelRow(IRow row, ArrayList headers, int uploadId = 0)
        {
            var rowForUpload = new FileRowForUploadDto();

            for (int j = row.FirstCellNum; j < headers.Count; j++)
            {
                if (row.GetCell(j) == null)
                {
                    continue;
                }

                if (headers[j].Equals("LAST NAME"))
                {
                    rowForUpload.LastName = row.GetCell(j).ToString();
                }

                if (headers[j].Equals("FIRST NAME"))
                {
                    rowForUpload.FirstName = row.GetCell(j).ToString();
                }

                if (headers[j].Equals("BLDG") && rowForUpload.BuildingId == 0)
                {
                    int.TryParse(row.GetCell(j).ToString(), out int rowBldgNum);
                    await ParseBuilding(rowBldgNum, rowForUpload);
                }

                if (headers[j].Equals("ROOM"))
                {
                    rowForUpload.RoomNumber = row.GetCell(j).ToString();
                    if (rowForUpload.BuildingId == 0)
                    {
                        var bldgIndex = headers.IndexOf("BLDG");

                        if (bldgIndex == -1)
                        {
                            continue;
                        }

                        int.TryParse(row.GetCell(bldgIndex).ToString(), out int rowBldgNum);
                        await ParseBuilding(rowBldgNum, rowForUpload);
                    }

                    if (rowForUpload.BuildingId != 0)
                    {
                        rowForUpload.RoomId = (await _roomRepo.GetFirstOrDefault(
                                                   r => r.RoomNumber == rowForUpload.RoomNumber &&
                                                   r.BuildingId == rowForUpload.BuildingId
                                                   ))?.Id ?? 0;
                    }
                }

                if (headers[j].Equals("UNIT NAME"))
                {
                    var unit = GetRowUnit(row.GetCell(j).ToString());
                    if (unit != null)
                    {
                        rowForUpload.UnitId   = unit.Id;
                        rowForUpload.UnitName = unit.Name;
                    }
                }

                if ((headers[j].ToString().Equals("Gender", StringComparison.OrdinalIgnoreCase)) || (headers[j].ToString().Equals("Sex", StringComparison.OrdinalIgnoreCase)))
                {
                    var gender = row.GetCell(j).ToString().Trim();

                    if (gender.Equals("M", StringComparison.OrdinalIgnoreCase))
                    {
                        gender = "Male";
                    }

                    if (gender.Equals("F", StringComparison.OrdinalIgnoreCase))
                    {
                        gender = "Female";
                    }

                    rowForUpload.Gender = gender;

                    //rowForUpload.Gender = (gender.First().ToString().ToUpper() + gender.Substring(1));
                }

                if (uploadId != 0)
                {
                    rowForUpload.UploadId = uploadId;
                }
            }
            return(rowForUpload);
        }