Example #1
0
        // GET: Project
        public async Task<ActionResult> Index(string id, int year, int month)
        {
            var projectRepository = new ProjectRepository();
            var memberIds = await projectRepository.FindMembersInProject(id);

            var scheduleRepository = new ScheduleRepository();
            var leaves = await scheduleRepository.FindLeavesByMonthForProjectMembers(memberIds, year, month);
            var leaveCount = new Dictionary<DateTime, ProjectLeaveCountModel>();
            leaves.ForEach(l =>
                {
                    if (!leaveCount.ContainsKey(l.Date.Value))
                    {
                        leaveCount[l.Date.Value] = new ProjectLeaveCountModel
                            {
                                Date = l.Date.Value
                            };
                    }

                    leaveCount[l.Date.Value].Count++;
                });

            var userRepository = new UserRepository();
            var countryCodes = await userRepository.FindDistinctCountryCodeForMembers(memberIds);
            var holidayRepository = new HolidayRepository();
            var holidays = await holidayRepository.FindHolidaysForCountries(year, countryCodes);

            holidays.ForEach(h =>
            {
                h.Date = DateTime.SpecifyKind(h.Date, DateTimeKind.Utc);

                if (h.Date.Month == month)
                {
                    if (!leaveCount.ContainsKey(h.Date))
                    {
                        leaveCount[h.Date] = new ProjectLeaveCountModel
                        {
                            Date = h.Date
                        };
                    }

                    leaveCount[h.Date].Count++;
                }
            });

            return JsonNet(leaveCount.Values);
        }
Example #2
0
        public async Task<ActionResult> LeaveDetails(string id, int year, int month, int day)
        {
            var projectRepository = new ProjectRepository();
            var memberIds = await projectRepository.FindMembersInProject(id);

            var scheduleRepository = new ScheduleRepository();
            var leaves = await scheduleRepository.FindLeavesByMonthForProjectMembers(memberIds, year, month);

            var leaveTypeRepository = new LeaveTypeRepository();
            var leaveTypes = await leaveTypeRepository.FindAll();

            var model = new LeaveDetailsModel();
            model.Date = new DateTime(year, month, day);
            model.Leaves = leaves.Where(l => l.Date.Value.Day == day)
                                 .Select(l => new LeaveModel
                                    {
                                        CreatedById = l.CreatedById,
                                        Date = l.Date.Value.ToString("dd MMMM yyyy"),
                                        Hours = l.Hours,
                                        Id = l.Id,
                                        IsApproved = l.IsApproved,
                                        IsHalfDay = l.IsHalfDay,
                                        IsOnMorning = l.IsOnMorning,
                                        LeaveType = l.LeaveType,
                                        Reason = l.Reason,
                                        Type = LookUpLeaveName(l.LeaveType, leaveTypes)
                                    })
                                    .ToList();

            var userRepository = new UserRepository();
            var users = await userRepository.FindByIds(memberIds);
            var userLookUp = users.ToDictionary(u => u.Id);
            model.Leaves.ForEach(l => {
                if(userLookUp.ContainsKey(l.CreatedById))
                {
                    var user = userLookUp[l.CreatedById];
                    l.CreatedByName = user.Profile.Name;
                    l.CreatedByProfileImage = user.GoogleProfile.ProfileImageUrl;
                }
            });

            var countryCodes = await userRepository.FindDistinctCountryCodeForMembers(memberIds);
            var holidayRepository = new HolidayRepository();
            var holidays = await holidayRepository.FindHolidaysForCountries(year, countryCodes);

            model.Holidays = holidays.Where(h => h.Date.Month == month && h.Date.Day == day)
                .Select(h => new HolidayModel
                {
                    Country = h.Country,
                    Name = h.Name,
                    Date = h.Date.ToString("dd MMMM yyyy")
                }).ToList();
            var usersByCountry = users.GroupBy(u => u.Profile.CountryCode);
            foreach (var byCountry in usersByCountry)
            {
                if(byCountry.Count() > 1)
                {
                    var holiday = model.Holidays.FirstOrDefault(h => h.Country == byCountry.Key);
                    if(holiday != null)
                    {
                        model.Holidays.AddRange(Enumerable.Repeat(holiday, byCountry.Count() - 1));
                    }
                }
            }

            return JsonNet(model);
        }