using System; using System.Collections.Generic; using Tanshu.Accounts.Contracts; using Tanshu.Accounts.Entities.Auth; using NHibernate.Mapping.ByCode.Conformist; using NHibernate.Mapping.ByCode; namespace Tanshu.Accounts.Entities { public class Voucher { public Voucher() { Kots = new List(); Settlements = new List(); } public Voucher(User user, Customer customer) : this() { this.User = user; VoucherType = VoucherType.Regular; Customer = customer; } public Voucher(User user, Customer customer, FoodTable table, bool printed, bool isVoid, string narration) : this(user, customer) { Table = table; Printed = printed; Void = isVoid; Narration = narration; VoucherType = VoucherType.Regular; } public virtual Guid VoucherID { get; set; } protected DateTime _date; public virtual DateTime Date { get { return _date; } } public virtual int Pax { get; set; } public virtual User User { get; set; } protected DateTime _creationDate; public virtual DateTime CreationDate { get { return _creationDate; } } protected DateTime _lastEditDate; public virtual DateTime LastEditDate { get { return _lastEditDate; } } protected int? _billID; public virtual int? BillID { get { return _billID; } } public virtual FoodTable Table { get; set; } public virtual Customer Customer { get; set; } public virtual IList Settlements { get; set; } public virtual string Narration { get; set; } public virtual bool Void { get; set; } public virtual string VoidReason { get; set; } public virtual bool Printed { get; set; } public virtual VoucherType VoucherType { get; set; } protected int _kotID; public virtual int KotID { get { return _kotID; } } public virtual IList Kots { get; set; } public virtual IList Reprints { get; set; } public virtual string FullBillID { get { if (BillID.HasValue) { switch (VoucherType) { case VoucherType.NoCharge: return "NC-" + BillID.Value.ToString(); case VoucherType.Staff: return "ST-" + BillID.Value.ToString(); case VoucherType.TakeAway: case VoucherType.Regular: default: return (BillID.Value / 10000).ToString() + "-" + (BillID.Value % 10000).ToString(); } } else { return "K-" + KotID.ToString(); } } } } public class VoucherMap : ClassMapping { public VoucherMap() { Table("Vouchers"); Schema("dbo"); Lazy(true); SqlInsert(@"exec VoucherInsert ?,?,?,?,?,?,?,?,?,?"); SqlUpdate(@"exec VoucherUpdate ?,?,?,?,?,?,?,?,?,?"); Id(x => x.VoucherID, map => map.Generator(Generators.GuidComb)); Property(x => x.Date, map => { map.NotNullable(true); map.Generated(PropertyGeneration.Always); map.Access(Accessor.NoSetter); }); Property(x => x.Pax); Property(x => x.VoucherType, map => { map.NotNullable(true); map.UniqueKey("UQ_BillID_VoucherType"); }); Property(x => x.Narration); Property(x => x.CreationDate, map => { map.NotNullable(true); map.Generated(PropertyGeneration.Insert); map.Access(Accessor.NoSetter); }); Property(x => x.LastEditDate, map => { map.NotNullable(true); map.Generated(PropertyGeneration.Always); map.Access(Accessor.NoSetter); }); Property(x => x.BillID, map => { map.Generated(PropertyGeneration.Always); map.Access(Accessor.NoSetter); map.UniqueKey("UQ_BillID_VoucherType"); }); Property(x => x.Void, map => map.NotNullable(true)); Property(x => x.VoidReason); Property(x => x.Printed, map => map.NotNullable(true)); Property(x => x.KotID, map => { map.NotNullable(true); map.Generated(PropertyGeneration.Insert); map.Access(Accessor.NoSetter); }); ManyToOne(x => x.User, map => { map.Column("UserID"); map.NotNullable(true); map.Cascade(Cascade.None); }); ManyToOne(x => x.Table, map => { map.Column("TableID"); map.NotNullable(true); map.Cascade(Cascade.None); }); ManyToOne(x => x.Customer, map => { map.Column("CustomerID"); map.NotNullable(true); map.Cascade(Cascade.None); }); Bag(x => x.Kots, colmap => { colmap.Key(x => x.Column("VoucherID")); colmap.Inverse(true); colmap.OrderBy(o => o.Date); }, map => { map.OneToMany(); }); Bag(x => x.Reprints, colmap => { colmap.Key(x => x.Column("VoucherID")); colmap.Inverse(true); }, map => { map.OneToMany(); }); Bag(x => x.Settlements, colmap => { colmap.Key(x => x.Column("VoucherID")); colmap.Inverse(true); }, map => { map.OneToMany(); }); } } }