public Task AddCreationEvent(int accommodationId, AccommodationChangeEventSources source, Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReason = default) { var creationLog = AccommodationChangeLogConverter.GetCreationChangeLog(accommodationId, source, supplierAccommodationCodes, accommodation, isActive, deactivationReason); return(AddAccommodationChangeLog(creationLog)); }
public static SlimAccommodation ConvertToSlim(int htId, int htCountryId, int?htLocalityId, int?htLocalityZoneId, MultilingualAccommodation accommodation, string language) { var name = accommodation.Name.GetValueOrDefault(language); var address = accommodation.Location.Address.GetValueOrDefault(language); var localityName = accommodation.Location.Locality?.GetValueOrDefault(language); var countryName = accommodation.Location.Country.GetValueOrDefault(language); var localityZoneName = accommodation.Location.LocalityZone?.GetValueOrDefault(language); return(new SlimAccommodation( htId: HtId.Create(MapperLocationTypes.Accommodation, htId), location: new SlimLocationInfo( address: address, country: countryName, countryCode: accommodation.Location.CountryCode, locality: localityName, localityZone: localityZoneName, coordinates: new GeoPoint(accommodation.Location.Coordinates.Longitude, accommodation.Location.Coordinates.Latitude) ), name: name, photo: GetPhotos(accommodation.Photos).FirstOrDefault(), rating: GetRating(accommodation.Rating), propertyType: GetPropertyType(accommodation.Type) )); }
public static AccommodationChangeLog GetDataCorrectionChangeLog(int accommodationId, AccommodationChangeEventSources eventSource, MultilingualAccommodation accommodation) { var dataCorrectionEventData = new DataCorrectionEventData(accommodation); return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.DataCorrection, dataCorrectionEventData)); }
public static Accommodation Convert(int htId, int htCountryId, int?htLocalityId, int?htLocalityZoneId, MultilingualAccommodation accommodation, string language, Dictionary <string, string> supplierAccommodationCodes, DateTimeOffset modified) { var name = accommodation.Name.GetValueOrDefault(language); var accommodationAmenities = accommodation.AccommodationAmenities.GetValueOrDefault(language); var additionalInfo = accommodation.AdditionalInfo.GetValueOrDefault(language); var category = accommodation.Category.GetValueOrDefault(language); var address = accommodation.Location.Address.GetValueOrDefault(language); var localityName = accommodation.Location.Locality?.GetValueOrDefault(language); var countryName = accommodation.Location.Country.GetValueOrDefault(language); var localityZoneName = accommodation.Location.LocalityZone?.GetValueOrDefault(language); var textualDescriptions = new List <TextualDescription>(); var countryHtId = HtId.Create(MapperLocationTypes.Country, htCountryId); var localityHtId = htLocalityId is not null ? HtId.Create(MapperLocationTypes.Locality, htLocalityId.Value) : string.Empty; var localityZoneHtId = htLocalityZoneId is not null ? HtId.Create(MapperLocationTypes.LocalityZone, htLocalityZoneId.Value) : string.Empty; var suppliersInfo = supplierAccommodationCodes.Select(p => new SupplierInfo(p.Key, p.Value)).ToList(); foreach (var descriptions in accommodation.TextualDescriptions) { var description = descriptions.Description.GetValueOrDefault(language); textualDescriptions.Add(new TextualDescription(GetTextualDescriptionType(descriptions.Type), description)); } return(new Accommodation( htId: HtId.Create(MapperLocationTypes.Accommodation, htId), name: name, accommodationAmenities: accommodationAmenities, additionalInfo: additionalInfo, category: category, contacts: GetContacts(accommodation.Contacts), location: new LocationInfo( countryCode: accommodation.Location.CountryCode, countryHtId: countryHtId, country: countryName, localityHtId: localityHtId, locality: localityName, localityZoneHtId: localityZoneHtId, localityZone: localityZoneName, coordinates: new GeoPoint(accommodation.Location.Coordinates.Longitude, accommodation.Location.Coordinates.Latitude), address: address, locationDescriptionCode: GetLocationDescriptionCode(accommodation.Location.LocationDescriptionCode), pointsOfInterests: GetPoiInfos(accommodation.Location.PointsOfInterests), isHistoricalBuilding: accommodation.Location.IsHistoricalBuilding ), photos: GetPhotos(accommodation.Photos), rating: GetRating(accommodation.Rating), schedule: GetScheduleInfo(accommodation.Schedule), textualDescriptions: textualDescriptions, type: GetPropertyType(accommodation.Type), suppliers: suppliersInfo, modified: modified.DateTime )); }
public void CollectCreationEvent(int accommodationId, AccommodationChangeEventSources source, Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReasons = default) { var creationLog = AccommodationChangeLogConverter.GetCreationChangeLog(accommodationId, source, supplierAccommodationCodes, accommodation, isActive, deactivationReasons); AccommodationsChangeLogs.Add(creationLog); }
public CreationEventData(Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReason = default) { SupplierAccommodationCodes = supplierAccommodationCodes; Accommodation = accommodation; IsActive = isActive; DeactivationReason = deactivationReason; }
private MultilingualLocationInfo MergeLocationInfo(List <string> suppliersPriority, Dictionary <string, MultilingualAccommodation> supplierAccommodationDetails, MultilingualAccommodation accommodationWithManualCorrection, MultiLanguage <string> country, MultiLanguage <string> locality, MultiLanguage <string>?localityZone) { var address = MergeMultilingualData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Location.Address) !, accommodationWithManualCorrection.Location.Address, string.IsNullOrEmpty); var coordinates = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Location.Coordinates), accommodationWithManualCorrection.Location.Coordinates, point => point == default); var pointOfInterests = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Location.PointsOfInterests), accommodationWithManualCorrection.Location.PointsOfInterests, poi => poi == null ! || !poi.Any()); var locationDescriptionCode = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary( d => d.Key, d => d.Value.Location.LocationDescriptionCode), accommodationWithManualCorrection.Location.LocationDescriptionCode, c => c == EdoContracts.Accommodations.Enums.LocationDescriptionCodes.Unspecified); // CountryCode must be the same, but for understandability merging too var countryCode = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Location.CountryCode), accommodationWithManualCorrection.Location.CountryCode, string.IsNullOrEmpty); return(new MultilingualLocationInfo( address: address, country: country !, locality: locality, localityZone: localityZone, coordinates: coordinates, locationDescriptionCode: locationDescriptionCode, pointsOfInterests: pointOfInterests, countryCode: countryCode, supplierLocalityCode: string.Empty, supplierLocalityZoneCode: string.Empty)); }
public static bool IsEmpty(this MultilingualAccommodation accommodation) { return(string.IsNullOrEmpty(accommodation.SupplierCode) && (accommodation.Name == null ! || !accommodation.Name.GetAll().Any()) && (accommodation.Category == null ! || !accommodation.Category.GetAll().Any()) && accommodation.Contacts.AreContactsEmpty() && accommodation.Location.IsLocationInfoEmpty() && accommodation.Schedule.IsScheduleInfoEmpty() && accommodation.IsActive == default && accommodation.HasDirectContract == default && (accommodation.Photos == null ! || !accommodation.Photos.Any()) && accommodation.Rating == default && accommodation.Type == default && (accommodation.AccommodationAmenities == null ! || !accommodation.AccommodationAmenities.GetAll().Any()) && string.IsNullOrEmpty(accommodation.HotelChain) && (accommodation.TextualDescriptions == null ! || !accommodation.TextualDescriptions.Any()) && accommodation.UniqueCodes == null && (accommodation.AdditionalInfo == null ! || !accommodation.AdditionalInfo.GetAll().Any())); }
public static AccommodationData Convert(MultilingualAccommodation accommodation, string language) { var name = accommodation.Name.GetValueOrDefault(language); var accommodationAmenities = accommodation.AccommodationAmenities.GetValueOrDefault(language); var additionalInfo = accommodation.AdditionalInfo.GetValueOrDefault(language); var category = accommodation.Category.GetValueOrDefault(language); var address = accommodation.Location.Address.GetValueOrDefault(language); var localityName = accommodation.Location.Locality?.GetValueOrDefault(language); var countryName = accommodation.Location.Country.GetValueOrDefault(language); var localityZoneName = accommodation.Location.LocalityZone?.GetValueOrDefault(language); var textualDescriptions = new List <TextualDescription>(); foreach (var descriptions in accommodation.TextualDescriptions) { var description = descriptions.Description.GetValueOrDefault(language); textualDescriptions.Add(new TextualDescription(AccommodationConverter.GetTextualDescriptionType(descriptions.Type), description)); } return(new AccommodationData { Name = name, AccommodationAmenities = accommodationAmenities, AdditionalInfo = additionalInfo, Category = category, Contacts = AccommodationConverter.GetContacts(accommodation.Contacts), Location = new LocationInfo { CountryCode = accommodation.Location.CountryCode, CountryName = countryName, LocalityName = localityName, LocalityZoneName = localityZoneName, Coordinates = new GeoPoint(accommodation.Location.Coordinates.Longitude, accommodation.Location.Coordinates.Latitude), Address = address, LocationDescriptionCode = AccommodationConverter.GetLocationDescriptionCode(accommodation.Location.LocationDescriptionCode), PointsOfInterests = AccommodationConverter.GetPoiInfos(accommodation.Location.PointsOfInterests), IsHistoricalBuilding = accommodation.Location.IsHistoricalBuilding }, Photos = AccommodationConverter.GetPhotos(accommodation.Photos), Rating = AccommodationConverter.GetRating(accommodation.Rating), Schedule = AccommodationConverter.GetScheduleInfo(accommodation.Schedule), TextualDescriptions = textualDescriptions, Type = AccommodationConverter.GetPropertyType(accommodation.Type) }); }
public static SlimAccommodationData Convert(int id, MultilingualAccommodation accommodation, bool isActive, string language) { var name = accommodation.Name.GetValueOrDefault(language); var address = accommodation.Location.Address.GetValueOrDefault(language); var localityName = accommodation.Location.Locality?.GetValueOrDefault(language); var countryName = accommodation.Location.Country.GetValueOrDefault(language); var localityZoneName = accommodation.Location.LocalityZone?.GetValueOrDefault(language); var rating = AccommodationConverter.GetRating(accommodation.Rating); return(new SlimAccommodationData { HtId = HtId.Create(MapperLocationTypes.Accommodation, id), Name = name, Address = address, CountryName = countryName, LocalityName = localityName, LocalityZoneName = localityZoneName, Rating = rating, IsActive = isActive }); }
private ScheduleInfo MergeScheduleInfo(List <string> suppliersPriority, Dictionary <string, MultilingualAccommodation> supplierAccommodationDetails, MultilingualAccommodation accommodationWithManualCorrection) { var checkInTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.CheckInTime), accommodationWithManualCorrection.Schedule.CheckInTime, string.IsNullOrEmpty); var checkOutTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.CheckOutTime), accommodationWithManualCorrection.Schedule.CheckOutTime, string.IsNullOrEmpty); var portersStartTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.PortersStartTime), accommodationWithManualCorrection.Schedule.PortersStartTime, string.IsNullOrEmpty); var portersEndTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.PortersEndTime), accommodationWithManualCorrection.Schedule.PortersEndTime, string.IsNullOrEmpty); var roomServiceStartTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.RoomServiceStartTime), accommodationWithManualCorrection.Schedule.RoomServiceStartTime, string.IsNullOrEmpty); var roomServiceEndTime = MergeData(suppliersPriority, supplierAccommodationDetails.ToDictionary(d => d.Key, d => d.Value.Schedule.RoomServiceEndTime), accommodationWithManualCorrection.Schedule.RoomServiceEndTime, string.IsNullOrEmpty); return(new ScheduleInfo(checkInTime, checkOutTime, portersStartTime, portersEndTime, roomServiceStartTime, roomServiceEndTime)); }
public (bool IsValid, DeactivationReasons DeactivationReason) Validate(string supplier, MultilingualAccommodation accommodation) { if (!accommodation.IsActive) { return(false, DeactivationReasons.DeactivatedOnSupplier); } if (accommodation.Location.Locality == null) { _logger.LogNotValidLocalityOfAccommodation(supplier, accommodation.Location.Locality?.En); return(false, DeactivationReasons.EmptyOrNotExistingLocality); } if (accommodation.Location.Coordinates.IsEmpty() || !accommodation.Location.Coordinates.IsValid()) { _logger.LogNotValidCoordinatesInAccommodation(supplier, accommodation.SupplierCode); return(false, DeactivationReasons.InvalidCoordinates); } if (!accommodation.Name.En.IsValid()) { _logger.LogNotValidDefaultNameOfAccommodation(supplier, accommodation.SupplierCode); return(false, DeactivationReasons.InvalidName); } return(true, DeactivationReasons.None); }
private ContactInfo MergeContactInfo(List <string> suppliersPriority, Dictionary <string, MultilingualAccommodation> supplierAccommodationDetails, MultilingualAccommodation accommodationWithManualCorrection) { var contactInfo = new ContactInfo(new List <string>(), new List <string>(), new List <string>(), new List <string>()); if (accommodationWithManualCorrection.Contacts.Phones.Any()) { contactInfo.Phones.AddRange(accommodationWithManualCorrection.Contacts.Phones); } if (accommodationWithManualCorrection.Contacts.Emails.Any()) { contactInfo.Phones.AddRange(accommodationWithManualCorrection.Contacts.Emails); } if (accommodationWithManualCorrection.Contacts.WebSites.Any()) { contactInfo.Phones.AddRange(accommodationWithManualCorrection.Contacts.WebSites); } if (accommodationWithManualCorrection.Contacts.Faxes.Any()) { contactInfo.Phones.AddRange(accommodationWithManualCorrection.Contacts.Faxes); } foreach (var supplier in suppliersPriority) { if (supplierAccommodationDetails.TryGetValue(supplier, out var accommodationDetails)) { contactInfo.Phones.AddRange(GetNotExistingContacts(contactInfo.Phones, accommodationDetails.Contacts.Phones, p => p.ToNormalizedPhoneNumber())); contactInfo.Emails.AddRange(GetNotExistingContacts(contactInfo.Emails, accommodationDetails.Contacts.Emails, e => e.ToLowerInvariant())); contactInfo.WebSites.AddRange(GetNotExistingContacts(contactInfo.WebSites, accommodationDetails.Contacts.WebSites, w => w.ToLowerInvariant())); contactInfo.Faxes.AddRange(GetNotExistingContacts(contactInfo.Faxes, accommodationDetails.Contacts.Faxes, f => f.ToLowerInvariant())); } } return(contactInfo); List <string> GetNotExistingContacts(List <string> source, List <string> contacts, Func <string, string> normalizer) { var result = new List <string>(); foreach (var contact in contacts) { if (source.All(c => normalizer(c) != normalizer(contact))) { result.Add(contact); } } return(result); } }
public DataCorrectionEventData(MultilingualAccommodation accommodation) { Accommodation = accommodation; }
public Task AddDataCorrectionEvent(int accommodationId, AccommodationChangeEventSources source, MultilingualAccommodation accommodation) { var dataCorrectionLog = AccommodationChangeLogConverter.GetDataCorrectionChangeLog(accommodationId, source, accommodation); return(AddAccommodationChangeLog(dataCorrectionLog)); }
public static AccommodationChangeLog GetCreationChangeLog(int accommodationId, AccommodationChangeEventSources eventSource, Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReason = default) { var creationEventData = new CreationEventData(supplierAccommodationCodes, accommodation, isActive, deactivationReason); return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.Creation, creationEventData)); }
public void CollectDataCorrectionEvent(int accommodationId, AccommodationChangeEventSources source, MultilingualAccommodation accommodation) { var changeLog = AccommodationChangeLogConverter.GetDataCorrectionChangeLog(accommodationId, source, accommodation); AccommodationsChangeLogs.Add(changeLog); }