using System; using System.Runtime.Serialization; using Tanshu.Accounts.Entities; using System.Collections.Generic; namespace Tanshu.Accounts.Contracts { public class BillInventory { public int ProductID { get; set; } public string Name { get; set; } private decimal price; public decimal Price { get { return price; } set { if (value <= 0) throw new ArgumentException("Price has to be non-negative greater than zero."); else price = value; } } private decimal quantity = 1; public decimal Quantity { get { return quantity; } set { if (value <= 0) throw new ArgumentException("Quantity has to be non-negative greater than zero."); quantity = value; } } private decimal discount = 0; public decimal Discount { get { return discount; } set { if (value < 0) throw new ArgumentException("Discount has to be non-negative greater than or equal to zero."); else if (value > 1) throw new ArgumentException("Discount has to be less than one."); else discount = value; } } public decimal Tax { get; set; } public decimal TaxAmount { get { return quantity * price * (1 - discount) * (1 + ServiceCharge) * Tax; } } public decimal ServiceCharge { get; set; } public decimal ServiceChargeAmount { get { return quantity * price * (1 - discount) * ServiceCharge; } } public decimal DiscountAmount { get { return quantity * price * discount; } } public decimal GrossAmount { get { return quantity * price * (1 - discount); } } private decimal printed; public decimal Printed { get { return printed; } set { if (value < 0) throw new ArgumentException("Printed has to be non-negative greater than or equal to zero."); else printed = value; } } public decimal Value { get { return price * quantity * (1 - discount) * (1 + ServiceCharge) * (1 + Tax); } } public decimal Additional { get { return quantity - printed; } } public bool isNew; public string Display { get { string output = string.Format("{0} @ Rs. {1:#.##}", Name, price); if (discount != 0) output += string.Format(" - {0:#.##%}", discount); return output; } } public IList Modifiers { get; set; } public BillInventory() { printed = 0; isNew = true; Modifiers = new List(); } } }