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)
     });
 }
Esempio n. 10
0
 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();
     }
 }
Esempio n. 11
0
 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));
     }
 }
Esempio n. 12
0
 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));
     }
 }
Esempio n. 13
0
 public static void UpdateActualDeliveryDate(Int32 id, DateTime actualDelivery)
 {
     using (PharmacyContainer db = new PharmacyContainer())
     {
         ReplenishmentOrder order = GetOrder(id, db);
         order.ActualDelivery = actualDelivery;
         db.SaveChanges();
     }
 }
Esempio n. 14
0
 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());
     }
 }
Esempio n. 15
0
 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);
 }
Esempio n. 16
0
 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;
         }
     }
 }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
 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);
     }
 }
Esempio n. 20
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);
            }
        }
Esempio n. 21
0
 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();
     }
 }
Esempio n. 22
0
 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);
     }
 }
Esempio n. 23
0
        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();
        }
Esempio n. 24
0
        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);
            }
        }
Esempio n. 25
0
 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();
     }
 }
Esempio n. 26
0
 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);
     }
 }
Esempio n. 27
0
 public static Boolean HasOpenOrders(Drug drug, PharmacyContainer db)
 {
     return(OpenOrdersFor(drug, db).Count() > 0);
 }
Esempio n. 28
0
 private static bool OpenOrdersAvailable(PharmacyContainer db)
 {
     return(GetOpenOrders(db).Count() > 0);
 }
Esempio n. 29
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);
 }
Esempio n. 30
0
 private static IEnumerable <ReplenishmentOrder> GetOpenOrders(PharmacyContainer db)
 {
     return(from o in db.ReplenishmentOrderSet where o.State == OrderState.Open select o);
 }