public ActionResult Index()
        {
            //db.BusTypes.Add(new Domain.Models.BusType { Type = "A/C" });
            //db.SaveChanges();
            BusDetailsViewModel mod = new BusDetailsViewModel();

            mod.BusCompanyNames      = db.BusCompanyNames.ToList();
            mod.OriginLocations      = db.Locations.ToList();
            mod.DestinationLocations = db.Locations.ToList();
            mod.BusTypes             = db.BusTypes.ToList();
            mod.AvailabilityDetails  = db.AvailabilityDetails.Include("BusDetails").ToList();

            return(View(mod));
        }
        public ActionResult DeleteBusDetails(BusDetailsViewModel mod)
        {
            BusDetails deleteDetails = db.BusDetails.Find(mod.Id);

            db.BusDetails.Remove(deleteDetails);

            //AvailabilityDetails deleteavailDetails = db.AvailabilityDetails.;
            //db.AvailabilityDetails.Remove(deleteavailDetails);
            //db.SaveChanges();

            foreach (var availDetails in db.AvailabilityDetails.Where(m => m.BusDetailsId == mod.Id).ToList())
            {
                db.AvailabilityDetails.Remove(availDetails);
            }
            db.SaveChanges();
            mod.Id = 0;
            return(RedirectToAction("Index"));
        }
        public ActionResult EditBusDetails(BusDetailsViewModel mod)
        {
            BusDetails editDetails = db.BusDetails.Find(mod.Id);

            mod.CompanyId         = editDetails.BusCompanyNameId;
            mod.BusTypeId         = editDetails.BusTypeId;
            mod.NumOfChairSeats   = editDetails.NumOfChairSeats;
            mod.NumOfSleeperSeats = editDetails.NumOfSleeperSeats;
            mod.BusNumber         = editDetails.BusNumber;
            mod.Id = editDetails.Id;

            AvailabilityDetails editAvailDetails = db.AvailabilityDetails.FirstOrDefault(m => m.BusDetailsId == mod.Id);

            mod.OriginLocation      = editAvailDetails.OriginLocation;
            mod.DestinationLocation = editAvailDetails.DestinationLocation;

            mod.BusCompanyNames      = db.BusCompanyNames.ToList();
            mod.OriginLocations      = db.Locations.ToList();
            mod.DestinationLocations = db.Locations.ToList();
            mod.BusTypes             = db.BusTypes.ToList();
            mod.AvailabilityDetails  = db.AvailabilityDetails.Include("BusDetails").ToList();

            return(View("Index", mod));
        }
        public ActionResult addBusDetails(BusDetailsViewModel mod)
        {
            if (mod.DestinationLocation == mod.OriginLocation)
            {
                ModelState.AddModelError("DestinationLocation", "Destination location cannot be same as the origin location");
            }
            try
            {
                if (ModelState.IsValid)
                {
                    if (mod.Id == 0)
                    {
                        BusDetails addBusDetails = new BusDetails();
                        addBusDetails.BusCompanyNameId  = mod.CompanyId;
                        addBusDetails.BusTypeId         = mod.BusTypeId;
                        addBusDetails.NumOfChairSeats   = mod.NumOfChairSeats;
                        addBusDetails.NumOfSleeperSeats = mod.NumOfSleeperSeats;
                        addBusDetails.BusNumber         = mod.BusNumber;
                        db.BusDetails.Add(addBusDetails);
                        db.SaveChanges();

                        AvailabilityDetails availDetails = new AvailabilityDetails();
                        availDetails.BusDetailsId        = addBusDetails.Id;
                        availDetails.OriginLocation      = mod.OriginLocation;
                        availDetails.DestinationLocation = mod.DestinationLocation;
                        db.AvailabilityDetails.Add(availDetails);

                        AvailabilityDetails addReturnJourneyDetails = new AvailabilityDetails();
                        addReturnJourneyDetails.BusDetailsId        = addBusDetails.Id;
                        addReturnJourneyDetails.OriginLocation      = mod.DestinationLocation;
                        addReturnJourneyDetails.DestinationLocation = mod.OriginLocation;
                        addReturnJourneyDetails.IsReturn            = true;
                        db.AvailabilityDetails.Add(addReturnJourneyDetails);
                        db.SaveChanges();
                    }

                    else
                    {
                        BusDetails editedDetails = db.BusDetails.Find(mod.Id);
                        editedDetails.BusCompanyNameId  = mod.CompanyId;
                        editedDetails.BusTypeId         = mod.BusTypeId;
                        editedDetails.NumOfChairSeats   = mod.NumOfChairSeats;
                        editedDetails.NumOfSleeperSeats = mod.NumOfSleeperSeats;
                        editedDetails.BusNumber         = mod.BusNumber;


                        AvailabilityDetails editedAvailDetails = db.AvailabilityDetails.Where(m => m.BusDetailsId == editedDetails.Id).FirstOrDefault();
                        // editedAvailDetails.BusDetailsId = editedDetails.Id;
                        editedAvailDetails.OriginLocation      = mod.OriginLocation;
                        editedAvailDetails.DestinationLocation = mod.DestinationLocation;

                        AvailabilityDetails editReturnJourneyDetails = db.AvailabilityDetails.Where(m => m.BusDetailsId == editedDetails.Id && m.IsReturn == true).FirstOrDefault();
                        editReturnJourneyDetails.OriginLocation      = mod.DestinationLocation;
                        editReturnJourneyDetails.DestinationLocation = mod.OriginLocation;
                        db.SaveChanges();
                    }

                    return(RedirectToAction("Index"));
                }
            }

            catch (Exception ex)
            {
                if (ex.InnerException.InnerException.Message.Contains("Cannot insert duplicate key row"))
                {
                    ModelState.AddModelError("BusNumber", "This bus number is already in use");
                }
            }

            mod.BusCompanyNames      = db.BusCompanyNames.ToList();
            mod.OriginLocations      = db.Locations.ToList();
            mod.DestinationLocations = db.Locations.ToList();
            mod.BusTypes             = db.BusTypes.ToList();
            mod.AvailabilityDetails  = db.AvailabilityDetails.Include("BusDetails").ToList();
            return(View("Index", mod));
        }