narsil/Tanshu.Accounts.Contracts/Data Contracts/VoucherBO.cs
2016-03-31 12:27:39 +05:30

162 lines
5.9 KiB
C#

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<Kot>();
Settlements = new List<VoucherSettlement>();
}
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<VoucherSettlement> 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<Kot> Kots { get; set; }
public virtual IList<Reprint> 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<Voucher>
{
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(); });
}
}
}