public int AddSession(Session input)
        {
            int result = CRUDStatusCode.ERROR;

            if (input != null)
            {
                var session = _SessionRepository.Get(t => t.Name == input.Name || t.Code == input.Code).FirstOrDefault();
                if (session == null)
                {
                    input.StatusId       = CommonStatus.ACTIVE;
                    input.CreateDate     = Common.Utilities.GetServerDateTimeNow();
                    input.LastUpdateDate = Common.Utilities.GetServerDateTimeNow();
                    input.LastUpdateBy   = Common.Session.GetId();
                    _SessionRepository.Add(input);
                    result = CRUDStatusCode.SUCCESS;
                }
                else if (session != null && session.StatusId == CommonStatus.DELETE)
                {
                    session.Name     = input.Name;
                    session.StatusId = CommonStatus.ACTIVE;
                    _SessionRepository.Update(session);
                    result = CRUDStatusCode.SUCCESS;
                }
                else
                {
                    result = CRUDStatusCode.EXISTED;
                }
            }

            return(result);
        }
예제 #2
0
        public bool Delete(long id)
        {
            var districtIds = new List <long>();

            foreach (District d in _sessionRepository.Get(id).Districts)
            {
                districtIds.Add(d.Id);
            }
            for (int i = 0; i < districtIds.Count; i++) // delete  districts from session
            {
                _districtRepository.Delete(districtIds[i]);
            }

            var teamIds = new List <long>();

            foreach (Team t in _sessionRepository.Get(id).Teams)
            {
                teamIds.Add(t.Id);
            }
            for (int i = 0; i < teamIds.Count; i++) // delete  teams from session
            {
                _teamRepository.Delete(teamIds[i]);
            }

            return(_sessionRepository.Delete(id));
        }
예제 #3
0
        public void SessionClick(ItemClickEventArgs args)
        {
            var tileData = (SessionView)args.ClickedItem;
            var session  = SessionRepository.Get(tileData.SessionId);

            NavigationService.Navigate(typeof(Views.SessionDetailView), new SessionParameter(session));
        }
예제 #4
0
        public void GetPlainTest()
        {
            var startDate = DateTime.Parse("2011-01-01 20:45:00");
            var endDate   = DateTime.Parse("2011-01-01 22:50:00");

            var duration = new TimeSpan(endDate.Ticks - startDate.Ticks);
            var maxCount = duration.TotalMinutes / delta.TotalMinutes;

            var repository = new SessionRepository();
            var stopWatch  = new Stopwatch();

            stopWatch.Start();
            stopWatch.Stop();
            Trace.WriteLine("Imperative all: " + stopWatch.ElapsedTicks);

            stopWatch.Start();
            var sessions = repository.Get((session) => session.StartDate <endDate && session.EndDate> startDate);

            var statistic = new List <StatisticItem>();

            for (int i = 0; i < maxCount; i++)
            {
                var startStroke = startDate.AddMinutes(delta.Minutes * i);
                var endStroke   = startStroke.AddMinutes(delta.Minutes);
                statistic.Add(this.GetStatisticItem(startStroke, endStroke, sessions));
            }
            stopWatch.Stop();
            foreach (var statItem in statistic)
            {
                Trace.WriteLine(statItem.DateTime + " " + statItem.Count);
            }
            Trace.WriteLine("Imperative: " + stopWatch.ElapsedTicks);
        }
예제 #5
0
        public void Test1()
        {
            var basePath   = "https://schedule-generator-5f50e.firebaseio.com/";
            var authSecret = Environment.GetEnvironmentVariable("FirebaseSecret");

            var repo = new SessionRepository(basePath, authSecret);

            long sessionId  = 27;
            var  newSession = new ScheduleSession()
            {
                Id                        = sessionId,
                SpreadsheetUrl            = "some url34567689",
                ScheduleSheet             = "forSchedule2",
                InputRequirementsSheet    = "inputSheet2",
                LearningPlanSheet         = "rooms2",
                DialogState               = DialogState.WaitSpreadsheetChangeConfirmation,
                LastModificationTime      = DateTime.Now,
                LastModificationInitiator = "RTDBRepository"
            };

            repo.Save(sessionId, newSession);
            var session = repo.Get(sessionId);

            Assert.AreEqual(newSession.Id, session.Id);
            Assert.AreEqual(newSession.SpreadsheetUrl, session.SpreadsheetUrl);
            Assert.AreEqual(newSession.ScheduleSheet, session.ScheduleSheet);
            Assert.AreEqual(newSession.InputRequirementsSheet, session.InputRequirementsSheet);
            Assert.AreEqual(newSession.LearningPlanSheet, session.LearningPlanSheet);
            Assert.AreEqual(newSession.DialogState, session.DialogState);
            Assert.AreEqual(newSession.LastModificationInitiator, session.LastModificationInitiator);
        }
