Exemple #1
0
        public async Task <Cashier> SaveCashier(Cashier cashier)
        {
            var existingCashier = await GetCashier(cashier.Id);

            existingCashier.ActiveOrderId = cashier.ActiveOrderId;
            return(existingCashier);
        }
 public void IsValidUserCredentials(Cashier.Credential credential)
 {
     SqlConnection CON = new SqlConnection(CONNECTION_STR);
     SqlCommand cmd = new SqlCommand();
     cmd.CommandText = "SELECT * FROM UsersCredentials";
     cmd.Connection = CON;
     CON.Open();
     try
     {
         using (var reader = cmd.ExecuteReader())
         {
             string name, password;
             while (reader.Read())
             {
                 name = reader["Name"].ToString();
                 if (string.Compare(name, credential.name, true) == 0)
                 {
                     password = reader["Password"].ToString();
                     if (password.CompareTo(credential.key) == 0)
                         return;
                     else
                         throw new Exception("Wrong Password");
                 }
             }
             throw new Exception("User Name doesn't exists");
         }
     }
     catch (Exception)
     {
         throw new Exception("Database exception while retriving credentials");
     }
     finally {
         CON.Close();
     }
 }
Exemple #3
0
        public string GetCashiers(HttpRequestMessage request)
        {
            try
            {
                var    content = request.Content;
                string j       = content.ReadAsStringAsync().Result;
                Admin  admin   = new Admin();
                admin = JsonConvert.DeserializeObject <Admin>(j);
                if (admin.check())
                {
                    SqlConn        conn     = new SqlConn();
                    List <Cashier> cashiers = new List <Cashier>();
                    cashiers = Cashier.getCashiers();
                    if (cashiers != null)
                    {
                        return(JsonConvert.SerializeObject(cashiers));
                    }
                }
                return(null);
            }

            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
                logger.Error(exc.ToString());
                return(null);
            }
        }
Exemple #4
0
        public async Task <Unit> Add(Cashier cashier)
        {
            _dbContext.Add(cashier);
            await _dbContext.SaveChangesAsync();

            return(Unit.Value);
        }
Exemple #5
0
        private void ProcessSingleCustomer()
        {
            var customer = customersQueue.DequeueCustomer(); // blocking operation
            var rnd      = new Random();
            var processDurationInSeconds = rnd.Next(minCashierProcessingTime, maxCashierProcessingTime + 1);

            taskFactory.StartNew(() =>
            {
                var cashier = new Cashier($"Cashier-{Thread.CurrentThread.ManagedThreadId}", sleepService);

                try
                {
                    cashier.ProcessCustomer(customer, processDurationInSeconds); // blocking operation!
                    logger.Info($"{cashier.Name} finished processing customer at: {customer.Finished}. Number of waiting customers: {customersQueue.GetCustomersCount()}");
                }
                catch (Exception e)
                {
                    logger.Error($"Error in {cashier.Name} work: {e}");
                }
                finally
                {
                    maxCashiersSemaphore.Release();
                }
            });
        }
        private bool LogIn(Cashier cashier)
        {
            Logger.Log(LoggingLevel.Info, string.Format("Login Cashier: [{0}]", cashier != null ? cashier.LoginName : ""));
            _cashier = cashier;
            using (var ctx = new RMSModel())
            {
                CashierLog log =
                    ctx.CashierLogs
                    .OrderByDescending(x => x.LoginTime)
                    .FirstOrDefault(x => x.PersonId == cashier.Id && x.MachineName == Environment.MachineName);
                if (log != null)
                {
                    LogOut(cashier);
                }
                SalesRegion.SalesVM.Instance.CashierEx = cashier;

                log = new CashierLog()
                {
                    MachineName   = Environment.MachineName,
                    LoginTime     = DateTime.Now,
                    Status        = "LogIn",
                    PersonId      = cashier.Id,
                    TrackingState = TrackingState.Added
                };


                ctx.CashierLogs.Add(log);

                ctx.SaveChanges();
            }
            //  db.Dispose();
            return(true);
        }
        private bool LogOut(Cashier cashier)
        {
            if (cashier == null)
            {
                return(false);
            }

            _cashier = cashier;
            using (var ctx = new RMSModel())
            {
                CashierLog log = ctx.CashierLogs.OrderByDescending(x => x.LoginTime).FirstOrDefault(x => x.PersonId == cashier.Id && x.MachineName == Environment.MachineName);

                if (log != null && log.Status == "LogIn")
                {
                    log.MachineName = Environment.MachineName;
                    log.LogoutTime  = DateTime.Now;
                    log.Status      = "LogOut";
                    log.PersonId    = cashier.Id;
                    //log.Cashier = cashier;

                    ctx.CashierLogs.AddOrUpdate(log);
                    ctx.SaveChanges();
                }
                //db.Dispose();
                return(true);
            }
            return(false);
        }
