using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
int customerId {get; set;}
string customerName {get; set;}
string CustomerEmail {get; set;}
List<Project> projects {get; set;}
public class Customer : ICustomer
int customerId {get; set;}
string customerName {get; set;}
string CustomerEmail {get; set;}
List<Project> projects {get; set;}
public abstract class Project
int projectId { get; set; }
int customerId {get; set;}
string projectName { get;set;}
public abstract float getBilling();
public class TimeBasedProject : Project
int totalHrs { get; set; }
float ratePerHrs { get; set; }
public override float getBilling() {
public class MilestoneBasedProject : Project
int projectId { get; set; }
Milestone _miletone { get; set; }
public override float getBilling() {
int milestoneId { get; set; }
int projectId { get; set; }
bool isCompleted { get; set;}
DateTime MileStoneCompletionDate {get;set;}
int projectId { get; set; }
int customerId { get; set; }
bool IsEmailSent { get; set; }
DateTime InvoiceSentDate { get; set; }
Email email { get; set; }
float finalAmt { get; set; }
string emailFrom { get; set; }
string emailTo { get; set; }
string emailBody { get; set; }
public bool SendMail(string emailFrom,string emailTo,string emailBody)
int TransId { get; set; }
string transType { get; set; }
DateTime transDate { get; set; }
float transAmt { get; set; }
public List<Transaction> getTransByMonth(DateTime dt)
return new List<Transaction>();
public class InvoiceValidation
List<Transaction> LstTrans { get; set; }
List<Invoice> LstInvoice { get; set; }
List<ICustomer> LstCust { get; set; }