예제 #6
0
        public ActionResult RequestSession(List <session> sessions)
        {
            if (sessions != null && sessions.Count > 0)
            {
                var cu                 = Session["user"] as ContextUser;
                int participantId      = new ParticipiantRepository().GetByUserId(cu.OUser.Id).Id;
                var repository         = new SessionRepository();
                var oSession           = repository.Get();
                var oSessionSelected   = oSession.Where(y => sessions.Where(x => x.IsSelected).Select(x => x.Id).ToList().Contains(y.Id)).ToList();
                var oSessionUnSelected = oSession.Where(y => sessions.Where(x => !x.IsSelected).Select(x => x.Id).ToList().Contains(y.Id)).ToList();

                foreach (var item in oSessionSelected)
                {
                    var sp = item.session_participant.Where(x => x.ParticipantID == participantId).FirstOrDefault();
                    if (sp == null)
                    {
                        item.session_participant.Add(new session_participant {
                            SessionID = item.Id, ParticipantID = participantId
                        });
                    }
                }
                repository.RemoveSessionParticipants(oSessionUnSelected, participantId);

                repository.SaveChanges();
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult ParticipantDetail(Guid id)
        {
            int pageSize = 0;

            pageSize = pageSize > 0 ? pageSize : 10;


            var repository = new SessionRepository();

            repository.SetOccuredStatus();

            var cu           = Session["user"] as ContextUser;
            var session      = repository.Get().First(x => x.RowGUID == id);
            var participants = session.session_participant.Select(x => x.participant_profile).ToList();
            //Sorting order
            string eveCat           = session.StudentEvaluationCatagory;
            var    forms            = new EvaluationFormRepository().Get().Where(x => x.Catagory == eveCat).ToList();
            var    lkEvaluationForm = forms.FirstOrDefault(x => x.SubCatagory == "pre");

            if (lkEvaluationForm != null)
            {
                ViewBag.preform = lkEvaluationForm.FormPath;
            }
            var evaluationForm = forms.FirstOrDefault(x => x.SubCatagory == "post");

            if (evaluationForm != null)
            {
                ViewBag.postform = evaluationForm.FormPath;
            }
            ViewBag.sessionid   = session.Id;
            ViewBag.sessionname = session.ProgramName;
            ViewBag.schoolname  = session.school.SchoolName;
            return(View(participants));
        }
        private void AddSession(long entityId, IEnumerable <Change> changes)
        {
            // ensure that the entityId does NOT already exist in the Repository
            var session = SessionRepository.Get(entityId);

            if (session == null)
            {
                // this session does not exist - create it
                session = new Session()
                {
                    SessionId = entityId
                };
                foreach (var change in changes)
                {
                    session.UpdateProperty(change.Key, change.Value);
                }

                SessionRepository.Add(session);
                ChangeLogProvider.SessionChangeLog.Add(new ProviderLogEntry
                {
                    EntityId      = session.SessionId,
                    ActionType    = ActionType.Add,
                    EntityDisplay = session.Title
                });
            }
        }
예제 #9
0
        // GET: Funder
        public ActionResult Index(string sortOrder, string filter, string archived, int page = 1, Guid?archive = null)
        {
            ViewBag.searchQuery  = string.IsNullOrEmpty(filter) ? "" : filter.Trim();
            ViewBag.showArchived = (archived ?? "") == "on";

            page = page > 0 ? page : 1;
            int pageSize = 0;

            pageSize = pageSize > 0 ? pageSize : 10;

            ViewBag.CurrentSort = sortOrder;

            IEnumerable <session> session;
            var repository = new SessionRepository();

            repository.SetOccuredStatus();


            if (archive != null)
            {
                var oSession = repository.GetByRowId(archive.Value);
                oSession.IsActive = !oSession.IsActive;
                repository.Put(oSession.Id, oSession);
            }

            var cu = Session["user"] as ContextUser;

            int corSchoolId = 0;

            if (cu.EnumRole != EnumUserRole.Volunteer)
            {
                corSchoolId = new CoordinatorRepository().GetSchoolIdByUserId(cu.OUser.Id);
            }
            var participantId = 0;

            if (cu.EnumRole == EnumUserRole.Participant)
            {
                participantId = new ParticipiantRepository().GetByUserId(cu.OUser.Id).Id;
            }
            session = repository.Get().Where(x =>
            {
                return((filter == null || x.ProgramName.ToLower().Contains(filter.ToLower()) ||
                        (x.school != null && (x.school.SchoolName.ToLower().Contains(filter.ToLower()) ||
                                              x.school.City.ToLower().Contains(filter.ToLower())))
                        ) &&
                       ((cu.EnumRole == EnumUserRole.SuperAdmin ||
                         (cu.EnumRole == EnumUserRole.Participant && x.session_participant
                          .Select(y => y.ParticipantID)
                          .Contains(participantId)) ||
                         (cu.EnumRole == EnumUserRole.Volunteer &&
                          ((x.VolunteerId == null && x.Status == "Approved") ||
                           (x.VolunteerId.HasValue && x.VolunteerId.Value == cu.OUser.Id && (x.Status == "Approved" || x.Status == "Occured")))) ||
                         (cu.EnumRole == EnumUserRole.Coordinator && x.SchoolID == corSchoolId))));
            });
            //Sorting order
            session       = session.OrderByDescending(x => x.CreatedAt);
            ViewBag.Count = session.Count();

            return(View(session.ToPagedList(page, pageSize)));
        }
예제 #10
0
        // behaviors
        public void SessionClick(ItemClickEventArgs args)
        {
            var item = args.ClickedItem as SessionView;

            if (item != null)
            {
                var session = SessionRepository.Get(item.SessionId);
                NavigationService.Navigate(typeof(Views.SessionDetailView), new SessionParameter(session));
            }
        }
예제 #11
0
        // behaviors
        public void SessionClick(ItemClickEventArgs args)
        {
            var listItem = (SessionView)args.ClickedItem;

            if (listItem.SessionId != 0)
            {
                var session = SessionRepository.Get(listItem.SessionId);
                NavigationService.Navigate(typeof(Views.SessionDetailView), new SessionParameter(session));
            }
        }
예제 #12
0
        public ActionResult FeedBack(SessionFeedBack model)
        {
            var repo         = new SessionRepository();
            var session      = repo.Get(model.SessionId);
            var sParticipant = session.session_participant.Where(x => x.ParticipantID == model.ParticipantId).First();

            sParticipant.FeedBack = model.FeedBack;
            repo.Put(session.Id, session);
            return(RedirectToAction("Index"));
        }
        public void GetSession_Call_NotFail_Test()
        {
            var context   = new MyEventsContext();
            int sessionId = context.Sessions.FirstOrDefault().SessionId;

            ISessionRepository target = new SessionRepository();

            Session result = target.Get(sessionId);

            Assert.IsNotNull(result);
            Assert.AreEqual(sessionId, result.SessionId);
        }
예제 #14
0
        public ActionResult MarkCompleted(session session)
        {
            var cu          = Session["user"] as ContextUser;
            var sessionRepo = new SessionRepository();
            var oSession    = sessionRepo.Get(session.Id);

            if (Request.Form["SubmitButton"] == "Upload")
            {
                sessionRepo.RemoveSessionPhoto(session.Id);
                foreach (var item in session.EvaluationImageLink.Split(',').Where(x => !string.IsNullOrWhiteSpace(x)))
                {
                    oSession.session_evaluationform_photo.Add(new session_evaluationform_photo {
                        FilePath = item, FileExtension = Path.GetExtension(item)
                    });
                }
                foreach (var item in session.SessionImageLink.Split(',').Where(x => !string.IsNullOrWhiteSpace(x)))
                {
                    oSession.session_photo.Add(new session_photo {
                        FilePath = item, FileExtension = Path.GetExtension(item)
                    });
                }
            }
            else if (Request.Form["SubmitButton"] == "fillvolunteerevaluation")
            {
                int corId = new CoordinatorRepository().GetByUserId(cu.OUser.Id).Id;
                return(RedirectToAction("VolenteerForm", "EvaluationForm", new { sessionId = oSession.Id, volId = oSession.volunteer_profile.Id, corId = corId }));
            }
            else
            {
                oSession.MarkedCompletedByCoordinator = true;

                var volEmail              = oSession.volunteer_profile.VolunteerEmail;
                var bogusController       = Util.CreateController <EmailTemplateController>();
                EmailTemplateModel emodel =
                    new EmailTemplateModel
                {
                    Title           = "Notification: coordinator session marked as completed.",
                    CoordinatorName = oSession.school.coordinator_profile.FirstOrDefault().CoordinatorName,
                    SessionTitle    = oSession.ProgramName,
                    VolunteerName   = oSession.volunteer_profile.VolunteerName,
                    User            = oSession.school.user.FirstName
                };
                string body =
                    Util.RenderViewToString(bogusController.ControllerContext, "CoordinatorMarkCompleted", emodel);
                EmailSender.SendSupportEmail(body, volEmail);

                var adminEmail = new AccountRepository().Get(oSession.CreatedBy).Email;
                EmailSender.SendSupportEmail(body, adminEmail);
            }
            sessionRepo.Put(oSession.Id, oSession);
            return(RedirectToAction("Index"));
        }
        public void GetSession_CalculateScore_Test()
        {
            var    context  = new MyEventsContext();
            var    session  = context.Sessions.Include("SessionRegisteredUsers").FirstOrDefault(q => q.SessionRegisteredUsers.Any());
            double expected = session.SessionRegisteredUsers.Where(sr => sr.Rated).Average(sr => sr.Score);

            ISessionRepository target = new SessionRepository();

            Session result = target.Get(session.SessionId);

            Assert.IsNotNull(result);
            Assert.AreEqual(expected, result.Score);
        }
예제 #16
0
        public List <TimeSlot> GetAllForList()
        {
            Dictionary <string, string> sessionCodeName = _sessionRepository
                                                          .Get(c => c.StatusId == CommonStatus.ACTIVE)
                                                          .ToDictionary(q => q.Code, q => string.Format("{0} {1}", q.Code, q.Name));

            return(_TimeSlotRepository.Get(c => c.StatusId == CommonStatus.ACTIVE)
                   .OrderBy(c => c.SessionCode)
                   .Select(ts => new TimeSlot()
            {
                Id = ts.Id,
                Code = ts.Code,
                StatusId = ts.StatusId,
                CreateDate = ts.CreateDate,
                FromHour = ts.FromHour,
                LastUpdateBy = ts.LastUpdateBy,
                LastUpdateDate = ts.LastUpdateDate,
                Name = ts.Name,
                SessionCode = sessionCodeName.Where(s => s.Key == ts.SessionCode).FirstOrDefault().Value
            })
                   .ToList());
        }
        private void DeleteSession(long entityId)
        {
            var session = SessionRepository.Get(entityId);

            if (session != null)
            {
                session.MarkAsDeleted();
                ChangeLogProvider.SessionChangeLog.Add(new ProviderLogEntry
                {
                    EntityId      = session.SessionId,
                    ActionType    = ActionType.Delete,
                    EntityDisplay = session.Title
                });
            }
        }
        private void ModifySession(long entityId, string key, string value)
        {
            var session = SessionRepository.Get(entityId);

            if (session != null)
            {
                session.UpdateProperty(key, value);

                ChangeLogProvider.SessionChangeLog.Add(new ProviderLogEntry
                {
                    EntityId      = session.SessionId,
                    ActionType    = ActionType.Modify,
                    EntityDisplay = session.Title
                });
            }
        }
예제 #19
0
        public ActionResult RequestSession()
        {
            var cu            = Session["user"] as ContextUser;
            int participantId = new ParticipiantRepository().GetByUserId(cu.OUser.Id).Id;
            var repository    = new SessionRepository();
            var oSession      = repository.Get().Where(x => x.Status == "Approved").ToList();

            foreach (var item in oSession)
            {
                if (item.session_participant.Any(x => x.ParticipantID == participantId))
                {
                    item.IsSelected = true;
                }
            }
            return(View(oSession));
        }
예제 #20
0
        public IEnumerable <SqlQueryInfo> Get()
        {
            _sqlQueryReader.Reload();
            var sqls     = _sqlQueryReader.Read();
            var sessions = _sessionRepository.Get().ToList();

            sessions.ForEach(s =>
            {
                var sql = sqls.SingleOrDefault(q => q.Name == s.QueryName);
                if (sql != null)
                {
                    sql.LastRetrievedAtUtc = s.FinishedAtUtc;
                }
            });

            return(sqls);
        }
예제 #21
0
        public ActionResult GetTicketsBySession(int id)
        {
            var session = sessionRepository.Get(id);

            if (session == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            //var t1 = session.TicketPrices.Select(x => x.Ticket);
            //var t2 = t1.Where(x => x != null);
            //var t3 = t2.Select(x => new { x.Id});
            ////var t3 = t2.Select(x => new { x.Seat.Row, x.Seat.Number, x.Status.Name });
            //var result = Json(t3);
            var tickets = session.TicketPrices.Select(x => x.Ticket).Where(x => x != null).Select(x => new { x.Seat.Row, x.Seat.Number });

            return(Json(tickets));
        }
        public ActionResult SessionDetails(Guid id)
        {
            int pageSize = 0;

            pageSize = pageSize > 0 ? pageSize : 10;

            IEnumerable <session> session;
            var repository = new SessionRepository();

            repository.SetOccuredStatus();

            var cu = Session["user"] as ContextUser;

            session = repository.Get().Where(x => x.school != null && x.school.RowGuid == id && (x.Status == "Approved" || x.Status == "Occured"));
            //Sorting order
            session            = session.OrderByDescending(x => x.CreatedAt);
            ViewBag.schoolname = session.First().school.SchoolName;
            ViewBag.Count      = session.Count();

            return(View(session));
        }
예제 #23
0
        private void ApplySpeakerChanges(IEnumerable <Change> speakerChanges)
        {
            foreach (var speakerChange in speakerChanges)
            {
                var session = SessionRepository.Get(speakerChange.EntityId);
                if (session != null)
                {
                    if (speakerChange.Action == ActionType.Delete)
                    {
                    }

                    if (speakerChange.Action == ActionType.Modify)
                    {
                    }

                    if (speakerChange.Action == ActionType.Add)
                    {
                    }
                }
            }
        }
예제 #24
0
        public void A_FinisedEvaSession_creates_a_new_Session_in_the_database()
        {
            var bootStrapper = new BootStrapper();
            bootStrapper.StartServices();
            var serviceEvents = bootStrapper.GetService<IServiceEvents>();
            //1.- Create message
            var aggr = GenerateRandomAggregate();
            var message = GenerateMessage(aggr);
            //2.- Emit message
            serviceEvents.AddIncommingEvent(new IncommingEvent { @event = message });
            //3.- Load the saved country
            var repository = new SessionRepository(_configuration.TestServer);
            var session = repository.Get(aggr.Id);
            //4.- Check equality
            Assert.Equal(aggr.Id, session.Id);
            Assert.Equal(aggr.CommissionId, session.CommissionId);
            Assert.Equal(aggr.EndTime.Value.Second, session.EndTime.Value.Second);
            Assert.Equal(aggr.InitialTime.Value.Second, session.InitialTime.Value.Second);
            Assert.Equal(aggr.InvoiceId, session.InvoiceId);
            Assert.Equal(aggr.InterpretationDone, session.InterpretationDone);
            Assert.Equal(aggr.SignedDate.Value.Second, session.SignedDate.Value.Second);
            Assert.Equal(aggr.GuardianId, session.GuardianId);
            Assert.Equal(aggr.PartnerId, session.PartnerId);
            Assert.Equal(aggr.PatientId, session.PatientId);
            Assert.Equal(aggr.ServiceLevelId, session.ServiceLevelId);
            Assert.Equal(aggr.ServiceId, session.ServiceId);
            Assert.Equal(aggr.MediaId, session.MediaId);
            Assert.Equal(aggr.MachineId, session.MachineId);
            Assert.Equal(aggr.PayableId, session.PayableId);
            Assert.Equal(aggr.CommissionId, session.CommissionId);
            Assert.Equal(aggr.TimeStamp.Second, session.TimeStamp.Second);

            var appoinment = session.Appointment.First();
            Assert.Equal(appoinment.Id, aggr.Appointment.First().Id);
            Assert.Equal(appoinment.InitialTime.Second, aggr.Appointment.First().InitialTime.Second);
            Assert.Equal(appoinment.FinalTime.Second, aggr.Appointment.First().FinalTime.Second);
            Assert.Equal(appoinment.MachineId, aggr.Appointment.First().MachineId);
            Assert.Equal(appoinment.MediaId, aggr.Appointment.First().MediaId);
            Assert.Equal(appoinment.PartnerId, aggr.Appointment.First().PartnerId);
            Assert.Equal(appoinment.PatientId, aggr.Appointment.First().PatientId);
            Assert.Equal(appoinment.PayableId, aggr.Appointment.First().PayableId);
            Assert.Equal(appoinment.ServiceId, aggr.Appointment.First().ServiceId);
            Assert.Equal(appoinment.ServiceLevelId, aggr.Appointment.First().ServiceLevelId);
            Assert.Equal(appoinment.ServiceTypeId, aggr.Appointment.First().ServiceTypeId);
            Assert.Equal(appoinment.SessionId, aggr.Appointment.First().SessionId);
            Assert.Equal(appoinment.StatusType, aggr.Appointment.First().StatusType);
            Assert.Equal(appoinment.TimeZoneId, aggr.Appointment.First().TimeZoneId);
            Assert.Equal(appoinment.TimeStamp.Second, aggr.Appointment.First().TimeStamp.Second);

            var sessionDevice = session.SessionDevice.First();
            Assert.Equal(sessionDevice.Id, aggr.SessionDevice.First().Id);
            Assert.Equal(sessionDevice.DeviceGroup, aggr.SessionDevice.First().DeviceGroup);
            Assert.Equal(sessionDevice.DeviceId, aggr.SessionDevice.First().DeviceId);
            Assert.Equal(sessionDevice.SapCode, aggr.SessionDevice.First().SapCode);
            Assert.Equal(sessionDevice.SerialNumber, aggr.SessionDevice.First().SerialNumber);
            Assert.Equal(sessionDevice.SessionId, aggr.SessionDevice.First().SessionId);
            Assert.Equal(sessionDevice.TimeStamp.Second, aggr.SessionDevice.First().TimeStamp.Second);

            var diagnosis = session.Diagnosis.First();
            Assert.Equal(diagnosis.Id, aggr.Diagnosis.First().Id);
            Assert.Equal(diagnosis.Appraisal, aggr.Diagnosis.First().Appraisal);
            Assert.Equal(diagnosis.Name, aggr.Diagnosis.First().Name);
            Assert.Equal(diagnosis.SessionId, aggr.Diagnosis.First().SessionId);
            Assert.Equal(diagnosis.TimeStamp.Second, aggr.Diagnosis.First().TimeStamp.Second);
        }
예제 #25
0
        public void GetSession_Call_NotFail_Test()
        {
            var context = new MyEventsContext();
            int sessionId = context.Sessions.FirstOrDefault().SessionId;

            ISessionRepository target = new SessionRepository();

            Session result = target.Get(sessionId);

            Assert.IsNotNull(result);
            Assert.AreEqual(sessionId, result.SessionId);
        }
예제 #26
0
        public void GetSession_CalculateScore_Test()
        {
            var context = new MyEventsContext();
            var session = context.Sessions.Include("SessionRegisteredUsers").FirstOrDefault(q => q.SessionRegisteredUsers.Any());
            double expected = session.SessionRegisteredUsers.Where(sr => sr.Rated).Average(sr => sr.Score);

            ISessionRepository target = new SessionRepository();

            Session result = target.Get(session.SessionId);

            Assert.IsNotNull(result);
            Assert.AreEqual(expected, result.Score);
        }
        public void GetSessionExistentSessionShouldReturnNull()
        {
            Session sessionById = sessionRepositoryInMemory.Get(session.Id);

            Assert.IsNull(sessionById);
        }
예제 #28
0
        public ActionResult Edit(session session)
        {
            var      sessionRepo   = new SessionRepository();
            session  oSession      = null;
            var      cu            = Session["user"] as ContextUser;
            DateTime?oldActualDate = null;

            if (session.Id == 0)
            {
                oSession           = new session();
                oSession.RowGUID   = Guid.NewGuid();
                oSession.CreatedAt = DateTime.Now;
                oSession.CreatedBy = cu.OUser.Id;
                oSession.Status    = SessionStatus.Pending.ToString();
            }
            else
            {
                oSession           = sessionRepo.Get(session.Id);
                oSession.UpdatedAt = DateTime.Now;
                oldActualDate      = oSession.ActualDateTime;
                // oSession.UpdatedBy = int.Parse(sid);
            }
            var currentStatus = (SessionStatus)Enum.Parse(typeof(SessionStatus), oSession.Status);


            if (cu.EnumRole == EnumUserRole.SuperAdmin && currentStatus == SessionStatus.Pending)
            {
                oSession.ProgramPurpose = "ProgramPurposeNotUsed";
                oSession.TargetGroup    = session.TargetGroup;

                if (oSession.SchoolID == null && session.SchoolID != null && session.SchoolID.Value != 0)
                {
                    var cor                   = new CoordinatorRepository().GetBySchool(session.SchoolID.Value);
                    var user                  = new AccountRepository().Get(oSession.CreatedBy);
                    var bogusController       = Util.CreateController <EmailTemplateController>();
                    EmailTemplateModel emodel =
                        new EmailTemplateModel
                    {
                        Title           = "Notification: Session Created For School",
                        User            = user.FirstName,
                        CoordinatorName = cor.CoordinatorName,
                        SessionTitle    = oSession.ProgramName,
                        UserName        = user.Username,
                        Email           = cor.CoordinatorEmail
                    };
                    string body =
                        Util.RenderViewToString(bogusController.ControllerContext, "SessionCreatedSchool", emodel);
                    EmailSender.SendSupportEmail(body, cor.CoordinatorEmail);
                }
                oSession.SchoolID                  = session.SchoolID == 0 ? null : session.SchoolID;
                oSession.ProgramName               = session.ProgramName;
                oSession.ProposedDateTime          = DateTime.ParseExact(session.PropesedDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                oSession.ProposedEndDateTime       = session.ProposedEndDateTime;
                oSession.VolunteerId               = session.VolunteerId == 0 ? null : session.VolunteerId;
                oSession.StudentCertificate        = session.StudentCertificate == 0 ? null : session.StudentCertificate;
                oSession.VolunteerCertificate      = session.VolunteerCertificate == 0 ? null : session.VolunteerCertificate;
                oSession.StudentEvaluationCatagory = session.StudentEvaluationCatagory;
            }
            if (session.ActualDateString != null)
            {
                oSession.ActualDateTime = DateTime.ParseExact(session.ActualDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            }
            if (currentStatus == SessionStatus.DateChanges)
            {
                if (session.SendKitByMailCourier && !oSession.SendKitByMailCourier)
                {
                    var cor                   = oSession.school.coordinator_profile.First();
                    var user                  = new AccountRepository().Get(oSession.CreatedBy);
                    var bogusController       = Util.CreateController <EmailTemplateController>();
                    EmailTemplateModel emodel =
                        new EmailTemplateModel
                    {
                        Title           = "Injaz: Administrator send kit by mail courier.",
                        User            = user.FirstName,
                        CoordinatorName = cor.CoordinatorName,
                        SessionTitle    = oSession.ProgramName,
                    };
                    string body =
                        Util.RenderViewToString(bogusController.ControllerContext, "SendKitBymailCourier", emodel);
                    EmailSender.SendSupportEmail(body, cor.CoordinatorEmail);
                }
                oSession.SendKitByMailCourier = session.SendKitByMailCourier;
            }
            if (cu.EnumRole == EnumUserRole.Coordinator && (currentStatus == SessionStatus.Approved || currentStatus == SessionStatus.Rejected))
            {
                if (session.ConfirmKitReceivedBySchool && !oSession.ConfirmKitReceivedBySchool)
                {
                    var cor                   = oSession.school.coordinator_profile.First();
                    var user                  = new AccountRepository().Get(oSession.CreatedBy);
                    var bogusController       = Util.CreateController <EmailTemplateController>();
                    EmailTemplateModel emodel =
                        new EmailTemplateModel
                    {
                        Title           = "Injaz: Confirm Kit Received By School.",
                        CoordinatorName = cor.CoordinatorName,
                        SessionTitle    = oSession.ProgramName,
                        User            = cor.user.FirstName
                    };
                    string body =
                        Util.RenderViewToString(bogusController.ControllerContext, "ConfirmKitReceivedBySchool", emodel);
                    EmailSender.SendSupportEmail(body, user.Email);
                }
                oSession.ConfirmKitReceivedBySchool = session.ConfirmKitReceivedBySchool;
            }
            if (currentStatus == SessionStatus.Pending && oSession.ActualDateTime != null)
            {
                if (oSession.ProposedDateTime.Date == oSession.ActualDateTime.Value.Date)
                {
                    if (oSession.Status != SessionStatus.Approved.ToString())
                    {
                        SendEmailNotificationsApprovedByAdmin(oSession);
                    }
                    oSession.Status          = SessionStatus.Approved.ToString();
                    oSession.ApprovedByAdmin = true;
                }
                else
                {
                    if (oSession.Status != SessionStatus.DateChanges.ToString())
                    {
                        SendEmailNotificationDateChanged(oSession);
                    }
                    oSession.Status = SessionStatus.DateChanges.ToString();
                }
            }
            if (currentStatus == SessionStatus.Approved && oldActualDate != null && oSession.ActualDateTime != oldActualDate)
            {
                if (oSession.Status != SessionStatus.Approved.ToString())
                {
                    SendEmailNotificationDateChanged(oSession);
                }
                oSession.Status          = SessionStatus.DateChanges.ToString();
                oSession.ApprovedByAdmin = false;
            }
            if (session.SubmitButton != null)
            {
                if (session.SubmitButton == "approved")
                {
                    if (oSession.Status != SessionStatus.Approved.ToString())
                    {
                        SendEmailNotificationsApprovedByAdmin(oSession);
                    }
                    oSession.Status          = SessionStatus.Approved.ToString();
                    oSession.ApprovedByAdmin = true;
                }
                if (session.SubmitButton == "submitpre")
                {
                    int    participantId = new ParticipiantRepository().GetByUserId(cu.OUser.Id).Id;
                    string eve_cat       = oSession.StudentEvaluationCatagory;
                    string form          = new EvaluationFormRepository().Get().First(x => x.Catagory == eve_cat && x.SubCatagory == "pre").FormPath;
                    return(RedirectToAction(form, "EvaluationForm", new { participantid = participantId, sessionid = oSession.Id }));
                }
                if (session.SubmitButton == "submitpost")
                {
                    int    participantId = new ParticipiantRepository().GetByUserId(cu.OUser.Id).Id;
                    string eve_cat       = oSession.StudentEvaluationCatagory;
                    string form          = new EvaluationFormRepository().Get().First(x => x.Catagory == eve_cat && x.SubCatagory == "post").FormPath;
                    return(RedirectToAction(form, "EvaluationForm", new { participantid = participantId, sessionid = oSession.Id }));
                }
                if (session.SubmitButton == "request")
                {
                    //oSession.MarkedCompletedByVolunteer = true;
                    var volunteer = new VolunteerRepository().GetByGoogleId(cu.GoogleId) ?? new VolunteerRepository().GetByLinkedInId(cu.GoogleId);
                    oSession.VolunteerId = volunteer.Id;

                    var user                  = new AccountRepository().Get(oSession.CreatedBy);
                    var bogusController       = Util.CreateController <EmailTemplateController>();
                    EmailTemplateModel emodel =
                        new EmailTemplateModel
                    {
                        Title         = "Injaz:Volunteer Assign Session",
                        VolunteerName = volunteer.VolunteerName,
                        SessionTitle  = oSession.ProgramName,
                        User          = user.FirstName
                    };
                    string body =
                        Util.RenderViewToString(bogusController.ControllerContext, "VolunteerAssignSession", emodel);
                    EmailSender.SendSupportEmail(body, user.Email);
                }
                if (session.SubmitButton == "confirm")
                {
                    return(RedirectToAction("StudentAttendense", new { sessionId = oSession.RowGUID }));
                }
                if (session.SubmitButton == "reject")
                {
                    oSession.Status = SessionStatus.Rejected.ToString();
                }
                if (session.SubmitButton == "feedback")
                {
                    var participant = new ParticipiantRepository().GetByUserId(cu.OUser.Id);

                    return(RedirectToAction("FeedBack", new { sessionId = oSession.Id, participantId = participant.Id }));
                }
                if (session.SubmitButton == "coordinatorform")
                {
                    int corId = new CoordinatorRepository().GetByUserId(oSession.school.CoordinatorUserId).Id;
                    return(RedirectToAction("CoordinatorForm", "EvaluationForm", new { sessionId = oSession.Id, volId = oSession.volunteer_profile.Id, corId = corId }));
                }
                if (session.SubmitButton == "viewcertificate" || session.SubmitButton == "volunteerviewcertificate")
                {
                    var    participant     = new ParticipiantRepository().GetByUserId(cu.OUser.Id);
                    string certificatePath = null;

                    List <PdfCoordinatesModel> pdfCoordinates = null;
                    if (cu.EnumRole == EnumUserRole.Participant)
                    {
                        certificatePath = Server.MapPath(oSession.certificate.UploadFilePath);
                        pdfCoordinates  = new CertificateDictionary().GetPdfCoordinatesFromDictionary(oSession.certificate.Type);
                    }
                    else
                    {
                        certificatePath = Server.MapPath(oSession.certificate1.UploadFilePath);
                        pdfCoordinates  = new CertificateDictionary().GetPdfCoordinatesFromDictionary(oSession.certificate1.Type);
                        oSession.IsVolunteerCertificateGenerated = true;
                    }
                    foreach (var pc in pdfCoordinates)
                    {
                        switch (pc.CertifiacteData)
                        {
                        case CertificateEnum.NameOfStudent:
                            pc.Text = participant.Name + " " + participant.FatherName + " " + participant.Family;
                            break;

                        case CertificateEnum.NameOfCoordinator:
                            pc.Text = oSession.school.coordinator_profile.First().CoordinatorName;
                            break;

                        case CertificateEnum.ProgrammYear:
                            pc.Text = DateTime.Now.Year + "";
                            break;

                        case CertificateEnum.TranningDate:
                            pc.Text = Util.DateConversion(oSession.ActualDateTime.Value.ToShortDateString(), "Hijri", "en-us");
                            break;

                        case CertificateEnum.TranningHour:
                            pc.Text = ConfigurationManager.AppSettings["TranningHours"];
                            break;

                        case CertificateEnum.NameOfVolunteer:
                            pc.Text = oSession.volunteer_profile.VolunteerName;
                            break;
                        }
                    }
                    string fontFilePath = Server.MapPath("~/fonts/Arabic Fonts/trado.ttf");
                    var    outputFile   = PdfGenerator.GenerateOnflyPdf(certificatePath, pdfCoordinates, fontFilePath);
                    if (session.SubmitButton == "viewcertificate")
                    {
                        EmailSender.SendSupportEmail("Student Template", participant.Email, outputFile);
                        oSession.session_participant.Where(x => x.ParticipantID == participant.Id).First().IsCertificateGenerated = true;
                    }
                    else
                    {
                        EmailSender.SendSupportEmail("Volunteer Template", oSession.volunteer_profile.VolunteerEmail, outputFile);
                    }
                }
            }
            oSession.IsActive = session.IsActive;
            if (session.Id == 0)
            {
                sessionRepo.Post(oSession);
            }
            else
            {
                sessionRepo.Put(oSession.Id, oSession);
            }
            return(RedirectToAction("Index"));
        }