public string CreateTS(ts t, string Log) { string result = ""; try { ts ExistForThisLogFalse = mp.ts.Where(x => x.Number == t.Number & x.Company == t.Company & x.Mode == t.Mode & x.Login == Log & x.Status == "False").FirstOrDefault(); ts ExistTS = mp.ts.Where(x => x.Number == t.Number & x.Status == "True").FirstOrDefault(); bool exist = true; /*if (NotExist.Status != "True" & NotExist.Status != "False") { //послать сообщение что такое тс существует и используется в базе result = false; }*/ if (ExistForThisLogFalse != null) { ExistForThisLogFalse.Status = "True"; mp.Entry(ExistForThisLogFalse).State = EntityState.Modified; mp.SaveChanges(); exist = false; result = "1"; } if (exist == true) { if (ExistTS != null) { result = "Указанный регистрационный номер существует и активен в системе"; //это тс в базе и кем-то используется } else if (ExistTS == null) { //добавить новую запись t.Login = Log; t.Status = "True"; mp.ts.Add(t); mp.SaveChanges(); result = "1"; } } } catch (Exception ex) { result = ex.Message; } return result; }
public ActionResult Delete_TS(Int32 id_ts) { string Log = User.Identity.Name.ToString(); ViewData["Error"] = ""; try { ts ts = new ts(); if (ts.ChangeStatus(id_ts, Log)=="1") return View(mp.ts.Where(x => x.Login == Log & x.Status == "True").ToList()); else { ViewData["Error"] = ts.ChangeStatus(id_ts, Log); return View(mp.ts.Where(x => x.Login == Log & x.Status == "True").ToList()); } } catch { return View(mp.ts.Where(x => x.Login == Log & x.Status == "True").ToList()); } }
public ActionResult CreateTS(ts newts) { try { if (ModelState.IsValid) { ts ts = new ts(); string Log = User.Identity.Name.ToString(); if (ts.CreateTS(newts, Log) == "1") return RedirectToAction("TS"); else { ViewData["Code"] = ts.CreateTS(newts, Log); return View("CreateTS"); } } else return View("CreateTS"); } catch { return View("CreateTS"); } }
public ActionResult RegisterIn(ts numb) { if (ModelState.IsValidField("Number")) { visitparameters vp = mp.visitparameters.Where(x => x.Status == "Active").FirstOrDefault(); if (vp != null) { reservation r = new reservation(); r.FindOnExpired(""); ts searchts = mp.ts.Where(x => x.Number == numb.Number & x.Status == "True").FirstOrDefault(); if (searchts != null) { visit nvis = new visit(); visit vis = mp.visit.Where(x => x.id_ts == searchts.id_ts & x.DateOut == "dateout").FirstOrDefault(); if (vis == null) { place p = new place(); string Log = searchts.Login; string Date = DateTime.Now.ToString("dd.MM.yy HH:mm"); reservation res = mp.reservation.Where(x => x.Login == Log & x.Status == "Active").FirstOrDefault(); //Существует ли бронь if (res != null) { if (res.id_alternative_location_place != null) { nvis.RegisterIn((long)res.id_alternative_location_place, searchts.id_ts, Date, vp.id_vis_param); res.DateOutFromActivity = Date; res.Status = "Closed"; res.Description = "Reservation was used"; mp.Entry(res).State = EntityState.Modified; mp.SaveChanges(); r.Revoke("Reservation was used", res, Date); p.ChangeStatus("Occupied", (long)res.id_alternative_location_place, (Int32)res.place.id_alternative_tariff_on_place); } else { ViewData["ExceptionRegisterIn"] = "Изначально выбранное место этим ТС было закрыто, других свободных мест на данный момент нет"; //, с броней ничего не делать. Будет ждать свободных, не дождется - умрет сама. return View("RegisterIn"); } } else { place autoplace = mp.place.Where(x => x.Status == "Free").OrderBy(x => x.tariffonplace.PriceForHourWithoutAbonement).FirstOrDefault(); if (autoplace != null) { nvis.RegisterIn((long)autoplace.id_location_place, searchts.id_ts, Date, vp.id_vis_param); p.ChangeStatus("Occupied", (long)autoplace.id_location_place, 0); } else { ViewData["ExceptionRegisterIn"] = "Свободных мест нет!"; return View("RegisterIn"); } //Автоматический расчет мест"; } } else { ViewData["ExceptionRegisterIn"] = "Возможно, Вы ошиблись при вводе регистрационного номера, т.к. указанное вами ТС уже находится на парковке."; return View("RegisterIn"); } } else { ViewData["ExceptionRegisterIn"] = "TC не найдено в бд"; return View("RegisterIn"); } } else { ViewData["ExceptionRegisterIn"] = "Осутствуют параметры въезда, активной записи не найдено"; return View("RegisterIn"); } return RedirectToAction("Index", new { Controller = "Home"}); } else { return View("RegisterIn"); } }
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"); } }