示例#1
0
        public void TicketBuilder_CreatesDefaultTicket_CreatesAccountTransactionDocument()
        {
            var context = TicketBuilderTestContext.GetDefaultContext();
            var ticket  = TicketBuilder.Create(context.TicketType, context.Department).Build();

            Assert.IsNotNull(ticket.TransactionDocument);
        }
示例#2
0
        public void TicketBuilder_CreatesDefaultTicket_IsDefaultExchangeRate()
        {
            var context = TicketBuilderTestContext.GetDefaultContext();
            var ticket  = TicketBuilder.Create(context.TicketType, context.Department).Build();

            Assert.AreEqual(1, ticket.ExchangeRate);
        }
示例#3
0
        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);
        }
示例#4
0
        public void TicketBuilder_CreatesTaxExcludedTicket_IsTaxExcluded()
        {
            var context = TicketBuilderTestContext.GetDefaultContext().WithTicketTypeTaxIsExcluded();
            var ticket  = TicketBuilder.Create(context.TicketType, context.Department).Build();

            Assert.False(ticket.TaxIncluded);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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));
        }
示例#9
0
        public void CanCalculateTicket()
        {
            var ticket = TicketBuilder.Create(TicketType, Department.Default)
                         .AddOrderFor(Pizza).Do()
                         .Build();

            Assert.AreEqual(10, ticket.GetSum());
        }
示例#10
0
        public void CanCalculateTax()
        {
            var ticket = TicketBuilder.Create(TicketType, Department.Default)
                         .AddOrderFor(Pizza).WithTaxTemplates(GetTaxTemplates(Pizza.Id)).Do()
                         .Build();

            Assert.AreEqual(2, ticket.GetTaxTotal());
        }
示例#11
0
        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());
        }
示例#12
0
        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));
        }
示例#13
0
        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);
        }
示例#14
0
        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);
        }
示例#16
0
        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));
        }
示例#17
0
        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);
        }
示例#22
0
        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);
        }
示例#25
0
        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);
        }
示例#28
0
        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);
        }
示例#29
0
        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));
        }
示例#30
0
        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);
        }