public static bool NeedMainBankAccount(long AFromPartnerKey, long AToPartnerKey) { TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.ReadCommitted); try { PPartnerBankingDetailsTable FromBankingDetailsTable = PPartnerBankingDetailsAccess.LoadViaPPartner(AFromPartnerKey, Transaction); PPartnerBankingDetailsTable ToBankingDetailsTable = PPartnerBankingDetailsAccess.LoadViaPPartner(AToPartnerKey, Transaction); int MainBankAccounts = 0; int FromBankAccounts = FromBankingDetailsTable.Rows.Count; int ToBankAccounts = ToBankingDetailsTable.Rows.Count; if (FromBankAccounts > 0) { foreach (DataRow Row in FromBankingDetailsTable.Rows) { PPartnerBankingDetailsRow FromRow = (PPartnerBankingDetailsRow)Row; if (PBankingDetailsUsageAccess.Exists(AFromPartnerKey, FromRow.BankingDetailsKey, "MAIN", Transaction)) { MainBankAccounts += 1; } } } if (ToBankAccounts > 0) { foreach (DataRow Row in ToBankingDetailsTable.Rows) { PPartnerBankingDetailsRow FromRow = (PPartnerBankingDetailsRow)Row; if (PBankingDetailsUsageAccess.Exists(AToPartnerKey, FromRow.BankingDetailsKey, "MAIN", Transaction)) { MainBankAccounts += 1; } } } // if the merged Partner will have more than one bank account and either 0 or 2 of the bank accounts are 'Main' accounts // then a new 'Main' account needs to be selected if (((FromBankAccounts + ToBankAccounts) > 1) && (MainBankAccounts != 1)) { return(true); } } catch (Exception e) { TLogging.Log(e.ToString()); } finally { DBAccess.GDBAccessObj.RollbackTransaction(); TLogging.LogAtLevel(7, "TMergePartnersWebConnector.OrganisationIsFoundation: rollback own transaction."); } return(false); }
public static bool NeedMainBankAccount(long AFromPartnerKey, long AToPartnerKey) { bool ReturnValue = false; TDBTransaction Transaction = null; DBAccess.GDBAccessObj.BeginAutoReadTransaction(IsolationLevel.ReadCommitted, ref Transaction, delegate { PPartnerBankingDetailsTable FromBankingDetailsTable = PPartnerBankingDetailsAccess.LoadViaPPartner(AFromPartnerKey, Transaction); PPartnerBankingDetailsTable ToBankingDetailsTable = PPartnerBankingDetailsAccess.LoadViaPPartner(AToPartnerKey, Transaction); int MainBankAccounts = 0; int FromBankAccounts = FromBankingDetailsTable.Rows.Count; int ToBankAccounts = ToBankingDetailsTable.Rows.Count; if (FromBankAccounts > 0) { foreach (DataRow Row in FromBankingDetailsTable.Rows) { PPartnerBankingDetailsRow FromRow = (PPartnerBankingDetailsRow)Row; if (PBankingDetailsUsageAccess.Exists(AFromPartnerKey, FromRow.BankingDetailsKey, "MAIN", Transaction)) { MainBankAccounts += 1; } } } if (ToBankAccounts > 0) { foreach (DataRow Row in ToBankingDetailsTable.Rows) { PPartnerBankingDetailsRow FromRow = (PPartnerBankingDetailsRow)Row; if (PBankingDetailsUsageAccess.Exists(AToPartnerKey, FromRow.BankingDetailsKey, "MAIN", Transaction)) { MainBankAccounts += 1; } } } // if the merged Partner will have more than one bank account and either 0 or 2 of the bank accounts are 'Main' accounts // then a new 'Main' account needs to be selected if (((FromBankAccounts + ToBankAccounts) > 1) && (MainBankAccounts != 1)) { ReturnValue = true; } }); return(ReturnValue); }
public void TestBankingDetails() { TPartnerEditUIConnector connector = new TPartnerEditUIConnector(); PartnerEditTDS MainDS = new PartnerEditTDS(); PPartnerRow PartnerRow = TCreateTestPartnerData.CreateNewFamilyPartner(MainDS); TCreateTestPartnerData.CreateNewLocation(PartnerRow.PartnerKey, MainDS); DataSet ResponseDS = new PartnerEditTDS(); TVerificationResultCollection VerificationResult; TSubmitChangesResult result = connector.SubmitChanges(ref MainDS, ref ResponseDS, out VerificationResult); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "There was a critical error when saving:"); Assert.AreEqual(TSubmitChangesResult.scrOK, result, "TPartnerEditUIConnector SubmitChanges return value"); connector = new TPartnerEditUIConnector(PartnerRow.PartnerKey); // add a banking detail PartnerEditTDSPBankingDetailsRow bankingDetailsRow = MainDS.PBankingDetails.NewRowTyped(true); bankingDetailsRow.AccountName = "account of " + PartnerRow.PartnerShortName; bankingDetailsRow.BankAccountNumber = new Random().Next().ToString(); bankingDetailsRow.BankingDetailsKey = (MainDS.PBankingDetails.Count + 1) * -1; bankingDetailsRow.BankKey = 43005004; bankingDetailsRow.MainAccount = true; bankingDetailsRow.BankingType = MPartnerConstants.BANKINGTYPE_BANKACCOUNT; MainDS.PBankingDetails.Rows.Add(bankingDetailsRow); PPartnerBankingDetailsRow partnerBankingDetails = MainDS.PPartnerBankingDetails.NewRowTyped(true); partnerBankingDetails.PartnerKey = PartnerRow.PartnerKey; partnerBankingDetails.BankingDetailsKey = bankingDetailsRow.BankingDetailsKey; MainDS.PPartnerBankingDetails.Rows.Add(partnerBankingDetails); result = connector.SubmitChanges(ref MainDS, ref ResponseDS, out VerificationResult); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "There was a critical error when saving 2:"); foreach (DataTable t in MainDS.Tables) { if ((t == MainDS.PBankingDetails) || (t == MainDS.PPartnerBankingDetails) || (t == MainDS.PDataLabelValuePartner)) { int NumRows = t.Rows.Count; for (int RowIndex = NumRows - 1; RowIndex >= 0; RowIndex -= 1) { DataRow InspectDR = t.Rows[RowIndex]; // delete all added Rows. if (InspectDR.RowState == DataRowState.Added) { InspectDR.Delete(); } } } } MainDS.AcceptChanges(); Assert.AreEqual(1, PBankingDetailsUsageAccess.CountViaPPartner(PartnerRow.PartnerKey, null), "count of main accounts for partner"); // add another account bankingDetailsRow = MainDS.PBankingDetails.NewRowTyped(true); bankingDetailsRow.AccountName = "2nd account of " + PartnerRow.PartnerShortName; bankingDetailsRow.BankAccountNumber = new Random().Next().ToString(); bankingDetailsRow.BankingDetailsKey = (MainDS.PBankingDetails.Count + 1) * -1; bankingDetailsRow.BankKey = 43005004; bankingDetailsRow.MainAccount = false; bankingDetailsRow.BankingType = MPartnerConstants.BANKINGTYPE_BANKACCOUNT; MainDS.PBankingDetails.Rows.Add(bankingDetailsRow); partnerBankingDetails = MainDS.PPartnerBankingDetails.NewRowTyped(true); partnerBankingDetails.PartnerKey = PartnerRow.PartnerKey; partnerBankingDetails.BankingDetailsKey = bankingDetailsRow.BankingDetailsKey; MainDS.PPartnerBankingDetails.Rows.Add(partnerBankingDetails); PartnerEditTDS ChangedDS = MainDS.GetChangesTyped(true); result = connector.SubmitChanges(ref ChangedDS, ref ResponseDS, out VerificationResult); MainDS.Merge(ChangedDS); foreach (DataTable t in MainDS.Tables) { if ((t == MainDS.PBankingDetails) || (t == MainDS.PPartnerBankingDetails) || (t == MainDS.PDataLabelValuePartner)) { int NumRows = t.Rows.Count; for (int RowIndex = NumRows - 1; RowIndex >= 0; RowIndex -= 1) { DataRow InspectDR = t.Rows[RowIndex]; // delete all added Rows. if (InspectDR.RowState == DataRowState.Added) { InspectDR.Delete(); } } } } MainDS.AcceptChanges(); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "There was a critical error when saving 3:"); // now delete the main bank account PartnerEditTDSPBankingDetailsRow toDelete = null; foreach (PartnerEditTDSPBankingDetailsRow row in MainDS.PBankingDetails.Rows) { if (row.MainAccount) { toDelete = row; break; } } Assert.IsNotNull(toDelete, "cannot find main account"); Assert.AreEqual(true, toDelete.MainAccount, "should be the main account"); MainDS.PPartnerBankingDetails.Rows.Find(new object[] { PartnerRow.PartnerKey, toDelete.BankingDetailsKey }).Delete(); toDelete.Delete(); ChangedDS = MainDS.GetChangesTyped(true); result = connector.SubmitChanges(ref ChangedDS, ref ResponseDS, out VerificationResult); Assert.AreEqual(1, VerificationResult.Count, "should fail because we have no main account anymore"); Assert.AreEqual( "One Bank Account of a Partner must be set as the 'Main Account'. Please select the record that should become the 'Main Account' and choose 'Set Main Account'.", VerificationResult[0].ResultText, "should fail because we have no main account anymore"); PartnerEditTDSPBankingDetailsRow otherAccount = null; foreach (PartnerEditTDSPBankingDetailsRow row in MainDS.PBankingDetails.Rows) { if ((row.RowState != DataRowState.Deleted) && !row.MainAccount) { otherAccount = row; break; } } otherAccount.MainAccount = true; ChangedDS = MainDS.GetChangesTyped(true); result = connector.SubmitChanges(ref ChangedDS, ref ResponseDS, out VerificationResult); MainDS.Merge(ChangedDS); MainDS.AcceptChanges(); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "There was a critical error when saving 4:"); // now delete the last remaining bank account toDelete = MainDS.PBankingDetails[0]; Assert.AreEqual(true, toDelete.MainAccount); MainDS.PPartnerBankingDetails.Rows.Find(new object[] { PartnerRow.PartnerKey, toDelete.BankingDetailsKey }).Delete(); toDelete.Delete(); ChangedDS = MainDS.GetChangesTyped(true); result = connector.SubmitChanges(ref ChangedDS, ref ResponseDS, out VerificationResult); MainDS.Merge(ChangedDS); MainDS.AcceptChanges(); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "There was a critical error when saving 5:"); }
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); }