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(); } }
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); } }
public async Task <Unit> Add(Cashier cashier) { _dbContext.Add(cashier); await _dbContext.SaveChangesAsync(); return(Unit.Value); }
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); }
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(); }
public void GivenANewCashier_WhenInitializedWithAValidPricelist_ThenTheMerchantIsNotCalled() { var merchantSpy = new MerchantSpy(); var _ = new Cashier(GetPricelistWithOneValidItem(1), merchantSpy); Assert.Equal(0, merchantSpy.ContactQuantity); }
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")); }
/// <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); }
public void ChangeCashier(Cashier newCashier) { myCashier = newCashier; myAgent.SetDestination(myCashier.GetPositionInLine()); arrivedAtLine = false; myState = CustomerState.GoingToLine; }
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); }
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."); } }
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()); }
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; }
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()); }
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)); }
public ActionResult DeleteConfirmed(int id) { Cashier cashier = db.Cashiers.Find(id); db.Cashiers.Remove(cashier); db.SaveChanges(); return(RedirectToAction("Index")); }
private void button1_Click(object sender, EventArgs e) { Cashier cForm = new Cashier(); cForm.Tag = this; cForm.Show(this); Hide(); }
public ActionResult _UpdateCashier(Cashier ins) { //...Update Object Cashier ins2 = CRep.Update(ins); //...Repopulate Grid... return(View(new GridModel(CRep.GetAllCashier()))); }
//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(); }
public bool Remove(Cashier cashier) { var result = _handleWebshopsDbContext.Cashiers.Remove(cashier); _handleWebshopsDbContext.SaveChanges(); return(true); }
public Cashier Create(Cashier cashier) { _handleWebshopsDbContext.Cashiers.Add(cashier); _handleWebshopsDbContext.SaveChanges(); return(cashier); }
public void WhenInputApples_ThenOutput100_Localisation() { var cashier = new Cashier(); cashier.Enter("Apples").ShouldBe(100); cashier.Enter("Pommes").ShouldBe(200); cashier.Enter("Mele").ShouldBe(300); }
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); }
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); }
public ActionResult _InsertCashier(Cashier ins) { //...Insert Object Cashier ins2 = CRep.Insert(ins); //...Repopulate Grid... return(View(new GridModel(CRep.GetAllCashier()))); }
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; }
public void TestFreeBananas() { var cashier = new Cashier(); cashier.Enter("Cherries"); cashier.Enter("Cherries"); cashier.Enter("Bananas"); var result = cashier.Enter("Bananas"); result.ShouldBe(280); }
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(); }
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 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); }
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); }
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; }
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); }
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(); }
public void TestCSV() { var cashier = new Cashier(); cashier.Enter("Mele, Pommes, Pommes, Apples, Pommes, Mele, Cherries, Cherries, Bananas").ShouldBe(380); }
public void ApplesThenCherries_Output175() { var cashier = new Cashier(); cashier.Enter("Apples").ShouldBe(100); cashier.Enter("Cherries").ShouldBe(175); }
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); }
public void WhenInputApples_ThenOutput100() { var cashier = new Cashier(); cashier.Enter("Apples").ShouldBe(100); }
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(); }
public MoneyForgerService(Cashier.Credential myCredentials) { AdminUserData.AdminUserDBTool adminDBTool = new AdminUserData.AdminUserDBTool(); adminDBTool.IsValidUserCredentials(myCredentials); this.myCredentials = myCredentials; }