コード例 #1
0
ファイル: OrdersService.cs プロジェクト: DanAnton/courierKata
        private static void ComputeDiscounts(OrdersReport ordersReport)
        {
            var discounts = new List <OrderItem>();

            if (ordersReport.Items.All(i => i.Type.Equals(OrderItemType.SmallParcel)))
            {
                var filteredOrdersReport = ordersReport.Items.Where(i => i.Quantity >= 4).ToList();
                ComputeDiscountsInternal(filteredOrdersReport, discounts, 4, OrderItemType.SmallParcelMania);
            }
            else if (ordersReport.Items.All(i => i.Type.Equals(OrderItemType.MediumParcel)))
            {
                var filteredOrdersReport = ordersReport.Items.Where(i => i.Quantity >= 3).ToList();
                ComputeDiscountsInternal(filteredOrdersReport, discounts, 3, OrderItemType.MediumParcelMania);
            }
            else
            {
                var filteredOrdersReport = ordersReport
                                           .Items.Where(i => i.Quantity >= 5)
                                           .OrderBy(i => i.Type)
                                           .GroupBy(i => i.Type)
                                           .FirstOrDefault()?.ToList();
                ComputeDiscountsInternal(filteredOrdersReport, discounts, 5, OrderItemType.MixedParcelMania);
            }

            foreach (var discount in discounts)
            {
                ordersReport.Items.Add(discount);
            }
        }
コード例 #2
0
        private void ShowOrdersEventHandler(object sender, EventArgs args)
        {
            OrdersReport OrdRep = new OrdersReport();

            OrdRep.Text = "Orders of the patient";

            OrdRep.ShowDialog();
        }
コード例 #3
0
    private void OrdersReport_DataSourceDemanded(object sender, EventArgs e)
    {
        OrdersReport report  = (OrdersReport)sender;
        DateTime     endDate = (DateTime)report.Parameters["paramEndDate"].Value;

        endDate = endDate.AddHours(24);
        report.Parameters["paramEndDate"].Value = endDate;
    }
コード例 #4
0
        public void GivenOrderItems_GetOrdersReportWithHeavyProduct_ThenShouldReturnOrdersReportWithHeavyProduct()
        {
            //Arrange
            var expectedResult = new OrdersReport
            {
                Items = new List <OrderItem>
                {
                    new OrderItem
                    {
                        Type     = OrderItemType.SmallParcel,
                        Cost     = 12,
                        Quantity = 4
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.HeavyParcel,
                        Cost     = 104,
                        Quantity = 2
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.XlParcel,
                        Cost     = 75,
                        Quantity = 3
                    }
                },
                Total = 191
            };

            // Act
            var result = _service.GetOrdersReport(new OrderCart
            {
                Products = new List <Product>
                {
                    new Product
                    {
                        Dimension     = 10,
                        Quantity      = 2,
                        WeightPerItem = 52
                    },
                    new Product
                    {
                        Dimension = 2.4,
                        Quantity  = 4
                    },
                    new Product
                    {
                        Dimension = 100,
                        Quantity  = 3
                    }
                }
            });

            //Assert
            Assert.IsTrue(JsonConvert.SerializeObject(result.Items.OrderBy(r => r.Type).ToList())
                          .Equals(JsonConvert.SerializeObject(expectedResult.Items.OrderBy(r => r.Type))) &&
                          result.Total.Equals(expectedResult.Total));
        }
        protected void cbExport_Callback(object source, CallbackEventArgs e)
        {
            XtraReport   report = new OrdersReport();
            MemoryStream stream = new MemoryStream();

            switch (e.Parameter)
            {
            case "pdf":
                report.ExportToPdf(stream);
                break;

            case "xls":
                report.ExportToXls(stream);
                break;

            case "xlsx":
                report.ExportToXlsx(stream);
                break;

            case "rtf":
                report.ExportToRtf(stream);
                break;

            case "mht":
                report.ExportToMht(stream);
                break;

            case "html":
                report.ExportToHtml(stream);
                break;

            case "txt":
                report.ExportToText(stream);
                break;

            case "csv":
                report.ExportToCsv(stream);
                break;

            case "png":
                report.ExportToImage(stream);
                break;

            default:
                return;
            }

            //Delay to emulate long exporting
            Thread.Sleep(2000);

            Session["ExportedData"]     = stream;
            Session["ExportedDataType"] = e.Parameter;
        }
