public void TicketBuilder_CreatesDefaultTicket_CreatesAccountTransactionDocument() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department).Build(); Assert.IsNotNull(ticket.TransactionDocument); }
public void TicketBuilder_CreatesDefaultTicket_IsDefaultExchangeRate() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department).Build(); Assert.AreEqual(1, ticket.ExchangeRate); }
public void TicketBuilder_CreatesDefaultTicket_TicketTypeIdAssigned() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department).Build(); Assert.AreEqual(context.TicketType.Id, ticket.TicketTypeId); }
public void TicketBuilder_CreatesTaxExcludedTicket_IsTaxExcluded() { var context = TicketBuilderTestContext.GetDefaultContext().WithTicketTypeTaxIsExcluded(); var ticket = TicketBuilder.Create(context.TicketType, context.Department).Build(); Assert.False(ticket.TaxIncluded); }
private static Ticket SetupTicket() { var tost = new MenuItem("Tost") { Id = 1 }; var hamburger = new MenuItem("Hamburger") { Id = 2 }; var ticket = TicketBuilder.Create(TicketType.Default, Department.Default).Build(); var order = ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", tost, null, new MenuItemPortion { Price = 5, Name = "Adet" }, "", null); order.Quantity = 2; order.PortionCount = 2; ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", tost, null, new MenuItemPortion { Price = 5, Name = "Adet" }, "", null); ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", hamburger, null, new MenuItemPortion { Price = 7, Name = "Adet" }, "", null); ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", hamburger, null, new MenuItemPortion { Price = 6, Name = "Adet" }, "", null); ticket.Recalculate(); return(ticket); }
public void CanCalculateDoubleOrdersMultipleTaxWithMultipleOrderTagOneTaxFree() { var ticket = TicketBuilder.Create(TicketType, Department.Default) .AddOrderFor(Beer).WithTaxTemplates(GetTaxTemplates(Beer.Id)).Do() .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)) .ToggleOrderTag(new OrderTagGroup { Name = "OT1", Id = 1, AddTagPriceToOrderPrice = true }, new OrderTag { Name = "t1", Id = 1, Price = 5 }) .ToggleOrderTag(new OrderTagGroup { Name = "OT2", Id = 2, AddTagPriceToOrderPrice = false }, new OrderTag { Name = "t2", Id = 2, Price = 5 }) .ToggleOrderTag(new OrderTagGroup { Name = "OT3", Id = 3, AddTagPriceToOrderPrice = true, TaxFree = true }, new OrderTag { Name = "t3", Id = 3, Price = 5 }) .WithPrice(5).Do() .Build(); const decimal expTax = 2.18m + 3; const decimal expStTax = 1.95m + 3; const decimal expLcTax = 0.23m; Assert.AreEqual(expTax, ticket.GetTaxTotal()); Assert.AreEqual(ticket.GetSum() - expTax, ticket.TransactionDocument.AccountTransactions.Single(x => x.AccountTransactionTypeId == TicketType.SaleTransactionType.Id).Amount); Assert.AreEqual(expLcTax, ticket.TransactionDocument.AccountTransactions.Single(x => x.AccountTransactionTypeId == 2).Amount); Assert.AreEqual(expStTax, ticket.TransactionDocument.AccountTransactions.Single(x => x.AccountTransactionTypeId == 3).Amount); }
public void TicketBuilder_CreatesTicketWithDepartment_DepartmentAssigned() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department).Build(); Assert.AreEqual(1, ticket.DepartmentId); }
public void TestCost() { var workspace = PrepareMenu("sd1.txt"); var testContext = new WarehouseTestContext(); CreateWarehouseTestContext(testContext, workspace); var transaction = new InventoryTransactionDocument(); workspace.Add(transaction); transaction.Add(testContext.PurchaseTransactionType, testContext.DonerEti, 16, 10, "KG", 1000); transaction.Add(testContext.PurchaseTransactionType, testContext.Pide, 1, 50, "Adet", 2); transaction.Add(testContext.PurchaseTransactionType, testContext.Yogurt, 4, 30, "KG", 1000); transaction.Add(testContext.PurchaseTransactionType, testContext.ZeytinYagi, 5, 5, "Litre", 100); transaction.TransactionItems.ToList().ForEach(workspace.Add); var ticket = TicketBuilder.Create(TicketType.Default, testContext.Department).Build(); workspace.Add(ticket); ticket.AddOrder(AccountTransactionType.Default, testContext.Department, "Emre", testContext.Iskender, null, testContext.Iskender.Portions[0], "", null); ticket.AddOrder(AccountTransactionType.Default, testContext.Department, "Emre", testContext.Iskender, null, testContext.Iskender.Portions[0], "", null); ticket.AddOrder(AccountTransactionType.Default, testContext.Department, "Emre", testContext.Iskender, null, testContext.Iskender.Portions[0], "", null); var pc = InventoryService.GetCurrentPeriodicConsumption(); workspace.Add(pc); var whc = pc.WarehouseConsumptions.Single(x => x.WarehouseId == testContext.LocalWarehouse.Id); var iskenderCostItem = whc.CostItems.Single(x => x.MenuItemId == testContext.Iskender.Id); Assert.AreEqual(iskenderCostItem.Quantity, 3); var etCost = ((16m / 1000m) * 120m); var pideCost = ((1m / 2m) * 2m); var yogurtCost = ((4m / 1000m) * 50m); var zeytinYagiCost = ((5m / 100m) * 1m); var iskenderCost = decimal.Round(etCost + pideCost + yogurtCost + zeytinYagiCost, 2); Assert.AreEqual(iskenderCost, iskenderCostItem.CostPrediction); var etpc = whc.PeriodicConsumptionItems.Single(x => x.InventoryItemId == testContext.DonerEti.Id); var pidepc = whc.PeriodicConsumptionItems.Single(x => x.InventoryItemId == testContext.Pide.Id); var yogurtpc = whc.PeriodicConsumptionItems.Single(x => x.InventoryItemId == testContext.Yogurt.Id); var zeytinYagipc = whc.PeriodicConsumptionItems.Single(x => x.InventoryItemId == testContext.ZeytinYagi.Id); etpc.PhysicalInventory = 9.5m; yogurtpc.PhysicalInventory = 28; zeytinYagipc.PhysicalInventory = 4.5m; InventoryService.CalculateCost(pc, ApplicationState.CurrentWorkPeriod); etCost = (etpc.GetConsumption() * etCost) / etpc.GetPredictedConsumption(); pideCost = (pidepc.GetConsumption() * pideCost) / pidepc.GetPredictedConsumption(); yogurtCost = (yogurtpc.GetConsumption() * yogurtCost) / yogurtpc.GetPredictedConsumption(); zeytinYagiCost = (zeytinYagipc.GetConsumption() * zeytinYagiCost) / zeytinYagipc.GetPredictedConsumption(); Assert.AreEqual(iskenderCostItem.Cost, decimal.Round(etCost + pideCost + yogurtCost + zeytinYagiCost, 2)); }
public void CanCalculateTicket() { var ticket = TicketBuilder.Create(TicketType, Department.Default) .AddOrderFor(Pizza).Do() .Build(); Assert.AreEqual(10, ticket.GetSum()); }
public void CanCalculateTax() { var ticket = TicketBuilder.Create(TicketType, Department.Default) .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).Do() .Build(); Assert.AreEqual(2, ticket.GetTaxTotal()); }
public void CanCalculateExcludedTax() { var ticket = TicketBuilder.Create(TicketType, Department.Default).TaxExcluded() .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).Do() .Build(); Assert.AreEqual(10 + (10 * .25), ticket.GetSum()); }
public void CanCreateExcludedTaxTransaction() { var ticket = TicketBuilder.Create(TicketType, Department.Default).TaxExcluded() .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).WithQuantity(3).Do() .Build(); Assert.AreEqual((10 + (10 * .25)) * 3, ticket.TransactionDocument.AccountTransactions.Where(x => x.TargetAccountTypeId == 3).Sum(x => x.Amount) - ticket.TransactionDocument.AccountTransactions.Where(x => x.SourceAccountTypeId == 3).Sum(x => x.Amount)); }
public void TicketBuilder_CreatesTicketWithExchangeRate_ExchangeRateAssigned() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department) .WithExchangeRate(1.1m) .Build(); Assert.AreEqual(1.1m, ticket.ExchangeRate); }
public void TicketBuilder_CreatesTicketWithCalculations_DiscountAdded() { var context = TicketBuilderTestContext.GetDefaultContext().With10PercentDiscount(); var ticket = TicketBuilder.Create(context.TicketType, context.Department) .WithCalculations(context.Calculations) .Build(); Assert.AreEqual(10, ticket.Calculations.Sum(x => x.Amount)); }
public void CanAddOrders() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .Build(); Assert.AreEqual(2, ticket.Orders.Count); }
public void CanVoidAll() { var ticket = TicketBuilder.Create(TicketType, Department.Default).TaxExcluded() .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).CalculatePrice(false).Do(2) .Build(); Assert.AreEqual(0, ticket.GetTaxTotal()); Assert.AreEqual(0, ticket.TransactionDocument.AccountTransactions.Sum(x => x.Amount)); }
public void TicketBuilder_CreatesOrder_OrderAdded() { var context = TicketBuilderTestContext.GetDefaultContext(); var ticket = TicketBuilder.Create(context.TicketType, context.Department) .AddOrder().ForMenuItem(MenuItemBuilder.Create("Hamburger").AddPortion("Adet", 10).Build()).Do() .Build(); Assert.AreEqual(10, ticket.GetSum()); }
public void MergeOrders_OneOrderIsGift_ShouldSkipMerge() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .Build(); ticket.Orders[0].CalculatePrice = false; ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders.Count); }
public void CanUpdateQuantityOfMergedOrders() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .Build(); ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders[0].Quantity); }
public void MergeOrders_DifferentOrderStates_ShouldSkipMerge() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .Build(); ticket.Orders[0].SetStateValue("Status", 1, "New", 1, "", 0); ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders.Count); }
public void MergeOrders_DifferentOrderQuantites_ShouldSkipMerge() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).WithQuantity(2).Do() .AddOrder().ForMenuItem(kola).WithQuantity(1).Do() .Build(); ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders.Count); }
public void CanCalculateSampleCase2() { var tax5 = TaxTemplateBuilder.Create("%5 Tax").WithRate(5) .CreateAccountTransactionType().WithId(3).Do() .WithRounding(0) .Build(); var ticket = TicketBuilder.Create(TicketType, Department.Default).TaxExcluded() .AddOrderFor(Product).WithTaxTemplate(tax5).WithPrice(8.95m).WithQuantity(1).Do() .Build(); Assert.AreEqual(9.40m, ticket.GetSum()); }
public void MergeOrders_OneOrderPortionDifferent_ShouldSkipMerge() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).AddPortion("Büyük", 6).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .Build(); ticket.Orders[0].UpdatePortion(kola.Portions[1], "", null); ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders.Count); Assert.AreEqual(11, ticket.GetSum()); }
public void OrderMerge_CanCompareOrdersWithDifferentPrice_ReturnsFalse() { var kola = MenuItemBuilder.Create("Kola").WithId(1).AddPortion("Adet", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).WithPrice(3).Do() .AddOrder().ForMenuItem(kola).Do() .Build(); var equals = OrderMerger.CanMergeOrders(ticket.Orders[0], ticket.Orders[1]); Assert.False(equals); }
public void CanCalculateExcludedTaxWhenDiscountExists() { var ticket = TicketBuilder.Create(TicketType, Department.Default) .TaxExcluded() .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).Do() .AddCalculation(new CalculationType { Name = "Discount", AccountTransactionType = DiscountTransactionType, Amount = 10, DecreaseAmount = true }) .Build(); Assert.AreEqual(11.25, ticket.GetSum()); Assert.AreEqual(11.25, ticket.TransactionDocument.AccountTransactions.Where(x => x.TargetAccountTypeId == 3).Sum(x => x.Amount) - ticket.TransactionDocument.AccountTransactions.Where(x => x.SourceAccountTypeId == 3).Sum(x => x.Amount)); }
public void OrderMerge_CanCompareOrdersWithOneOfThemGift_ReturnsFalse() { var kola = MenuItemBuilder.Create("Kola").WithId(1).AddPortion("Adet", 5).AddPortion("Büyük", 5).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do() .AddOrder().ForMenuItem(kola).Do() .Build(); ticket.Orders[0].CalculatePrice = false; var equals = OrderMerger.CanMergeOrders(ticket.Orders[0], ticket.Orders[1]); Assert.False(equals); }
public void CanMergeMultipleOrders() { var kola = MenuItemBuilder.Create("Kola").AddPortion("Adet", 5).Build(); var pizza = MenuItemBuilder.Create("Pizza").AddPortion("Adet", 10).Build(); var ticket = TicketBuilder.Create(TicketType.Default, Department.Default) .AddOrder().ForMenuItem(kola).Do(2) .AddOrder().ForMenuItem(pizza).Do(2) .Build(); ticket.MergeOrdersAndUpdateOrderNumbers(1); Assert.AreEqual(2, ticket.Orders.Count); }
public void CanCalculateDoubleMultipleTax() { const decimal orderQuantiy = 2; var ticket = TicketBuilder.Create(TicketType, Department.Default) .AddOrderFor(Beer).WithTaxTemplates(GetTaxTemplates(Beer.Id)).WithQuantity(2).Do().Build(); const decimal expTax = 2.18m * orderQuantiy; const decimal expStTax = 1.95m; const decimal expLcTax = 0.23m; Assert.AreEqual(expTax, ticket.GetTaxTotal()); Assert.AreEqual(expLcTax * orderQuantiy, ticket.TransactionDocument.AccountTransactions.Single(x => x.AccountTransactionTypeId == 2).Amount); Assert.AreEqual(expStTax * orderQuantiy, ticket.TransactionDocument.AccountTransactions.Single(x => x.AccountTransactionTypeId == 3).Amount); }
public void CanHandleTax() { var taxTemplate = new TaxTemplate { Name = "Tax", Rate = 10, AccountTransactionType = AccountTransactionType.Default }; var taxTemplates = new List <TaxTemplate> { taxTemplate }; var tost = new MenuItem("Tost") { Id = 1 }; var hamburger = new MenuItem("Hamburger") { Id = 2 }; var ticket = TicketBuilder.Create(TicketType.Default, Department.Default).Build(); var order = ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", tost, taxTemplates, new MenuItemPortion { Price = 5, Name = "Adet" }, "", null); order.Quantity = 2; order.PortionCount = 2; ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", tost, taxTemplates, new MenuItemPortion { Price = 5, Name = "Adet" }, "", null); ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", hamburger, taxTemplates, new MenuItemPortion { Price = 7, Name = "Adet" }, "", null); ticket.AddOrder(AccountTransactionType.Default, Department.Default, "Emre", hamburger, taxTemplates, new MenuItemPortion { Price = 6, Name = "Adet" }, "", null); ticket.AddCalculation(new CalculationType() { AccountTransactionType = AccountTransactionType.Default, DecreaseAmount = true }, 10); ticket.Recalculate(); var orderSelector = new OrderSelector(); orderSelector.UpdateTicket(ticket); Assert.AreEqual(ticket.GetSum(), orderSelector.Selectors.Sum(x => x.TotalPrice)); ticket.TaxIncluded = true; orderSelector = new OrderSelector(); orderSelector.UpdateTicket(ticket); Assert.AreEqual(ticket.GetSum(), orderSelector.Selectors.Sum(x => x.TotalPrice)); }
private Ticket CreateTicket() { var account = _cacheService.GetAccountById(_applicationState.CurrentTicketType.SaleTransactionType.DefaultTargetAccountId); var result = TicketBuilder.Create(_applicationState.CurrentTicketType, _applicationState.CurrentDepartment.Model) .WithExchangeRate(GetExchangeRate(account)) .WithCalculations( _applicationState.GetCalculationSelectors() .Where(x => string.IsNullOrEmpty(x.ButtonHeader)) .SelectMany(y => y.CalculationTypes)) .Build(); _applicationState.NotifyEvent(RuleEventNames.TicketCreated, new { Ticket = result, TicketTypeName = _applicationState.CurrentTicketType.Name }); return(result); }