public static PartnerEditTDS GetPartnerDetails(Int64 APartnerKey, bool AWithAddressDetails, bool AWithSubscriptions, bool AWithRelationships) { PartnerEditTDS MainDS = new PartnerEditTDS(); 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; } if (AWithAddressDetails) { PPartnerLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); } if (AWithRelationships) { PPartnerRelationshipAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } if (AWithSubscriptions) { PSubscriptionAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } } }); return MainDS; }
public static PartnerEditTDS GetPartnerDetails(Int64 APartnerKey, bool AWithAddressDetails, bool AWithSubscriptions, bool AWithRelationships) { PartnerEditTDS MainDS = new PartnerEditTDS(); TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.Serializable); PPartnerAccess.LoadByPrimaryKey(MainDS, APartnerKey, Transaction); if (MainDS.PPartner.Rows.Count == 0) { return(null); } 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; } if (AWithAddressDetails) { PPartnerLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); PLocationAccess.LoadViaPPartner(MainDS, APartnerKey, Transaction); } if (AWithRelationships) { PPartnerRelationshipAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } if (AWithSubscriptions) { PSubscriptionAccess.LoadViaPPartnerPartnerKey(MainDS, APartnerKey, Transaction); } DBAccess.GDBAccessObj.RollbackTransaction(); 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); }
/// <summary> /// Retrieves 'Rest' of Partner Information data. /// </summary> /// <param name="APartnerDR">DataRow that contains the Partner data.</param> /// <param name="APartnerInfoDS" >Typed PartnerInfoTDS DataSet</param> /// <param name="AReadTransaction" >Open DB Transaction.</param> private static void RestInternal(PPartnerRow APartnerDR, ref PartnerInfoTDS APartnerInfoDS, TDBTransaction AReadTransaction) { PartnerInfoTDSPartnerAdditionalInfoRow PartnerInfoDR; TPartnerClass PartnerClass; DateTime LastContactDate; PPersonTable PersonDT; PPartnerTable FamilyPartnerDT; Int64 PartnerKey = APartnerDR.PartnerKey; /* * Load Special Types */ PPartnerTypeAccess.LoadViaPPartner(APartnerInfoDS, PartnerKey, AReadTransaction); /* * Load Subscriptions */ PSubscriptionAccess.LoadViaPPartnerPartnerKey(APartnerInfoDS, PartnerKey, AReadTransaction); #region Populate PartnerAdditionalInfo Table if (APartnerInfoDS.PartnerAdditionalInfo.Rows.Count == 0) { PartnerInfoDR = APartnerInfoDS.PartnerAdditionalInfo.NewRowTyped(false); } else { PartnerInfoDR = APartnerInfoDS.PartnerAdditionalInfo[0]; } if (!APartnerDR.IsCommentNull()) { PartnerInfoDR.Notes = APartnerDR.Comment.Trim(); } if (!APartnerDR.IsDateCreatedNull()) { PartnerInfoDR.DateCreated = APartnerDR.DateCreated; } if (!APartnerDR.IsDateModifiedNull()) { PartnerInfoDR.DateModified = APartnerDR.DateModified; } if (!APartnerDR.IsLanguageCodeNull()) { PartnerInfoDR.MainLanguages = APartnerDR.LanguageCode; } if (!APartnerDR.IsPreviousNameNull()) { PartnerInfoDR.PreviousName = APartnerDR.PreviousName; } // Determination of Last Contact Date TMailroom.GetLastContactDate(PartnerKey, out LastContactDate, AReadTransaction.DataBaseObj); PartnerInfoDR.LastContact = LastContactDate; /* * Special Data according to Partner Class */ PartnerClass = SharedTypes.PartnerClassStringToEnum(APartnerDR.PartnerClass); switch (PartnerClass) { case TPartnerClass.PERSON: PersonDT = PPersonAccess.LoadByPrimaryKey(APartnerDR.PartnerKey, AReadTransaction); if (PersonDT != null) { if (!PersonDT[0].IsDateOfBirthNull()) { PartnerInfoDR.DateOfBirth = PersonDT[0].DateOfBirth; } // Get Family Members info APartnerInfoDS.Merge(GetFamilyMembers(PersonDT[0].FamilyKey, AReadTransaction)); // Get Family Partner info FamilyPartnerDT = PPartnerAccess.LoadByPrimaryKey(PersonDT[0].FamilyKey, AReadTransaction); if (FamilyPartnerDT != null) { PartnerInfoDR.Family = FamilyPartnerDT[0].PartnerShortName; PartnerInfoDR.FamilyKey = FamilyPartnerDT[0].PartnerKey; } // Get the Languages of a Person from Personnel PartnerInfoDR.AdditionalLanguages = GetPersonLanguagesFromPersonnel( APartnerDR.PartnerKey, PartnerInfoDR.MainLanguages, AReadTransaction); } break; case TPartnerClass.FAMILY: // Get Family Members info APartnerInfoDS.Merge(GetFamilyMembers(PartnerKey, AReadTransaction)); break; case TPartnerClass.UNIT: // Get Unit structure info APartnerInfoDS.Merge(GetUnitStructure(PartnerKey, AReadTransaction)); break; } // Get Partners' PartnerAttributes PartnerAttributesInternal(PartnerKey, ref APartnerInfoDS, false, AReadTransaction); // TODO: Apply Contact Details Security if (APartnerInfoDS.PartnerAdditionalInfo.Rows.Count == 0) { APartnerInfoDS.PartnerAdditionalInfo.Rows.Add(PartnerInfoDR); } #endregion }
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); }
/// <summary> /// First loads the extractTable needed. Goes throught all the Partners in the extract, If the partner already has the subscription, returns all those partners back to client. If the partner doesn't have the subscription, saves this /// subscription to those partners. /// </summary> /// <returns>void</returns> private void SubmitChangesInternal() { TDBTransaction SubmitChangesTransaction = null; TSubmitChangesResult SubmissionResult = TSubmitChangesResult.scrNothingToBeSaved; MExtractTable ExtractDT; PSubscriptionTable SubscriptionTable; PPartnerTable PartnerTable; Int32 RowCounter; Int32 PartnersInExtract; StringCollection RequiredColumns; StringCollection RequiredColumns2; if (FInspectDT != null) { // Initialisations FVerificationResult = new TVerificationResultCollection(); ExtractDT = new MExtractTable(); SubscriptionTable = new PSubscriptionTable(); FSubmissionDT = SubscriptionTable.Clone(); ((TTypedDataTable)FSubmissionDT).InitVars(); PartnerTable = new PPartnerTable(); RequiredColumns = new StringCollection(); RequiredColumns.Add(MExtractTable.GetPartnerKeyDBName()); RequiredColumns2 = new StringCollection(); RequiredColumns2.Add(PPartnerTable.GetPartnerKeyDBName()); RequiredColumns2.Add(PPartnerTable.GetPartnerShortNameDBName()); RowCounter = 0; // Set up asynchronous execution TProgressTracker.SetCurrentState(FProgressID, "Checking Partners' Subscriptions...", 0.0m); DBAccess.GDBAccessObj.BeginAutoTransaction(IsolationLevel.Serializable, ref SubmitChangesTransaction, ref SubmissionResult, delegate { try { // TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: loading Subscriptions for ExtractID " + FExtractID.ToString() + "..."); ExtractDT = MExtractAccess.LoadViaMExtractMaster(FExtractID, RequiredColumns, SubmitChangesTransaction); PartnersInExtract = ExtractDT.Rows.Count; // TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: ExtractID has " + PartnersInExtract.ToString() + " Partners."); // Go throught all the Partners in the extract foreach (MExtractRow ExtractRow in ExtractDT.Rows) { RowCounter = RowCounter + 1; // Calculate how much Partners we have checked. Let all Partners be a maximum of 70%. TProgressTracker.SetCurrentState( FProgressID, string.Empty, Convert.ToInt16((((double)RowCounter / (double)PartnersInExtract) * 100) * (MAX_PERCENTAGE_CHECKS / 100.0))); TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: loadbyPrimaryKey"); SubscriptionTable = PSubscriptionAccess.LoadByPrimaryKey( FInspectDT[0].PublicationCode, ExtractRow.PartnerKey, SubmitChangesTransaction); // if the Partner does not yet have the subscription, add the subscription to this partner. if (SubscriptionTable.Rows.Count == 0) { TLogging.LogAtLevel( 7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: will add Subscription to Partner with PartnerKey " + ExtractRow.PartnerKey.ToString()); FInspectDT[0].PartnerKey = ExtractRow.PartnerKey; TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: importing Row into FSubmissionDT..."); FSubmissionDT.ImportRow(FInspectDT[0]); } else { // The partner already has this Subscription: add the partner to the ResponseTable // TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: won't add Subscription to Partner with PartnerKey " + ExtractRow.PartnerKey.ToString()); PartnerTable = PPartnerAccess.LoadByPrimaryKey(ExtractRow.PartnerKey, RequiredColumns2, SubmitChangesTransaction); if (FResponseDT == null) { FResponseDT = PartnerTable.Clone(); } FResponseDT.ImportRow(PartnerTable[0]); } } TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: Finished checking Partner's Subscriptions."); if (FSubmissionDT.Rows.Count > 0) { // Submit the Partners with new Subscriptions to the PSubscription Table. TProgressTracker.SetCurrentState( FProgressID, "Adding Subscriptions to " + FSubmissionDT.Rows.Count.ToString() + " Partners...", MAX_PERCENTAGE_CHECKS); // TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: " + FAsyncExecProgress.ProgressInformation); PSubscriptionAccess.SubmitChanges((PSubscriptionTable)FSubmissionDT, SubmitChangesTransaction); } else { TLogging.LogAtLevel( 7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: no Subscriptions were added to Partners because all the Partners in the Extract already had this Subscription."); } SubmissionResult = TSubmitChangesResult.scrOK; } catch (Exception Exp) { TLogging.LogAtLevel(7, "TExtractsAddSubscriptionsUIConnector.SubmitChangesInternal: Exception occured, Transaction will get ROLLED BACK. Exception: " + Exp.ToString()); SubmissionResult = TSubmitChangesResult.scrError; FSubmitResult = SubmissionResult; FSubmitException = Exp; TProgressTracker.CancelJob(FProgressID); return; } }); } // if no values at response table, it needs to be created. If not creates, will raise exeption at client side. if (FResponseDT == null) { FResponseDT = new DataTable(); } TProgressTracker.FinishJob(FProgressID); FSubmitResult = SubmissionResult; }