/// <summary> /// Este metodo recupera los cobros y los pagos de la base de datos y los /// convierte en transacciones dobles para determinar los saldos /// </summary> /// <param name="customer"></param> /// <returns></returns> public static List <CustomerTransaction> ReadCustomerTransaction(Customer customer) { int id; DateTime fecha; string description; decimal deuda = 0m; decimal abono = 0m; List <CustomerTransaction> transactions = new List <CustomerTransaction>(); string query1 = "SELECT debt_id, date_of_debt, description, amount FROM debt WHERE customer_id = " + customer.CustomerID; string query2 = "SELECT payment_id, date_of_payment, observation, amount FROM payment WHERE customer_id = " + customer.CustomerID; if (HacerConsulta(query1)) { while (reader.Read()) { id = reader.GetInt32("debt_id"); fecha = reader.GetDateTime("date_of_debt"); description = reader.GetString("description"); deuda = reader.GetDecimal("amount"); CustomerTransaction cT = new CustomerTransaction(id, fecha, description, deuda, abono); transactions.Add(cT); } deuda = 0m; if (HacerConsulta(query2)) { while (reader.Read()) { id = reader.GetInt32("payment_id"); fecha = reader.GetDateTime("date_of_payment"); description = reader.GetString("observation"); abono = reader.GetDecimal("amount"); CustomerTransaction cT = new CustomerTransaction(id, fecha, description, deuda, abono); transactions.Add(cT); } transactions.Sort((x, y) => x.Fecha.CompareTo(y.Fecha)); decimal saldo = 0m; foreach (CustomerTransaction t in transactions) { saldo += t.Deuda - t.Abono; t.Saldo = saldo; } } else { transactions.Clear(); } } return(transactions); }
}//Fin del metodo /// <summary> /// Este metodo se encarga de normalizar los movimientos con el onjetivo que el sistema de puntuacion pueda /// establecerse correctamente, es decir, unificando los abonos y deudas ocurridos en un mismo día /// </summary> /// <param name="orignalTransactions"></param> /// <returns></returns> private static List <CustomerTransaction> NormalizeTransactions(List <CustomerTransaction> orignalTransactions) { List <CustomerTransaction> result = new List <CustomerTransaction>(); decimal debt = 0m; decimal payment = 0m; decimal balance = 0m; DateTime currentDate = DateTime.Now; if (orignalTransactions.Count > 0) { currentDate = orignalTransactions[0].Fecha; foreach (CustomerTransaction t in orignalTransactions) { if (t.Fecha == currentDate) { debt += t.Deuda; payment += t.Abono; } else { balance += debt - payment; CustomerTransaction newT = new CustomerTransaction(0, currentDate, null, debt, payment) { Saldo = balance }; result.Add(newT); currentDate = t.Fecha; debt = t.Deuda; payment = t.Abono; } } balance += debt - payment; CustomerTransaction transaction = new CustomerTransaction(0, currentDate, null, debt, payment) { Saldo = balance }; result.Add(transaction); } return(result); }