Esempio n. 1
0
 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();
 }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
 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();
 }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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");
            }
        }