public static void InitiateReplenishment(int pzn, int quantity) { using (PharmacyContainer db = new PharmacyContainer()) { InitiateReplenishment(pzn, quantity, db); } }
public static ICollection <OrderStatistic> GetAllStatistics() { using (PharmacyContainer db = new PharmacyContainer()) { return(GetAllStatistics(db).ToList()); } }
public static DrugStatistic GetStatistic(Int32 pzn, DateTime fromDate, DateTime toDate) { using (PharmacyContainer db = new PharmacyContainer()) { return(GetAllStatistics(fromDate, toDate, db).Where(d => d.pzn == pzn).First()); } }
public static ReplenishmentOrder GetOrder(Int32 id) { using (PharmacyContainer db = new PharmacyContainer()) { return(GetOrder(id, db)); } }
public static Drug GetDrug(Int32 pzn) { using (PharmacyContainer db = new PharmacyContainer()) { return(GetDrug(pzn, db)); } }
public static ICollection <Position> GetPendingPositionsForDrug(Int32 pzn) { using (PharmacyContainer db = new PharmacyContainer()) { return(PendingPositionsFor(pzn, db).ToList()); } }
public static OrderStatistic GetStatistic(int orderId) { using (PharmacyContainer db = new PharmacyContainer()) { return(GetAllStatistics(db).Where(o => o.orderId == orderId).First()); } }
public static ICollection <DrugStatistic> GetAllStatistics(DateTime fromDate, DateTime toDate) { using (PharmacyContainer db = new PharmacyContainer()) { return(GetAllStatistics(fromDate, toDate, db).ToList()); } }
private static IQueryable <OrderStatistic> GetAllStatistics(PharmacyContainer db) { return(from o in db.ReplenishmentOrderSet where o.State == OrderState.Finished // DateDiff function return the absolute difference in seconds select new OrderStatistic { orderId = o.Id, deviation = SqlFunctions.DateDiff("ss", o.ExpectedDelivery, o.ActualDelivery) }); }
public static void Restock(Int32 pzn, Int32 quantity, DateTime dateOfAction) { using (PharmacyContainer db = new PharmacyContainer()) { Drug drug = GetDrug(pzn, db); drug.Apply(RestockEvent.Create(drug, quantity, dateOfAction)); db.SaveChanges(); } }
public static int GetReplenishmentSuggestion(int pzn) { using (PharmacyContainer db = new PharmacyContainer()) { Drug drug = GetDrug(pzn, db); Int32 quantityPending = GetQuantityPending(drug, db); return(drug.ReplenishmentSuggestion(quantityPending)); } }
public static bool RequiresReplenishment(Int32 pzn) { using (PharmacyContainer db = new PharmacyContainer()) { Drug drug = GetDrug(pzn, db); Int32 quantityPending = GetQuantityPending(drug, db); return(drug.RequiresReplenishment(quantityPending)); } }
public static void UpdateActualDeliveryDate(Int32 id, DateTime actualDelivery) { using (PharmacyContainer db = new PharmacyContainer()) { ReplenishmentOrder order = GetOrder(id, db); order.ActualDelivery = actualDelivery; db.SaveChanges(); } }
public static ICollection <Position> GetPositionsForOrder(Int32 id) { using (PharmacyContainer db = new PharmacyContainer()) { return((from p in db.PositionSet.Include("Drug") where p.Order.Id == id select p).ToList()); } }
internal static IQueryable <Position> PendingPositionsFor(Int32 pzn, PharmacyContainer db) { return(from p in db.PositionSet.Include("Order") where p.DrugPZN == pzn && (p.Order.State == OrderState.Open || p.Order.State == OrderState.Posting || p.Order.State == OrderState.Ordered) select p); }
private static void AdjustExistingOrderFor(Drug drug, int quantity, PharmacyContainer db) { foreach (Position p in GetPendingPositionsForDrug(drug.PZN)) { if (p.Order.State == OrderState.Open) { p.Quantity = p.Quantity + quantity; db.Entry(p).State = System.Data.EntityState.Modified; } } }
internal static Drug GetDrug(Int32 pzn, PharmacyContainer db) { Drug result = (from d in db.DrugSet where d.PZN == pzn select d).FirstOrDefault(); if (result == default(Drug)) { throw new ArgumentException(String.Format("Drug with PZN {0} not found", pzn.ToString())); } return(result); }
internal static ReplenishmentOrder GetOrder(Int32 id, PharmacyContainer db) { ReplenishmentOrder result = (from o in db.ReplenishmentOrderSet where o.Id == id select o).FirstOrDefault(); if (result == default(ReplenishmentOrder)) { throw new ArgumentException(String.Format("Order with ID {0} not found", id.ToString())); } return(result); }
private static Int32 GetQuantityPending(Drug drug, PharmacyContainer db) { if (OrderService.PendingPositionsFor(drug.PZN, db).Count() > 0) { // would not work on empty position collections return(OrderService.PendingPositionsFor(drug.PZN, db).Sum(p => p.Quantity)); } else { return(0); } }
public static ReplenishmentOrder GetOrderWithPositions(Int32 id) { using (PharmacyContainer db = new PharmacyContainer()) { ReplenishmentOrder result = (from o in db.ReplenishmentOrderSet.Include("Positions") where o.Id == id select o).FirstOrDefault(); if (result == default(ReplenishmentOrder)) { throw new ArgumentException(String.Format("Order with ID {0} not found", id.ToString())); } return(result); } }
public static void Cancel(Int32 id) { using (PharmacyContainer db = new PharmacyContainer()) { ReplenishmentOrder order = GetOrder(id, db); order.State = order.State.Cancel(); foreach (Position p in order.Positions) { InitiateReplenishment(p.DrugPZN, p.Quantity, db); } // migrate all positions to new or existing open order db.SaveChanges(); } }
private static Drug CreateDrug(Drug newDrug) { using (PharmacyContainer db = new PharmacyContainer()) { var count = (from d in db.DrugSet where d.PZN == newDrug.PZN select d).Count(); if (count > 0) { throw new ArgumentException(String.Format("Drug with PZN {0} already exists!", newDrug.PZN)); } db.DrugSet.Add(newDrug); db.SaveChanges(); return(newDrug); } }
public static void InitiateReplenishment(Int32 pzn, int quantity, PharmacyContainer db) { Drug drug = DrugService.GetDrug(pzn, db); if (HasOpenOrders(drug, db)) { AdjustExistingOrderFor(drug, quantity, db); } else { CreatePositionOnOpenOrNewOrder(drug, quantity, db); } db.SaveChanges(); }
public static Drug UpdateDrug(Drug drug, String name, String description, int minimumInventoryLevel, int optimalInventoryLevel) { Util.ConvertEmptyToNull(ref description); using (PharmacyContainer db = new PharmacyContainer()) { Drug attachedDrug = GetDrug(drug.PZN, db); attachedDrug.Name = name; attachedDrug.Description = description; attachedDrug.MinimumInventoryLevel = minimumInventoryLevel; attachedDrug.OptimalInventoryLevel = optimalInventoryLevel; db.SaveChanges(); return(attachedDrug); } }
public static void ProceedToNextState(Int32 id) { using (PharmacyContainer db = new PharmacyContainer()) { ReplenishmentOrder order = GetOrder(id, db); order.State = order.State.Next(); if (order.State == OrderState.Finished) { foreach (Position p in order.Positions) { DrugService.Replenish(p.Drug.PZN, p.Quantity, order.ActualDelivery, db); } } db.SaveChanges(); } }
private static void CreatePositionOnOpenOrNewOrder(Drug drug, int quantity, PharmacyContainer db) { if (OpenOrdersAvailable(db)) { ReplenishmentOrder openOrder = GetOpenOrders(db).First(); openOrder.Positions.Add(new Position { Drug = drug, Order = openOrder, Quantity = quantity }); } else { ReplenishmentOrder newOrder = new ReplenishmentOrder(); newOrder.Positions.Add(new Position { Drug = drug, Order = newOrder, Quantity = quantity }); newOrder = db.ReplenishmentOrderSet.Add(newOrder); } }
public static Boolean HasOpenOrders(Drug drug, PharmacyContainer db) { return(OpenOrdersFor(drug, db).Count() > 0); }
private static bool OpenOrdersAvailable(PharmacyContainer db) { return(GetOpenOrders(db).Count() > 0); }
private static IQueryable <ReplenishmentOrder> OpenOrdersFor(Drug drug, PharmacyContainer db) { return(from o in db.ReplenishmentOrderSet where o.Positions.Where(p => p.DrugPZN == drug.PZN).Count() > 0 && o.State == OrderState.Open select o); }
private static IEnumerable <ReplenishmentOrder> GetOpenOrders(PharmacyContainer db) { return(from o in db.ReplenishmentOrderSet where o.State == OrderState.Open select o); }