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));
        }
Esempio n. 2
0
        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)
                       ));
        }
Esempio n. 3
0
        public static AccommodationChangeLog GetDataCorrectionChangeLog(int accommodationId, AccommodationChangeEventSources eventSource,
                                                                        MultilingualAccommodation accommodation)
        {
            var dataCorrectionEventData = new DataCorrectionEventData(accommodation);

            return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.DataCorrection, dataCorrectionEventData));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
 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));
    }
Esempio n. 8
0
 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()));
 }
Esempio n. 9
0
        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)
            });
        }
Esempio n. 10
0
        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);
        }
    }
Esempio n. 14
0
 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));
        }
Esempio n. 16
0
        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);
        }