コード例 #6
0
        public async Task <IActionResult> GetReportOfTodaysOrders(DateTime?orddate = null)
        {
            if (orddate == null)//по умолчанию, показываются записи до сегоднящнего дня.
            {
                orddate = DateTime.Today.AddHours(23);
            }
            else
            {
                orddate = orddate.Value.AddHours(23);//так как клиент отправляет только дату, без уточнения времени,
            }
            //то чтобы увидеть заказы до того дня включительно, надо указать конец того дня, потому что время по дефолту T00:00:00

            var allOrders = await _orderRepository.GetAllOrderReceipt((DateTime)orddate, Status.Complete);

            var numb = allOrders.ToList().Count;

            if (numb == 0)
            {
                return(BadRequest($"No orders completed for date {orddate}"));
            }

            var ordersCompleted  = allOrders.Select(ord => ord.Id).Distinct().Count();
            var totalOrdersPrice = allOrders.Select(ord => ord.Meals.Price * ord.Quantity * ord.AmountBought).Sum();

            var mealIds = allOrders.Select(ord => ord.MealId).Distinct();
            ICollection <MealStat> exactMeals = new LinkedList <MealStat>();

            foreach (Guid mealN in mealIds)
            {
                var mealSoldQuantities = allOrders.Where(ord => ord.MealId == mealN).Select(m => (int)m.Quantity).Sum();
                var mealInfo           = allOrders.FirstOrDefault(ord => ord.MealId == mealN);

                MealStat mealRecord = new MealStat()
                {
                    MealId       = mealN,
                    MealName     = mealInfo.Meals.Name,
                    MealAmount   = (decimal)mealInfo.Meals.Amount,
                    MealPrice    = (decimal)mealInfo.Meals.Price,
                    SoldQuantity = mealSoldQuantities
                };
                exactMeals.Add(mealRecord);
            }

            OrdersReport report = new OrdersReport()
            {
                OrderDate  = (DateTime)orddate,
                OrdersMade = ordersCompleted,
                FoodSale   = exactMeals,
                TotalPrice = (decimal)totalOrdersPrice
            };

            return(Ok(report));
        }
コード例 #7
0
ファイル: OrdersService.cs プロジェクト: DanAnton/courierKata
 private static void AddSpeedyShipping(bool hasFastDeliver, OrdersReport ordersReport)
 {
     if (!hasFastDeliver)
     {
         return;
     }
     ordersReport.Items.Add(new OrderItem
     {
         Type     = OrderItemType.FastShipping,
         Cost     = ordersReport.Total,
         Quantity = 1
     });
 }
コード例 #8
0
ファイル: OrdersService.cs プロジェクト: DanAnton/courierKata
        private static OrdersReport ComputeOrdersReport(OrderCart cart)
        {
            var result = new List <OrderItem>();

            cart.Products.ToList().ForEach(p => ComputeOrdersReportInternal(result, p));

            var ordersReport = new OrdersReport
            {
                Items = result,
                Total = result.Sum(r => r.Cost)
            };

            return(ordersReport);
        }
コード例 #9
0
    public static object Create(Type reportType)
    {
        switch (reportType.ToString())
        {
        case "CustomerReport":
            var custRpt = new CustomerReport();
            custRpt.Date = DateTime.Now;
            return(custRpt);

        default:
        case "OrdersReport":
            var ordsRpt = new OrdersReport();
            ordsRpt.Date = DateTime.Now;
            return(ordsRpt);
        }
    }
