public void TestAdjustGiftBatch() { int GiftBatchNumber = ImportAndPostGiftBatch(); TGet_GLM_Info getGLM_InfoBeforeTest73 = new TGet_GLM_Info(FLedgerNumber, "0200", "7300"); TGet_GLM_Info getGLM_InfoBeforeTest35 = new TGet_GLM_Info(FLedgerNumber, "0200", "3500"); string formletterTemplateFile = TAppSettingsManager.GetValue("ReceiptTemplate.file", "../../csharp/ICT/Testing/lib/MFinance/SampleData/AnnualReceiptTemplate.html"); Encoding encodingOfHTMLfile = TTextFile.GetFileEncoding(formletterTemplateFile); StreamReader sr = new StreamReader(formletterTemplateFile, encodingOfHTMLfile, false); string FileContent = sr.ReadToEnd(); sr.Close(); string receiptsBefore; string receiptsPDF; TReceiptingWebConnector.CreateAnnualGiftReceipts(FLedgerNumber, "Annual", new DateTime(DateTime.Today.Year, 1, 1), new DateTime(DateTime.Today.Year, 12, 31), FileContent, null, String.Empty, null, String.Empty, "de-DE", out receiptsPDF, out receiptsBefore); Assert.AreNotEqual(0, receiptsBefore.Trim().Length, "old receipt must not be empty"); int AdjustBatchNumber; TAdjustmentWebConnector.GiftRevertAdjust(FLedgerNumber, GiftBatchNumber, -1, false, -1, DateTime.Today, GiftAdjustmentFunctionEnum.AdjustGift, false, -1.0m, out AdjustBatchNumber); bool BatchIsUnposted; string CurrencyCode; GiftBatchTDS BatchTDS = TGiftTransactionWebConnector.LoadGiftTransactionsForBatch( FLedgerNumber, AdjustBatchNumber, out BatchIsUnposted, out CurrencyCode); // find the transaction to modify Int32 ToModify = (BatchTDS.AGiftDetail[1].GiftTransactionNumber == 2)?1:0; // change the amount from 20 to 25 BatchTDS.AGiftDetail[ToModify].GiftTransactionAmount = 25; // the money should go to field 35 instead of field 73 BatchTDS.AGiftDetail[ToModify].RecipientKey = 35000000; // TODO change of donor // BatchTDS.Gift[1].DonorKey = TVerificationResultCollection VerificationResult; if (TGiftTransactionWebConnector.SaveGiftBatchTDS(ref BatchTDS, out VerificationResult) != TSubmitChangesResult.scrOK) { Assert.Fail("Adjustment Gift Batch was not saved: " + VerificationResult.BuildVerificationResultString()); } int generatedGlBatchNumber; if (!TGiftTransactionWebConnector.PostGiftBatch(FLedgerNumber, AdjustBatchNumber, out generatedGlBatchNumber, out VerificationResult)) { Assert.Fail("Adjustment Gift Batch was not posted: " + VerificationResult.BuildVerificationResultString()); } TGet_GLM_Info getGLM_InfoAfterTest73 = new TGet_GLM_Info(FLedgerNumber, "0200", "7300"); TGet_GLM_Info getGLM_InfoAfterTest35 = new TGet_GLM_Info(FLedgerNumber, "0200", "3500"); // Test balance on the related account/Costcentre Assert.AreEqual(getGLM_InfoBeforeTest73.YtdActual - 20, getGLM_InfoAfterTest73.YtdActual, "The amount of 20 should be derived from the 73 costcentre"); Assert.AreEqual(getGLM_InfoBeforeTest35.YtdActual + 25, getGLM_InfoAfterTest35.YtdActual, "The amount of 25 should be added to the 35 costcentre"); // Test the number of rows on the gift receipt. // the difference should be 3 lines removed, 3 lines added. no double donations. string receiptsAfter; TReceiptingWebConnector.CreateAnnualGiftReceipts(FLedgerNumber, "Annual", new DateTime(DateTime.Today.Year, 1, 1), new DateTime(DateTime.Today.Year, 12, 31), FileContent, null, String.Empty, null, String.Empty, "de-DE", out receiptsPDF, out receiptsAfter); receiptsBefore = THttpBinarySerializer.DeserializeFromBase64(receiptsBefore); receiptsAfter = THttpBinarySerializer.DeserializeFromBase64(receiptsAfter); TLogging.Log("TestAdjustGiftBatch Diff:"); TLogging.Log(TTextFile.Diff(receiptsBefore, receiptsAfter)); string[] diff = TTextFile.Diff(receiptsBefore, receiptsAfter).Trim().Split(Environment.NewLine); Assert.AreEqual(6, diff.Length, "difference on receipts are 6 lines"); }
public void TestMultipleGifts() { // import the test gift batch, and post it TGiftImporting importer = new TGiftImporting(); string dirTestData = "../../csharp/ICT/Testing/lib/MFinance/server/BankImport/"; string testFile = dirTestData + "GiftBatch.csv"; StreamReader sr = new StreamReader(testFile); string FileContent = sr.ReadToEnd(); sr.Close(); FileContent = FileContent.Replace("2010-09-30", DateTime.Now.Year.ToString("0000") + "-09-30"); Hashtable parameters = new Hashtable(); parameters.Add("Delimiter", ","); parameters.Add("ALedgerNumber", FLedgerNumber); parameters.Add("DateFormatString", "yyyy-MM-dd"); parameters.Add("NumberFormat", "American"); parameters.Add("NewLine", Environment.NewLine); parameters.Add("DatesMayBeIntegers", false); TVerificationResultCollection VerificationResult; GiftBatchTDSAGiftDetailTable NeedRecipientLedgerNumber; bool refreshRequired; if (!importer.ImportGiftBatches(parameters, FileContent, out NeedRecipientLedgerNumber, out refreshRequired, out VerificationResult)) { Assert.Fail("Gift Batch was not imported: " + VerificationResult.BuildVerificationResultString()); } int BatchNumber = importer.GetLastGiftBatchNumber(); Assert.AreNotEqual(-1, BatchNumber, "Failed to import gift batch: " + VerificationResult.BuildVerificationResultString()); Int32 generatedGlBatchNumber; if (!TGiftTransactionWebConnector.PostGiftBatch(FLedgerNumber, BatchNumber, out generatedGlBatchNumber, out VerificationResult)) { Assert.Fail("Gift Batch was not posted: " + VerificationResult.BuildVerificationResultString()); } // import the test csv file, will already do the training testFile = dirTestData + "BankStatement.csv"; sr = new StreamReader(testFile); FileContent = sr.ReadToEnd(); sr.Close(); FileContent = FileContent.Replace("30.09.2010", "30.09." + DateTime.Now.Year.ToString("0000")); Int32 StatementKey; BankImportTDS BankImportDS = TBankStatementImportCSV.ImportBankStatementHelper( FLedgerNumber, "6200", ";", "DMY", "European", "EUR", "unused,DateEffective,Description,Amount,Currency", "", "BankStatementSeptember.csv", FileContent); Assert.AreNotEqual(null, BankImportDS, "valid bank import dataset september"); Assert.AreEqual(TSubmitChangesResult.scrOK, TBankStatementImport.StoreNewBankStatement( BankImportDS, out StatementKey), "save statement September"); // revert the gift batch, so that the training does not get confused if the test is run again; // the training needs only one gift batch for that date Hashtable requestParams = new Hashtable(); requestParams.Add("Function", GiftAdjustmentFunctionEnum.ReverseGiftBatch); requestParams.Add("ALedgerNumber", FLedgerNumber); requestParams.Add("BatchNumber", BatchNumber); requestParams.Add("GiftDetailNumber", -1); requestParams.Add("GiftNumber", -1); requestParams.Add("NewBatchSelected", false); requestParams.Add("NoReceipt", true); requestParams.Add("NewPct", 0.0m); requestParams.Add("UpdateTaxDeductiblePct", new System.Collections.Generic.List <string[]>()); requestParams.Add("GlEffectiveDate", new DateTime(DateTime.Now.Year, 09, 30)); requestParams.Add("AutoCompleteComments", false); requestParams.Add("ReversalCommentOne", String.Empty); requestParams.Add("ReversalCommentTwo", String.Empty); requestParams.Add("ReversalCommentThree", String.Empty); requestParams.Add("ReversalCommentOneType", String.Empty); requestParams.Add("ReversalCommentTwoType", String.Empty); requestParams.Add("ReversalCommentThreeType", String.Empty); int AdjustmentBatchNumber; bool BatchIsUnposted; GiftBatchTDS GiftReverseDS = TGiftTransactionWebConnector.LoadGiftTransactionsForBatch(FLedgerNumber, BatchNumber, out BatchIsUnposted); Assert.AreEqual(true, TAdjustmentWebConnector.GiftRevertAdjust(requestParams, out AdjustmentBatchNumber, GiftReverseDS), "reversing the gift batch"); if (!TGiftTransactionWebConnector.PostGiftBatch(FLedgerNumber, AdjustmentBatchNumber, out generatedGlBatchNumber, out VerificationResult)) { Assert.Fail("Gift Reverse Batch was not posted: " + VerificationResult.BuildVerificationResultString()); } // duplicate the bank import file, for the next month FileContent = FileContent.Replace("30.09." + DateTime.Now.Year.ToString("0000"), "30.10." + DateTime.Now.Year.ToString("0000")); BankImportDS = TBankStatementImportCSV.ImportBankStatementHelper( FLedgerNumber, "6200", ";", "DMY", "European", "EUR", "unused,DateEffective,Description,Amount,Currency", "", "BankStatementOctober.csv", FileContent); Assert.AreNotEqual(null, BankImportDS, "valid bank import dataset october"); Assert.AreEqual(TSubmitChangesResult.scrOK, TBankStatementImport.StoreNewBankStatement( BankImportDS, out StatementKey), "save statement October"); // create gift batch from imported statement Int32 GiftBatchNumber; TBankImportWebConnector.CreateGiftBatch( FLedgerNumber, StatementKey, out VerificationResult, out GiftBatchNumber); CommonNUnitFunctions.EnsureNullOrOnlyNonCriticalVerificationResults(VerificationResult, "cannot create gift batch from bank statement:"); // check if the gift batch is correct GiftBatchTDS GiftDS = TGiftTransactionWebConnector.LoadAGiftBatchAndRelatedData(FLedgerNumber, GiftBatchNumber); // since we are not able to match the split gifts, only 1 donation should be matched. // TODO: allow 2 gifts to be merged in OpenPetra, even when they come separate on the bank statement. // then 4 gifts could be matched. Assert.AreEqual(1, GiftDS.AGift.Rows.Count, "expected two matched gifts"); }