public void StartEvent(PrimeEvent primeEvent) { if (IsRunning(primeEvent)) { return; } lock (eventLock) { var currentPrimeEvent = primeEvents.FirstOrDefault(x => x.EventName == primeEvent.EventName); if (currentPrimeEvent == null) { var pe = new PrimeEvent { EventName = primeEvent.EventName, EventDescription = primeEvent.EventDescription }; foreach (var item in primeEvent.Events) { Division division = new Division { DivisionID = item.Division.DivisionID, DivisionName = item.Division.DivisionName }; pe.Events.Add(new InvoiceEvent { Division = division, InvoiceType = item.InvoiceType, Period = item.Period, Username = item.Username }); } primeEvents.Add(pe); return; } if (!IsDivisionRunningInvoice(primeEvent, currentPrimeEvent)) { currentPrimeEvent.Events.AddRange(primeEvent.Events); } } }
private static bool IsDivisionRunningInvoice(PrimeEvent primeEvent, PrimeEvent currentPrimeEvent) { var invoiceDivisionValidator = new InvoiceDivisionValidator(currentPrimeEvent.Events); foreach (var division in primeEvent.Events) { var validator = invoiceDivisionValidator.Validate(primeEvent.Events.First()); if (validator.IsValid) { return(false); } } return(true); }
public void EndEvent(PrimeEvent primeEvent) { if (IsRunning(primeEvent)) { lock (eventLock) { foreach (var item in primeEvent.Events) { if (primeEvents.SingleOrDefault(x => x.EventName == primeEvent.EventName).Events.Any(x => x.Division.DivisionID == item.Division.DivisionID)) { primeEvents.SingleOrDefault(x => x.EventName == primeEvent.EventName).Events.RemoveAll(x => x.Division.DivisionID == item.Division.DivisionID); } } } } }
public bool IsRunning(PrimeEvent primeEvent) { var currentPrimeEvent = primeEvents.FirstOrDefault(x => x.EventName == primeEvent.EventName); if (currentPrimeEvent == null) { return(false); } lock (eventLock) { foreach (var division in currentPrimeEvent.Events) { if (primeEvent.Events.Any(x => x.Division.DivisionID == division.Division.DivisionID)) { return(true); } } } return(false); }
public PrimeEvent GetCurrentRunning(PrimeEvent primeEvent) { return(primeEvents.SingleOrDefault(x => x.EventName == primeEvent.EventName)); }