public ProcessedTransaction CalculateFee(Transaction transaction) { bool monthlyFeeWasPaid = true; var processedTransaction = new ProcessedTransaction(transaction); processedTransaction.Fee = processedTransaction.RelatedTransaction.Amount * ((1 - (processedTransaction.RelatedTransaction.Owner.DiscountPercentage / 100)) * (processedTransaction.RelatedTransaction.Owner.FeeAsPercentage / 100)); string stringifiedMonthAndYear = processedTransaction.RelatedTransaction.DoneOn.ToString("YYYYMM"); if (!monthlyFeePaid.ContainsKey(stringifiedMonthAndYear)) { monthlyFeePaid[stringifiedMonthAndYear] = new List <string>(); monthlyFeePaid[stringifiedMonthAndYear].Add(processedTransaction.RelatedTransaction.Owner.Name); monthlyFeeWasPaid = false; } else { var merchantListInGivenMonth = monthlyFeePaid[stringifiedMonthAndYear]; if (!merchantListInGivenMonth.Contains(processedTransaction.RelatedTransaction.Owner.Name)) { monthlyFeePaid[stringifiedMonthAndYear].Add(processedTransaction.RelatedTransaction.Owner.Name); monthlyFeeWasPaid = false; } } if (!monthlyFeeWasPaid && processedTransaction.Fee > 0) { processedTransaction.Fee += monthlyFee; } return(processedTransaction); }
public string ConvertTransactionToTextEntry(ProcessedTransaction transaction) { var stringifiedFee = transaction.Fee.ToString("0.00"); var stringifiedDate = transaction.RelatedTransaction.DoneOn.ToString("yyyy-MM-dd"); return($"{stringifiedDate,10} {transaction.RelatedTransaction.Owner.Name,8} {stringifiedFee,3}"); }
/// <summary> /// convert CharacterString to ProcessedTransaction /// </summary> /// <param name="str"></param> /// <returns></returns> public static ProcessedTransaction ProcessedTransactionConvert(string str) { ProcessedTransaction msg = new ProcessedTransaction(); using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { var b = Convert.FromBase64String(str); ms.Write(b, 0, b.Length); ms.Position = 0; msg = ProcessedTransaction.Parser.ParseFrom(b, 0, b.Length); } return(msg); }
public void TransactionWriter_ShouldWriteTransaction_WhenCorrectDataProvided() { // Arrange var writer = new ProcessedTransactionWriter(); ProcessedTransaction processedTransaction = new ProcessedTransaction(new Transaction() { Amount = 100, Owner = new Merchant() { Name = "7-ELEVEN" }, DoneOn = new DateTime(2018, 9, 1) }); var transaction = processedTransaction; transaction.Fee = 30; // Act var stringifiedTransaction = writer.ConvertTransactionToTextEntry(transaction); // Assert Assert.Equal("2018-09-01 7-ELEVEN 30.00", stringifiedTransaction); }
public TransactionInfo(string txID, ProcessedTransaction processedTransaction) { TransactionID = txID; ProcessedTransaction = processedTransaction; }