Exemple #1
0
        public void ResolveNamingNeutralTest()
        {
            IUnitOfWork unit = new EFUnitOfWork(this.databaseSportsContext);

            SportType football = new SportType {
                Name = "Football"
            };
            SportType sport = unit.GetRepository <SportType>()
                              .Get(x => x.Name.ToUpper() == football.Name.ToUpper())
                              .FirstOrDefault();

            Conformity expConf = new Conformity
            {
                InputName   = "Ст. Этьен",
                ExistedName = "Сент-Этьен"
            };

            Team neutralTeam = new Team
            {
                Name      = "Ст. Этьен",
                SportType = sport
            };

            NamingMatcher matcher = new NamingMatcher(unit);

            List <Conformity> neutralConformities = matcher.ResolveNaming(neutralTeam);

            Conformity newConf = neutralConformities.FirstOrDefault();

            Assert.AreEqual(expConf.InputName, newConf.InputName);
            Assert.AreEqual(expConf.ExistedName, newConf.ExistedName);
        }
        public ConformityViewModel GetConformityViewModel(int id)
        {
            Log.Info("Getting ConformityViewModel...");

            Conformity confByID = new Conformity();
            IEnumerable <Conformity> conformities = new List <Conformity>();

            try
            {
                confByID = this.dataUnit.GetRepository <Conformity>()
                           .Get(x => x.Id == id).FirstOrDefault();

                conformities = this.dataUnit.GetRepository <Conformity>()
                               .Get(x => x.InputName == confByID.InputName)
                               .GroupBy(x => x.ExistedName)
                               .Select(x => x.First());
            }
            catch (Exception e)
            {
                Log.Error("Exception when trying to get conformities data from DB", e);
            }

            List <ConformityDto> conformitiesDtos = new List <ConformityDto>();

            foreach (Conformity conf in conformities)
            {
                conformitiesDtos.Add(Mapper.Map <Conformity, ConformityDto>(conf));
            }

            Log.Info("Successful getting ConformityViewModel...");
            return(new ConformityViewModel(confByID.InputName, confByID.Id, conformitiesDtos));
        }
        public void Save(ConformityViewModel model)
        {
            Log.Info("Managing ConformityViewModel post...");
            try
            {
                if (model.ConformityId != 0)
                {
                    Conformity conf = this.dataUnit.GetRepository <Conformity>()
                                      .Get(x => x.Id == model.ConformityId)
                                      .FirstOrDefault();

                    this.Saving(conf.InputName, conf.ExistedName, false);
                }
                if (model.ExistedName != null)
                {
                    if (this.CheckExistedNamesInDB(model.ExistedName))
                    {
                        this.Saving(model.InputName, model.ExistedName, false);
                    }
                    else
                    {
                        this.Saving(model.InputName, model.ExistedName, true);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("Exception when trying to manage ConformityViewModel and DB", e);
            }
            Log.Info("Successful manaing ConformityViewModel...");
        }
Exemple #4
0
        public void OneConformitySportEventsSaving()
        {
            ResultDTO r1 = new ResultDTO {
                TeamName = "Динамо Киев", IsHome = true, Score = 3
            };
            ResultDTO r2 = new ResultDTO {
                TeamName = "Ст. Этьен", IsHome = false, Score = 1
            };
            SportEventDTO ev = new SportEventDTO
            {
                Date = DateTime.Now.Ticks, SportType = "Football", Results = new List <ResultDTO> {
                    r1, r2
                }
            };
            List <SportEventDTO> events = new List <SportEventDTO>();

            events.Add(ev);

            IUnitOfWork unit = new EFUnitOfWork(this.databaseSportsContext);

            this.eventService.SaveSportEvents(events);

            Team team1 =
                unit.GetRepository <TeamName>()
                .Get(tn => tn.Name == "Динамо Киев")
                .Select(tn => tn.Team)
                .FirstOrDefault();

            Assert.IsNotNull(team1);

            Team team2 =
                unit.GetRepository <TeamName>().Get(tn => tn.Name == "Ст. Этьен").Select(tn => tn.Team).FirstOrDefault();

            Assert.IsNull(team2);

            IEnumerable <SportEvent> emptyEvents = unit.GetRepository <SportEvent>().Get(e => e.Results.Count() == 0);

            Assert.IsTrue(emptyEvents.Count() == 0);

            IEnumerable <SportEvent> oneResultEvents = unit.GetRepository <SportEvent>().Get(e => e.Results.Count() == 1);

            Assert.IsTrue(oneResultEvents.Count() == 0);

            Conformity conf2 = unit.GetRepository <Conformity>().Get(c => c.InputName == "Ст. Этьен").FirstOrDefault();

            Assert.IsTrue(conf2.TempResult != null);
            Assert.IsTrue(conf2.TempResult.Team == null);

            IEnumerable <TempResult> tempResults = unit.GetRepository <TempResult>().Get();

            Assert.IsTrue(tempResults.Count() == 2);

            TempResult tempResult1 = unit.GetRepository <TempResult>().Get(r => r.Team != null).FirstOrDefault();

            Assert.IsTrue(tempResult1.Team.Name == "Динамо Киев");

            Assert.IsTrue(conf2.TempResult.TempSportEvent.Id == tempResult1.TempSportEvent.Id);
        }
Exemple #5
0
        public void BothConformitiesSportEventsSaving()
        {
            ResultDTO r1 = new ResultDTO {
                TeamName = "Маккаби Тель-Авив", IsHome = true, Score = 2
            };
            ResultDTO r2 = new ResultDTO {
                TeamName = "Ст. Этьен", IsHome = false, Score = 1
            };
            SportEventDTO ev = new SportEventDTO
            {
                Date = DateTime.Now.Ticks, SportType = "Football", Results = new List <ResultDTO> {
                    r1, r2
                }
            };
            List <SportEventDTO> events = new List <SportEventDTO>();

            events.Add(ev);

            IUnitOfWork unit = new EFUnitOfWork(this.databaseSportsContext);

            this.eventService.SaveSportEvents(events);

            Team team1 =
                unit.GetRepository <TeamName>()
                .Get(tn => tn.Name == "Маккаби Тель-Авив")
                .Select(tn => tn.Team)
                .FirstOrDefault();

            Assert.IsNull(team1);

            Team team2 =
                unit.GetRepository <TeamName>().Get(tn => tn.Name == "Ст. Этьен").Select(tn => tn.Team).FirstOrDefault();

            Assert.IsNull(team2);

            IEnumerable <SportEvent> simpleEvents = unit.GetRepository <SportEvent>().Get(e => e.Results.Count() == 0);

            Assert.IsTrue(simpleEvents.Count() == 0);

            Conformity conf1 =
                unit.GetRepository <Conformity>().Get(c => c.InputName == "Маккаби Тель-Авив").FirstOrDefault();

            Assert.IsNotNull(conf1);

            Conformity conf2 = unit.GetRepository <Conformity>().Get(c => c.InputName == "Ст. Этьен").FirstOrDefault();

            Assert.IsNotNull(conf2);

            IEnumerable <TempResult> tempResults = unit.GetRepository <TempResult>().Get();

            Assert.IsTrue(tempResults.Count() == 2);

            IEnumerable <TempSportEvent> tempEvents = unit.GetRepository <TempSportEvent>().Get();

            Assert.IsTrue(tempEvents.Count() == 1);
        }
Exemple #6
0
        /// <summary>
        /// Returns List<Conformity> with >50% conformities to given name.
        /// </summary>
        /// <param name="inputTeam"></param>
        /// <returns></returns>
        public List <Conformity> ResolveNaming(Team inputTeam) //TODO add typisation and locals.
        {
            List <Conformity>  conformities = new List <Conformity>();
            IEnumerable <Team> teams        = this.unit.GetRepository <Team>()
                                              .Get(filter: (t) => t.SportType.Name == inputTeam.SportType.Name, includeProperties: "Names,SportType");

            Team simpleCheckTeam = this.SimpleCheck(teams, inputTeam.Name);

            if (simpleCheckTeam != null)
            {
                return(null);
            }

            string      preparedInputName = this.PrepareString(inputTeam.Name);
            List <Team> matches           = new List <Team>();

            double comparingResult = this.Compairing(teams, preparedInputName, out matches);

            if (comparingResult == 100 && matches.Count == 1)
            {
                foreach (TeamName name in inputTeam.Names)
                {
                    matches[0].Names.Add(name);
                }
                this.unit.GetRepository <Team>().Update(matches[0]);
                this.unit.SaveChanges();
                return(null);
            }
            else if (comparingResult < 50)
            {
                this.unit.GetRepository <Team>().Insert(inputTeam);
                this.unit.SaveChanges();
                return(null);
            }
            else
            {
                foreach (Team team in matches)
                {
                    Conformity conf = new Conformity();
                    conf.InputName   = inputTeam.Name;
                    conf.ExistedName = team.Name;
                    conformities.Add(conf);
                }

                return(conformities);
            }
        }
Exemple #7
0
 public override string ToString()
 {
     return(Conformity.ToString() + " " + Morales.ToString());
 }
Exemple #8
0
        /// <summary>
        ///     Получить проживание
        /// </summary>
        /// <param name="address">Адрес источника</param>
        /// <param name="source">Наименование источника</param>
        /// <returns>Проживание</returns>
        public static Prozhivanie GetProzhivanie(Address address, IDataService defDS, IDataService syncDS,
                                                 Source source, ref List <DataObject> arrToUpd, ref Dictionary <string, List <DataObject> > arrConformity)
        {
            if (address == null)
            {
                return(null);
            }

            var type     = typeof(Prozhivanie);
            var nameType = type.FullName;

            //сначала поищем среди объектов на обновление
            var obj = new MapperHelper.PkDataObject {
                __PrimaryKey = address.Guid
            };
            var prozivanie = (Prozhivanie)arrToUpd.FirstOrDefault(x =>
                                                                  x.GetType().FullName == nameType && x.__PrimaryKey.Equals(obj.__PrimaryKey));

            if (prozivanie != null)
            {
                return(prozivanie);
            }

            var typeAddress = arrConformity[MapperHelper.sObjectType].Cast <ObjectType>()
                              .FirstOrDefault(x => x.name == nameType) ??
                              syncDS.Query <ObjectType>(ObjectType.Views.ObjectTypeE)
                              .FirstOrDefault(x => x.name == nameType) ??
                              new ObjectType {
                name = nameType, id = type.Name
            };

            if (typeAddress.GetStatus() == ObjectStatus.Created)
            {
                arrConformity[MapperHelper.sObjectType].Add(typeAddress);
            }

            var conformity = arrConformity[MapperHelper.sConformity].Cast <Conformity>().FirstOrDefault(x =>
                                                                                                        x.Source.__PrimaryKey.Equals(source.__PrimaryKey) &&
                                                                                                        x.Type.__PrimaryKey.Equals(typeAddress.__PrimaryKey) && x.pkSource.Equals(address.Guid));


            if (conformity == null && typeAddress.GetStatus() != ObjectStatus.Created &&
                source.GetStatus() != ObjectStatus.Created)
            {
                conformity = syncDS.Query <Conformity>(Conformity.Views.ConformityE).FirstOrDefault(x =>
                                                                                                    x.Source.__PrimaryKey.Equals(source.__PrimaryKey) &&
                                                                                                    x.Type.__PrimaryKey.Equals(typeAddress.__PrimaryKey) && x.pkSource.Equals(address.Guid));
            }

            if (conformity == null)
            {
                var adr = new Prozhivanie {
                    __PrimaryKey = address.Guid
                };
                prozivanie = defDS.Query <Prozhivanie>(Prozhivanie.Views.ProzhivanieE)
                             .FirstOrDefault(x => x.__PrimaryKey.Equals(adr.__PrimaryKey));
                if (prozivanie == null)
                {
                    var terr  = address.Territory.Guid.ToString();
                    var query = defDS.Query <Prozhivanie>(Prozhivanie.Views.ProzhivanieE).Where(x =>
                                                                                                x.Territoriia.__PrimaryKey.ToString().Equals(terr) &&
                                                                                                x.NomerDoma == address.Number &&
                                                                                                x.NomerStroeniia == address.HouseNumber &&
                                                                                                x.Kvartira == address.Appartment);

                    if (address.Street == null)
                    {
                        query = query.Where(x => x.Ulitca == null);
                    }
                    else
                    {
                        var street = address.Street?.Guid.ToString();
                        query = query.Where(x => x.Ulitca != null && x.Ulitca.__PrimaryKey.ToString().Equals(street));
                    }

                    prozivanie = query.FirstOrDefault();
                }
            }
            else
            {
                obj = new MapperHelper.PkDataObject {
                    __PrimaryKey = conformity.pkDest
                };
                prozivanie = defDS.Query <Prozhivanie>(Prozhivanie.Views.ProzhivanieE).FirstOrDefault(x =>
                                                                                                      x.__PrimaryKey.Equals(obj.__PrimaryKey));

                prozivanie = new AddressToProzhivanieMapper().Map(address, prozivanie);
                if (prozivanie.GetStatus() == ObjectStatus.Altered)
                {
                    arrToUpd.Add(prozivanie);
                }
            }

            if (prozivanie == null)
            {
                prozivanie = new Prozhivanie();
                prozivanie = new AddressToProzhivanieMapper().Map(address, prozivanie);
                arrToUpd.Add(prozivanie);
            }

            if (conformity == null)
            {
                conformity = new Conformity
                {
                    Source   = source,
                    Type     = typeAddress,
                    pkSource = address.Guid,
                    pkDest   = new Guid(prozivanie.__PrimaryKey.ToString())
                };
                arrConformity[MapperHelper.sConformity].Add(conformity);
            }

            return(prozivanie);
        }
Exemple #9
0
        /// <summary>
        ///     Обработка объекта
        /// </summary>
        /// <param name="obj">объект, который пришел</param>
        /// <param name="state">тип изменения, входящего объекта</param>
        /// <param name="type">тип объекта, в который преобразуем</param>
        /// <param name="mapper">маппер для преобразования</param>
        /// <param name="attrs">список изменяемых свойств</param>
        /// <param name="source">Источник изменений</param>
        /// <param name="arrToUpd">Список обновляемых объектов данных</param>
        /// <param name="arrConformity">Список обновляемых объектов синхронизации</param>
        private void ProcessObject(SyncXMLDataObject obj, tState state, Type type,
                                   IPropertyMapperWithChangedAttrs mapper, List <string> attrs, Source source, ref List <DataObject> arrToUpd,
                                   ref Dictionary <string, List <DataObject> > arrConformity)
        {
            if (obj == null)
            {
                return;
            }

            var view     = mapper.GetView();
            var nameType = type.FullName;

            var otype = arrConformity[sObjectType].Cast <ObjectType>().FirstOrDefault(x => x.name == nameType) ??
                        _syncDS.Query <ObjectType>(ObjectType.Views.ObjectTypeE)
                        .FirstOrDefault(x => x.name == nameType) ??
                        new ObjectType {
                name = nameType, id = type.Name
            };

            if (otype.GetStatus() == ObjectStatus.Created)
            {
                arrConformity[sObjectType].Add(otype);
            }

            Conformity conformity = null;

            if (otype.GetStatus() != ObjectStatus.Created && source.GetStatus() != ObjectStatus.Created)
            {
                conformity = _syncDS.Query <Conformity>(Conformity.Views.ConformityE).FirstOrDefault(x =>
                                                                                                     x.Source.__PrimaryKey.Equals(source.__PrimaryKey) &&
                                                                                                     x.Type.__PrimaryKey.Equals(otype.__PrimaryKey) && x.pkSource.Equals(obj.Guid));
            }

            if (state != tState.deleted) //создание/изменение
            {
                DataObject dest = null;
                if (conformity != null) //ищем по pk
                {
                    dest = GetDataObject(type, view, conformity.pkDest);
                }
                else
                {
                    dest = GetDataObject(type, view, obj.Guid);
                }

                if (dest == null) //ищем по альтернативному ключу
                {
                    var queryAlt = mapper.GetAltKey(obj, _defDS, _syncDS, source, ref arrToUpd, ref arrConformity);
                    dest = queryAlt?.FirstOrDefault();

                    if (queryAlt != null && dest != null)
                    {
                        LogService.LogInfo($"BusMessageHandlerService: Удалось найти объект(pk-{obj.Guid}) по альтернативному ключу для типа {nameType}. Сопоставленный объект объект(pk-{dest.__PrimaryKey})");
                    }
                }

                if (dest == null)
                {
                    dest = (DataObject)Activator.CreateInstance(type);
                }

                dest.GetStatus();

                dest = mapper.Map(obj, dest, attrs);

                // Проверяем было ли помещено создание объекта на апдейт. Если да, то такой объект уже считается существующим и статус нового объекта с таким же ключом меняется на Altered.
                var alreadyExistsCreatedObj = arrToUpd.Exists(x => PKHelper.EQPK(x, dest) && x.GetStatus(false) == ObjectStatus.Created);
                if (alreadyExistsCreatedObj)
                {
                    dest.SetLoadingState(LoadingState.Loaded);
                    dest.SetStatus(ObjectStatus.Altered);
                }
                arrToUpd.Add(dest);
                //заполнение мастеров///////////////////////////////////////////////////////////////////////////////
                mapper.SetMasters(obj, dest, attrs, _defDS, _syncDS, source, ref arrToUpd, ref arrConformity);
                if (conformity == null)
                {
                    conformity = new Conformity
                    {
                        Source   = source,
                        Type     = otype,
                        pkSource = obj.Guid,
                        pkDest   = new Guid(dest.__PrimaryKey.ToString())
                    };
                    arrConformity[sConformity].Add(conformity);
                }
            }
            else //удаление
            {
                if (conformity != null)
                {
                    var count = _syncDS.Query <Conformity>(Conformity.Views.ConformityE).Count(x =>
                                                                                               x.Type.__PrimaryKey.Equals(otype.__PrimaryKey) &&
                                                                                               x.pkDest.Equals(conformity.pkDest));
                    if (count >= 1)
                    {
                        conformity.SetStatus(ObjectStatus.Deleted);
                        arrConformity[sConformity].Add(conformity);
                    }

                    if (count == 1)
                    {
                        var dest = GetDataObject(type, view, conformity.pkDest);
                        if (dest != null)
                        {
                            dest.SetStatus(ObjectStatus.Deleted);
                            arrToUpd.Add(dest);
                        }
                    }
                }
            }
        }