using System.Collections.Generic; using System.Linq; using System.ServiceModel; using HeuristicLab.Services.Optimization.Billing.DataAccess; using HeuristicLab.Services.Optimization.Billing.Interfaces; using HeuristicLab.Services.Optimization.Billing.Model; namespace HeuristicLab.Services.Optimization.Billing.Business { [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] public class BillingService : IOptimizationBilling { #region Properties private BillingDao billingDao; private BillingDao BillingDao { get { if (billingDao == null) billingDao = new BillingDao(); return billingDao; } } private ITransactionManager transaction; private ITransactionManager Transaction { get { if (transaction == null) transaction = new TransactionManager(); return transaction; } } #endregion #region Product Methods public IList GetProducts() { //TODO: Authentication return Transaction.UseTransaction(() => { return BillingDao.FindAllProducts().ToList(); }); } public IList GetProductByName(string productName) { //TODO: Authentication return Transaction.UseTransaction(() => { return BillingDao.FindProdcutBy(prod => prod.Name == productName).ToList(); }); } #endregion #region Order Methods public void SaveOrder(Order order) { //TODO: Authentication Transaction.UseTransaction(() => { BillingDao.InsertOrUpdateOrder(order); }); } public IList GetOrdersByState(OrderState state) { //TODO: Authentication return Transaction.UseTransaction(() => { return BillingDao.FindOrderBy(order => order.StateValue == (int)state).ToList(); }); } public IList GetOrders(string userName) { //TODO: Authentication return Transaction.UseTransaction(() => { User user = GetUser(userName); return BillingDao.FindOrderBy(order => order.User == user).ToList(); }); } public void UpdateOrder(Order order) { //TODO: Authentication Transaction.UseTransaction(() => { BillingDao.InsertOrUpdateOrder(order); }); } #endregion #region User Methods public User GetUser(string userName) { //TODO: Authentication return Transaction.UseTransaction(() => { return BillingDao.FindUserBy(u => u.Name == userName).First(); }); } public void SaveUser(User user) { //TODO: Authentication Transaction.UseTransaction(() => { BillingDao.InsertOrUpdateUser(user); }); } #endregion #region UsageRecords Methods public IList GetUsageRecords(string userName) { //TODO: Authentication return Transaction.UseTransaction(() => { User user = GetUser(userName); return BillingDao.FindUsageRecordsBy(ur => ur.User == user).ToList(); }); } public IList GetUsageRecords(string username, System.DateTime from, System.DateTime to) { throw new System.NotImplementedException(); } #endregion #region Invoice Methods public IList GetInvoices(string userName) { //TODO: Authentication return Transaction.UseTransaction(() => { User user = GetUser(userName); return BillingDao.FindInvoiceBy(inv => inv.User == user).ToList(); }); } public void SaveInvoice(Invoice invoice) { //TODO: Authentication Transaction.UseTransaction(() => { BillingDao.InsertOrUpdateInvoice(invoice); }); } #endregion } }