public override async Task <IDataSplitable> Extract()
        {
            var splitted = Splitted;
            var data     = new SalesDataModel();

            data.SalesID      = GetValue <string>("SalesID", splitted);
            data.SalesmanName = GetValue <string>("SalesmanName", splitted);

            foreach (var salesItem in splitted[2].Split(","))
            {
                var items = salesItem
                            .Replace("[", "")
                            .Replace("]", "")
                            .Split("-");

                var sales = new SalesItemModel();
                sales.ItemID   = GetValue <SalesItemModel, int>("ItemID", items);
                sales.Price    = GetValue <SalesItemModel, decimal>("Price", items);
                sales.Quantity = GetValue <SalesItemModel, int>("Quantity", items);

                data.Sales.Add(sales);
            }

            return(await Task.FromResult(data));
        }
Beispiel #2
0
        private IEnumerable <SalesItemModel> GetSalesItems(IEnumerable <Invoice> invoices, DateTime startDate, DateTime endDate)
        {
            var items = new List <SalesItemModel>();

            DateTime currentDate = startDate.Date;

            while (currentDate <= endDate.Date)
            {
                var amounts            = new List <decimal>();
                var invoicesInThisDate = invoices
                                         .Where(i => i.Created >= currentDate && i.Created < currentDate.AddDays(1));
                //Cash
                amounts.Add(invoicesInThisDate.Sum(i => i.Payments.Where(p => p.PaymentOptionId == 1).Sum(p => p.Amount)));
                //CC
                amounts.Add(invoicesInThisDate.Sum(i => i.Payments.Where(p => p.PaymentOptionId == 2).Sum(p => p.Amount)));
                //Debit
                amounts.Add(invoicesInThisDate.Sum(i => i.Payments.Where(p => p.PaymentOptionId == 3).Sum(p => p.Amount)));
                //Check
                amounts.Add(invoicesInThisDate.Sum(i => i.Payments.Where(p => p.PaymentOptionId == 4).Sum(p => p.Amount)));

                //Finances
                foreach (var finance in db.PaymentTypes.Where(p => p.Name.Contains("Finance")).OrderBy(f => f.Id))
                {
                    amounts.Add(invoicesInThisDate.Where(i => i.PaymentTypeId == finance.Id).Sum(i => i.Payments.Where(p => p.PaymentOptionId == 5).Sum(p => p.Amount)));
                }

                //Totals
                var total = amounts.Sum();
                amounts.Add(total);
                //Taxes
                amounts.Add(invoicesInThisDate.Sum(i => i.Payments.Sum(p => p.Amount * i.Tax.Value)));

                var item = new SalesItemModel()
                {
                    Date    = currentDate,
                    Amounts = amounts
                };
                currentDate = currentDate.AddDays(1);
                items.Add(item);
            }

            return(items);
        }