//Считаем количество пользователей на сайте. При начале сессии записываем в базу данные о посетителе protected void Session_Start(object sender, EventArgs e) { Visit Visits = new Visit() { VisitData = DateTime.Now, IP = HttpContext.Current.Request.UserHostAddress, // HostName = Dns.GetHostEntry(HttpContext.Current.Request.UserHostAddress).HostName, //UserAgent = request.UserAgent, //временно убрал сбор статистики об агенте пользователя UserBrowser = HttpContext.Current.Request.Browser.Browser, }; try { Visits.HostName = Dns.GetHostEntry(HttpContext.Current.Request.UserHostAddress).HostName; } catch { Visits.HostName = null; } using (AirFlightContext db = new AirFlightContext()) { db.Visits.Add(Visits); db.SaveChanges(); } Sessions.Add(Session.SessionID); }
{ //переопределяем метод вызова public override void OnActionExecuting(ActionExecutingContext filterContext) { var request = filterContext.HttpContext.Request; Visit Visits = new Visit() { VisitData = DateTime.Now, IP = request.UserHostAddress, // HostName = Dns.GetHostEntry(request.UserHostAddress).HostName, //UserAgent = request.UserAgent, //временно убрал сбор статистики об агенте пользователя UserBrowser = request.Browser.Browser, }; try { Visits.HostName = Dns.GetHostEntry(Visits.IP).HostName; } catch { Visits.HostName = null; } using (AirFlightContext db = new AirFlightContext()) { db.Visits.Add(Visits); db.SaveChanges(); } base.OnActionExecuting(filterContext); }
{ //переопределяем метод вызова public override void OnActionExecuted(ActionExecutedContext filterContext) { var request = filterContext.HttpContext.Request; Log Logs = new Log() { VisitData = DateTime.Now, UserName = HttpContext.Current.User.Identity.IsAuthenticated? HttpContext.Current.User.Identity.GetUserName():null, IP = request.UserHostAddress, // HostName = Dns.GetHostEntry(request.UserHostAddress).HostName, UserBrowser = request.Browser.Browser, Url = request.RawUrl }; try { Logs.HostName = Dns.GetHostEntry(request.UserHostAddress).HostName; } catch { Logs.HostName = null; } using (AirFlightContext db = new AirFlightContext()) { db.Logs.Add(Logs); db.SaveChanges(); } base.OnActionExecuted(filterContext); }
public async Task <ActionResult> ChangePasswordAdmin(ChangePasswordAdmin model) { if (ModelState.IsValid) { //Так как функция AddPasswordAsync не изменяет пароль если он существует, то сначала мы его удалим из базы using (AirFlightContext db = new AirFlightContext()) { var pass = db.AspNetUsers.Find(model.UserId); pass.PasswordHash = null; db.Entry(pass).State = EntityState.Modified; db.SaveChanges(); } //Затем изменим. Если пароль введён согласно правилам (Заглавные буквы и строчные и цифры), то возвращаемся на страницу ролей var result = await UserManager.AddPasswordAsync(model.UserId, model.NewPassword); if (result.Succeeded) { return(RedirectToAction("AddRole", "Admin", new { UserId = model.UserId, Message = "Пароль успешно изменён" })); } AddErrors(result); } // Это сообщение означает наличие ошибки; повторное отображение формы return(View(model)); }
//рассылка уведомлений об открытии регистрации public void SendNotificationOpen() { int countsend = 0; var sendnotificopen = db.Notifications.Include(f => f.Flight).Include(a => a.AspNetUser).Where(f => f.Flight.Approved == "Открыта"); if (sendnotificopen != null) { MailAddress from = new MailAddress("*****@*****.**", "Система регистрации пассажиров"); SmtpClient smtp = new SmtpClient("smtp.mail.ru", 587); smtp.Credentials = new NetworkCredential("*****@*****.**", "3tlg8XmM"); smtp.EnableSsl = true; foreach (var email in sendnotificopen) { int countreg = db.RegistrationLists.Where(r => r.FlightID == email.FlightID).Count(); MailAddress to = new MailAddress(email.AspNetUser.EmailSend.Trim()); MailMessage m = new MailMessage(from, to) { // тема письма Subject = "Открытие регистрации", // текст письма Body = "<p>Сообщаем Вам, что регистрация на рейс " + email.Flight.FlightDate.ToLongDateString() + " по маршруту: " + email.Flight.Departure + " - " + email.Flight.Arrival + ", рейс №" + email.Flight.FlightNum + ", время вылета: " + email.Flight.FlightTime.ToString().Substring(0, 5) + ", тип воздушного судна " + email.Flight.AirType + " была открыта. На момент открытия доступно мест для регистрации: " + (email.Flight.Number - countreg) + " из " + email.Flight.Number + ". " + "<p>Уведомление по данной регистрации будет удалено из системы автоматически", //// письмо представляет код html IsBodyHtml = true }; // адрес smtp-сервера и порт, с которого будем отправлять письмо try { smtp.Send(m); //Удаляем запись из рассылки using (AirFlightContext db = new AirFlightContext()) { Notification delnotific = db.Notifications.Find(email.Id); db.Notifications.Remove(delnotific); db.SaveChanges(); } } catch { countsend++; break; } } } }
public void SendNotificationClose() { int countsend = 0; var sendnotificclose = db.Notifications.Include(f => f.Flight).Include(a => a.AspNetUser).Where(f => f.Flight.Approved == "Закрыта"); if (sendnotificclose != null) { MailAddress from = new MailAddress("*****@*****.**", "Система регистрации пассажиров"); SmtpClient smtp = new SmtpClient("smtp.mail.ru", 587); smtp.Credentials = new NetworkCredential("*****@*****.**", "3tlg8XmM"); smtp.EnableSsl = true; foreach (var email in sendnotificclose) { int countreg = db.RegistrationLists.Where(r => r.FlightID == email.FlightID).Count(); MailAddress to = new MailAddress(email.AspNetUser.EmailSend.Trim()); MailMessage m = new MailMessage(from, to) { // тема письма Subject = "Закрытие регистрации", // текст письма Body = "<p>Сообщаем Вам, что регистрация на рейс " + email.Flight.FlightDate.ToLongDateString() + " по маршруту: " + email.Flight.Departure + " - " + email.Flight.Arrival + ", рейс №" + email.Flight.FlightNum + ", время вылета: " + email.Flight.FlightTime.ToString().Substring(0, 5) + ", тип воздушного судна " + email.Flight.AirType + " была закрыта. Регистрация пассажиров на данный рейс более не доступна. " + "Если Вы так и не смогли записать своего сотрудника на рейс, пожалуйста свяжитесь с авиадиспетчером." + "<p>Уведомление по данной регистрации будет удалено из системы автоматически", //// письмо представляет код html IsBodyHtml = true }; // адрес smtp-сервера и порт, с которого будем отправлять письмо try { using (AirFlightContext db = new AirFlightContext()) { smtp.Send(m); //Удаляем запись из рассылки db.Notifications.Remove(db.Notifications.Find(email.Id)); db.SaveChanges(); } } catch { countsend++; break; } } } }
//Добавление уведомлений о рейсах #region NotificationsAdd public JsonResult NotificationsAdd(Notification Notifications) { using (AirFlightContext db = new AirFlightContext()) { if (String.IsNullOrWhiteSpace(db.AspNetUsers.Find(Notifications.AspNetUserID).EmailSend)) { return(Json("NoEmail", JsonRequestBehavior.AllowGet)); } if (db.Notifications.Where(u => u.AspNetUserID == Notifications.AspNetUserID && u.FlightID == Notifications.FlightID).Count() > 0) { return(Json("Вы уже добавили этот рейс для уведомления!", JsonRequestBehavior.AllowGet)); } if (ModelState.IsValid) { db.Notifications.Add(Notifications); db.SaveChanges(); return(Json("Ok", JsonRequestBehavior.AllowGet)); } } return(Json("Ошибка", JsonRequestBehavior.AllowGet)); }
//Сохранение при изменении public async Task <ActionResult> SaveEditPassenger(Passenger passenger, string confirmphone = "no") { var passported = db.Passengers.Where(s => s.Passport == passenger.Passport); //ищем пассажира по паспортным данным if (passported.Count() > 0 && passported.FirstOrDefault().id != passenger.id) { return(Json("Паспортные данные " + passenger.Passport + " совпадают с данными пассажира " + passported.FirstOrDefault().Surname + " " + passported.FirstOrDefault().Name + " " + passported.FirstOrDefault().Middlename + ". Пожалуйста, проверьте правильность заполнения!")); } if (passenger.EmployeeNum != null) { var emplnum = db.Passengers.Where(s => s.EmployeeNum == passenger.EmployeeNum); //ищем пассажира по табельному номеру if (emplnum.Count() > 0 && emplnum.FirstOrDefault().id != passenger.id) { return(Json("Табельный номер " + passenger.EmployeeNum + " совпадает с данными пассажира " + emplnum.FirstOrDefault().Surname + " " + emplnum.FirstOrDefault().Name + " " + emplnum.FirstOrDefault().Middlename + ". Пожалуйста, проверьте правильность заполнения!")); } } if (passenger.PhoneNum != null) { var phone = db.Passengers.Where(p => p.PhoneNum == passenger.PhoneNum); if (phone.Count() > 0 && phone.FirstOrDefault().id != passenger.id) { if (confirmphone == "yes") { using (AirFlightContext db = new AirFlightContext()) { if (ModelState.IsValid) { db.Entry(passenger).State = EntityState.Modified; await db.SaveChangesAsync(); return(Json("Изменено")); } } return(View(passenger)); } else { return(Json("Номер телефона " + passenger.PhoneNum + " совпадает с номеро телефона сотрудника " + phone.FirstOrDefault().Surname + " " + phone.FirstOrDefault().Name + " " + phone.FirstOrDefault().Middlename + ". Вы действительно хотите сохранить его?")); } } } //using необходим для сохранения изменений. Так как мы делаем проверку данных выше, то сущность блокируется и выставить ей //статус Modified не получится. Поэтому тут явно указываем dbContext для сохранения изменений using (AirFlightContext db = new AirFlightContext()) { if (ModelState.IsValid) { db.Entry(passenger).State = EntityState.Modified; await db.SaveChangesAsync(); return(Json("Изменено")); } } return(Json("Ошибка заполнения полей данных!")); }
public JsonResult AddTmplPass(int?Tmplnum, int FlightID, int?[] selectPass, string confirm = "No") { string UId = User.Identity.GetUserId(); //Если выборано сохранение пользователей вручную if (confirm == "SaveCheckPass") { using (AirFlightContext db = new AirFlightContext()) { foreach (var selectpass in selectPass) { RegistrationList reglist = new RegistrationList() { CreatorId = UId, EditorId = UId, FlightID = FlightID, PassengerID = selectpass }; db.RegistrationLists.Add(reglist); db.SaveChanges(); } return(Json("Ok")); } } var tmplpass = db.TemplatesPassengers.Where(u => u.UserId == UId && u.Num == Tmplnum).ToList(); //если количество пассажиров в шаблоне 0 возвращаем ошибку if (tmplpass.Count() == 0) { var result = new { status = "ErrNoItem", msg = "В выбранном шаблоне нет пассажиров для добавления!" }; return(Json(result, JsonRequestBehavior.AllowGet)); } //Определяем информацию о рейсе var date = db.Flights.FirstOrDefault(s => s.id == FlightID); DateTime DF = date.FlightDate; string dp = date.Departure; string ar = date.Arrival; int total = db.RegistrationLists.Where(s => s.Flight.id == FlightID).Count(); int qt = db.Flights.Find(FlightID).Number; var passenger = db.RegistrationLists.Include(f => f.Flight); List <string> ConfirmPassengerList = new List <string>(); List <int> ConfirmPassengerId = new List <int>(); List <bool> AllowCheckPassenger = new List <bool>(); List <string> ExistPassenger = new List <string>(); List <int> CountAlowPassenger = new List <int>(); //считаем какое количество пользователей мы добавим по факту (то есть если количество мест для регистрации доступно 2 а мы добавляем 5 пассажиров) //и из них 3 уже есть на рейсе, то нам нет смысла предлагать пользователю добавить их вручную, поэтому сначала считаем foreach (var allow in tmplpass) { var allowaddpassenegr = db.Passengers.Find(allow.PassengerID); //Проверяем есть ли такой пассажир на других рейсах в выбранную дату var pflyinfo = passenger.Where(s => s.Flight.FlightDate == DF && s.PassengerID == allow.PassengerID); if (pflyinfo.Count() > 0) { continue; } else {//добавляем в список только тех кого нет на рейсах на дату вылета CountAlowPassenger.Add(allowaddpassenegr.id); } } //если количество мест для регистрации меньше чем количество добавляемых пассажиров, отправляем запрос на добавление в ручную if (CountAlowPassenger.Count() > qt - total && confirm == "No") { var result = new { status = "ConfirmAdd", msg = "Добавляемое вами количество пассажиров (" + tmplpass.Count() + "), превышает доступное количество мест (" + (qt - total) + ") на рейсе! Хотите выбрать пассажиров для добавления?" }; return(Json(result, JsonRequestBehavior.AllowGet)); } //если мы выбрали что хотим добавить пассажиров в ручную (или сразу отметили что добавлять будем из списка), то формируем список пассажиров из шаблона if (confirm == "Yes") { foreach (var c in tmplpass) { var selectpassenegr = db.Passengers.Find(c.PassengerID); //Проверяем есть ли такой пассажир на других рейсах в выбранную дату var passengerflyinfo = passenger.Where(s => s.Flight.FlightDate == DF && s.PassengerID == c.PassengerID); if (passengerflyinfo.Count() > 0) { //если пользователь зарегистрирован на встречных рейсах до добавляем об этом информацию ConfirmPassengerList.Add(string.Format("{0} {1} {2} - зарегистрирован на рейс №{3} {4} - {5}", selectpassenegr.Surname, selectpassenegr.Name, selectpassenegr.Middlename, passengerflyinfo.FirstOrDefault().Flight.FlightNum, passengerflyinfo.FirstOrDefault().Flight.Departure, passengerflyinfo.FirstOrDefault().Flight.Arrival)); //добавляем в список ID пользователя ConfirmPassengerId.Add(selectpassenegr.id); //добавляем в список флаг о запрете его выделения AllowCheckPassenger.Add(false); } else { ConfirmPassengerList.Add(string.Format("{0} {1} {2}", selectpassenegr.Surname, selectpassenegr.Name, selectpassenegr.Middlename)); ConfirmPassengerId.Add(selectpassenegr.id); AllowCheckPassenger.Add(true); } } if (!AllowCheckPassenger.Contains(true)) { var result = new { status = "NoConfirmAddLis", ConfirmPassengerList = ConfirmPassengerList }; return(Json(result, JsonRequestBehavior.AllowGet)); } else { //после того как список сформирован высылаем его пользователю var result = new { status = "ConfirmAddLis", Count = qt - total, ConfirmPassenger = ConfirmPassengerList, ConfirmPassengerId = ConfirmPassengerId, AllowCheckPassenger = AllowCheckPassenger }; return(Json(result, JsonRequestBehavior.AllowGet)); } } using (AirFlightContext db = new AirFlightContext()) { foreach (var listtmplpass in tmplpass) { //Проверяем есть ли такой пассажир на рейсах в выбранную дату var passconfirmadd = passenger.Where(s => s.Flight.FlightDate == DF && s.PassengerID == listtmplpass.PassengerID); if (passconfirmadd.Count() > 0) { var passinfo = db.Passengers.Find(listtmplpass.PassengerID); ExistPassenger.Add(string.Format("{0} {1} {2} - рейс №{3} {4} - {5}", passinfo.Surname, passinfo.Name, passinfo.Middlename, passconfirmadd.FirstOrDefault().Flight.FlightNum, passconfirmadd.FirstOrDefault().Flight.Departure, passconfirmadd.FirstOrDefault().Flight.Arrival)); continue; } RegistrationList reglist = new RegistrationList() { CreatorId = UId, EditorId = UId, FlightID = FlightID, PassengerID = listtmplpass.PassengerID }; db.RegistrationLists.Add(reglist); db.SaveChanges(); } if (ExistPassenger.Count() > 0) { var result = new { status = "ErrAdd", ExistPassenger = ExistPassenger }; return(Json(result, JsonRequestBehavior.AllowGet)); } else { return(Json("Ok", JsonRequestBehavior.AllowGet)); } } }