-
Notifications
You must be signed in to change notification settings - Fork 0
Common
Sistemin genelinde kullanılan classların tanımlandığı yer
Satış yapılan gerçek kişi yada kurum class
Name : Kurum veya gerçek kişi ismi
public class BusinessPartner : IBusinessPartner
{
public string Name { get; set; }
public string Group { get; set; }
public DateTime BirthDate { get; set; }
}
Satışı yapılan ürün bilgilerinin tanımlandığı class
public class Item : IItem
{
public string Category { get; set; }
}
Satış belgesindeki ürün bilgilerinin tanımlandığı class Discount : Uygulanacak indirim miktarını ifade etmektedir. Bu miktar yüzdesel de olabilir bir ölçü birimi cinsinden de olabilir. Bir belgede yüzde olarak temsil edilirken başka bir belge için adet de olabilir. Bu projede tutarsal hesaplamalar da kullanılmak üzere yüzdesel olarak alınmıştır.
Quantity : Ürün miktarı
Price : Ürün fiyatı
LineTotal : Ürün fiyatı * Ürün miktarı
Item : Ürün ile ilgili verilen tutulduğu class
public class DocumentLine : IDocumentLine
{
public double Discount { get; set; }
public double Quantity { get; set; }
public double Price { get; set; }
public double LineTotal { get { return Price * Quantity; } }
public Item Item { get; set; }
}
Satış belgesi(sepet) class
DocDate : Belge tarihi
DocTotal : Belgeyi oluşturan her bir satırının toplam tutarı
BusinessPartner : Kurum veya gerçek kişi bilgilerinin olduğu class
Lines : Belgeyi oluşturan satırlar
public class Document : IDocument
{
public DateTime DocDate { get; set; } = DateTime.Now;
public double DocTotal { get { return Lines.Sum(x => x.LineTotal); } }
public BusinessPartner BusinessPartner { get; set; } = new BusinessPartner();
public List<DocumentLine> Lines { get; set; } = new List<DocumentLine>();
}
İndirim uygulamak için gerekli olan metadataların tanımlandığı class
Type :
Domain :
TriggerValue :
EffectedValue :
public class Discount : AbstractDiscountValidator<Discount>,IDiscount
{
public DiscountType Type { get; set; }
public DomainType Domain { get; set; }
public double DiscountValue { get; set; }
public double TriggerValue { get; set; }
public double EffectedValue { get; set; }
public Discount(IDocument document) : base(document)
{
}
public override ValidationResult Validate()
{
Fails.Clear();
foreach (var item in Rules)
{
Fails.Add(item.Validate(this));
}
ValidationResult oValid = new ValidationResult(Fails);
return oValid;
}
}