public ActionResult AbonementList() { //Авторизован и роль Driver //Проверка на истечение абонемента usingtariffonabonementforvisit expiredabonement = new usingtariffonabonementforvisit(); expiredabonement.ExpiredAbonement(User.Identity.Name); ViewData["ActiveAbonement"] = mp.usingtariffonabonementforvisit.Where(x => x.Status == "Active" & x.Login == User.Identity.Name); ViewData["NotActiveAbonements"] = mp.usingtariffonabonementforvisit.Where(x => x.Status != "Active" & x.Login == User.Identity.Name); return View(); }
public ActionResult RevokeAbonement(Int64 id_abonement) { //Авторизован и роль Driver string Date = DateTime.Now.ToString("dd.MM.yy HH:mm"); usingtariffonabonementforvisit expiredabonement = new usingtariffonabonementforvisit(); usingtariffonabonementforvisit activeab = mp.usingtariffonabonementforvisit.Where(x => x.id_abonement == id_abonement).FirstOrDefault(); if (expiredabonement.ExpiredAbonement(User.Identity.Name) == true) { ViewData["MyAbonementMessage"] = "Срок действия вашего абонемента истек до его собственнорчного закрытия."; } else { activeab.DateOutFromActivity = Date; activeab.Status = "Revoke"; mp.Entry(activeab).State = EntityState.Modified; mp.SaveChanges(); ViewData["MyAbonementMessage"] = "Абонемент был успешно закрыт"; } ViewData["ActiveAbonement"] = mp.usingtariffonabonementforvisit.Where(x => x.Status == "Active" & x.Login == User.Identity.Name); ViewData["NotActiveAbonements"] = mp.usingtariffonabonementforvisit.Where(x => x.Status != "Active" & x.Login == User.Identity.Name); return View(); }
public ActionResult ChooseTariffOnAbonements() { //Авторизован и роль Driver usingtariffonabonementforvisit expiredabonement = new usingtariffonabonementforvisit(); expiredabonement.ExpiredAbonement(User.Identity.Name); usingtariffonabonementforvisit usingabtar = mp.usingtariffonabonementforvisit.Where(x => x.Login == User.Identity.Name & x.Status == "Active").FirstOrDefault(); if (usingabtar == null) { ViewData["Choose"] = "ВЫБОР АБОНЕМЕНТА"; } else { ViewData["Choose"] = ""; ViewData["AbonementError"] = "Поскольку Вы уже имеете активный подключенный абонемент - Вы были перенаправлены на обычный просмотр абонементов."; } ViewData["ActiveTariffs"] = mp.tariffonabonementforvisit.Where(x => x.Status == "Available"); ViewData["NotActiveTariffs"] = mp.tariffonabonementforvisit.Where(x => x.Status != "Available"); return View(); }
public ActionResult ConnectTariffOnAbonements(string Name_tariff) { //Есл авторизован и является ролью Driver tariffonabonementforvisit abtar = mp.tariffonabonementforvisit.Where(x => x.Name_tariff_on_abonement == Name_tariff & x.Status == "Available").FirstOrDefault(); if (abtar != null) { string Date = DateTime.Now.ToString("dd.MM.yy HH:mm"); string Login = User.Identity.Name; //Продолжаю //Подключить(создать) запись //СПисать с юзера баланс //Добавить запись в операции над балансом usingtariffonabonementforvisit usingabtar = new usingtariffonabonementforvisit(); if (usingabtar.Connection(abtar.Name_tariff_on_abonement, Date, Login)) { usr searchusr = mp.usr.Where(x => x.Login == Login).FirstOrDefault(); decimal Now_balance = (decimal)searchusr.Now_Balance - abtar.Price; searchusr.Now_Balance = Now_balance; mp.Entry(searchusr).State = EntityState.Modified; mp.SaveChanges(); balance connectabonement = new balance(); connectabonement.Operation("Debit", abtar.Price, Now_balance, Login, "Connect abonemement", Date); return RedirectToAction("AbonementList", new { Controller = "Abonement" }); } } else { ViewData["ActiveTariffs"] = mp.tariffonabonementforvisit.Where(x => x.Status == "Available"); ViewData["NotActiveTariffs"] = mp.tariffonabonementforvisit.Where(x => x.Status != "Available"); ViewData["AbonementError"] = "Выбранный вами абонемент на данный момент стал неактивным, но Вы можете выбрать другой абонемент."; ViewData["Choose"] = "ВЫБОР АБОНЕМЕНТА"; return View(); } ViewData["AbonementError"] = "Внимание, возникла непредвиденная ошибка, пожалуйста, попробуйте повторить ваше действие и в случае повторной неудачи обратитесь к администратору с описанием проблемы!"; ViewData["Choose"] = "ВЫБОР АБОНЕМЕНТА"; return View(); }
public ActionResult RegisterOut(ts numb) { ViewData["ActiveVisit"] = mp.visit.Where(x => x.DateOut == "dateout").ToList(); if (ModelState.IsValidField("Number")) { ts searchts = mp.ts.Where(x => x.Number == numb.Number & x.Status == "True").FirstOrDefault(); if (searchts != null) { usingtariffonabonementforvisit expiredabonement = new usingtariffonabonementforvisit(); expiredabonement.ExpiredAbonement(searchts.Login); visit vis = mp.visit.Where(x => x.id_ts == searchts.id_ts & x.DateOut == "dateout").FirstOrDefault(); if (vis != null) { Int64 id_abonement_u = 0; bool dual = false; tariffonplace top = mp.tariffonplace.Where(x => x.id_tariff_on_place == vis.place.id_alternative_tariff_on_place).FirstOrDefault(); decimal PriceForPlace = 0; usingtariffonabonementforvisit abontar = mp.usingtariffonabonementforvisit.Where(x => x.Login == searchts.Login & x.Status == "Active").FirstOrDefault(); if (abontar != null) { PriceForPlace = top.PriceForHourWithAbonement; } else { var searchab = mp.usingtariffonabonementforvisit.Where(x => x.Status == "Not active" & x.Login == searchts.Login).ToList(); int count = searchab.Count(); int i = 0; foreach (var s1 in searchab) { DateTime max = Convert.ToDateTime(s1.DateOutFromActivity); foreach (var maxdate in searchab) { if (i < count) { if (max >= Convert.ToDateTime(maxdate.DateConnection)) { max = Convert.ToDateTime(maxdate.DateConnection); if (max > Convert.ToDateTime(vis.DateIn)) { id_abonement_u = maxdate.id_abonement; } } i++; } else { break; } } break; } if (id_abonement_u != 0) { //Осталось учесть, если абонемент который на время сдох во время стоянки. //Тогда поделить на 2 части. Первая по абонементской цене до этой даты, вторая по обычной, после выхода абонемента из строя //Делаю в этой ветке, т.к. автомобилист уже мог подключить новый абонемент, а эта ветка происходит если нового //не было найдено //Причем это пригодится только для первой попытки выезда. dual = true; } PriceForPlace = top.PriceForHourWithoutAbonement; } string Date = DateTime.Now.ToString("dd.MM.yy HH:mm"); decimal price = 0; usr ur = mp.usr.Where(x => x.Login == searchts.Login).FirstOrDefault(); balance bl = new balance(); place p = new place(); int y = 0; if (vis.FirstAttemptGoOut == "dateout2") { //В минуты время простоя. long span = 0; DateTime timein = Convert.ToDateTime(vis.DateIn).AddMinutes(vis.visitparameters.FirstFreeTimeInMinutes); if (timein < Convert.ToDateTime(Date)) { if (dual == false) { span = Convert.ToDateTime(Date).Ticks - timein.Ticks; //наличие абонемента играет роль decimal priceinmin = (decimal)(PriceForPlace) / 60; price = (decimal)TimeSpan.FromTicks(span).TotalMinutes * priceinmin; ur.Now_Balance = ur.Now_Balance - price; mp.Entry(ur).State = EntityState.Modified; mp.SaveChanges(); bl.Operation("Debit", price, (decimal)ur.Now_Balance, ur.Login, "Register Out. First Attempt.", Date); } else { usingtariffonabonementforvisit uab = mp.usingtariffonabonementforvisit.Where(x => x.id_abonement == id_abonement_u).FirstOrDefault(); long span2 = 0; span = Convert.ToDateTime(uab.DateOutFromActivity).Ticks - timein.Ticks; span2 = Convert.ToDateTime(Date).Ticks - Convert.ToDateTime(uab.DateOutFromActivity).Ticks; decimal priceinmin1 = (decimal)(top.PriceForHourWithoutAbonement) / 60; decimal priceinmin2 = (decimal)(top.PriceForHourWithAbonement) / 60; price = ((decimal)TimeSpan.FromTicks(span).TotalMinutes * priceinmin1) + ((decimal)TimeSpan.FromTicks(span2).TotalMinutes * priceinmin2); ur.Now_Balance = ur.Now_Balance - price; mp.Entry(ur).State = EntityState.Modified; mp.SaveChanges(); bl.Operation("Debit", price, (decimal)ur.Now_Balance, ur.Login, "Register Out. First Attempt. With a both price, because your abonement was disabled during idle time", Date); } } MyParkingEntities updout = new MyParkingEntities(); vis.FirstAttemptGoOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); y = 1; } if (y == 0) { if (vis.FirstAttemptGoOut != "dateout2" & vis.NextAttemptGoOut == "dateout3") { long span = Convert.ToDateTime(Date).Ticks - Convert.ToDateTime(vis.FirstAttemptGoOut).Ticks; decimal minutes = (decimal)TimeSpan.FromTicks(span).TotalMinutes - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans; if (minutes > 0) { price = Math.Abs(minutes) * ((decimal)PriceForPlace / 60); ur.Now_Balance = ur.Now_Balance - price; mp.Entry(ur).State = EntityState.Modified; mp.SaveChanges(); bl.Operation("Debit", price, (decimal)ur.Now_Balance, ur.Login, "Register Out. Second Attempt", Date); } y = 1; MyParkingEntities updout = new MyParkingEntities(); vis.NextAttemptGoOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); } } if (y == 0) { if (vis.NextAttemptGoOut != "dateout3") { //Сколько прошло от той попытки. long span = Convert.ToDateTime(Date).Ticks - Convert.ToDateTime(vis.NextAttemptGoOut).Ticks; decimal minutesnow = (decimal)TimeSpan.FromTicks(span).TotalMinutes; // //Для дальнейшего определения использован ли параметр бесплатного времени на покрытие брони. long span2 = Convert.ToDateTime(vis.NextAttemptGoOut).Ticks - Convert.ToDateTime(vis.FirstAttemptGoOut).Ticks; decimal minutes = (decimal)TimeSpan.FromTicks(span2).TotalMinutes; //decimal minutes2 = (decimal)TimeSpan.FromTicks(span2).TotalMinutes - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans; if (minutes - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans >= 0) { price = Math.Abs(minutesnow) * ((decimal)PriceForPlace / 60); ur.Now_Balance = ur.Now_Balance - price; mp.Entry(ur).State = EntityState.Modified; mp.SaveChanges(); bl.Operation("Debit", price, (decimal)ur.Now_Balance, ur.Login, "Register Out. Next Attempt.", Date); //y = 1; MyParkingEntities updout = new MyParkingEntities(); vis.NextAttemptGoOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); } else if (minutes - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans < 0) { if ((minutes + minutesnow - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans) < 0) { MyParkingEntities updout = new MyParkingEntities(); vis.NextAttemptGoOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); } else if ((minutes + minutesnow - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans) >= 0) { price = Math.Abs((minutes + minutesnow - (decimal)vis.visitparameters.FirstFreeTimeOnChangeBalans)) * ((decimal)PriceForPlace / 60); ur.Now_Balance = ur.Now_Balance - price; mp.Entry(ur).State = EntityState.Modified; mp.SaveChanges(); bl.Operation("Debit", price, (decimal)ur.Now_Balance, ur.Login, "Register Out. Next Attempt.", Date); //y = 1; MyParkingEntities updout = new MyParkingEntities(); vis.NextAttemptGoOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); } } } } if (searchts.usr.Now_Balance >= 0) { //Если абонемент на кол-во посещений, то прибавить единицу и проверить не истек ли и если да, то сразу здесь же закрыть. vis.DateOut = Date; mp.Entry(vis).State = EntityState.Modified; mp.SaveChanges(); place fp = new place(); fp.FreePlace(vis.id_location_place); //разделить эти изменения по методам возникает ошибка. // usingtariffonabonementforvisit abontar2 = mp.usingtariffonabonementforvisit.Where(x => x.Name_tariff_on_abonement == abontar.Name_tariff_on_abonement).FirstOrDefault(); //MyParkingEntities forabonement = new MyParkingEntities(); if (abontar != null) { abontar.NumOfVisitsMadeWithUsingThisTariff = abontar.NumOfVisitsMadeWithUsingThisTariff + 1; mp.Entry(abontar).State = EntityState.Modified; mp.SaveChanges(); usingtariffonabonementforvisit afterupdabontar = mp.usingtariffonabonementforvisit.Where(x => x.Login == searchts.Login & x.Status == "Active").FirstOrDefault(); if (abontar.tariffonabonementforvisit.Max_Num_visits_in_this_tariff != null) { if (abontar.tariffonabonementforvisit.Max_Num_visits_in_this_tariff == afterupdabontar.NumOfVisitsMadeWithUsingThisTariff) { abontar.Status = "Expired"; abontar.DateOutFromActivity = Date; mp.Entry(abontar).State = EntityState.Modified; mp.SaveChanges(); } } } } else { ViewData["ExceptionRegisterOut"] = "Баланс отрицателен, полный выезд невозможен"; return View("RegisterOut"); } } else { ViewData["ExceptionRegisterOut"] = "Возможно, Вы ошиблись при вводе регистрационного номера, т.к. указанное вами ТС на парковке не найдено"; return View("RegisterOut"); } } else { ViewData["ExceptionRegisterOut"] = "Возможно, Вы ошиблись при вводе регистрационного номера, т.к. указанное вами TC не найдено в бд"; return View("RegisterOut"); } return RedirectToAction("Index", new { Controller = "Home"}); } else { return View("RegisterOut"); } }