public static OperationGroup ToEntity(this OperationGroupModel anOperationGroupModel)
 {
     return(new OperationGroup()
     {
         OperGroupId = anOperationGroupModel.Id,
         Name = anOperationGroupModel.Name
     });
 }
Exemple #2
0
        public IEnumerable <OperationGroupModel> GetOperationsByDay(DateTime startDay, DateTime endDay)
        {
            var dayStartHour = _settings.DayStartHour;

            startDay = startDay.Date.AddHours(dayStartHour);
            endDay   = endDay.Date.AddHours(24 + dayStartHour);

            var operations = _context.Operations
                             .Include(x => x.Details)
                             .Where(x => x.Moment >= startDay && x.Moment <= endDay)
                             .OrderByDescending(x => x.Moment)
                             .ToList();

            if (!operations.Any())
            {
                yield break;
            }

            var firstDateTime = operations.FirstOrDefault().Moment;

            var tempDate = firstDateTime.Hour < dayStartHour
                    ? firstDateTime.Date.Subtract(TimeSpan.FromDays(1))
                    : firstDateTime.Date;

            var cash  = _cashService.GetCashRegistrations(tempDate);
            var group = new OperationGroupModel {
                Date      = tempDate,
                StartCash = cash.Item1,
                EndCash   = cash.Item2
            };

            yield return(group);

            for (var i = 0; i < operations.Count; i++)
            {
                var current  = operations[i];
                var previous = i > 0 ? operations[i - 1] : null;
                if (previous == null)
                {
                    group.Operations.Add(current);
                    continue;
                }

                if (current.Moment.Hour < dayStartHour && previous.Moment.Hour >= dayStartHour)
                {
                    tempDate = current.Moment.Date.Subtract(TimeSpan.FromDays(1));
                    cash     = _cashService.GetCashRegistrations(tempDate);
                    group    = new OperationGroupModel {
                        Date      = tempDate,
                        StartCash = cash.Item1,
                        EndCash   = cash.Item2
                    };
                    yield return(group);
                }
                else if (current.Moment.Date < previous.Moment.Date && group.Date > current.Moment.Date)
                {
                    tempDate = current.Moment.Hour < dayStartHour
                            ? current.Moment.Date.Subtract(TimeSpan.FromDays(1))
                            : current.Moment.Date;

                    cash  = _cashService.GetCashRegistrations(tempDate);
                    group = new OperationGroupModel {
                        Date      = tempDate,
                        StartCash = cash.Item1,
                        EndCash   = cash.Item2
                    };
                    yield return(group);
                }

                group.Operations.Add(current);
            }
        }