コード例 #10
0
        public static OrdersReport Convert(OrdersReportDto debtDto)
        {
            if (debtDto == null)
            {
                return(null);
            }
            OrdersReport debt = new OrdersReport();

            debtDto.Cost           = debt.Cost;
            debtDto.FinallyDate    = debt.FinallyDate;
            debtDto.NameCarrier    = debt.NameCarrier;
            debtDto.NameEnterprise = debt.NameEnterprise;
            debtDto.NameReklama    = debt.NameReklama;
            debtDto.StartDate      = debt.StartDate;
            debtDto.AllSum         = debt.AllSum;
            return(debt);
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: afedyanin/excel4reports
        public static void Main(string[] args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            if (args.Length < 2)
            {
                throw new ArgumentException("Please, specify data source (books, orders) and report format (excel, text)");
            }

            var isBooks  = string.Compare(args[0], "books", StringComparison.OrdinalIgnoreCase) == 0;
            var useExcel = string.Compare(args[1], "excel", StringComparison.OrdinalIgnoreCase) == 0;

            var file = isBooks ?
                       useExcel ? BooksReport.BuildExcel() : BooksReport.BuildText() :
                       useExcel?OrdersReport.BuildExcel() : OrdersReport.BuildText();

            OpenFile(file);
        }
コード例 #12
0
ファイル: OrdersService.cs プロジェクト: DanAnton/courierKata
 private static void RecalculateTotal(OrdersReport ordersReport)
 => ordersReport.Total = ordersReport.Items.Sum(i => i.Cost);
コード例 #13
0
        public void GivenOrderItems_GetOrdersReportWithSpeedyShipping_ThenShouldReturnOrdersReportWithSpeedyShipping()
        {
            //Arrange
            var expectedResult = new OrdersReport
            {
                Items = new List <OrderItem>
                {
                    new OrderItem
                    {
                        Type     = OrderItemType.SmallParcel,
                        Cost     = 9,
                        Quantity = 3
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcel,
                        Cost     = 8,
                        Quantity = 1
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.XlParcel,
                        Cost     = 75,
                        Quantity = 3
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.FastShipping,
                        Cost     = 92,
                        Quantity = 1
                    }
                },
                Total = 184
            };

            // Act
            var result = _service.GetOrdersReport(new OrderCart
            {
                Products = new List <Product>
                {
                    new Product
                    {
                        Dimension = 10,
                        Quantity  = 1
                    },
                    new Product
                    {
                        Dimension = 2.4,
                        Quantity  = 3
                    },
                    new Product
                    {
                        Dimension = 100,
                        Quantity  = 3
                    }
                },
                HasFastDeliver = true
            });

            //Assert
            Assert.IsTrue(JsonConvert.SerializeObject(result.Items.OrderBy(r => r.Type).ToList())
                          .Equals(JsonConvert.SerializeObject(expectedResult.Items.OrderBy(r => r.Type))) &&
                          result.Total.Equals(expectedResult.Total));
        }
コード例 #14
0
        GivenOrderItems_GetOrdersReportWithMixedParcelDiscount_ThenShouldReturnOrdersReportMixedParcelDiscount()
        {
            //Arrange
            var expectedResult = new OrdersReport
            {
                Items = new List <OrderItem>
                {
                    new OrderItem
                    {
                        Type     = OrderItemType.SmallParcel,
                        Cost     = 15,
                        Quantity = 5
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcel,
                        Cost     = 40,
                        Quantity = 5
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.XlParcel,
                        Cost     = 75,
                        Quantity = 3
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MixedParcelMania,
                        Cost     = -3,
                        Quantity = 1
                    }
                },
                Total = 127
            };

            // Act
            var result = _service.GetOrdersReport(new OrderCart
            {
                Products = new List <Product>
                {
                    new Product
                    {
                        Dimension = 10,
                        Quantity  = 5
                    },
                    new Product
                    {
                        Dimension = 2.4,
                        Quantity  = 5
                    },
                    new Product
                    {
                        Dimension = 100,
                        Quantity  = 3
                    }
                }
            });

            //Assert
            Assert.IsTrue(JsonConvert.SerializeObject(result.Items.OrderBy(r => r.Type).ToList())
                          .Equals(JsonConvert.SerializeObject(expectedResult.Items.OrderBy(r => r.Type))) &&
                          result.Total.Equals(expectedResult.Total));
        }
コード例 #15
0
        GivenOrderItems_GetOrdersReportWithMediumParcelDiscount_ThenShouldReturnOrdersReportWithMediumParcelDiscount()
        {
            //Arrange
            var expectedResult = new OrdersReport
            {
                Items = new List <OrderItem>
                {
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcel,
                        Cost     = 30,
                        Quantity = 3
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcel,
                        Cost     = 32,
                        Quantity = 4
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcel,
                        Cost     = 42,
                        Quantity = 3
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcelMania,
                        Cost     = -8,
                        Quantity = 1
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcelMania,
                        Cost     = -8,
                        Quantity = 1
                    },
                    new OrderItem
                    {
                        Type     = OrderItemType.MediumParcelMania,
                        Cost     = -8,
                        Quantity = 1
                    }
                },
                Total = 80
            };

            // Act
            var result = _service.GetOrdersReport(new OrderCart
            {
                Products = new List <Product>
                {
                    new Product
                    {
                        Dimension     = 11,
                        Quantity      = 3,
                        WeightPerItem = 4
                    },
                    new Product
                    {
                        Dimension     = 12,
                        Quantity      = 4,
                        WeightPerItem = 3
                    },
                    new Product
                    {
                        Dimension     = 13,
                        Quantity      = 3,
                        WeightPerItem = 6
                    }
                }
            });

            //Assert
            Assert.IsTrue(JsonConvert.SerializeObject(result.Items.OrderBy(r => r.Type).ToList())
                          .Equals(JsonConvert.SerializeObject(expectedResult.Items.OrderBy(r => r.Type))) &&
                          result.Total.Equals(expectedResult.Total));
        }