Exemple #8
0
        private void button1_Click(object sender, EventArgs e)
        {
            var user = ListUser.FirstOrDefault(it =>
                                               string.Equals(it.Login, Login, StringComparison.CurrentCultureIgnoreCase) && it.Passwword == Password);

            if (user == null)
            {
                MessageBox.Show("Неверные учетные данные", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            this.Visible = false;
            Form form;

            switch (user.UserRole)
            {
            case UserRole.Cashier:
                form = new Cashier();
                break;

            case UserRole.Manager:
                form = new Manager();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            form.Closed += (s, args) => this.Close();
            form.ShowDialog();
        }
Exemple #9
0
        public void GivenANewCashier_WhenInitializedWithAValidPricelist_ThenTheMerchantIsNotCalled()
        {
            var merchantSpy = new MerchantSpy();
            var _           = new Cashier(GetPricelistWithOneValidItem(1), merchantSpy);

            Assert.Equal(0, merchantSpy.ContactQuantity);
        }
Exemple #10
0
        static void Main()
        {
            var bus             = new TopicBasedPubSub();
            var messageListener = new MessageListener(bus);
            var startables      = new List <IStartable>();

            var midgetFactory = new MidgetFactory();
            var midgetHouse   = new MidgetHouse(bus, midgetFactory);

            var consolePrinter = new QueuedHandler <OrderPaid>(Messages.Paid, new ConsolePrintingOrderHandler(bus));

            bus.Subscribe(consolePrinter);

            startables.Add(consolePrinter);
            var cashier       = new Cashier(bus);
            var queuedCashier = new QueuedHandler <TakePayment>(Messages.OrderBilled, cashier);

            bus.Subscribe(queuedCashier);
            startables.Add(queuedCashier);
            startables.Add(cashier);

            var assistantManager = new QueuedHandler <PriceOrder>(Messages.OrderPrepared, new AssistantManager(bus));

            bus.Subscribe(assistantManager);
            startables.Add(assistantManager);

            var chefs = new List <QueuedHandler <CookFood> >();
            var rand  = new Random();

            for (int i = 0; i < NumberOfChefs; i++)
            {
                var chef          = new TimeToLiveDispatcher <CookFood>(new Chef(bus, rand.Next(1000)));
                var queuedHandler = new QueuedHandler <CookFood>(string.Format("Chef {0}", i), chef);
                chefs.Add(queuedHandler);
                startables.Add(queuedHandler);
            }

            var distributionStrategy = new QueuedDispatcher <CookFood>(bus, chefs);

            startables.Add(distributionStrategy);

            foreach (var startable in startables)
            {
                startable.Start();
            }
            var monitor = new Monitor(startables);

            monitor.Start();

            var waiter = new Waiter(bus);

            for (int i = 0; i < 10; i++)
            {
                var correlationId = Guid.NewGuid();

                var orderId = waiter.PlaceOrder(correlationId);
            }

            Console.ReadKey();
        }
        public ActionResult ConfirmChangePassword(string oldpass, string Pass, string cpass)
        {
            CashierRepository orepo = new CashierRepository();
            LoginRepository   lrepo = new LoginRepository();

            Cashier of = orepo.Get(Convert.ToInt32(Session["Id"]));

            Logininfo log = lrepo.Get(Session["Name"].ToString());

            if (Session["Password"].ToString() == oldpass)
            {
                if (Pass != cpass)
                {
                    ViewData["Message"] = "Password Didn't match";
                }
                else
                {
                    of.Cashier_password = Pass;
                    log.Login_Password  = Pass;

                    orepo.Update(of);
                    lrepo.Update(log);

                    ViewData["Message"] = "Password Updated Successfully";
                    Session["Officer"]  = of;
                    Session["Password"] = Pass;
                }
            }
            else
            {
                ViewData["Message"] = "Wrong Password";
            }

            return(View("Empty"));
        }
Exemple #12
0
        /// <summary>
        /// 檢驗優惠券是否適用於指定訂單項目
        /// </summary>
        /// <param name="order">訂單</param>
        /// <param name="orderItem">訂單項目</param>
        /// <returns>是否適用</returns>
        private protected override bool IsAvailable(IOrder order, IOrderItem orderItem)
        {
            if (!base.IsAvailable(order, orderItem))
            {
                return(false);
            }

            var occupyOrderItem = Cashier.GetTotalOccupyOrderItemCount(order);

            if (occupyOrderItem.ContainsKey(orderItem))
            {
                // 占用數量
                var occupyOrderItemTotal = occupyOrderItem[orderItem].Sum(x => x.Value);

                // 剩餘未占用項目是否還夠用
                return(orderItem.Count - occupyOrderItemTotal >= DiscountQuantity);
            }

            if (DiscountQuantity == 0)
            {
                throw new ArgumentException($"{nameof(DiscountQuantity)}不該為0");
            }

            return(orderItem.Count >= DiscountQuantity);
        }
Exemple #13
0
 public void ChangeCashier(Cashier newCashier)
 {
     myCashier = newCashier;
     myAgent.SetDestination(myCashier.GetPositionInLine());
     arrivedAtLine = false;
     myState       = CustomerState.GoingToLine;
 }
Exemple #14
0
        private void Refresh()
        {
            string totalSubtotal = "0.00";
            string totalDiscount = "0.00";
            string tax           = "0.00";
            string netTotal      = "0.00";

            //Calculate
            for (int i = 0; i < ProductList.Count; i++)
            {
                //Id
                ProductList[i].Id = i + 1;

                //Discount (ori_price - price)
                ProductList[i].Discount = Math.Round(Convert.ToDecimal(
                                                         Math.Round(Convert.ToDecimal(ProductList[i].Original_price), 2, MidpointRounding.AwayFromZero) * Math.Round(Convert.ToDecimal(ProductList[i].Total_stock), 2, MidpointRounding.AwayFromZero)
                                                         -
                                                         Math.Round(Convert.ToDecimal(ProductList[i].Price), 2, MidpointRounding.AwayFromZero) * Math.Round(Convert.ToDecimal(ProductList[i].Total_stock), 2, MidpointRounding.AwayFromZero)
                                                         ), 2, MidpointRounding.AwayFromZero).ToString();

                //Subtotal
                ProductList[i].Subtotal = Math.Round(Convert.ToDecimal(
                                                         Math.Round(Convert.ToDecimal(ProductList[i].Price), 2, MidpointRounding.AwayFromZero) * Math.Round(Convert.ToDecimal(ProductList[i].Total_stock), 2, MidpointRounding.AwayFromZero)
                                                         ), 2, MidpointRounding.AwayFromZero).ToString();

                // Calculation Section
                //Total Original Subtotal
                totalSubtotal = Math.Round(Convert.ToDecimal(
                                               Math.Round(Convert.ToDecimal(totalSubtotal), 2, MidpointRounding.AwayFromZero) + Math.Round(Convert.ToDecimal(ProductList[i].Original_price), 2, MidpointRounding.AwayFromZero) * Math.Round(Convert.ToDecimal(ProductList[i].Total_stock), 2, MidpointRounding.AwayFromZero)
                                               ), 2, MidpointRounding.AwayFromZero).ToString();

                //Total Discount
                totalDiscount = Math.Round(Convert.ToDecimal(
                                               Math.Round(Convert.ToDecimal(totalDiscount), 2, MidpointRounding.AwayFromZero) + Math.Round(Convert.ToDecimal(ProductList[i].Discount), 2, MidpointRounding.AwayFromZero)
                                               ), 2, MidpointRounding.AwayFromZero).ToString();
            }

            //Tax - GST/SST ((Total Subtotal - Total Discount) * Tax_Setting )
            tax = Math.Round(Convert.ToDecimal(
                                 (Math.Round(Convert.ToDecimal(totalSubtotal), 2, MidpointRounding.AwayFromZero) - Math.Round(Convert.ToDecimal(totalDiscount), 2, MidpointRounding.AwayFromZero)) * Math.Round(Convert.ToDecimal(Properties.Settings.Default.Setting_GovChargesValue), 2, MidpointRounding.AwayFromZero)
                                 ), 2, MidpointRounding.AwayFromZero).ToString();

            //Net Total
            netTotal = Math.Round(Convert.ToDecimal(
                                      Math.Round(Convert.ToDecimal(totalSubtotal), 2, MidpointRounding.AwayFromZero) - Math.Round(Convert.ToDecimal(totalDiscount), 2, MidpointRounding.AwayFromZero) + Math.Round(Convert.ToDecimal(tax), 2, MidpointRounding.AwayFromZero)
                                      ), 2, MidpointRounding.AwayFromZero).ToString();

            Cart = new Cashier
            {
                Subtotal     = totalSubtotal,
                Discount     = totalDiscount,
                Tax          = tax,
                Total_amount = netTotal
            };

            // Refresh product list
            var temp = ProductList;

            ProductList = new ObservableCollection <Product>(temp);
        }
Exemple #15
0
        public void HasTheRoleAfterAddingIt()
        {
            ICashier cashier = new Cashier();

            this.Person.AddRole(cashier);
            Assert.AreEqual(cashier, this.Person.GetRoleByName(cashier.RoleName));
        }
 private void button3_Click(object sender, EventArgs e)
 {
     //Kasiyer Silme Butonu
     if (!String.IsNullOrEmpty(textBox2.Text) && !String.IsNullOrEmpty(textBox3.Text) && !String.IsNullOrEmpty(textBox4.Text) && !String.IsNullOrEmpty(maskedTextBox1.Text) && !String.IsNullOrEmpty(textBox5.Text) && !String.IsNullOrEmpty(textBox6.Text) && !String.IsNullOrEmpty(textBox7.Text) && !String.IsNullOrEmpty(textBox8.Text))
     {
         if (String.IsNullOrEmpty(dataGridView1.CurrentRow.Index.ToString()))
         {
             MessageBox.Show("Kasiyer seçmediniz!!!");
         }
         else
         {
             var a = MessageBox.Show(" Silmek istediğinize emin misiniz?", "Bilgilendirme", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
             if (a == DialogResult.Yes)
             {
                 Cashier m = HelperCashier.GetByID(Convert.ToInt32(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value));
                 m.IsActive = false;
                 var b = HelperCashier.CUD(m, System.Data.Entity.EntityState.Modified);
                 if (b.Item2)
                 {
                     MessageBox.Show("Silme işlemi başarılı");
                 }
                 else
                 {
                     MessageBox.Show("Silme yapılamadı");
                 }
             }
             Yenile();
         }
     }
     else
     {
         MessageBox.Show("Lütfen seçim yapınız.");
     }
 }
Exemple #17
0
    IEnumerator GoShopping()
    {
        actionId = 0;
        step     = 0;
        //Move to interact point of the Showcase. TODO: Choose interact point
        agent.SetDestination(GameManager.GetInteractable(Departments.Showcase).position);
        yield return(new WaitUntil(() => {
            return CheckDistance(agent.destination);
        }));

        //Look at the parent object
        yield return(new WaitUntil(() => {
            return RotateTowards(GameManager.GetDeptObject(Departments.Showcase).transform.position) < lookAngleBuffer;
        }));

        SetObstruction(true);
        isInActivity = true;
        //Wait to visualize look. Animate
        yield return(new WaitForSeconds(lookTime));

        isInActivity = false;
        SetObstruction(false);
        //Check for availability
        if (Logistics.GetStock(GameDemand) <= 0)
        {
            CommitTransaction(false);
            StartCoroutine(LeaveBusiness());
            yield break;
        }

        step++;
        //Move character. TODO: Choose interact point
        Cashier cashier = GameManager.GetDeptScript(Departments.Cashier) as Cashier;

        agent.SetDestination(GameManager.GetInteractable(Departments.Cashier).position);
        yield return(new WaitUntil(() => {
            return CheckDistance(agent.destination);
        }));

        //Look at the parent object
        yield return(new WaitUntil(() => {
            return RotateTowards(GameManager.GetDeptObject(Departments.Cashier).transform.position) < lookAngleBuffer;
        }));

        SetObstruction(true);
        isInActivity = true;
        //Wait to visualize look. Animate
        yield return(new WaitForSeconds(cashier.ServeSpeed));

        //Do transaction, then wait as visualization
        TotalSpendings += GameManager.CommitTransaction(this, GameDemand);
        yield return(new WaitForSeconds(1.5f));

        isInActivity = false;

        SetObstruction(false);
        //Move out from the shop.
        StartCoroutine(LeaveBusiness());
    }
Exemple #18
0
 public RegularCustomerProcess(Handles <Messages.PrepareFood> kitchen, AssistantManager assistantManager, Cashier cashier, EnterpriseExcel reporting, AlarmClock alarmClock)
 {
     this.assistantManager = assistantManager;
     this.cashier          = cashier;
     this.reporting        = reporting;
     this.alarmClock       = alarmClock;
     this.kitchen          = kitchen;
 }
Exemple #19
0
        public int Update(Cashier cashier)
        {
            Cashier cashierToUpdate = context.Cashiers.SingleOrDefault(d => d.Cashier_Id == cashier.Cashier_Id);

            cashierToUpdate.Cashier_Name    = cashier.Cashier_Name;
            cashierToUpdate.Cashier_address = cashier.Cashier_address;
            return(context.SaveChanges());
        }
Exemple #20
0
        public void Should_throw_exception_if_money_is_not_enough()
        {
            Cashier  cashier  = new Cashier();
            Wallet   wallet   = new Wallet(100.0);
            Customer customer = new Customer("Bruce", "Zhang", wallet);

            Assert.Throws <NotEnoughMoneyException>(() => cashier.Charge(customer, 150.0));
        }
Exemple #21
0
        public ActionResult DeleteConfirmed(int id)
        {
            Cashier cashier = db.Cashiers.Find(id);

            db.Cashiers.Remove(cashier);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemple #22
0
        private void button1_Click(object sender, EventArgs e)
        {
            Cashier cForm = new Cashier();

            cForm.Tag = this;
            cForm.Show(this);
            Hide();
        }
Exemple #23
0
        public ActionResult _UpdateCashier(Cashier ins)
        {
            //...Update Object
            Cashier ins2 = CRep.Update(ins);

            //...Repopulate Grid...
            return(View(new GridModel(CRep.GetAllCashier())));
        }
Exemple #24
0
        //This Method Attach object of type Cashier to the context.

        public void UpdateCashier(Cashier cashier)
        {
            var context = new CashierSystemEntities();

            context.Cashier.Attach(cashier);

            context.SaveChanges();
        }
        public CashierPrintReceiptDialog(dynamic param, Cashier response)
        {
            InitializeComponent();

            LoadReceipt(param, response);

            Print();
        }
Exemple #26
0
        public bool Remove(Cashier cashier)
        {
            var result = _handleWebshopsDbContext.Cashiers.Remove(cashier);

            _handleWebshopsDbContext.SaveChanges();

            return(true);
        }
Exemple #27
0
        public Cashier Create(Cashier cashier)
        {
            _handleWebshopsDbContext.Cashiers.Add(cashier);

            _handleWebshopsDbContext.SaveChanges();

            return(cashier);
        }
Exemple #28
0
        public void WhenInputApples_ThenOutput100_Localisation()
        {
            var cashier = new Cashier();

            cashier.Enter("Apples").ShouldBe(100);
            cashier.Enter("Pommes").ShouldBe(200);
            cashier.Enter("Mele").ShouldBe(300);
        }
Exemple #29
0
 public void ApplesThenCherriesThenCherries_Output230_withDiscount()
 {
     var cashier = new Cashier();
     var result = cashier.Enter("Apples");
     result = cashier.Enter("Cherries");
     result = cashier.Enter("Cherries");
     result.ShouldBe(230);
 }
Exemple #30
0
 protected override void InternalLoad()
 {
     m_cashier    = new Cashier();
     m_hand       = new Hand();
     liste_client = new Queue <Client>();
     panier       = new ClientBasket();
     time         = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 9, 0, 0);
 }
Exemple #31
0
        public ActionResult _InsertCashier(Cashier ins)
        {
            //...Insert Object
            Cashier ins2 = CRep.Insert(ins);

            //...Repopulate Grid...
            return(View(new GridModel(CRep.GetAllCashier())));
        }
Exemple #32
0
        public void Test_HotDeal1()
        {
            var cashier = new Cashier();

            cashier.Enter("Mele, Pommes, Pommes, Mele").ShouldBe(200);
            cashier.Enter("Bananas").ShouldBe(150);
            cashier.Enter("Mele, Pommes, Pommes, Apples, Mele").ShouldBe(150);
        }
 public AddCashierWindow(Cashier cashier)
 {
     InitializeComponent();
     cashier.Name = "";
     cashier.Login = "";
     cashier.Password = "";
     cashier.Role = "Cashier";
     DataContext = cashier;
 }
Exemple #34
0
 public void TestFreeBananas()
 {
     var cashier = new Cashier();
     cashier.Enter("Cherries");
     cashier.Enter("Cherries");
     cashier.Enter("Bananas");
     var result = cashier.Enter("Bananas");
     result.ShouldBe(280);
 }
Exemple #35
0
        private static void RunTest(Waiter waiter, Cashier cashier, int orderCount)
        {
            var orderIds = new BlockingCollection<Guid>();
            var ordersToBePaid = new BlockingCollection<Guid>();

            for (int i = 0; i < orderCount; i++)
            {
                orderIds.Add(Guid.NewGuid());
            }

            Task.Factory.StartNew(
                () =>
                {
                    bool isDodegy = false;

                    foreach (var orderId in orderIds)
                    {
                        waiter.TakeOrder(
                            12,
                            new[]
                            {
                                new OrderItem
                                {
                                    Name = "Beans on Toast",
                                    Quantity = 1
                                }
                            },
                            orderId,
                            isDodegy
                            );
                        isDodegy = !isDodegy;
                        ordersToBePaid.Add(orderId);
                    }

                    //ordersToBePaid.CompleteAdding();
                });

            var waitHandle = new ManualResetEvent(false);
            Task.Factory.StartNew(
                () =>
                {
                    foreach (var orderId in ordersToBePaid.GetConsumingEnumerable())
                    {
                        if (false == cashier.TryPay(orderId))
                        {
                            ordersToBePaid.Add(orderId);
                        }
                    }

                    waitHandle.Set();
                });

            waitHandle.WaitOne();
            Console.ReadKey();
        }
Exemple #36
0
        static void Main()
        {
            var bus = new TopicBasedPubSub();
            var messageListener = new MessageListener(bus);
            var startables = new List<IStartable>();
            
            var midgetFactory = new MidgetFactory();
            var midgetHouse = new MidgetHouse(bus, midgetFactory);

            var consolePrinter = new QueuedHandler<OrderPaid>(Messages.Paid, new ConsolePrintingOrderHandler(bus));
            bus.Subscribe(consolePrinter);

            startables.Add(consolePrinter);
            var cashier = new Cashier(bus);
            var queuedCashier = new QueuedHandler<TakePayment>(Messages.OrderBilled, cashier);
            bus.Subscribe(queuedCashier);
            startables.Add(queuedCashier);
            startables.Add(cashier);

            var assistantManager = new QueuedHandler<PriceOrder>(Messages.OrderPrepared, new AssistantManager(bus));
            bus.Subscribe(assistantManager);
            startables.Add(assistantManager);
          
            var chefs = new List<QueuedHandler<CookFood>>();
            var rand = new Random();
            for (int i = 0; i < NumberOfChefs; i++)
            {
                var chef = new TimeToLiveDispatcher<CookFood>(new Chef(bus, rand.Next(1000)));
                var queuedHandler = new QueuedHandler<CookFood>(string.Format("Chef {0}", i), chef);
                chefs.Add(queuedHandler);
                startables.Add(queuedHandler);
            }

            var distributionStrategy = new QueuedDispatcher<CookFood>(bus, chefs);
            startables.Add(distributionStrategy);

            foreach (var startable in startables)
            {
                startable.Start();
            }
            var monitor = new Monitor(startables);
            monitor.Start();

            var waiter = new Waiter(bus);
            
            for (int i = 0; i < 10; i++)
            {
                var correlationId = Guid.NewGuid();

                var orderId = waiter.PlaceOrder(correlationId);    
            }            

            Console.ReadKey();
        }
Exemple #37
0
 public void LocalizedPromotions()
 {
     var cashier = new Cashier();
     cashier.Enter("Mele").ShouldBe(100);
     cashier.Enter("Pommes").ShouldBe(200);
     cashier.Enter("Pommes").ShouldBe(300);
     cashier.Enter("Apples").ShouldBe(300);
     cashier.Enter("Pommes").ShouldBe(100);
     cashier.Enter("Mele").ShouldBe(100);
     cashier.Enter("Cherries").ShouldBe(175);
     cashier.Enter("Cherries").ShouldBe(230);
 }
Exemple #38
0
        public void Test2()
        {
            var cashier = new Cashier();
            cashier.Enter("Cherries");
            cashier.Enter("Apples");
            cashier.Enter("Cherries");
            cashier.Enter("Bananas");
            cashier.Enter("Cherries");
            cashier.Enter("Cherries");
            var result = cashier.Enter("Apples");

            result.ShouldBe(410);
        }
Exemple #39
0
 private static StringBuilder PayOrders(Cashier cashier, Dictionary<string, DateTime> startTimes, int numberOfOrders)
 {
     var ordersPaid = 0;
     var buffer = new StringBuilder();
     do
     {
         var ordersToPay = cashier.GetOrdersReadyToPay();
         foreach (var order in ordersToPay)
         {
             cashier.PayBill(order);
             var startTime = startTimes[order.Id];
             Logger.Info("Order paid. Time: {0} Id {1}", (DateTime.Now - startTime), order.Id);
             ordersPaid++;
         }
     } while (ordersPaid < numberOfOrders);
     return buffer;
 }
Exemple #40
0
        private static void BackPressureTest()
        {
            var topicDispatcher = new TopicDispatcher();
            var threadBoundaryMonitor = new ThreadBoundaryMonitor();

            var reporting    = threadBoundaryMonitor.Wrap(new ReportingSystem(topicDispatcher));
            var cashierInner = new Cashier(topicDispatcher);
            var cashier      = threadBoundaryMonitor.Wrap(cashierInner);
            var assManager   = threadBoundaryMonitor.Wrap(new AssistantManager(topicDispatcher));
            var cooks        = new[]
            {
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 20)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 50)),
                threadBoundaryMonitor.Wrap(new Cook(topicDispatcher, 90))
            };
            var cookDispatcher =
                TTLSettingHandler.Wrap(
                    threadBoundaryMonitor.Wrap(
                        RetryDispatcher.Wrap(
                            TTLFilteringHandler.Wrap(
                                SmartDispatcher.Wrap(cooks, maxQueueLength: 15)))),
                    10);

            var waiter = new Waiter("Neil", topicDispatcher);

            topicDispatcher.Subscribe(cashier);
            topicDispatcher.Subscribe(cookDispatcher);
            topicDispatcher.Subscribe(assManager);
            topicDispatcher.Subscribe(reporting);
            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap(new Logger()));

            topicDispatcher.Subscribe(new SelfUnsubscribingOrderSampler(topicDispatcher));

            topicDispatcher.Subscribe(threadBoundaryMonitor.Wrap<OrderTaken>(new OrderFulfillmentCoordinator(topicDispatcher)));
            threadBoundaryMonitor.Start();

            RunTest(waiter, cashierInner, orderCount: 5000);
        }
