protected void cvGridIntersect_ServerValidate(object source, ServerValidateEventArgs args) { SaveGridDataToObject(); if (CurrentRange == null) { return; } var intervals = CurrentRange.RangeNumbers; intervals.OrderBy(x => x.RangelFrom); var started = new RangeNumber(); for (int i = 0; i < intervals.Count; i++) { if (i == 0) { started = intervals[0]; } else { if (started.RangelFrom <= intervals[i].RangelFrom && intervals[i].RangelFrom <= started.RangelTo) { args.IsValid = false; return; } started = intervals[i]; } } }
/// <summary> /// ѕересекаетс¤ ли указанна¤ запись с другими по диапозону. “олько дл¤ диапазонов с парент ид = null, /// т.е. это проверка пересечений главных диапазонов из шапки страницы /// </summary> /// <param name="range"> /// The range. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public bool IntersectWithOther(RangeNumber range) { var intervals = GetBy(x => x.Smo == range.Smo && x.Id != range.Id && x.Parent == null); intervals.Add(range); intervals.OrderBy(x => x.RangelFrom); var started = new RangeNumber(); for (var i = 0; i < intervals.Count; i++) { if (i == 0) { started = intervals[0]; } else { if (started.RangelFrom <= intervals[i].RangelFrom && intervals[i].RangelFrom <= started.RangelTo) { return(true); } started = intervals[i]; } } return(false); }
/// <summary> /// ƒобавление или обновление записи /// </summary> /// <param name="range"> /// The range. /// </param> public void AddOrUpdateRangeNumber(RangeNumber range) { // синхронизируем список поддиапазонов того что в базе и того что в объекте // удал¤ем из базы те элементы дл¤ которых нету записей в range.RangeNumbers var rangeInDatabase = GetById(range.Id); var listToDelete = rangeInDatabase.RangeNumbers.Where(x => !range.RangeNumbers.Select(y => y.Id).ToList().Contains(x.Id)).ToList(); ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession().Evict(rangeInDatabase); foreach (var item in listToDelete) { Delete(item); } // сохран¤ем список из объекта foreach (var item in range.RangeNumbers) { // если объекта нету в базе обнул¤ем ид - значит это новый var subrangeInDatabase = GetById(item.Id); if (subrangeInDatabase == null) { item.Id = Guid.Empty; } ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession().Evict(subrangeInDatabase); SaveOrUpdate(item); } SaveOrUpdate(range); }
/// <summary> /// Добавление или обновление записи /// </summary> /// <param name="range"> /// The range. /// </param> public void SaveRangeNumber(RangeNumber range) { InvokeInterceptors(() => Service.SaveRangeNumber(range)); }
/// <summary> /// Пересекается ли указанная запись с другими по диапозону. Только для диапазонов с парент ид = null, /// т.е. это проверка пересечений главных диапазонов из шапки страницы /// </summary> /// <param name="range"> /// The range. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public bool IntersectWithOther(RangeNumber range) { return(InvokeInterceptors(() => Service.IntersectWithOther(range))); }
/// <summary> /// The sinhronize smo. /// </summary> private void SinhronizeSmo() { using ( var sessionSrz = ObjectFactory.GetInstance <IManagerSessionFactorys>().GetFactoryByName("NHibernateCfgAtl.xml").OpenSession()) { var sessionPvp = ObjectFactory.GetInstance <ISessionFactory>().GetCurrentSession(); var smoSrzList = sessionSrz.QueryOver <Smo>().List(); var smoPvpList = sessionPvp.QueryOver <Organisation>().Where(x => x.Oid.Id == Oid.Smo).List(); var list = smoPvpList; // Перенос СМО из базы srz в базу pvp var smoToPvpList = smoSrzList.Where(x => list.All(y => y.Code != x.Code)).ToList(); var oid = ObjectFactory.GetInstance <IOidManager>().GetById(Oid.Smo); foreach (var smo in smoToPvpList) { var bossfio = string.IsNullOrEmpty(smo.Bossname) ? new[] { string.Empty, string.Empty, string.Empty } : smo.Bossname.Split(' '); var tfomsCode = smo.Code.Length >= 2 ? smo.Code.Substring(0, 2) : string.Empty; var smoPvp = new Organisation { Parent = ObjectFactory.GetInstance <IOrganisationManager>() .GetBy(x => x.Code == tfomsCode && x.Oid.Id == Oid.Tfoms) .FirstOrDefault(), Code = smo.Code, ShortName = smo.Caption, FullName = smo.Fullname, Ogrn = smo.Ogrn, Phone = smo.Tel1, DateLastEdit = smo.Dedit, FirstName = bossfio.Length >= 1 ? bossfio[0] : string.Empty, LastName = bossfio.Length >= 2 ? bossfio[1] : string.Empty, MiddleName = bossfio.Length >= 3 ? bossfio[2] : string.Empty, DateIncludeRegister = smo.Db, DateExcludeRegister = smo.De, Oid = oid }; sessionPvp.Save(smoPvp); smoPvpList.Add(smoPvp); } sessionPvp.Flush(); // Перенос диапазонов номеров бланков ВС из базы СРЗ в базу ПВП var rangeNumbersSrzList = sessionSrz.QueryOver <Vsdiap>().List(); var addedPvpRangeNumber = new List <RangeNumber>(); foreach (var rangeNumberSrz in rangeNumbersSrzList) { Organisation smo = null; var rangeNumberPvp = sessionPvp.QueryOver <RangeNumber>() .JoinAlias(x => x.Smo, () => smo) .Where( x => x.RangelFrom == rangeNumberSrz.Lo && x.RangelTo == rangeNumberSrz.Hi && smo.Code == rangeNumberSrz.SMO.Code) .List() .FirstOrDefault(); // создаем новую запись if (rangeNumberPvp == null) { rangeNumberPvp = new RangeNumber(); rangeNumberPvp.Smo = sessionPvp.QueryOver <Organisation>().Where(x => x.Code == rangeNumberSrz.SMO.Code).List().FirstOrDefault(); rangeNumberPvp.RangelFrom = rangeNumberSrz.Lo.HasValue ? rangeNumberSrz.Lo.Value : 0; rangeNumberPvp.RangelTo = rangeNumberSrz.Hi.HasValue ? rangeNumberSrz.Hi.Value : 0; addedPvpRangeNumber.Add(rangeNumberPvp); sessionPvp.Save(rangeNumberPvp); } } sessionPvp.Flush(); // Перенос СМО из базы ПВП в базу СРЗ var smoToSrzList = smoPvpList.Where(x => smoSrzList.All(y => y.Code != x.Code)).ToList(); foreach (var smo in smoToSrzList) { var smoSrz = new Smo { Code = smo.Code, Caption = smo.ShortName, Fullname = smo.FullName, Ogrn = smo.Ogrn, Db = smo.DateIncludeRegister, De = smo.DateExcludeRegister, Bossname = string.Format("{0} {1} {2}", smo.FirstName, smo.LastName, smo.MiddleName), Tel1 = smo.Phone, }; sessionSrz.Save(smoSrz); } sessionSrz.Flush(); // Перенос диапазонов номеров бланков ВС из базы ПВП в базу СРЗ var rangeNumbersPvpList = sessionPvp.QueryOver <RangeNumber>().List(); rangeNumbersPvpList = rangeNumbersPvpList.Where(x => addedPvpRangeNumber.All(y => x.Id != y.Id)).ToList(); foreach (var rangeNumberPvp in rangeNumbersPvpList) { Smo smo = null; var vsdiapSrz = sessionSrz.QueryOver <Vsdiap>() .JoinAlias(x => x.SMO, () => smo) .Where( x => x.Lo == rangeNumberPvp.RangelFrom && x.Hi == rangeNumberPvp.RangelTo && smo.Code == rangeNumberPvp.Smo.Code) .List() .FirstOrDefault(); // создаем новую запись if (vsdiapSrz == null) { vsdiapSrz = new Vsdiap(); vsdiapSrz.Dedit = DateTime.Now; vsdiapSrz.SMO = sessionSrz.QueryOver <Smo>().Where(x => x.Code == rangeNumberPvp.Smo.Code).List().FirstOrDefault(); vsdiapSrz.Lo = rangeNumberPvp.RangelFrom; vsdiapSrz.Hi = rangeNumberPvp.RangelTo; sessionSrz.Save(vsdiapSrz); } } sessionSrz.Flush(); // закрываем сессию СРЗ sessionSrz.Close(); } }
/// <summary> /// Добавление или обновление записи /// </summary> /// <param name="range"> /// The range. /// </param> public void SaveRangeNumber(RangeNumber range) { ObjectFactory.GetInstance <IRangeNumberManager>().AddOrUpdateRangeNumber(range); }
/// <summary> /// Пересекается ли указанная запись с другими по диапозону. Только для диапазонов с парент ид = null, /// т.е. это проверка пересечений главных диапазонов из шапки страницы /// </summary> /// <param name="range"> /// The range. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public bool IntersectWithOther(RangeNumber range) { return(ObjectFactory.GetInstance <IRangeNumberManager>().IntersectWithOther(range)); }