コード例 #1
0
ファイル: Matching.cs プロジェクト: TheBigBear/openpetra
        private static Int64 GetDonorByBankAccountNumber(BankImportTDS AMainDS, string ABankSortCode, string ABankAccountNumber)
        {
            if (Regex.IsMatch(ABankAccountNumber, "^[A-Z]") && (ABankAccountNumber.Length > 2) && (ABankAccountNumber.Substring(0, 2) == "DE"))
            {
                // TODO search for IBAN / BIC instead of bank sort code and account number

                // For the moment, we try to assume sort code and account number
                // it might be wrong, but then we would not find a donor anyway.
                // we should definitely not store these calculated numbers
                // perhaps do validation against https://kontocheck.solidcharity.com
                string IBAN = ABankAccountNumber;
                ABankSortCode      = IBAN.Substring(4, 8);
                ABankAccountNumber = IBAN.Substring(12).TrimStart(new char[] { '0' });
                // TLogging.Log("IBAN " + IBAN + " converted to sort code " + ABankSortCode + " and account number + " + ABankAccountNumber);
            }

            DataRowView[] bankingDetails = AMainDS.PBankingDetails.DefaultView.FindRows(new object[] { ABankSortCode, ABankAccountNumber });

            if (bankingDetails.Length > 0)
            {
                if (bankingDetails.Length > 1)
                {
                    TLogging.Log("Warning: 2 people own the same bank account " + ABankSortCode + " " + ABankAccountNumber);
                }

                // TODO: just return the first partner key; usually not 2 people owning the same bank account donate at the same time???
                BankImportTDSPBankingDetailsRow row = (BankImportTDSPBankingDetailsRow)bankingDetails[0].Row;
                return(row.PartnerKey);
            }

            return(-1);
        }
コード例 #2
0
        private static Int64 GetDonorByIBAN(BankImportTDS AMainDS, string AIBAN)
        {
            DataRowView[] bankingDetails = AMainDS.PBankingDetails.DefaultView.FindRows(new object[] { AIBAN });

            if (bankingDetails.Length > 0)
            {
                if (bankingDetails.Length > 1)
                {
                    TLogging.Log("Warning: 2 people own the same bank account " + AIBAN);
                }

                // TODO: just return the first partner key; usually not 2 people owning the same bank account donate at the same time???
                BankImportTDSPBankingDetailsRow row = (BankImportTDSPBankingDetailsRow)bankingDetails[0].Row;
                return(row.PartnerKey);
            }

            return(-1);
        }
コード例 #3
0
ファイル: Matching.cs プロジェクト: TheBigBear/openpetra
        private static void CreateMatches(BankImportTDS AMainDS,
                                          AEpStatementRow ACurrentStatement,
                                          Int32 ASelectedGiftBatch, bool APostedBatch)
        {
            // remove all gifts and giftdetails that don't belong to the selected batch
            List <DataRow> ToDelete = new List <DataRow>();

            foreach (AGiftDetailRow giftdetail in AMainDS.AGiftDetail.Rows)
            {
                if (giftdetail.BatchNumber != ASelectedGiftBatch)
                {
                    ToDelete.Add(giftdetail);
                }
            }

            foreach (DataRow del in ToDelete)
            {
                AMainDS.AGiftDetail.Rows.Remove(del);
            }

            ToDelete = new List <DataRow>();

            foreach (AGiftRow gift in AMainDS.AGift.Rows)
            {
                if (gift.BatchNumber != ASelectedGiftBatch)
                {
                    ToDelete.Add(gift);
                }
            }

            foreach (DataRow del in ToDelete)
            {
                AMainDS.AGift.Rows.Remove(del);
            }

            ToDelete = new List <DataRow>();

            foreach (BankImportTDSAEpTransactionRow transaction  in AMainDS.AEpTransaction.Rows)
            {
                // delete transactions with negative amount
                if (transaction.TransactionAmount < 0)
                {
                    ToDelete.Add(transaction);
                }
                else
                {
                    transaction.MatchAction = MFinanceConstants.BANK_STMT_STATUS_UNMATCHED;
                }
            }

            foreach (DataRow del in ToDelete)
            {
                AMainDS.AEpTransaction.Rows.Remove(del);
            }

            FindDonorKeysByBankAccount(AMainDS);

            AMainDS.PBankingDetails.DefaultView.Sort = BankImportTDSPBankingDetailsTable.GetPartnerKeyDBName();

            MatchDonorsWithKnownBankaccount(AMainDS);

            while (MatchTransactionsToGiftBatch(AMainDS))
            {
                ;
            }

            if (TLogging.DebugLevel > 0)
            {
                TLogging.Log("transactions not matched yet:");

                foreach (BankImportTDSAEpTransactionRow transaction in AMainDS.AEpTransaction.Rows)
                {
                    if (transaction.MatchAction != Ict.Petra.Shared.MFinance.MFinanceConstants.BANK_STMT_STATUS_MATCHED)
                    {
                        TLogging.Log(
                            "  " + transaction.DonorKey.ToString() + " " + transaction.AccountName + " --- " + transaction.Description + " " +
                            transaction.TransactionAmount.ToString());

                        if (transaction.DonorKey == -1)
                        {
                            TLogging.Log("     " + transaction.BankAccountNumber + " " + transaction.BranchCode);
                        }
                    }
                }

                TLogging.Log("gifts not matched yet:");

                foreach (BankImportTDSAGiftDetailRow giftdetail in AMainDS.AGiftDetail.Rows)
                {
                    if (!giftdetail.AlreadyMatched)
                    {
                        string HasBankDetails   = "-";
                        int    BankDetailsIndex = AMainDS.PBankingDetails.DefaultView.Find(giftdetail.DonorKey);

                        if (BankDetailsIndex != -1)
                        {
                            HasBankDetails = "*";
                        }

                        TLogging.Log(
                            "  " + HasBankDetails + " " + giftdetail.DonorKey.ToString() + " " + giftdetail.DonorShortName + " --- " +
                            giftdetail.RecipientDescription + " " + giftdetail.GiftAmount.ToString());

                        if (BankDetailsIndex != -1)
                        {
                            BankImportTDSPBankingDetailsRow bankdetail =
                                (BankImportTDSPBankingDetailsRow)AMainDS.PBankingDetails.DefaultView[BankDetailsIndex].Row;
                            TLogging.Log("     " + bankdetail.BankAccountNumber + " " + bankdetail.BankSortCode);
                        }
                    }
                }

                int CountMatched = 0;

                foreach (BankImportTDSAEpTransactionRow transaction in AMainDS.AEpTransaction.Rows)
                {
                    if (transaction.MatchAction == Ict.Petra.Shared.MFinance.MFinanceConstants.BANK_STMT_STATUS_MATCHED)
                    {
                        CountMatched++;
                    }
                }

                TLogging.Log("matched: " + CountMatched.ToString() + " of " + AMainDS.AEpTransaction.Rows.Count.ToString());
            }

            StoreCurrentMatches(AMainDS, ACurrentStatement.BankAccountCode);
        }