private UserYearlySalesSearchRequest GetSearchRequest()
        {
            UserYearlySalesSearchRequest searchRequest = new UserYearlySalesSearchRequest();

            searchRequest              = ApplyDefaultSearchValues(searchRequest) as UserYearlySalesSearchRequest;
            searchRequest.PageIndex    = pgnYearlySales.PageIndex;
            searchRequest.UserFullName = txtCustomerName.Text;
            searchRequest.Year         = DateTime.UtcNow.Year;

            if (nmrNumberOfEntries.Value > 0)
            {
                searchRequest.PageSize = (int)nmrNumberOfEntries.Value;
            }

            if (nmrYear.Value > 0)
            {
                searchRequest.Year = (int)nmrYear.Value;
            }

            if (nmrUserId.Value > 0)
            {
                searchRequest.UserId = (int)nmrUserId.Value;
            }

            return(searchRequest);
        }
Beispiel #2
0
        private async void LoadCharts()
        {
            UserYearlySalesSearchRequest searchRequest = new UserYearlySalesSearchRequest();

            searchRequest           = ApplyDefaultSearchValues(searchRequest) as UserYearlySalesSearchRequest;
            searchRequest.PageSize  = int.MaxValue;
            searchRequest.ReturnAll = true;
            searchRequest.Year      = DateTime.UtcNow.Year;

            string route       = "user-yearly-sales";
            var    yearlySales = await _reportsApi.Get <YearlySalesReportDto>(searchRequest, route);

            lblMainChartName.Text = $"Ticketing data for the year {searchRequest.Year}";

            List <float> monthlyTotals = new List <float>();

            foreach (var monthlyTotal in yearlySales.MonthlyTotalsForPage)
            {
                monthlyTotals.Add((float)monthlyTotal.Total);
            }

            var chart = crtSalesPerMonth.ChartAreas[0];

            chart.AxisX.IntervalType                 = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Number;
            chart.AxisY.LabelStyle.Format            = "";
            chart.AxisY.LabelStyle.Format            = "";
            chart.AxisY.LabelStyle.IsEndLabelVisible = true;

            double maximumY  = (double)yearlySales.MonthlyTotalsForPage.Max(x => x.Total) + 1000;
            double intervalY = 1000;

            if (maximumY > 5000)
            {
                intervalY = 2500;
            }

            chart.AxisX.Minimum  = 1;
            chart.AxisX.Maximum  = 12;
            chart.AxisY.Minimum  = 0;
            chart.AxisY.Maximum  = maximumY;
            chart.AxisX.Interval = 1;
            chart.AxisY.Interval = intervalY;

            string label = "Sales (without VAT)";

            crtSalesPerMonth.Series.Add(label);
            crtSalesPerMonth.Series[label].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
            crtSalesPerMonth.Series[label].Color     = Color.Green;

            for (int i = 0; i < monthlyTotals.Count; i++)
            {
                crtSalesPerMonth.Series[label].Points.AddXY(i + 1, monthlyTotals[i]);
            }

            await LoadWidgets(yearlySales);
        }
        private async void dgvUserSalesList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridViewColumn clickedColumn = dgvUserSalesList.Columns[e.ColumnIndex];

            ChangeSorting(clickedColumn.Name);

            _request            = GetSearchRequest();
            _request.SortColumn = CurrentSortPropertyName;
            _request.SortOrder  = CurrentSortOrder;

            await LoadYearlySalesReportData();
        }
Beispiel #4
0
        private async Task <List <UserMonthlySalesDto> > GetUserSalesAsync(UserYearlySalesSearchRequest searchRequest)
        {
            IEnumerable <Reservation> reservations = await _reservationRepo.GetForYearlySalesReportAsync(searchRequest, searchRequest.Year, searchRequest.UserId, searchRequest.UserFullName);

            List <UserMonthlySalesDto> userSales = reservations.Select(x => x.User).Distinct()
                                                   .Select(x => new UserMonthlySalesDto
            {
                UserId            = x.Id,
                UserFullName      = x.FullName,
                UserMonthlyTotals = CalculateUserMonthlySales(x.Id, reservations)
            }).ToList();

            foreach (var userSale in userSales)
            {
                userSale.UserYearlyTotal = CalculateUserTotal(userSale);
            }

            return(userSales);
        }
Beispiel #5
0
        /// <summary>
        /// Gets summed sales per user and month, with a total sum and monthly sums for a year. The returned amounts are without VAT.
        /// </summary>
        /// <param name="searchRequest"></param>
        /// <returns></returns>
        public async Task <YearlySalesReportDto> GetYearlySalesReportPerUserAsync(UserYearlySalesSearchRequest searchRequest)
        {
            List <UserMonthlySalesDto> userSales = await GetUserSalesAsync(searchRequest);

            userSales = ApplySortingForSalesReport(userSales, searchRequest);

            PagedList <UserMonthlySalesDto> pagedModel = PagedList <UserMonthlySalesDto> .Create(userSales, searchRequest.PageIndex, searchRequest.PageSize);

            YearlySalesReportDto monthlySales = new YearlySalesReportDto
            {
                UserMonthlySales     = pagedModel,
                MonthlyTotalsForPage = pagedModel.Data.SelectMany(x => x.UserMonthlyTotals)
                                       .GroupBy(x => x.MonthNumber)
                                       .Select(x => new MonthlySaleTotalDto
                {
                    MonthNumber = x.Key,
                    Total       = x.Sum(y => y.Total)
                }).ToList()
            };

            monthlySales.YearlyTotalForPage = monthlySales.MonthlyTotalsForPage.Sum(x => x.Total);

            return(monthlySales);
        }
Beispiel #6
0
        public async Task <ActionResult <YearlySalesReportDto> > GetYearlyUserSales([FromQuery] UserYearlySalesSearchRequest searchRequest)
        {
            var result = await _reportService.GetYearlySalesReportPerUserAsync(searchRequest);

            return(Ok(result));
        }
 private async void FormReports_Load(object sender, EventArgs e)
 {
     _request = GetSearchRequest();
     await LoadYearlySalesReportData();
 }
 private async void pgnYearlySales_PageChanged(object sender, EventArgs e)
 {
     _request = GetSearchRequest();
     await LoadYearlySalesReportData();
 }