public async Task <ApiResponse> FilterScheduleList(FilterSchedulerModel model)
        {
            ApiResponse response = new ApiResponse();

            try
            {
                var activityList = await _dbContext.ScheduleDetails
                                   .Include(p => p.ProjectDetail)
                                   .Include(e => e.PolicyDetails)
                                   .Include(o => o.JobDetails)
                                   .Where(v => v.IsDeleted == false && v.IsActive == true && v.StartDate >= model.StartDate && v.ChannelId == model.ChannelId && v.MediumId == model.MediumId &&
                                          (v.JobDetails.JobId == v.JobId || v.ProjectDetail.ProjectId == v.ProjectId || v.PolicyDetails.PolicyId == v.PolicyId))
                                   .ToListAsync();

                var ScheduleList = activityList.Select(b => new SchedulerModel
                {
                    PolicyId     = b.PolicyId,
                    Name         = b.PolicyDetails != null ? b.PolicyDetails.PolicyName : b.ProjectDetail != null ? b.ProjectDetail.ProjectName : b.JobDetails != null ? b.JobDetails.JobName : null,
                    StartTime    = b.StartTime.ToString(@"hh\:mm"),
                    EndTime      = b.EndTime.ToString(@"hh\:mm"),
                    StartDate    = b.StartDate,
                    EndDate      = b.EndDate,
                    ProjectId    = b.ProjectId,
                    JobId        = b.JobId,
                    ChannelId    = b.ChannelId,
                    MediumId     = b.MediumId,
                    ScheduleType = b.ScheduleType,
                    ScheduleId   = b.ScheduleId,
                    Monday       = b.Monday,
                    Tuesday      = b.Tuesday,
                    Wednesday    = b.Wednesday,
                    Thursday     = b.Thursday,
                    Friday       = b.Friday,
                    Saturday     = b.Saturday,
                    Sunday       = b.Sunday
                }).ToList();
                response.data.SchedulerList = ScheduleList;
                response.StatusCode         = 200;
                response.Message            = "Success";
            }
            catch (Exception ex)
            {
                response.StatusCode = StaticResource.failStatusCode;
                response.Message    = StaticResource.SomethingWrong + ex.Message;
            }
            return(response);
        }
        public async Task <ApiResponse> SaveSchedule(AddEditScheduleCommand model, string userId)
        {
            long        LatestScheduleId = 0;
            var         scheduleCode     = string.Empty;
            ApiResponse response         = new ApiResponse();

            var scheduleDetail = _dbContext.ScheduleDetails.OrderByDescending(x => x.ScheduleId)
                                 .FirstOrDefault();

            if (scheduleDetail == null)
            {
                LatestScheduleId = 1;
                scheduleCode     = LatestScheduleId.ToString().getScheduleCode();
            }
            else
            {
                LatestScheduleId = Convert.ToInt32(scheduleDetail.ScheduleId) + 1;
                scheduleCode     = LatestScheduleId.ToString().getScheduleCode();
            }
            ScheduleDetails obj = _mapper.Map <AddEditScheduleCommand, ScheduleDetails>(model);

            obj.CreatedById = userId;
            if (model.ProjectId != null)
            {
                obj.ProjectId    = model.ProjectId ?? null;
                obj.ScheduleType = "Project";
            }
            if (model.PolicyId != null)
            {
                obj.PolicyId     = model.PolicyId ?? null;
                obj.ScheduleType = "Policy";
            }
            if (model.JobId != null)
            {
                obj.JobId        = model.JobId ?? null;
                obj.ScheduleType = "Job";
            }
            bool status = false;

            if (obj.JobId != null)
            {
                var jobDetails = _dbContext.JobDetails.AsQueryable().Where(x => x.JobId == obj.JobId && x.IsDeleted == false).FirstOrDefault();
                if (jobDetails.EndDate.Date <= DateTime.UtcNow.Date)
                {
                    status = true;
                }
            }
            if (status == true)
            {
                response.Message    = "End Date for job has already reached. No new schedule can be added";
                response.StatusCode = StaticResource.failStatusCode;
            }
            else
            {
                obj.StartTime    = TimeSpan.Parse(model.StartTime);
                obj.EndTime      = TimeSpan.Parse(model.EndTime);
                obj.ScheduleName = model.ScheduleName;
                obj.CreatedDate  = DateTime.Now;
                obj.IsDeleted    = false;
                obj.ScheduleCode = scheduleCode;
                obj.MediumId     = model.MediumId;
                obj.ChannelId    = model.ChannelId;
                obj.IsActive     = true;
                obj.Description  = model.Description;
                if (model.RepeatDays != null && model.RepeatDays.Count > 0)
                {
                    foreach (var items in model.RepeatDays)
                    {
                        switch (items.Value)
                        {
                        case "MON":
                            obj.Monday = items.status;
                            break;

                        case "TUE":
                            obj.Tuesday = items.status;
                            break;

                        case "WED":
                            obj.Wednesday = items.status;
                            break;

                        case "THU":
                            obj.Thursday = items.status;
                            break;

                        case "FRI":
                            obj.Friday = items.status;
                            break;

                        case "SAT":
                            obj.Saturday = items.status;
                            break;

                        case "SUN":
                            obj.Sunday = items.status;
                            break;
                        }
                    }
                }
                await _dbContext.ScheduleDetails.AddAsync(obj);

                await _dbContext.SaveChangesAsync();

                FilterSchedulerModel data = new FilterSchedulerModel();
                data.ChannelId = obj.ChannelId;
                data.MediumId  = obj.MediumId;
                data.StartDate = obj.StartDate;
                ApiResponse responseData = await FilterScheduleList(data);

                response.data.SchedulerList   = responseData.data.SchedulerList;
                response.data.scheduleDetails = obj;
                response.StatusCode           = StaticResource.successStatusCode;
            }

            return(response);
        }