public CMSResult SendAppNotification(UploadOfflineMarksViewModel viewModel, List <StudentProjection> studentList, List <UploadOfflineTestMarks> uploadOfflineTestMarks)
        {
            var cmsResult        = new CMSResult();
            var notificationList = new List <SendNotificationByPlayerId>();

            foreach (var playerId in uploadOfflineTestMarks)
            {
                var student = studentList.Where(x => x.Email == playerId.EmailId).FirstOrDefault();
                var message = "Absent for offline test paper." + "$^$" + student.SId + "@0";
                if (playerId.IsPresent)
                {
                    message = "<br />Name - " + student.Name + "<br />Title - " + viewModel.Title + "<br />Marks - " + playerId.ObtainedMarks + "/" + viewModel.TotalMarks +
                              "<br />Percentage - " + playerId.Percentage + "$^$" + student.SId + "@0";
                }

                if (student.parentAppPlayerId != null && student.parentAppPlayerId != "")
                {
                    var sendParentAppNotification = new SendNotificationByPlayerId
                    {
                        Message    = "Marks-" + message,
                        PlayerIds  = student.parentAppPlayerId,
                        AppIds     = ConfigurationManager.AppSettings[Common.Constants.ParentAppId],
                        RestApiKey = ConfigurationManager.AppSettings[Common.Constants.ParentRestAppId]
                    };
                    notificationList.Add(sendParentAppNotification);
                }

                if (student.studentAppPlayerId != null && student.studentAppPlayerId != "")
                {
                    var sendStudentAppNotification = new SendNotificationByPlayerId
                    {
                        Message    = "Marks-" + message,
                        PlayerIds  = student.studentAppPlayerId,
                        AppIds     = ConfigurationManager.AppSettings[Common.Constants.StudentAppId],
                        RestApiKey = ConfigurationManager.AppSettings[Common.Constants.StudentRestAppId]
                    };
                    notificationList.Add(sendStudentAppNotification);
                }
            }
            var notification = notificationList.ToArray();

            if (notificationList.Count > 0)
            {
                HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => _sendNotificationService.StartProcessingByPlayerId(notification, cancellationToken));
                cmsResult.Results.Add(new Result {
                    Message = "App Notification sent successfully.", IsSuccessful = true
                });
            }
            else
            {
                cmsResult.Results.Add(new Result {
                    Message = "No one is registered in parent app.", IsSuccessful = true
                });
            }
            return(cmsResult);
        }
        public CMSResult SendSMS(UploadOfflineMarksViewModel viewModel, List <StudentProjection> studentList, List <UploadOfflineTestMarks> uploadOfflineTestMarks)
        {
            var cmsResult = new CMSResult();
            var smsList   = new List <SmsModel>();

            foreach (var sms in uploadOfflineTestMarks)
            {
                var studentName = studentList.Where(x => x.Email == sms.EmailId).FirstOrDefault();
                var message     = "Absent for Offline Test Paper.";
                if (sms.IsPresent)
                {
                    message = "Name - " + studentName.Name + "<br />Title - " + viewModel.Title + "<br />Marks - " + sms.ObtainedMarks + "/" + viewModel.TotalMarks + "<br />Percentage - " + sms.Percentage;
                }

                var sendSMSToParent = new SmsModel
                {
                    Message = message,
                    SendTo  = studentName.ParentContact
                };

                var sendSMSToStudent = new SmsModel
                {
                    Message = message,
                    SendTo  = studentName.StudentContact
                };

                smsList.Add(sendSMSToParent);
                smsList.Add(sendSMSToStudent);
            }

            var smsModelLists = smsList.ToArray();

            if (smsList.Count > 0)
            {
                HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => _smsService.StartProcessing(smsModelLists, cancellationToken));
                cmsResult.Results.Add(new Result {
                    Message = "SMS sent Successfully.", IsSuccessful = true
                });
            }

            return(cmsResult);
        }
        public ActionResult DeleteUploadMarks(UploadOfflineMarksViewModel viewModel)
        {
            var uploadMarksdata = JsonConvert.DeserializeObject <List <UploadOfflineMarksProjection> >(viewModel.StudentOfflineMarks).ToList();
            var cmsResult       = new CMSResult();

            if (ModelState.IsValid)
            {
                foreach (var uploadMark in uploadMarksdata)
                {
                    cmsResult = _offlineTestStudentMarksService.Delete(uploadMark.OfflineTestStudentMarksId);
                    if (cmsResult.Success)
                    {
                        cmsResult.Results.Add(new Result {
                            Message = cmsResult.Results.FirstOrDefault().ToString(), IsSuccessful = true
                        });
                        ModelState.Clear();
                    }
                    else
                    {
                        cmsResult.Results.Add(new Result {
                            Message = cmsResult.Results.FirstOrDefault().ToString(), IsSuccessful = false
                        });
                    }
                }
            }
            else
            {
                var errors = ModelState.Values.SelectMany(x => x.Errors).ToArray();
                foreach (var item in errors)
                {
                    cmsResult.Results.Add(new Result {
                        Message = item.ErrorMessage, IsSuccessful = false
                    });
                }
            }

            return(Json(cmsResult, JsonRequestBehavior.AllowGet));
        }
        public ActionResult UpdateUploadMarks(UploadOfflineMarksViewModel viewModel)
        {
            var uploadMarksdata = JsonConvert.DeserializeObject <List <UploadOfflineMarksProjection> >(viewModel.StudentOfflineMarks).ToList();
            var cmsResult       = new CMSResult();
            var offlineTest     = _offlineTestPaper.GetOfflineTestById(viewModel.OfflineTestPaperId);

            if (ModelState.IsValid)
            {
                var offlineTestStudentMarksList = new List <OfflineTestStudentMarks>();
                foreach (var uploadMark in uploadMarksdata)
                {
                    var offlineTestStudentMarks = new OfflineTestStudentMarks
                    {
                        UserId                    = uploadMark.UserId,
                        OfflineTestPaperId        = viewModel.OfflineTestPaperId,
                        ObtainedMarks             = uploadMark.ObtainedMarks,
                        Percentage                = uploadMark.Percentage,
                        OfflineTestStudentMarksId = uploadMark.OfflineTestStudentMarksId,
                        IsPresent                 = uploadMark.IsPresent
                    };

                    offlineTestStudentMarksList.Add(offlineTestStudentMarks);
                    #region rough
                    //cmsResult = _offlineTestStudentMarksService.Update(offlineTestStudentMarks);
                    //if (cmsResult.Success)
                    //{
                    //    string subject = "Student Update Offline Test Marks";
                    //    viewModel.StudentEmail = uploadMark.EmailId;
                    //    viewModel.StudentContact = uploadMark.StudentContact;
                    //    viewModel.ObtainedMarks = uploadMark.ObtainedMarks;
                    //    viewModel.Percentage = uploadMark.Percentage;
                    //    viewModel.ClassName = offlineTest.ClassName;
                    //    viewModel.SubjectName = offlineTest.SubjectName;
                    //    var BatchList = _batchService.GetBatchesByBatchIds(offlineTest.SelectedBatches).Select(x => x.BatchName).ToList();
                    //    viewModel.SelectedBatchesName = string.Join(",", BatchList);
                    //    cmsResult = SendNotification(viewModel, subject);
                    //}
                    //else
                    //{
                    //    cmsResult.Results.Add(new Result { Message = cmsResult.Results.FirstOrDefault().ToString(), IsSuccessful = false });
                    //}
                    #endregion
                }

                var offlineTestStudentMarksArray = offlineTestStudentMarksList.ToArray();
                if (offlineTestStudentMarksList.Count > 0)
                {
                    HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => StartProcessingUpdateOfflineTestMarks(offlineTestStudentMarksArray, cancellationToken));
                    cmsResult.Results.Add(new Result {
                        Message = "Offline test paper marks updated successfully.", IsSuccessful = true
                    });
                    string subject = "Update Student Test Marks";
                    var    result  = SendNotification(viewModel, subject);
                }

                #region Rough
                //if (cmsResult.Success)
                //{
                //    var messages = "";
                //    foreach (var message in cmsResult.Results)
                //    {
                //        messages += message.Message + "<br />";
                //    }
                //    Success(messages);
                //    ModelState.Clear();
                //    //viewModel = new UploadOfflineMarksViewModel();
                //}
                //else
                //{
                //    cmsResult.Results.Add(new Result { Message = cmsResult.Results.FirstOrDefault().ToString(), IsSuccessful = false });
                //}
                #endregion
            }
            else
            {
                var errors = ModelState.Values.SelectMany(x => x.Errors).ToArray();
                foreach (var item in errors)
                {
                    cmsResult.Results.Add(new Result {
                        Message = item.ErrorMessage, IsSuccessful = false
                    });
                }
            }

            return(Json(cmsResult, JsonRequestBehavior.AllowGet));
        }
        public bool SendEmail(UploadOfflineMarksViewModel viewModel, string subject, List <UploadOfflineTestMarks> uploadOfflineMarks,
                              List <StudentProjection> studentList)
        {
            string userRole      = "";
            var    emailModels   = new List <MailModel>();
            var    roleUserId    = User.Identity.GetUserId();
            bool   isBranchAdmin = false;
            var    roles         = _aspNetRolesService.GetCurrentUserRole(roleUserId);

            if (roles == "BranchAdmin")
            {
                var branchAdmin = _branchAdminService.GetBranchAdminById(roleUserId);
                userRole      = branchAdmin.BranchName;
                isBranchAdmin = true;
            }
            else
            {
                userRole = User.Identity.GetUserName() + "(" + "Master Admin" + ")";
            }
            string body = string.Empty;

            using (StreamReader reader = new StreamReader(Server.MapPath("~/MailDesign/NotificationMailDesign.html")))
            {
                body = reader.ReadToEnd();
            }
            if (isBranchAdmin)
            {
                var emailFormat = body;
                emailFormat = emailFormat.Replace("{BranchName}", userRole);
                emailFormat = emailFormat.Replace("{NotificationMessage}", "<br/> Title : " + viewModel.Title + "<br/>Class Name : " + viewModel.ClassName + "<br/>Subject Name : " +
                                                  viewModel.SubjectName + "<br/>Batch Name : " + viewModel.SelectedBatchesName +
                                                  "<br/> Total Marks : " + viewModel.TotalMarks);
                emailFormat = emailFormat.Replace("{UserName}", "");
                var emailMessage = new MailModel
                {
                    Body    = emailFormat,
                    Subject = subject,
                    To      = ConfigurationManager.AppSettings[Common.Constants.FromEmail]
                };
                emailModels.Add(emailMessage);
            }

            foreach (var email in uploadOfflineMarks)
            {
                var studentName = studentList.Where(x => x.Email == email.EmailId).FirstOrDefault().Name;
                var message     = "Absent for offline test paper.";
                if (email.IsPresent)
                {
                    message = "Name - " + studentName + "<br />Title - " + viewModel.Title + "<br />Marks - " + email.ObtainedMarks + "/" + viewModel.TotalMarks +
                              "<br />Percentage - " + email.Percentage;
                }

                var emailFormat = body;
                emailFormat = emailFormat.Replace("{BranchName}", userRole);
                emailFormat = emailFormat.Replace("{NotificationMessage}", message);
                emailFormat = emailFormat.Replace("{UserName}", "");

                var emailModel = new MailModel
                {
                    Body    = emailFormat,
                    Subject = subject,
                    To      = email.EmailId
                };

                emailModels.Add(emailModel);
            }
            var emailModelArray = emailModels.ToArray();

            if (emailModels.Count > 0)
            {
                HostingEnvironment.QueueBackgroundWorkItem(cancellationToken => _emailService.StartProcessing(emailModelArray, cancellationToken));
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public CMSResult SendNotification(UploadOfflineMarksViewModel viewModel, string subject)
        {
            var cmsResult = new CMSResult();
            List <StudentProjection> studentsLists = new List <StudentProjection>();
            var studentsList = _studentService.GetAllStudentParentList();
            List <StudentProjection> students = new List <StudentProjection>();

            if (viewModel.SelectedBranches != null)
            {
                var branches = viewModel.SelectedBranches.Split(',').Select(x => int.Parse(x)).ToList();
                studentsList = studentsList.Where(x => branches.Contains(x.BranchId));
            }
            if (viewModel.ClassId != null && viewModel.SubjectId != 0)
            {
                studentsList = studentsList.Where(x => x.ClassId == viewModel.ClassId);
            }
            if (viewModel.SelectedBatches != null)
            {
                var batches = viewModel.SelectedBatches.Split(',').Select(x => int.Parse(x)).ToList();
                studentsList = studentsList.Where(x => batches.Contains(x.BatchId));
            }
            if (viewModel.SubjectId != null && viewModel.SubjectId != 0)
            {
                foreach (var student in studentsList)
                {
                    foreach (var subjecttest in student.Subjects)
                    {
                        if (subjecttest.SubjectId == viewModel.SubjectId)
                        {
                            students.Add(student);
                        }
                    }
                }
            }

            if (students != null && students.Count > 0)
            {
                studentsLists.AddRange(students);
            }
            else
            {
                studentsLists.AddRange(studentsList.ToList());
            }

            var uploadOfflineMarks = JsonConvert.DeserializeObject <List <UploadOfflineTestMarks> >(viewModel.StudentOfflineMarks);

            if (uploadOfflineMarks.Count > 0)
            {
                var result = SendEmail(viewModel, subject, uploadOfflineMarks, studentsLists);

                if (result == true)
                {
                    cmsResult.Results.Add(new Result {
                        Message = "Email sent successfully.", IsSuccessful = true
                    });
                }
                else
                {
                    cmsResult.Results.Add(new Result {
                        Message = "Something went wrong to send email.", IsSuccessful = false
                    });
                }
            }

            if (viewModel.SMS)
            {
                var result = SendSMS(viewModel, studentsLists, uploadOfflineMarks);
                if (result.Success)
                {
                    cmsResult.Results.Add(new Result {
                        Message = result.Results[0].Message, IsSuccessful = true
                    });
                }
                else
                {
                    cmsResult.Results.Add(new Result {
                        Message = result.Results[0].Message, IsSuccessful = false
                    });
                }
            }
            #region appNotification
            if (viewModel.AppNotification)
            {
                var response = SendAppNotification(viewModel, studentsList.ToList(), uploadOfflineMarks);

                if (response.Success)
                {
                    cmsResult.Results.Add(new Result {
                        Message = response.Results[0].Message, IsSuccessful = true
                    });
                }
                else
                {
                    cmsResult.Results.Add(new Result {
                        Message = response.Results[0].Message, IsSuccessful = false
                    });
                }
            }
            #endregion

            return(cmsResult);
        }