Exemple #41
0
        static void Main()
        {
            #warning TODO: Replace topics with message types???
            #warning TODO: Make TimeToLiveHandler work with OrderMessageBase

            var waitress = new Waitress("Sexy Mary");
            var kitchen = PrepareKitchen();
            var assistantManager = PrepareAssistantManager();
            var cashier = new Cashier();
            var threadedCashier = PrepareThreadedCashier(cashier);
            var alarmClock = PrepareAlarmClock();

            var midgetHouse = new MidgetHouse();
            TopicPubSub.Instance.Subscribe<OrderPlaced>(Topics.NewOrders, midgetHouse);
            TopicPubSub.Instance.Subscribe(Topics.CooksQueue, kitchen);
            TopicPubSub.Instance.Subscribe(Topics.Pricing, assistantManager);
            TopicPubSub.Instance.Subscribe(Topics.Payment, threadedCashier);
            TopicPubSub.Instance.Subscribe<OrderCompleted>(Topics.CompletedOrders, midgetHouse);
            TopicPubSub.Instance.Subscribe(Topics.WakeUpCalls, alarmClock);

            Start();

            const int numberOfOrders = 200;
            var startTimes = new Dictionary<string, DateTime>();

            StartPlacingOrders(numberOfOrders, waitress, startTimes);

            var summary = PayOrders(cashier, startTimes, numberOfOrders);

            Thread.Sleep(1000);

            Console.WriteLine(summary.ToString());
            Console.WriteLine("Press enter to finish...");

            Console.ReadLine();
        }
