예제 #1
0
파일: balance.cs 프로젝트: vsh95/ParkgMVC
 public bool Operation(string Type_Operation, decimal price, decimal BalanceAfterOperation,string Login, string Description,string Date)
 {
     bool Result = true;
     try
     {
         balance bl = new balance();
         bl.Type_Operation = Type_Operation;
         bl.Sum = price;
         bl.BalanceAfterOperation = BalanceAfterOperation;
         bl.Login = Login;
         bl.Description = Description;
         bl.DateOperation = Date;
         bl.Status = "True";
         mp.balance.Add(bl);
         mp.SaveChanges();
         Result = true;
     }
     catch
     {
         Result = false;
     }
     return Result;
 }
예제 #2
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();
        }
예제 #3
0
        public ActionResult Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                // Попытка зарегистрировать пользователя
                MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    try {
                    usr NewUser = new usr();
                    NewUser.AddUser(model.UserName);

                    balance bl = new balance();
                        bl.Operation("Init",0,0,model.UserName, "Initial your balance",DateTime.Now.ToString("dd.MM.yy HH:mm"));

                        FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
                        return RedirectToAction("Index", "Home");
                    
                    }
                    catch //(Exception ex)
                    {
                    return View("Register");
                    }
                }
                else
                {
                    ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
                }
            }

            // Появление этого сообщения означает наличие ошибки; повторное отображение формы
            ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
            return View(model);
        }
예제 #4
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");
            }
        }
