public override IzmenenieNaznachVypl Map(ChangeAppointmentPayment source, IzmenenieNaznachVypl dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.DataNaznacheniia = (NullableDateTime)source.AppointmentDate; dest.DataOtmeny = (NullableDateTime)source.CancellationDate; dest.TipVypl = (tTipVyplaty)EnumCaption.GetValueFor(source.PaymentType.ToString(), typeof(tTipVyplaty)); dest.PeriodPredost = (tTipPerioda)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.Period), typeof(tTipPerioda)); dest.Summa = (NullableDecimal)source.Amount; dest.Primechanie = source.Note; dest.OrganSZ = source.SocialProtectionAuthority == null ? null : PKHelper.CreateDataObject <OrganSZ>(source.SocialProtectionAuthority.Guid); dest.LgKatLeechnosti = source.BeneficiaryPreferentialCategory == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.BeneficiaryPreferentialCategory.Guid); dest.Poluchatel = source.Recipient == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Recipient.Guid); dest.Naznachenie = source.PaymentAppointment == null ? null : PKHelper.CreateDataObject <NaznachenieVyplaty>(source.PaymentAppointment.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
public override Invalidnost Map(Disability source, Invalidnost dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.Gruppa = (tGruppaInvalidnosti)EnumCaption.GetValueFor(source.Group.ToString(), typeof(tGruppaInvalidnosti)); dest.NomerSpravkiVTEK = source.ReferenceNumberVTEK; dest.DataVydSpravVTEK = (NullableDateTime)source.IssueDateVTEK; dest.OrganVydSprav = source.OrgName; dest.StepenOgranichTrudosp = (tGruppaInvalidnosti)EnumCaption.GetValueFor(source.DisabilityDegree.ToString(), typeof(tGruppaInvalidnosti)); dest.KemVydSprMSE = source.ReferenceIssuedBy == null ? null : PKHelper.CreateDataObject <OrganVydDok>(source.ReferenceIssuedBy?.Guid); dest.LgKatLeechnosti = source.BeneficiaryPreferentialCategory == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.BeneficiaryPreferentialCategory?.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
/// <summary> /// Преобразовать значение. /// </summary> /// <param name="value">Значение для преобразования.</param> /// <param name="toType">Тип, в который надо преобразовать.</param> /// <returns>Преобразованное значение.</returns> public static object Convert(object value, Type toType) { lock (TypeToTypeMethods) { Type fromType = value.GetType(); if (fromType == toType) { return(value); } if (fromType == typeof(string) && toType.IsEnum) { return(EnumCaption.GetValueFor((string)value, toType)); } if (fromType.IsEnum && toType == typeof(string)) { return(EnumCaption.GetCaptionFor(value)); } if (fromType == typeof(int) && toType.IsEnum) { return(Enum.Parse(toType, Enum.GetName(toType, value))); } if (fromType.IsEnum && toType == typeof(int)) { return((int)value); } TypeTypePair key = new TypeTypePair(fromType, toType); if (!ParsedTypes.Contains(fromType)) { AddTypeOperator(fromType); } if (!ParsedTypes.Contains(toType)) { AddTypeOperator(toType); } if (TypeToTypeMethods.ContainsKey(key)) { MethodInfo mi = TypeToTypeMethods[key]; return(mi.Invoke(null, new[] { value })); } if (toType == typeof(string)) { return(value.ToString()); } return(System.Convert.ChangeType(value, toType)); } }
public void EnumCaptionGetValueForNullTest() { // Arrange. Type enumType = typeof(NumberedYear); // Act. object actual = EnumCaption.GetValueFor(null, enumType); // Assert. Assert.Equal(NumberedYear.Year2014, actual); }
public void EnumCaptionGetValueForValueCaseInsensitiveTest() { // Arrange. Type enumType = typeof(NumberedYear); // Act. object actual = EnumCaption.GetValueFor("YeAr2012", enumType); // Assert. Assert.Equal(NumberedYear.Year2012, actual); }
public void EnumCaptionGetValueForNotEnumTest() { // Arrange. Type enumType = typeof(DateTime); // Act. object actual = EnumCaption.GetValueFor("Now", enumType); // Assert. Assert.Null(actual); }
public void EnumCaptionGetValueForNumberTest() { // Arrange. Type enumType = typeof(NumberedYear); // Act. // Входные параметры: заголовок элемента перечисления "2013", тип элемента перечисления. object actual = EnumCaption.GetValueFor("2013", enumType); // Assert. Assert.Equal(NumberedYear.Year2013, actual); }
public void EnumCaptionGetValueForSwappedCaptionTest() { // Arrange. Type enumType = typeof(SwappedEnum); // Act. // Входные параметры: заголовок элемента перечисления "SwappedVal", тип элемента перечисления. object actual = EnumCaption.GetValueFor("SwappedVal", enumType); // Assert. Assert.Equal(SwappedEnum.Val, actual); }
public void EnumCaptionGetValueForCaseInsensitive4Test() { // Arrange. Type enumType = typeof(CaseSensitiveEnum); // Act. // Входные параметры: заголовок элемента перечисления "CaseINSENSITIVEVAL", тип элемента перечисления. object actual = EnumCaption.GetValueFor("CASEINSENSITIVEVAL", enumType); // Assert. Assert.Equal(CaseSensitiveEnum.CASEINSENSITIVEVAL, actual); }
public void EnumCaptionGetValueForCaseInsensitiveTest() { // Arrange. Type enumType = typeof(CaseSensitiveEnum); // Act. // Входные параметры: заголовок элемента перечисления "Last day", тип элемента перечисления. object actual = EnumCaption.GetValueFor("Last day", enumType); // Assert. Assert.Equal(CaseSensitiveEnum.Year9999, actual); }
public void EnumCaptionGetValueForEmptyTest() { // Arrange. Type enumType = typeof(NumberedYear); // Act. // Входные параметры: пустая строка, тип данных NumberedYear. object actual = EnumCaption.GetValueFor(string.Empty, enumType); // Assert. Assert.Equal(NumberedYear.Year2014, actual); }
public override NaznachenieVyplaty Map(PaymentAppointment source, NaznachenieVyplaty dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } if (attrs.Contains(PaymentAppointment.ConstConfirmed)) { dest.Podtverzhdeno = (tLogicheskii)EnumCaption.GetValueFor(source.Confirmed.ToString(), typeof(tLogicheskii)); } if (attrs.Contains(PaymentAppointment.ConstBenefit)) { dest.Lgota = source.Benefit == null ? null : PKHelper.CreateDataObject <Lgota>(source.Benefit.Guid); } if (attrs.Contains(PaymentAppointment.ConstMedium)) { dest.Nositel = source.Medium == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Medium.Guid); } if (attrs.Contains(PaymentAppointment.ConstDependent)) { dest.Izhdivenetc = source.Dependent == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Dependent.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); }
public override IQueryable <DataObject> GetAltKey(ChangeAppointmentPayment dobj, IDataService defDS, IDataService syncDS, Source source, ref List <DataObject> arrToUpd, ref Dictionary <string, List <DataObject> > arrConformity) { var naznachenie = MapperHelper.GetMaster(typeof(NaznachenieVyplaty), dobj.PaymentAppointment.Guid, defDS.Query <NaznachenieVyplaty>(NaznachenieVyplaty.Views.NaznachenieVyplatyE), syncDS, source, ref arrToUpd, ref arrConformity); var date = (NullableDateTime)dobj.AppointmentDate; var paymentType = (tTipVyplaty)EnumCaption.GetValueFor(dobj.PaymentType.ToString(), typeof(tTipVyplaty)); return(defDS.Query <IzmenenieNaznachVypl>(IzmenenieNaznachVypl.Views.AuditView).Where(x => x.DataNaznacheniia == date && x.TipVypl == paymentType && x.Naznachenie.__PrimaryKey.Equals(naznachenie.__PrimaryKey))); }
public void EnumCaptionGetValueForNotExistTest() { var exception = Xunit.Record.Exception(() => { // Arrange. Type enumType = typeof(NumberedYear); // Act. EnumCaption.GetValueFor("notexist", enumType); // Assert. // Ожидаем исключения. }); Assert.IsType(typeof(ArgumentException), exception); }
public override IQueryable <DataObject> GetAltKey(Movement dobj, IDataService defDS, IDataService syncDS, Source source, ref List <DataObject> arrToUpd, ref Dictionary <string, List <DataObject> > arrConformity) { var leechnost = MapperHelper.GetMaster(typeof(Leechnost), dobj.Beneficiary.Guid, defDS.Query <Leechnost>(Leechnost.Views.LeechnostE), syncDS, source, ref arrToUpd, ref arrConformity); var address = Helper.GetProzhivanie(dobj.DepatureAddress, defDS, syncDS, source, ref arrToUpd, ref arrConformity); var typeAddress = (tTipAdresa)EnumCaption.GetValueFor(dobj.AddressType.ToString(), typeof(tTipAdresa)); var date = (NullableDateTime)dobj.DepatureDate; return(defDS.Query <Peremeshchenie>(Peremeshchenie.Views.PeremeshchenieE).Where(x => x.DataUbytiia == date && x.TipAdresa == typeAddress && x.AdresUbytiia.__PrimaryKey.Equals(address.__PrimaryKey) && x.Leechnost.__PrimaryKey.Equals(leechnost.__PrimaryKey))); }
public void EnumCaptionGetValueForPositionNumberTest() { var exception = Xunit.Record.Exception(() => { // Arrange. Type enumType = typeof(NumberedYear); // Act. // Enum.Parse вернул бы 1ый элемент enum, а GetValueFor должен бросить exception. EnumCaption.GetValueFor("1", enumType); // Assert. // Ожидаем исключения. }); Assert.IsType(typeof(ArgumentException), exception); }
public override NaznachenieVyplaty Map(PaymentAppointment source, NaznachenieVyplaty dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.Podtverzhdeno = (tLogicheskii)EnumCaption.GetValueFor(source.Confirmed.ToString(), typeof(tLogicheskii)); dest.Lgota = source.Benefit == null ? null : PKHelper.CreateDataObject <Lgota>(source.Benefit.Guid); dest.Nositel = source.Medium == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Medium.Guid); dest.Izhdivenetc = source.Dependent == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Dependent.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
public override FaktLgot Map(FactBenefits source, FaktLgot dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.DataNachisleniia = (NullableDateTime)source.AccrualDate; dest.DataPolucheniia = (NullableDateTime)source.ReceiveDate; dest.Summa = (NullableDecimal)source.Amount; dest.SummaSotcPaketa = (NullableDecimal)source.AmountSocialPackage; dest.Kommentarii = source.Comments; dest.SposobOplaty = (tSposobOplaty)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.PaymentMethod), typeof(tSposobOplaty)); dest.DataPereplS = (NullableDateTime)source.OverpaymentDateFrom; dest.DataPereplPo = (NullableDateTime)source.OverpaymentDateTo; dest.NositelLgoty = source.MediumBenefit == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.MediumBenefit.Guid); dest.Izhdivenetc = source.Dependent == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Dependent.Guid); dest.Poluchatel = source.Recipient == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Recipient.Guid); dest.Lgota = source.Benefit == null ? null : PKHelper.CreateDataObject <Lgota>(source.Benefit.Guid); dest.OrganSZ = source.SocialProtectionAuthority == null ? null : PKHelper.CreateDataObject <OrganSZ>(source.SocialProtectionAuthority.Guid); dest.Period = source.Period == null ? null : PKHelper.CreateDataObject <Period>(source.Period.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
public override Stroenie Map(Structure source, Stroenie dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.KodFIAS = source.FIAS; dest.VidStroeniia = (tVidStroeniia)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.TypeStructure), typeof(tVidStroeniia)); dest.Nomer = source.Number == null ? 0 : (uint)source.Number; dest.PochtIndeks = source.PostIndex; dest.DopStroenie = source.Additional; dest.KodPodtverzhd = source.VerificationCode == null ? 0 : (uint)source.VerificationCode; dest.Raion = source.Area == null ? null : PKHelper.CreateDataObject <Territoriia>(source.Area.Guid); dest.Ulitca = source.Street == null ? null : PKHelper.CreateDataObject <Ulitca>(source.Street.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
public override Peremeshchenie Map(Movement source, Peremeshchenie dest) { if (dest.GetStatus() == ObjectStatus.Created) { dest.__PrimaryKey = source.Guid; } dest.DataUbytiia = (NullableDateTime)source.DepatureDate; dest.TipAdresa = (tTipAdresa)EnumCaption.GetValueFor(source.AddressType.ToString(), typeof(tTipAdresa)); dest.AdresUbytiia = source.DepatureAddress == null ? null : PKHelper.CreateDataObject <Prozhivanie>(source.DepatureAddress?.Guid); dest.Leechnost = source.Beneficiary == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Beneficiary?.Guid); dest.PrichinaPeremeshcheniia = source.MovementCause == null ? null : PKHelper.CreateDataObject <PrichinaPeremeshcheniia>(source.MovementCause?.Guid); dest.CreateTime = source.CreateTime; dest.Creator = source.Creator; dest.EditTime = source.EditTime; dest.Editor = source.Editor; return(dest); }
public override Peremeshchenie Map(Movement source, Peremeshchenie dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } if (attrs.Contains(Movement.ConstDepatureDate)) { dest.DataUbytiia = (NullableDateTime)source.DepatureDate; } if (attrs.Contains(Movement.ConstAddressType)) { dest.TipAdresa = (tTipAdresa)EnumCaption.GetValueFor(source.AddressType.ToString(), typeof(tTipAdresa)); } if (attrs.Contains(Movement.ConstDepatureAddress)) { dest.AdresUbytiia = source.DepatureAddress == null ? null : PKHelper.CreateDataObject <Prozhivanie>(source.DepatureAddress?.Guid); } if (attrs.Contains(Movement.ConstBeneficiary)) { dest.Leechnost = source.Beneficiary == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Beneficiary?.Guid); } if (attrs.Contains(Movement.ConstMovementCause)) { dest.PrichinaPeremeshcheniia = source.MovementCause == null ? null : PKHelper.CreateDataObject <PrichinaPeremeshcheniia>(source.MovementCause?.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); }
/// <summary> /// Получить объект на заданную дату. /// </summary> /// <param name="date">Дата на которую следует откатить состояние объекта</param> /// <param name="obj">Объект, который откатываем на заданную дату.</param> /// <param name="onlySelfObj">Откатывать только сам объект, т.е. в обратное состояния вернутся все собственные поля объекта и все собственные ссылочные объекты(мастра и детейлы) только ключи</param> /// <param name="forceNullAgregator">Объект вернётся в состояние сразу после заданной даты. /// Если откатываем создание объекта, то возвращаем путой объект с первичным ключом. /// Если объект был удалён и ведётся аудит удаления, то он будет восстановлен со всеми своими собственными полями, иначе если аудит удаления отключен, у удаленного объекта будет проинициализирован только первичный ключ. /// </param> public static void GetObjForDate(DateTime date, ref DataObject obj, bool onlySelfObj = true, bool forceNullAgregator = false) { if (obj != null) { var objType = obj.GetType(); try { obj.DisableInitDataCopy(); // Не кидается исключение о не существовании объекта, если объект был удалён и ведётся аудит удаления, то он будет восстановлен со всеми своими собственными полями, иначе если аудит удаления отключен, у удаленного объекта будет проинициализирован только первичный ключ. DataServiceFactory.AppDataService.LoadObject(new View(objType, View.ReadType.WithRelated), obj, true, false); } catch (Exception ex) { throw new Exception($"Ошибка при попытке вычитать изменнённый объект из БД. {ex.Message}"); } List <AuditEntity> changedAuditEntity; try { var lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(AuditEntity), AuditEntity.Views.AuditEntityE); lcs.LimitFunction = FunctionBuilder.BuildAnd( #pragma warning disable CS0618 // Используем не дженерик вариант, иначе не работает вычитка FunctionBuilder.BuildEquals(nameof(AuditEntity.ObjectPrimaryKey), obj.__PrimaryKey), #pragma warning restore CS0618 // Тип или член устарел FunctionBuilder.BuildGreater <AuditEntity>(x => x.OperationTime, date)); // Загружаем изменения строго больше даты на которую хотим откатить => получаем объект в состоянии сразу после этой даты. lcs.ColumnsSort = new[] { new ColumnsSortDef(nameof(AuditEntity.OperationTime), SortOrder.Desc) }; changedAuditEntity = DataServiceFactory.AppDataService.LoadObjects(lcs).Cast <AuditEntity>().ToList(); } catch (Exception ex) { throw new Exception( $"Ошибка при попытке загрузить операции изменения {nameof(AuditEntity)} для объекта({obj.__PrimaryKey}). {ex.Message}"); } var auditFieldsLcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(AuditField), ViewForField); foreach (var changeEntity in changedAuditEntity) { if (changeEntity.OperationType != OperationCreateType) { List <AuditField> changedFields; try { // Загружаем набор изменившихся полей из аудита auditFieldsLcs.LimitFunction = FunctionBuilder.BuildEquals <AuditField>(x => x.AuditEntity, changeEntity); changedFields = DataServiceFactory.AppDataService.LoadObjects(auditFieldsLcs) .Cast <AuditField>().ToList(); } catch (Exception ex) { throw new Exception( $"Произошла ошибка при попытке получить набор изменений полей для операции аудита:{PKHelper.GetGuidByObject(changeEntity)}. {ex.Message}"); } //Берём только изменения, вспомогательные объекты LinkedPrimaryKey остаются в основном списке. var onlySelfChangedFields = changedFields.Where(y => y.MainChange == null); foreach (var changedField in onlySelfChangedFields) { var mainChange = changedFields.FirstOrDefault(x => PKHelper.EQPK(x.MainChange, changedField)); if (mainChange == null) { //Если основного изменения нет, то это обычное поле var propertyInfo = objType.GetProperty(changedField.Field); if (propertyInfo != null) { var typeprop = propertyInfo.PropertyType; object value = null; try { if (changedField.OldValue != null) { if (typeprop.IsEnum) { value = EnumCaption.GetValueFor(changedField.OldValue, typeprop); } else if (typeprop == typeof(NullableDateTime)) { value = NullableDateTime.Parse(changedField.OldValue); } else if (typeprop == typeof(NullableInt)) { value = NullableInt.Parse(changedField.OldValue); } else { value = Convert.ChangeType(changedField.OldValue, typeprop, CultureInfo.InvariantCulture); } } propertyInfo.SetValue(obj, value); } catch (Exception ex) { var errorText = value != null ? $"AuditField:{PKHelper.GetGuidByObject(changedField)} Ошибка при попытке установить значение поля {value} в объект {objType.Name}:{PKHelper.GetGuidByObject(obj)} поле {changedField.Field}" : $"AuditField:{PKHelper.GetGuidByObject(changedField)} Ошибка при попытке преобразовать значение поля {changedField.OldValue} в тип {typeprop.Name}"; throw new Exception($"{errorText}. {ex.Message}"); } } else { throw new Exception( $"Ошибка - не найдено поле {changedField.Field} в объекте {objType.Name}."); } } else { // Есть основное изменение, значит это изменение ссылочного объекта. // Только если изменилась ссылка if (mainChange.OldValue != mainChange.NewValue) { // В аудите детейл отличается от мастера тем, что у него приписывается в скобках позиция if (Regex.IsMatch(changedField.Field, "[ ][(][0-9]+[)]$")) { // Это изменение детейла объекта. var separateIndex = changedField.Field.IndexOf(" ", StringComparison.Ordinal); var detailNameFromField = changedField.Field.Substring(0, separateIndex); var propertyInfo = objType.GetProperty(detailNameFromField); if (propertyInfo != null) { if (propertyInfo.GetValue(obj) is DetailArray detailValue) { if (changedField.OldValue == "-NULL-") { var key = new KeyGuid(mainChange.NewValue); try { detailValue.RemoveByKey(key); } catch (Exception ex) { throw new Exception( $"Ошибка при попытке удалить объект с ключом {key} из детейла {detailNameFromField} в объекте {objType.Name}. {ex.Message}"); } } else { var detailItemType = detailValue.ItemType; var oldDetailObj = Helper.CreateDataObject(detailItemType, mainChange.OldValue); try { detailValue.AddObject(oldDetailObj); } catch (Exception ex) { throw new Exception( $"Ошибка при добавить объект с ключом {PKHelper.GetGuidByObject(oldDetailObj)} в детейл {detailNameFromField} в объекте {objType.Name}. {ex.Message}"); } } } } else { throw new Exception( $"Ошибка - не найден детейл {detailNameFromField} в объекте {objType.Name}."); } } else { // Это изменение мастера объекта. var propertyInfo = objType.GetProperty(changedField.Field); if (propertyInfo != null) { //Это свойство является агрегатором, для детейла var itIsAgregator = propertyInfo.GetCustomAttribute <AgregatorAttribute>() != null; if (changedField.OldValue == "-NULL-" || forceNullAgregator && itIsAgregator) { //Если свойство является агрегатором для детейла, то в последующих витках рекурсии всегда возвращаем нулл для такого поля, во избежание циклических ссылок. propertyInfo.SetValue(obj, null); } else { var typeprop = propertyInfo.PropertyType; var oldMasterObj = Helper.CreateDataObject(typeprop, mainChange.OldValue); try { propertyInfo.SetValue(obj, oldMasterObj); } catch (Exception ex) { throw new Exception( $"Ошибка при попытке установить свойство мастера {changedField.Field} в объекте {objType.Name}. {ex.Message}"); } } } else { throw new Exception( $"Ошибка - не найден мастер {changedField.Field} в объекте {objType.Name}."); } } } } } } else { // Если откатываем создание объекта, то возвращаем путой объект с первичным ключом. obj = Helper.CreateDataObject(objType, obj.__PrimaryKey); } } // На этом этапе основной объект и все его собственные поля и зависимые сущности возвращены на дату // Получаем мастера и откатываем их поля, рекурсивно вызывая этот метод // Получаем детейлы объекта и откатываем их поля, рекурсивно вызывая этот метод if (!onlySelfObj && changedAuditEntity.Any()) { var objProperties = objType.GetProperties(); foreach (var property in objProperties) { var typeprop = property.PropertyType; if (typeprop.IsSubclassOf(typeof(DataObject))) { //Перебираем все мастера var masterValue = property.GetValue(obj) as DataObject; GetObjForDate(date, ref masterValue, false, true); } else if (typeprop.IsSubclassOf(typeof(DetailArray))) { //Перебираем все детейлы if (property.GetValue(obj) is DetailArray detailValue) { var detailObjects = detailValue.GetAllObjects(); foreach (var dataObject in detailObjects) { var currentObj = dataObject; GetObjForDate(date, ref currentObj, false, true); } } } } } } }
public override FaktLgot Map(FactBenefits source, FaktLgot dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } if (attrs.Contains(FactBenefits.ConstAccrualDate)) { dest.DataNachisleniia = (NullableDateTime)source.AccrualDate; } if (attrs.Contains(FactBenefits.ConstReceiveDate)) { dest.DataPolucheniia = (NullableDateTime)source.ReceiveDate; } if (attrs.Contains(FactBenefits.ConstAmount)) { dest.Summa = (NullableDecimal)source.Amount; } if (attrs.Contains(FactBenefits.ConstAmountSocialPackage)) { dest.SummaSotcPaketa = (NullableDecimal)source.AmountSocialPackage; } if (attrs.Contains(FactBenefits.ConstComments)) { dest.Kommentarii = source.Comments; } if (attrs.Contains(FactBenefits.ConstPaymentMethod)) { dest.SposobOplaty = (tSposobOplaty)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.PaymentMethod), typeof(tSposobOplaty)); } if (attrs.Contains(FactBenefits.ConstOverpaymentDateFrom)) { dest.DataPereplS = (NullableDateTime)source.OverpaymentDateFrom; } if (attrs.Contains(FactBenefits.ConstOverpaymentDateTo)) { dest.DataPereplPo = (NullableDateTime)source.OverpaymentDateTo; } if (attrs.Contains(FactBenefits.ConstMediumBenefit)) { dest.NositelLgoty = source.MediumBenefit == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.MediumBenefit.Guid); } if (attrs.Contains(FactBenefits.ConstDependent)) { dest.Izhdivenetc = source.Dependent == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Dependent.Guid); } if (attrs.Contains(FactBenefits.ConstRecipient)) { dest.Poluchatel = source.Recipient == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Recipient.Guid); } if (attrs.Contains(FactBenefits.ConstBenefit)) { dest.Lgota = source.Benefit == null ? null : PKHelper.CreateDataObject <Lgota>(source.Benefit.Guid); } if (attrs.Contains(FactBenefits.ConstSocialProtectionAuthority)) { dest.OrganSZ = source.SocialProtectionAuthority == null ? null : PKHelper.CreateDataObject <OrganSZ>(source.SocialProtectionAuthority.Guid); } if (attrs.Contains(FactBenefits.ConstPeriod)) { dest.Period = source.Period == null ? null : PKHelper.CreateDataObject <Period>(source.Period.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); }
public override Stroenie Map(Structure source, Stroenie dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } else { if (attrs.Contains(Structure.ConstFIAS)) { dest.KodFIAS = source.FIAS; } if (attrs.Contains(Structure.ConstType)) { dest.VidStroeniia = (tVidStroeniia)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.TypeStructure), typeof(tVidStroeniia)); } if (attrs.Contains(Structure.ConstNumber)) { dest.Nomer = (uint)source.Number; } if (attrs.Contains(Structure.ConstPostIndex)) { dest.PochtIndeks = source.PostIndex; } if (attrs.Contains(Structure.ConstAdditional)) { dest.DopStroenie = source.Additional; } if (attrs.Contains(Structure.ConstVerificationCode)) { dest.KodPodtverzhd = source.VerificationCode == null ? 0 : (uint)source.VerificationCode; } if (attrs.Contains(Structure.ConstArea)) { dest.Raion = source.Area == null ? null : PKHelper.CreateDataObject <Territoriia>(source.Area.Guid); } if (attrs.Contains(Structure.ConstStreet)) { dest.Ulitca = source.Street == null ? null : PKHelper.CreateDataObject <Ulitca>(source.Street.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); } }
public override IzmenenieNaznachVypl Map(ChangeAppointmentPayment source, IzmenenieNaznachVypl dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } if (attrs.Contains(ChangeAppointmentPayment.ConstAppointmentDate)) { dest.DataNaznacheniia = (NullableDateTime)source.AppointmentDate; } if (attrs.Contains(ChangeAppointmentPayment.ConstCancellationDate)) { dest.DataOtmeny = (NullableDateTime)source.CancellationDate; } if (attrs.Contains(ChangeAppointmentPayment.ConstPaymentType)) { dest.TipVypl = (tTipVyplaty)EnumCaption.GetValueFor(source.PaymentType.ToString(), typeof(tTipVyplaty)); } if (attrs.Contains(ChangeAppointmentPayment.ConstPeriod)) { dest.PeriodPredost = (tTipPerioda)EnumCaption.GetValueFor(EnumCaption.GetCaptionFor(source.Period), typeof(tTipPerioda)); } if (attrs.Contains(ChangeAppointmentPayment.ConstAmount)) { dest.Summa = (NullableDecimal)source.Amount; } if (attrs.Contains(ChangeAppointmentPayment.ConstNote)) { dest.Primechanie = source.Note; } if (attrs.Contains(ChangeAppointmentPayment.ConstSocialProtectionAuthority)) { dest.OrganSZ = source.SocialProtectionAuthority == null ? null : PKHelper.CreateDataObject <OrganSZ>(source.SocialProtectionAuthority.Guid); } if (attrs.Contains(ChangeAppointmentPayment.ConstBeneficiaryPreferentialCategory)) { dest.LgKatLeechnosti = source.BeneficiaryPreferentialCategory == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.BeneficiaryPreferentialCategory.Guid); } if (attrs.Contains(ChangeAppointmentPayment.ConstRecipient)) { dest.Poluchatel = source.Recipient == null ? null : PKHelper.CreateDataObject <Leechnost>(source.Recipient.Guid); } if (attrs.Contains(ChangeAppointmentPayment.ConstPaymentAppointment)) { dest.Naznachenie = source.PaymentAppointment == null ? null : PKHelper.CreateDataObject <NaznachenieVyplaty>(source.PaymentAppointment.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); }
public override Invalidnost Map(Disability source, Invalidnost dest, List <string> attrs) { if (dest.GetStatus() == ObjectStatus.Created || attrs == null) { return(Map(source, dest)); } if (attrs.Contains(Disability.ConstGroup)) { dest.Gruppa = (tGruppaInvalidnosti)EnumCaption.GetValueFor(source.Group.ToString(), typeof(tGruppaInvalidnosti)); } if (attrs.Contains(Disability.ConstReferenceNumberVTEK)) { dest.NomerSpravkiVTEK = source.ReferenceNumberVTEK; } if (attrs.Contains(Disability.ConstIssueDateVTEK)) { dest.DataVydSpravVTEK = (NullableDateTime)source.IssueDateVTEK; } if (attrs.Contains(Disability.ConstOrgName)) { dest.OrganVydSprav = source.OrgName; } if (attrs.Contains(Disability.ConstDisabilityDegree)) { dest.StepenOgranichTrudosp = (tGruppaInvalidnosti)EnumCaption.GetValueFor(source.DisabilityDegree.ToString(), typeof(tGruppaInvalidnosti)); } if (attrs.Contains(Disability.ConstReferenceIssuedBy)) { dest.KemVydSprMSE = source.ReferenceIssuedBy == null ? null : PKHelper.CreateDataObject <OrganVydDok>(source.ReferenceIssuedBy?.Guid); } if (attrs.Contains(Disability.ConstBeneficiaryPreferentialCategory)) { dest.LgKatLeechnosti = source.BeneficiaryPreferentialCategory == null ? null : PKHelper.CreateDataObject <LgKatLeechnosti>(source.BeneficiaryPreferentialCategory?.Guid); } if (attrs.Contains(SyncXMLDataObject.ConstCreateTime)) { dest.CreateTime = source.CreateTime; } if (attrs.Contains(SyncXMLDataObject.ConstCreator)) { dest.Creator = source.Creator; } if (attrs.Contains(SyncXMLDataObject.ConstEditTime)) { dest.EditTime = source.EditTime; } if (attrs.Contains(SyncXMLDataObject.ConstEditor)) { dest.Editor = source.Editor; } return(dest); }