Exemple #42
0
 public void TestCSV()
 {
     var cashier = new Cashier();
     cashier.Enter("Mele, Pommes, Pommes, Apples, Pommes, Mele, Cherries, Cherries, Bananas").ShouldBe(380);
 }
Exemple #43
0
 public void ApplesThenCherries_Output175()
 {
     var cashier = new Cashier();
     cashier.Enter("Apples").ShouldBe(100);
     cashier.Enter("Cherries").ShouldBe(175);
 }
Exemple #44
0
 public void WhenInputApples_ThenOutput100_LocalisationFull()
 {
     var cashier = new Cashier();
     cashier.Enter("Cherries").ShouldBe(75);
     cashier.Enter("Pommes").ShouldBe(175);
     cashier.Enter("Cherries").ShouldBe(230);
     cashier.Enter("Bananas").ShouldBe(380);
     cashier.Enter("Apples").ShouldBe(280);
     cashier.Enter("Mele").ShouldBe(380);
 }
Exemple #45
0
 public void WhenInputApples_ThenOutput100()
 {
     var cashier = new Cashier();
     cashier.Enter("Apples").ShouldBe(100);
 }
Exemple #46
0
 private static ThreadedConsumer<OrderReadyForPayment> PrepareThreadedCashier(Cashier cashier)
 {
     var threadedCashier = new ThreadedConsumer<OrderReadyForPayment>("Cashier", cashier);
     MonitoredConsumers.Add(threadedCashier);
     StartableThings.Add(threadedCashier);
     return threadedCashier;
 }
        static void Main(string[] args)
        {
            var d = new Dispatcher();
            var midgetHouse = new MidgetHouse(d);
            d.Subscribe<OrderPlaced>(midgetHouse);
            d.Subscribe<DodgyOrderPlaced>(midgetHouse);
            var manager = new Manager();
            var cashier = new Cashier(d);
            var ass = new AssMan(d);

            var cookDispatcher = new SmartDispatcher<CookFood>();
            var cookTtlGate = new TimeToLiveGate<CookFood>(cookDispatcher);
            var cookQueudHandler = new QueuedHandler<CookFood>(cookTtlGate, "cook ttl gate");
            var cookLimiter = new Limiter<CookFood>(cookQueudHandler);
            //var cookScrewsUp = new ScrewsUp<CookFood>(cookLimiter);

            var alarmClock = new AlarmClock(d);

            var messageMonitor = new MessageMonitor(d);
            var fmm = new FilePerOrderMonitor(d);

            d.Subscribe(alarmClock);
            d.Subscribe(cookLimiter);
            d.Subscribe(ass);
            d.Subscribe(cashier);
            d.Subscribe(manager);
            d.Subscribe<OrderPlaced>(messageMonitor);
            d.Subscribe<DodgyOrderPlaced>(messageMonitor);
            d.Subscribe<OrderPlaced>(fmm);
            d.Subscribe<DodgyOrderPlaced>(fmm);

            var cookQueudHandler1 = new QueuedHandler<CookFood>(new Cook(d, 10000), "c1");
            cookDispatcher.AddHandler(cookQueudHandler1);
            var cookQueudHandler2 = new QueuedHandler<CookFood>(new Cook(d, 5000), "c2");
            cookDispatcher.AddHandler(cookQueudHandler2);
            var cookQueudHandler3 = new QueuedHandler<CookFood>(new Cook(d, 100), "c3");
            cookDispatcher.AddHandler(cookQueudHandler3);

            var queueMonitor = new QueueMonitor(new IAmMonitored[] {cookQueudHandler1, cookQueudHandler2, cookQueudHandler3, cookQueudHandler,d.QueudHandler});

            //Cook cook = new Cook(ass);
            var waiter = new Waiter(d);

            cookQueudHandler1.Start();
            cookQueudHandler2.Start();
            cookQueudHandler3.Start();
            cookQueudHandler.Start();
            d.Start();
            alarmClock.Start();
            queueMonitor.Start();

            new Thread(TryPay).Start(cashier);

            Random r = new Random();
            for (int i = 0; i < 500; i++)
            {
                Guid orderNumber;
                if (r.Next()%2 == 0)
                {
                    orderNumber = waiter.PlaceDodgyOrder(new[] {Tuple.Create("Burger", 1)}, 15);

                }
                else
                {
                    orderNumber = waiter.PlaceOrder(new[] { Tuple.Create("Burger", 1) }, 15);
                }

                if(i > 2)Thread.Sleep(2000);

                orders.TryAdd(orderNumber, null);
            }
            //var orderNumber = waiter.PlaceOrder(new[] {Tuple.Create("Burger", 1)}, 15);
            //cashier.PayForOrder(orderNumber);
            Console.ReadLine();
        }
Exemple #48
0
 public void WhenInputApples_ThenOutput100_Localisation()
 {
     var cashier = new Cashier();
     cashier.Enter("Apples").ShouldBe(100);
     cashier.Enter("Pommes").ShouldBe(200);
     cashier.Enter("Mele").ShouldBe(300);
 }
Exemple #49
0
 public void Test_HotDeal1()
 {
     var cashier = new Cashier();
     cashier.Enter("Mele, Pommes, Pommes, Mele").ShouldBe(200);
     cashier.Enter("Bananas").ShouldBe(150);
     cashier.Enter("Mele, Pommes, Pommes, Apples, Mele").ShouldBe(150);
 }
 public MoneyForgerService(Cashier.Credential myCredentials)
 {
     AdminUserData.AdminUserDBTool adminDBTool = new AdminUserData.AdminUserDBTool();
     adminDBTool.IsValidUserCredentials(myCredentials);
     this.myCredentials = myCredentials;
 }