예제 #5
0
        public bool Revoke(string Describe, reservation obj, string Date)
        {
            bool result = false;
            try
            {
                //format my date have view:  string d = "21.11.14 20:00";

                decimal price = 0;
                usr ur = mp.usr.Where(x => x.Login == obj.Login).FirstOrDefault();
                balance bl = new balance();
                place p = new place();

                //Можно упростить задачу. Следующим коментируемым кодом
                /*  obj.id_alternative_location_place == obj.id_location_place
                 * то есть если место уже изменено на другое, то сделать автомобилисту бесплатную бронь(т.к. нарушена его потребность)
                 * соответственно проверка на то что лучше это место или хуже не понадобится вообще.
                 * 
                 * сейчас действует схема, что бронь бесплатна если новое выданное место хуже или его нет вообще. (риск он принимал в
                 * соглашении)
                */
                if (obj.id_alternative_location_place != null) {


                    if (Describe != "Reservation was used")
                    {
                        //освобождающее место либо достанется кому-то, либо переведтся в свободное состояние
                        p.FreePlace((long)obj.id_alternative_location_place);
                    }

                    //Эта проверка может непонадобится, если обдумать описанный комментарий выше.
                    if (p.bestornot((long)obj.id_location_place, (long)obj.id_alternative_location_place) == true ||
                        obj.id_alternative_location_place == obj.id_location_place)
                        {


                long span = 0;

                if (Describe == "Reservation was expired" | Describe == "Reservation was revoke")
                {
                    span = Convert.ToDateTime(Date).Ticks - Convert.ToDateTime(obj.DateConnection).Ticks;
                }
                else if (Describe == "Reservation was used")
                {



                    DateTime mydate = Convert.ToDateTime(obj.DateConnection).AddMinutes(obj.reservation_tariff.FirstFreeTimeInMinutes);
                    if (mydate <= Convert.ToDateTime(DateTime.Now.ToString("dd.MM.yy HH:mm")))
                    {
                        span = Convert.ToDateTime(Date).Ticks - mydate.Ticks;
                    }


                }





                    decimal priceinmin = (decimal)(obj.reservation_tariff.PriceInRubForHourHightFreeTime) / 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, Describe, Date);
                
                result = true;
            }
            catch
            {
                result = false;
            }
            return result;
        }
예제 #6
0
        public ActionResult cashFlow(balance op, string Number)
        {
            string Date = DateTime.Now.ToString("dd.MM.yy HH:mm");
            string Description = "";
            decimal nowbalance = 0;
            if (op.Login == "" || op.Login == null || op.Login == " ")
            {
                NumberAttribute na = new NumberAttribute();
                try
                {
                    na.Validate(Number,"Error");
                    if (string.IsNullOrEmpty(Number))
                    {
                       ViewData["Message"] = "Не заполнен получатель (введите номер его ТС или логин)!";
                       return View("cashFlow");
                    }
                    else
                    {
                        if (ModelState.IsValidField("Sum"))
                        {
                            if (op.Sum != 0)
                            {
                                ts searchts = mp.ts.Where(x => x.Number == Number & x.Status == "True").FirstOrDefault();
                                if (searchts != null)
                                {
                                    usr searchusr = mp.usr.Where(x => x.Login == searchts.Login).FirstOrDefault();


                                    if (op.Type_Operation == "Debit" & searchusr.Now_Balance > 0)
                                    {
                                        nowbalance = (decimal)searchusr.Now_Balance - op.Sum;
                                        if (nowbalance < 0)
                                        {
                                            ViewData["Message"] = "Невозможно вывести запрашиваемую сумму, т.к. она превышает допустимый счет! Максимальная целая сумма доступная для вывода: " + Math.Floor((decimal)searchusr.Now_Balance) + " rub";
                                            return View("cashFlow");
                                        }
                                        Description = "Return money from account";
                                    }
                                    else if (op.Type_Operation == "Debit" & searchusr.Now_Balance <= 0)
                                    {
                                        ViewData["Message"] = "Для того, что бы вывести денежные средства, необходимо иметь на счете больше, чем 0 руб. Сейчас на счете: " + searchusr.Now_Balance;
                                        return View("cashFlow");
                                    }
                                    if (op.Type_Operation != "Debit")
                                    {
                                        nowbalance = (decimal)searchusr.Now_Balance + op.Sum;
                                        Description = "The receipt of money";
                                    }
                                    searchusr.Now_Balance = nowbalance;
                                    mp.Entry(searchusr).State = EntityState.Modified;
                                    mp.SaveChanges();
                                    balance newop = new balance();
                                    newop.Operation(op.Type_Operation, op.Sum, nowbalance, searchusr.Login, Description, Date);
                                    return RedirectToAction("Index", new { Controller = "Home" });
                                }
                                else
                                {
                                    ViewData["Message"] = "Введенный вами номер ТС не найден в базе!";
                                    return View("cashFlow");
                                }
                            }
                            else
                            {
                                ViewData["Message"] = "Сумма должна быть больше, чем 0!";
                                return View("cashFlow");
                            }
                        }
                        else
                        {
                            return View("cashFlow");
                        }
                    }
                }
                catch
                {
                    ViewData["Message"] = "Введенный номер '" + Number + "' несоответсвует стандарту.";
                    return View("cashFlow");

                }
            }
            else if (op.Login != "" & op.Login != " " & (Number == "" || Number == null))
            {
                if (op.Type_Operation != "Debit")
                {

                    if (ModelState.IsValidField("Sum"))
                    {
                        if (op.Sum != 0)
                        {
                            usr searchusr = mp.usr.Where(x => x.Login == op.Login).FirstOrDefault();
                            if (searchusr != null)
                            {
                                nowbalance = (decimal)searchusr.Now_Balance + op.Sum;
                                Description = "The receipt of money";
                                searchusr.Now_Balance = nowbalance;
                                mp.Entry(searchusr).State = EntityState.Modified;
                                mp.SaveChanges();
                                balance newop = new balance();
                                newop.Operation(op.Type_Operation, op.Sum, nowbalance, searchusr.Login, Description, Date);
                            }
                            else
                            {
                                ViewData["Message"] = "Логин '" + op.Login + "' не найден в базе!";
                                return View("cashFlow");
                            }



                        return RedirectToAction("Index", new { Controller = "Home" });
                        }
                        else
                        {
                            ViewData["Message"] = "Сумма должна быть больше, чем 0!";
                            return View("cashFlow");
                        }

                    }
                    else
                    {
                        return View("cashFlow");
                    }
                }
                else
                {
                    ViewData["Message"] = "Вывод средств по логину запрещен!Напоминание: при выводе средств по номеру необходимы документы, которые смогут удостоверить, что данное ТС действительно принадлежит лицу, пытающемуся совершить вывод средств. Т.е. лицо, пытающееся совершить вывод средств должно являться собственником указанного ТС. Так же необходимо проверить соответсвие между этими данными с паспортными.";
                    return View("cashFlow");
                }

            }
            return View("cashFlow");
        }
예제 #7
0
 public ActionResult cashFlow()
 {
     //ViewData["OpList"] = new SelectList(Operation(), "");
     balance op = new balance();
     return View(op);
 }