/// <summary> /// Retrieves PartnerAttribute information. /// </summary> /// <param name="APartnerKey">PartnerKey of Partner to find the short name for</param> /// <param name="APartnerInfoDS">Typed DataSet that contains the requested data.</param> /// <param name="AReadTransaction">Open Database Transaction.</param> private static void PartnerAttributesInternal(Int64 APartnerKey, ref PartnerInfoTDS APartnerInfoDS, TDBTransaction AReadTransaction) { /* * Load PartnerAttribute Information; this gets merged into the already retrieved * information in APartnerInfoDS (eg. 'Head' data) */ APartnerInfoDS.Merge(PPartnerAttributeAccess.LoadViaPPartner(APartnerKey, AReadTransaction)); }
/// <summary> /// Gets the Contact Detail Attributes for a Partner. /// </summary> /// <param name="APartnerKey">PartnerKey of the Partner.</param> /// <returns>An instance of <see cref="PPartnerAttributeTable"/> that holds the /// p_partner_attribute records for the Partner. Every Partner Attribute that *is* a Partner Contact Attribute /// is marked with 'true' in the special Column /// <see cref="Ict.Petra.Shared.MPartner.Calculations.PARTNERATTRIBUTE_PARTNERCONTACTDETAIL_COLUMN"/>! /// </returns> public static PPartnerAttributeTable GetPartnersContactDetailAttributes(Int64 APartnerKey) { PPartnerAttributeTable ReturnValue = null; TDBTransaction ReadTransaction = new TDBTransaction(); DBAccess.ReadTransaction( ref ReadTransaction, delegate { // Load all PPartnerAttribute records of the Partner and put them into a DataTable ReturnValue = PPartnerAttributeAccess.LoadViaPPartner(APartnerKey, ReadTransaction); Calculations.DeterminePartnerContactDetailAttributes(ReturnValue); }); return(ReturnValue); }
/// <summary> /// Gets the Contact Detail Attributes for a Partner. /// </summary> /// <param name="APartnerKey">PartnerKey of the Partner.</param> /// <returns>An instance of <see cref="PPartnerAttributeTable"/> that holds the /// p_partner_attribute records for the Partner. Every Partner Attribute that *is* a Partner Contact Attribute /// is marked with 'true' in the special Column /// <see cref="Ict.Petra.Shared.MPartner.Calculations.PARTNERATTRIBUTE_PARTNERCONTACTDETAIL_COLUMN"/>! /// </returns> public static PPartnerAttributeTable GetPartnersContactDetailAttributes(Int64 APartnerKey) { PPartnerAttributeTable ReturnValue = null; TDBTransaction ReadTransaction = null; DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted, TEnforceIsolationLevel.eilMinimum, ref ReadTransaction, delegate { // Load all PPartnerAttribute records of the Partner and put them into a DataTable ReturnValue = PPartnerAttributeAccess.LoadViaPPartner(APartnerKey, ReadTransaction); Calculations.DeterminePartnerContactDetailAttributes(ReturnValue); }); return(ReturnValue); }
/// <summary> /// Determines the 'Primary' and/or 'Within Organisation' setting(s) for a Partner. /// </summary> /// <param name="AReadTransaction"></param> /// <param name="APartnerKey">PartnerKey of the Partner.</param> /// <param name="AOverallContSettingKind">Specify the kind of Overall Contact Setting(s) that you want returned. /// Combine multiple ones with the binary OR operator ( | ).</param> /// <param name="APartnerAttributeDT">Contains the Partners' p_partner_attribute records. The ones that are /// 'Contact Details' have 'true' in the Column /// <see cref="Calculations.PARTNERATTRIBUTE_PARTNERCONTACTDETAIL_COLUMN"/>!</param> /// <returns>An instance of <see cref="Calculations.TPartnersOverallContactSettings"/> that holds the /// <see cref="Calculations.TPartnersOverallContactSettings"/> for the Partner. However, it returns null /// in case the Partner hasn't got any p_partner_attribute records, or when the Partner has no p_partner_attribute /// records that constitute Contact Detail records, or when the Partner has got only one p_partner_attribute record /// but this records' Current flag is false. It also returns null if no record was found that met what was asked for /// with <paramref name="AOverallContSettingKind"/>!</returns> public static Calculations.TPartnersOverallContactSettings GetPartnersOverallCS( TDBTransaction AReadTransaction, Int64 APartnerKey, Calculations.TOverallContSettingKind AOverallContSettingKind, out PPartnerAttributeTable APartnerAttributeDT) { Calculations.TPartnersOverallContactSettings PrimaryContactAttributes = null; TDBTransaction ReadTransaction = new TDBTransaction(); PPartnerAttributeTable PartnerAttributeDT = null; DBAccess.ReadTransaction( ref ReadTransaction, delegate { // Load all PPartnerAttribute records of the Partner and put them into a DataTable PartnerAttributeDT = PPartnerAttributeAccess.LoadViaPPartner(APartnerKey, ReadTransaction); if (PartnerAttributeDT.Rows.Count > 0) { Calculations.DeterminePartnerContactDetailAttributes(ReadTransaction, PartnerAttributeDT); PrimaryContactAttributes = Calculations.DeterminePrimaryOrWithinOrgSettingsForPartner( AReadTransaction, PartnerAttributeDT, AOverallContSettingKind); if (((AOverallContSettingKind & Calculations.TOverallContSettingKind.ocskPrimaryContactMethod) == Calculations.TOverallContSettingKind.ocskPrimaryContactMethod) || ((AOverallContSettingKind & Calculations.TOverallContSettingKind.ocskSecondaryEmailAddress) == Calculations.TOverallContSettingKind.ocskSecondaryEmailAddress)) { if (PrimaryContactAttributes == null) { PrimaryContactAttributes = new Calculations.TPartnersOverallContactSettings(); } Calculations.DeterminePartnerSystemCategorySettings( AReadTransaction, PartnerAttributeDT, ref PrimaryContactAttributes, AOverallContSettingKind); } } }); APartnerAttributeDT = PartnerAttributeDT; return(PrimaryContactAttributes); }
/// <summary> /// Load all the data of a partner into a TDS /// </summary> public static PartnerImportExportTDS ExportPartner(Int64 APartnerKey, TPartnerClass?APartnerClass = null) { PartnerImportExportTDS MainDS = new PartnerImportExportTDS(); TDBTransaction Transaction = new TDBTransaction(); DBAccess.ReadTransaction( ref Transaction, delegate { PPartnerAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); // APartnerClass is optional but if it was not provided we need to assign to it now if (APartnerClass == null) { APartnerClass = SharedTypes.PartnerClassStringToEnum(MainDS.PPartner[0].PartnerClass); } if (APartnerClass == TPartnerClass.CHURCH) { PChurchAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); } else if (APartnerClass == TPartnerClass.FAMILY) { PFamilyAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); PPartnerGiftDestinationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); } else if (APartnerClass == TPartnerClass.PERSON) { PPersonAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); PmPersonalDataAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); PmPassportDetailsAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmDocumentAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PmDocumentTypeAccess.LoadAll(MainDS, Transaction); PmPersonQualificationAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmSpecialNeedAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmPastExperienceAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmPersonLanguageAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmPersonAbilityAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmStaffDataAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmJobAssignmentAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PmPersonEvaluationAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmPersonSkillAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmGeneralApplicationAccess.LoadViaPPersonPartnerKey(MainDS, APartnerKey, Transaction); PtApplicationTypeAccess.LoadAll(MainDS, Transaction); PmShortTermApplicationAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); PmYearProgramApplicationAccess.LoadViaPPerson(MainDS, APartnerKey, Transaction); } else if (APartnerClass == TPartnerClass.ORGANISATION) { POrganisationAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); } else if (APartnerClass == TPartnerClass.UNIT) { PUnitAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); UmUnitStructureAccess.LoadViaPUnitChildUnitKey(MainDS, APartnerKey, Transaction); UmUnitAbilityAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmUnitLanguageAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmUnitCostAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmJobAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmJobRequirementAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmJobLanguageAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); UmJobQualificationAccess.LoadViaPUnit(MainDS, APartnerKey, Transaction); } else if (APartnerClass == TPartnerClass.VENUE) { PVenueAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); PcBuildingAccess.LoadViaPVenue(MainDS, APartnerKey, Transaction); PcRoomAccess.LoadViaPVenue(MainDS, APartnerKey, Transaction); } PPartnerAttributeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PPartnerLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PPartnerCommentAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PPartnerTypeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PPartnerInterestAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PInterestAccess.LoadAll(MainDS, Transaction); }); return(MainDS); }
public static PartnerEditTDS GetPartnerDetails(Int64 APartnerKey, out List <string> ASubscriptions, out List <string> APartnerTypes, out string ADefaultEmailAddress, out string ADefaultPhoneMobile, out string ADefaultPhoneLandline) { PartnerEditTDS MainDS = new PartnerEditTDS(); List <string> Subscriptions = new List <string>(); List <string> PartnerTypes = new List <string>(); string DefaultEmailAddress = String.Empty; string DefaultPhoneMobile = String.Empty; string DefaultPhoneLandline = String.Empty; TDBTransaction Transaction = null; DBAccess.GDBAccessObj.BeginAutoReadTransaction(IsolationLevel.ReadCommitted, ref Transaction, delegate { PPartnerAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); if (MainDS.PPartner.Rows.Count > 0) { switch (MainDS.PPartner[0].PartnerClass) { case MPartnerConstants.PARTNERCLASS_FAMILY: PFamilyAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_PERSON: PPersonAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_CHURCH: PChurchAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_ORGANISATION: POrganisationAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_BANK: PBankAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_UNIT: PUnitAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; } if (true) { PPartnerLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); } if (true) { PPartnerRelationshipAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } if (true) { PPublicationAccess.LoadAll(MainDS, Transaction); PSubscriptionAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); foreach (PSubscriptionRow subscription in MainDS.PSubscription.Rows) { Subscriptions.Add(subscription.PublicationCode); } } PPartnerStatusAccess.LoadAll(MainDS, Transaction); PTypeAccess.LoadAll(MainDS, Transaction); PPartnerTypeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); foreach (PPartnerTypeRow partnertype in MainDS.PPartnerType.Rows) { PartnerTypes.Add(partnertype.TypeCode); } PPartnerAttributeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); foreach (PPartnerAttributeRow partnerattr in MainDS.PPartnerAttribute.Rows) { if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_EMAIL) { DefaultEmailAddress = partnerattr.Value; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_PHONE) { DefaultPhoneLandline = partnerattr.Value; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_MOBILE_PHONE) { DefaultPhoneMobile = partnerattr.Value; } } } }); APartnerTypes = PartnerTypes; ASubscriptions = Subscriptions; ADefaultEmailAddress = DefaultEmailAddress; ADefaultPhoneMobile = DefaultPhoneMobile; ADefaultPhoneLandline = DefaultPhoneLandline; return(MainDS); }
public static PartnerEditTDS GetPartnerDetails(Int64 APartnerKey, out List <string> ASubscriptions, out List <string> APartnerTypes, out string ADefaultEmailAddress, out string ADefaultPhoneMobile, out string ADefaultPhoneLandline) { PartnerEditTDS MainDS = new PartnerEditTDS(); List <string> Subscriptions = new List <string>(); List <string> PartnerTypes = new List <string>(); string DefaultEmailAddress = String.Empty; string DefaultPhoneMobile = String.Empty; string DefaultPhoneLandline = String.Empty; TDBTransaction Transaction = new TDBTransaction(); DBAccess.ReadTransaction(ref Transaction, delegate { PPartnerAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); if (MainDS.PPartner.Rows.Count > 0) { switch (MainDS.PPartner[0].PartnerClass) { case MPartnerConstants.PARTNERCLASS_FAMILY: PFamilyAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_PERSON: PPersonAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_CHURCH: PChurchAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_ORGANISATION: POrganisationAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_BANK: PBankAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; case MPartnerConstants.PARTNERCLASS_UNIT: PUnitAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); break; } if (true) { PPartnerLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); } if (true) { PPartnerRelationshipAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } if (true) { PCountryAccess.LoadAll(MainDS, Transaction); } if (true) { PPublicationAccess.LoadAll(MainDS, Transaction); PSubscriptionAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); foreach (PSubscriptionRow subscription in MainDS.PSubscription.Rows) { Subscriptions.Add(subscription.PublicationCode); } } if (true) { PBankingDetailsAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PPartnerBankingDetailsAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PBankingDetailsUsageAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); foreach (PartnerEditTDSPBankingDetailsRow banking in MainDS.PBankingDetails.Rows) { PBankAccess.LoadByPrimaryKey(MainDS, banking.BankKey, Transaction); banking.Bic = MainDS.PBank[0].Bic; banking.BranchName = MainDS.PBank[0].BranchName; banking.Iban = FormatIBAN(banking.Iban); MainDS.PBank.Rows.Clear(); } foreach (PartnerEditTDSPBankingDetailsRow bd in MainDS.PBankingDetails.Rows) { bd.MainAccount = (MainDS.PBankingDetailsUsage.Rows.Find( new object[] { APartnerKey, bd.BankingDetailsKey, MPartnerConstants.BANKINGUSAGETYPE_MAIN }) != null); } MainDS.PBankingDetailsUsage.Rows.Clear(); } PPartnerStatusAccess.LoadAll(MainDS, Transaction); PTypeRow templateRow = MainDS.PType.NewRowTyped(); templateRow.SystemType = false; templateRow.SetTypeDeletableNull(); templateRow.SetDateCreatedNull(); PTypeAccess.LoadUsingTemplate(MainDS, templateRow, Transaction); PPartnerTypeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); foreach (PPartnerTypeRow partnertype in MainDS.PPartnerType.Rows) { PartnerTypes.Add(partnertype.TypeCode); } PPartnerAttributeAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); foreach (PPartnerAttributeRow partnerattr in MainDS.PPartnerAttribute.Rows) { if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_EMAIL) { DefaultEmailAddress = partnerattr.Value; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_PHONE) { DefaultPhoneLandline = partnerattr.Value; } else if (partnerattr.AttributeType == MPartnerConstants.ATTR_TYPE_MOBILE_PHONE) { DefaultPhoneMobile = partnerattr.Value; } } } }); APartnerTypes = PartnerTypes; ASubscriptions = Subscriptions; ADefaultEmailAddress = DefaultEmailAddress; ADefaultPhoneMobile = DefaultPhoneMobile; ADefaultPhoneLandline = DefaultPhoneLandline; return(MainDS); }
/// Upgrade to version 2015-01 public static bool UpgradeDatabase201412_201501() { // There are no new tables and fields TDBTransaction SubmitChangesTransaction = null; TSubmitChangesResult SubmissionResult = TSubmitChangesResult.scrError; DBAccess.GDBAccessObj.BeginAutoTransaction(IsolationLevel.Serializable, ref SubmitChangesTransaction, ref SubmissionResult, delegate { PPartnerAttributeTable partnerattributes = new PPartnerAttributeTable(); PPartnerLocationTable partnerlocations = PPartnerLocationAccess.LoadAll(SubmitChangesTransaction); // this update only works for very simple databases, only one partner location record per partner... if (partnerlocations.Count > 1000) { throw new Exception("the upgrade has not been optimized for huge databases"); } List <Int64> PartnerKeys = new List <Int64>(); foreach (PPartnerLocationRow partnerlocation in partnerlocations.Rows) { if (!PartnerKeys.Contains(partnerlocation.PartnerKey)) { PartnerKeys.Add(partnerlocation.PartnerKey); } else { TLogging.Log("several locations for partner " + partnerlocation.PartnerKey.ToString()); } } // Number for the p_sequence_i Column. Gets increased with every p_partner_attribute record that gets produced! int SequenceNumber = 0; foreach (Int64 partnerkey in PartnerKeys) { // Get that Partner's p_partner_location records from PPartnerLocationRecords DataRow[] CurrentRows = partnerlocations.Select(PPartnerLocationTable.GetPartnerKeyDBName() + " = " + partnerkey.ToString()); if (CurrentRows.Length == 0) { continue; } DataTable PPartnersLocationsDT = GetNewPPartnerLocationTableInstance(); foreach (DataRow r in CurrentRows) { PPartnersLocationsDT.Rows.Add(r.ItemArray); } TLocationPK bestAddress = Calculations.DetermineBestAddress(PPartnersLocationsDT); int IndexPhone = 0; int IndexEmail = 0; int IndexFax = 0; int IndexUrl = 0; int IndexMobile = 0; List <string> AvoidDuplicates = new List <string>(); string AttributeConcatenated; foreach (PPartnerLocationRow partnerlocation in PPartnersLocationsDT.Rows) { bool primaryAddress = (bestAddress.LocationKey == partnerlocation.LocationKey && bestAddress.SiteKey == partnerlocation.SiteKey); bool currentAddress = (((int)partnerlocation[PARTNERLOCATION_ICON_COLUMN]) == 1); bool businessAddress = (partnerlocation.LocationType == "BUSINESS" || partnerlocation.LocationType == "FIELD"); // TODO: avoid duplicate entries with the same type if (!partnerlocation.IsEmailAddressNull()) { PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.EmailAddress; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_EMAIL; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexEmail++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetEmailAddressNull(); } if (!partnerlocation.IsTelephoneNumberNull()) { if (!partnerlocation.IsExtensionNull()) { partnerlocation.TelephoneNumber += "-" + partnerlocation.Extension; } PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.TelephoneNumber; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_PHONE; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexPhone++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetTelephoneNumberNull(); } if (!partnerlocation.IsFaxNumberNull()) { if (!partnerlocation.IsFaxExtensionNull()) { partnerlocation.FaxNumber += "-" + partnerlocation.FaxExtension; } PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.FaxNumber; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_FAX; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexFax++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetFaxNumberNull(); } if (!partnerlocation.IsAlternateTelephoneNull()) { PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.AlternateTelephone; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_PHONE; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexPhone++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetAlternateTelephoneNull(); } if (!partnerlocation.IsMobileNumberNull()) { PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.MobileNumber; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_MOBILE_PHONE; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexMobile++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetMobileNumberNull(); } if (!partnerlocation.IsUrlNull()) { PPartnerAttributeRow partnerattribute = partnerattributes.NewRowTyped(); partnerattribute.Sequence = SequenceNumber++; partnerattribute.PartnerKey = partnerlocation.PartnerKey; partnerattribute.Value = partnerlocation.Url; partnerattribute.AttributeType = MPartnerConstants.ATTR_TYPE_WEBSITE; partnerattribute.Current = currentAddress; partnerattribute.Primary = primaryAddress; partnerattribute.Index = IndexUrl++; partnerattribute.Specialised = businessAddress; partnerattribute.NoLongerCurrentFrom = partnerlocation.DateGoodUntil; AttributeConcatenated = ConcatPartnerAttributes(partnerattribute); if (!AvoidDuplicates.Contains(AttributeConcatenated)) { partnerattributes.Rows.Add(partnerattribute); AvoidDuplicates.Add(AttributeConcatenated); } else { TLogging.Log("dropping duplicate " + AttributeConcatenated); } partnerlocation.SetUrlNull(); } } } PPartnerLocationAccess.SubmitChanges(partnerlocations, SubmitChangesTransaction); PPartnerAttributeAccess.SubmitChanges(partnerattributes, SubmitChangesTransaction); SubmissionResult = TSubmitChangesResult.scrOK; }); return(true); }