/// <summary> /// create PPartnerBankingDetail records for the FAMILY partner /// </summary> public static void GenerateBankDetails(XmlNode ACurrentNode, PFamilyRow AFamilyRow, PartnerEditTDS AMainDS, DataTable ABankKeys) { if (TXMLParser.HasAttribute(ACurrentNode, "bankaccount_bank")) { Int32 BankID = Convert.ToInt32(TXMLParser.GetAttribute(ACurrentNode, "bankaccount_bank")) % ABankKeys.Rows.Count; long BankPartnerKey = Convert.ToInt64(ABankKeys.Rows[BankID].ItemArray[0]); PBankingDetailsRow bankingDetailsRow = AMainDS.PBankingDetails.NewRowTyped(); bankingDetailsRow.BankingDetailsKey = (AMainDS.PBankingDetails.Rows.Count + 1) * -1; bankingDetailsRow.BankKey = BankPartnerKey; bankingDetailsRow.BankAccountNumber = TXMLParser.GetAttribute(ACurrentNode, "bankaccount_account"); bankingDetailsRow.BankingType = MPartnerConstants.BANKINGTYPE_BANKACCOUNT; bankingDetailsRow.AccountName = AFamilyRow.FirstName + " " + AFamilyRow.FamilyName; AMainDS.PBankingDetails.Rows.Add(bankingDetailsRow); PPartnerBankingDetailsRow partnerBankingRow = AMainDS.PPartnerBankingDetails.NewRowTyped(); partnerBankingRow.PartnerKey = AFamilyRow.PartnerKey; partnerBankingRow.BankingDetailsKey = bankingDetailsRow.BankingDetailsKey; AMainDS.PPartnerBankingDetails.Rows.Add(partnerBankingRow); PBankingDetailsUsageRow bankingUsageRow = AMainDS.PBankingDetailsUsage.NewRowTyped(); bankingUsageRow.BankingDetailsKey = bankingDetailsRow.BankingDetailsKey; bankingUsageRow.PartnerKey = AFamilyRow.PartnerKey; bankingUsageRow.Type = MPartnerConstants.BANKINGUSAGETYPE_MAIN; AMainDS.PBankingDetailsUsage.Rows.Add(bankingUsageRow); } }
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); }
/// create a new BankingDetails record and a new PartnerBankingDetails record public static PartnerEditTDSPBankingDetailsRow CreateNewBankingRecords(long APartnerKey, PartnerEditTDS AMainDS) { PartnerEditTDSPBankingDetailsRow BankingDetailsRow = AMainDS.PBankingDetails.NewRowTyped(); BankingDetailsRow.BankingDetailsKey = Convert.ToInt32(TSequenceWebConnector.GetNextSequence(TSequenceNames.seq_bank_details)); BankingDetailsRow.BankingType = MPartnerConstants.BANKINGTYPE_BANKACCOUNT; BankingDetailsRow.MainAccount = true; AMainDS.PBankingDetails.Rows.Add(BankingDetailsRow); PPartnerBankingDetailsRow PartnerBankingDetailsRow = AMainDS.PPartnerBankingDetails.NewRowTyped(); PartnerBankingDetailsRow.PartnerKey = APartnerKey; PartnerBankingDetailsRow.BankingDetailsKey = BankingDetailsRow.BankingDetailsKey; AMainDS.PPartnerBankingDetails.Rows.Add(PartnerBankingDetailsRow); PBankingDetailsUsageRow BankingDetailsUsageRow = AMainDS.PBankingDetailsUsage.NewRowTyped(); BankingDetailsUsageRow.PartnerKey = APartnerKey; BankingDetailsUsageRow.BankingDetailsKey = BankingDetailsRow.BankingDetailsKey; BankingDetailsUsageRow.Type = MPartnerConstants.BANKINGUSAGETYPE_MAIN; AMainDS.PBankingDetailsUsage.Rows.Add(BankingDetailsUsageRow); return(BankingDetailsRow); }
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 bool MaintainBankAccounts( string action, Int32 ABankingDetailsKey, Int64 APartnerKey, string AAccountName, string AIban, out TVerificationResultCollection AVerificationResult) { List <string> Dummy1, Dummy2; string Dummy3, Dummy4, Dummy5; PartnerEditTDS MainDS = GetPartnerDetails(APartnerKey, out Dummy1, out Dummy2, out Dummy3, out Dummy4, out Dummy5); AVerificationResult = new TVerificationResultCollection(); AIban = AIban.Replace(" ", ""); string BIC = String.Empty; string BankName = String.Empty; if ((action == "create" || action == "edit")) { // Validate IBAN, and calculate the BIC if (!ValidateIBAN(AIban, out BIC, out BankName, out AVerificationResult)) { return(false); } } if (action == "create") { PartnerEditTDSPBankingDetailsRow row = MainDS.PBankingDetails.NewRowTyped(); row.BankingDetailsKey = -1; row.BankingType = 0; // BANK ACCOUNT row.AccountName = AAccountName; row.Iban = AIban; row.BankKey = FindOrCreateBank(BIC, BankName); row.MainAccount = MainDS.PBankingDetails.Count == 0; MainDS.PBankingDetails.Rows.Add(row); PPartnerBankingDetailsRow pdrow = MainDS.PPartnerBankingDetails.NewRowTyped(); pdrow.PartnerKey = APartnerKey; pdrow.BankingDetailsKey = -1; MainDS.PPartnerBankingDetails.Rows.Add(pdrow); DataSet ResponseDS = new PartnerEditTDS(); TPartnerEditUIConnector uiconnector = new TPartnerEditUIConnector(APartnerKey); try { TSubmitChangesResult result = uiconnector.SubmitChanges( ref MainDS, ref ResponseDS, out AVerificationResult); return(result == TSubmitChangesResult.scrOK); } catch (Exception e) { TLogging.Log(e.ToString()); AVerificationResult.Add(new TVerificationResult("error", e.Message, TResultSeverity.Resv_Critical)); return(false); } } else if (action == "edit") { foreach (PartnerEditTDSPBankingDetailsRow row in MainDS.PBankingDetails.Rows) { if (row.BankingDetailsKey == ABankingDetailsKey) { row.AccountName = AAccountName; row.Iban = AIban; row.BankKey = FindOrCreateBank(BIC, BankName); } } DataSet ResponseDS = new PartnerEditTDS(); TPartnerEditUIConnector uiconnector = new TPartnerEditUIConnector(APartnerKey); try { TSubmitChangesResult result = uiconnector.SubmitChanges( ref MainDS, ref ResponseDS, out AVerificationResult); return(result == TSubmitChangesResult.scrOK); } catch (Exception e) { TLogging.Log(e.ToString()); AVerificationResult.Add(new TVerificationResult("error", e.Message, TResultSeverity.Resv_Critical)); return(false); } } else if (action == "delete") { foreach (PPartnerBankingDetailsRow row in MainDS.PPartnerBankingDetails.Rows) { if (row.BankingDetailsKey == ABankingDetailsKey) { row.Delete(); } } bool wasMainAccount = false; PartnerEditTDSPBankingDetailsRow otherAccount = null; foreach (PartnerEditTDSPBankingDetailsRow row in MainDS.PBankingDetails.Rows) { if (row.BankingDetailsKey == ABankingDetailsKey) { if (!row.IsMainAccountNull()) { wasMainAccount = row.MainAccount; } row.Delete(); } else if (otherAccount == null) { otherAccount = row; } } // make another bank account the main account if (wasMainAccount && (otherAccount != null)) { otherAccount.MainAccount = true; } DataSet ResponseDS = new PartnerEditTDS(); TPartnerEditUIConnector uiconnector = new TPartnerEditUIConnector(APartnerKey); try { TSubmitChangesResult result = uiconnector.SubmitChanges( ref MainDS, ref ResponseDS, out AVerificationResult); return(result == TSubmitChangesResult.scrOK); } catch (Exception e) { TLogging.Log(e.ToString()); AVerificationResult.Add(new TVerificationResult("error", e.Message, TResultSeverity.Resv_Critical)); return(false); } } if (!TVerificationHelper.IsNullOrOnlyNonCritical(AVerificationResult)) { TLogging.Log(AVerificationResult.BuildVerificationResultString()); } return(false); }
private static void ParseFinancialDetails(PartnerImportExportTDS AMainDS, XmlNode AFinancialDetailsNode, Int64 APartnerKey, TDBTransaction ATransaction) { if (AFinancialDetailsNode != null) { string BankAccountNumber = TYml2Xml.GetAttributeRecursive(AFinancialDetailsNode, "AccountNumber"); string BankSortCode = TYml2Xml.GetAttributeRecursive(AFinancialDetailsNode, "BankSortCode"); // do we already have a bank with this sort code? Int64 bankPartnerKey = 0; AMainDS.PBank.DefaultView.Sort = PBankTable.GetBranchCodeDBName(); int bankIndex = AMainDS.PBank.DefaultView.Find(BankSortCode); if (bankIndex != -1) { bankPartnerKey = ((PBankRow)AMainDS.PBank.DefaultView[bankIndex].Row).PartnerKey; } if (bankPartnerKey == 0) { string sqlFindBankBySortCode = String.Format("SELECT * FROM PUB_{0} WHERE {1}=?", PBankTable.GetTableDBName(), PBankTable.GetBranchCodeDBName()); OdbcParameter param = new OdbcParameter("branchcode", OdbcType.VarChar); param.Value = BankSortCode; PBankTable bank = new PBankTable(); DBAccess.GDBAccessObj.SelectDT(bank, sqlFindBankBySortCode, ATransaction, new OdbcParameter[] { param }, -1, -1); if (bank.Count > 0) { bankPartnerKey = bank[0].PartnerKey; } } if (bankPartnerKey == 0) { // create a new bank record PBankRow bankRow = AMainDS.PBank.NewRowTyped(true); bankRow.PartnerKey = TImportExportYml.NewPartnerKey; TImportExportYml.NewPartnerKey--; bankRow.BranchCode = BankSortCode; bankRow.BranchName = BankSortCode; AMainDS.PBank.Rows.Add(bankRow); bankPartnerKey = bankRow.PartnerKey; } PBankingDetailsRow bankingDetailsRow = AMainDS.PBankingDetails.NewRowTyped(true); bankingDetailsRow.BankingDetailsKey = (AMainDS.PBankingDetails.Rows.Count + 1) * -1; bankingDetailsRow.BankingType = 0; bankingDetailsRow.BankAccountNumber = BankAccountNumber; bankingDetailsRow.BankKey = bankPartnerKey; AMainDS.PBankingDetails.Rows.Add(bankingDetailsRow); PPartnerBankingDetailsRow partnerBankingDetailsRow = AMainDS.PPartnerBankingDetails.NewRowTyped(true); partnerBankingDetailsRow.PartnerKey = APartnerKey; partnerBankingDetailsRow.BankingDetailsKey = bankingDetailsRow.BankingDetailsKey; AMainDS.PPartnerBankingDetails.Rows.Add(partnerBankingDetailsRow); } }