예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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:");
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
            }
        }