using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Yavsc.Abstract.Workflow; using Yavsc.Models; using Microsoft.Data.Entity; namespace Yavsc.Services { public class BillingService : IBillingService { public ApplicationDbContext DbContext { get; private set; } private ILogger logger; public static Dictionary> Billing = new Dictionary> (); public static List UserSettings = new List(); public static Dictionary GlobalBillingMap = new Dictionary(); public Dictionary BillingMap { get { return GlobalBillingMap; } } public BillingService(ILoggerFactory loggerFactory, ApplicationDbContext dbContext) { logger = loggerFactory.CreateLogger(); DbContext = dbContext; } public Task GetBillAsync(string billingCode, long queryId) { return Task.FromResult(GetBillable(DbContext,billingCode,queryId)); } public static INominativeQuery GetBillable(ApplicationDbContext context, string billingCode, long queryId ) => Billing[billingCode](context, queryId); public async Task GetPerformerSettingsAsync(string activityCode, string userId) { return await (await GetPerformersSettingsAsync(activityCode)).SingleOrDefaultAsync(s=> s.UserId == userId); } public async Task> GetPerformersSettingsAsync(string activityCode) { var activity = await DbContext.Activities.SingleAsync(a=>a.Code == activityCode); if (activity.SettingsClassName==null) return null; var dbSetPropInfo = UserSettings.SingleOrDefault(s => s.PropertyType.GenericTypeArguments[0].FullName == activity.SettingsClassName); if (dbSetPropInfo == null) return null; return (IQueryable) dbSetPropInfo.GetValue(DbContext); } } }