Example #1
0
        public IActionResult GetWholesaleItemDailyReportDateRange([FromQuery] DateTime startDateTime,
                                                                  [FromQuery] DateTime endDateTime, [FromQuery] int?dealerId, [FromQuery] int?code)
        {
            // input validation
            if (code == null)
            {
                return(BadRequest("Code must not be null; you must input a code"));
            }

            if (startDateTime == null || endDateTime == null)
            {
                return(BadRequest());
            }

            // Set the filter to "DateRange"
            var filter = new WholesaleItemDailyReportFilterDto
            {
                StartDateTime = startDateTime,
                EndDateTime   = endDateTime,
                DealerId      = dealerId,
                Code          = code
            };

            // Return to response
            var listToReturn = GetWholesaleItemDailyReport(filter);

            return(Ok(listToReturn));
        }
Example #2
0
        private List <WholesaleItemDailyReportDto> GetWholesaleItemDailyReport(WholesaleItemDailyReportFilterDto filter)
        {
            // Set NoTracking for ChangeTracker
            _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

            // Join invoice, and sales tables
            var invoiceGroups = _context.Invoice
                                .Where(i => i.Branch == 1)
                                .Where(i => i.CommitDate >= filter.StartDateTime)
                                .Where(i => i.CommitDate < filter.EndDateTime)
                                .Where(i => filter.DealerId.HasValue ? (i.CardId == filter.DealerId.GetValueOrDefault()) : true)
                                .Select(i => new { i.InvoiceNumber, i.CommitDate })
                                .Join(
                _context.Sales
                .Where(s => s.Code == filter.Code)
                .Select(s => new { s.InvoiceNumber, s.Quantity, s.CommitPrice, s.SupplierPrice }),
                i => i.InvoiceNumber,
                s => s.InvoiceNumber,
                (i, s) => new { i.CommitDate, s.Quantity, s.CommitPrice, s.SupplierPrice }
                )
                                .GroupBy(i => i.CommitDate.Date);

            // Apply sales Daily report logic
            var resultList = new List <WholesaleItemDailyReportDto>();

            foreach (var group in invoiceGroups)
            {
                resultList.Add(new WholesaleItemDailyReportDto()
                {
                    StartDate     = group.Key,
                    EndDate       = group.Key.AddDays(1),
                    AmountWithGST = Math.Round(group
                                               .Sum(i => (decimal)(i.CommitPrice * (decimal)i.Quantity * 1.15m))
                                               , 2),
                    ProfitWithGST = Math.Round(group
                                               .Sum(i => (decimal)((i.CommitPrice - i.SupplierPrice) * (decimal)i.Quantity * 1.15m))
                                               , 2),
                    ItemQuantity = Math.Round(group
                                              .Sum(i => i.Quantity)
                                              , 2)
                });
            }

            return(resultList.OrderBy(r => r.StartDate).ToList());
        }
Example #3
0
        public IActionResult GetWholesaleItemDailyReportToday([FromQuery] int?dealerId, [FromQuery] int?code)
        {
            // input validation
            if (code == null)
            {
                return(BadRequest("Code must not be null; you must input a code"));
            }
            // Set the filter to "Today"
            var filter = new WholesaleItemDailyReportFilterDto();

            filter.SetToday();
            filter.DealerId = dealerId;
            filter.Code     = code;

            // Return to response
            var listToReturn = GetWholesaleItemDailyReport(filter);

            return(Ok(listToReturn));
        }