public void PagarBoletoComun()
        {
            Colectivo colectivo1 = new Colectivo("142", "Semtur", 1);
            Colectivo colectivo2 = new Colectivo("143", "Mixta", 1);
            Colectivo colectivo3 = new Colectivo("144", "Mixta", 1);

            Tarjeta tarjeta1 = new Tarjeta(false);
            Tarjeta tarjeta2 = new Tarjeta(true);

            //Tarjeta 1
            //Viaje no concretado por falta de fondos
            Assert.AreEqual(false, tarjeta1.PagarBoleto(colectivo1, DateTime.Now.AddHours(-8)));
            tarjeta1.RecargarSaldo(200);
            //Boleto comun
            Assert.AreEqual(true,tarjeta1.PagarBoleto(colectivo1, DateTime.Now.AddHours(-2)));
            Assert.AreEqual(228.25, tarjeta1.Saldo);
            //Boleto comun
            Assert.AreEqual(true,tarjeta1.PagarBoleto(colectivo2, DateTime.Now.AddMinutes(-30)));
            Assert.AreEqual(222.5, tarjeta1.Saldo);
            //Transbordo comun (diferente colectivo en menos de una hora)
            Assert.AreEqual(true,tarjeta1.PagarBoleto(colectivo3, DateTime.Now.AddMinutes(-10)));
            Assert.AreEqual(220.6, tarjeta1.Saldo);
            //Boleto comun (diferente colectivo en menos de una hora pero con transbordo ya usado)
            Assert.AreEqual(true,tarjeta1.PagarBoleto(colectivo1, DateTime.Now.AddMinutes(-1)));
            Assert.AreEqual(214.85, tarjeta1.Saldo);
            //Boleto comun (mismo colectivo en menos de una hora)
            Assert.AreEqual(true,tarjeta1.PagarBoleto(colectivo1, DateTime.Now));
            Assert.AreEqual(209.1, tarjeta1.Saldo);

            Assert.AreEqual(5, tarjeta1.ViajesTotal());
        }
        public void PagarMedioBoleto()
        {
            Colectivo colectivo1 = new Colectivo("142", "Semtur", 1);
            Colectivo colectivo2 = new Colectivo("143", "Mixta", 1);
            Colectivo colectivo3 = new Colectivo("144", "Mixta", 1);

            Tarjeta tarjeta1 = new Tarjeta(false);
            Tarjeta tarjeta2 = new Tarjeta(true);

            var temprano = new DateTime(2015, 11, 24, 3, 0, 0);

            //Tarjeta 2
            //Viaje no concretado por falta de fondos
            Assert.AreEqual(false, tarjeta2.PagarBoleto(colectivo1, DateTime.Now.AddHours(-8)));
            //
            tarjeta2.RecargarSaldo(200);
            //Medio Boleto
            Assert.AreEqual(true, tarjeta2.PagarBoleto(colectivo1, temprano));
            Assert.AreEqual(228.25, tarjeta2.Saldo);
            //Medio Boleto
            Assert.AreEqual(true, tarjeta2.PagarBoleto(colectivo1, DateTime.Now.AddHours(-2)));
            Assert.AreEqual(226.35, tarjeta2.Saldo);
            //Transbordo medio boleto
            Assert.AreEqual(true, tarjeta2.PagarBoleto(colectivo2, DateTime.Now.AddHours(-2)));
            Assert.AreEqual(225.39, tarjeta2.Saldo);
            //Medio Boleto (diferente colectivo en menos de una hora pero con transbordo ya usado)
            Assert.AreEqual(true, tarjeta2.PagarBoleto(colectivo3, DateTime.Now.AddHours(-1).AddMinutes(-30)));
            Assert.AreEqual((decimal)223.49, (decimal)tarjeta2.Saldo);
            //Medio Boleto (mismo colectivo en menos de una hora)
            Assert.AreEqual(true, tarjeta2.PagarBoleto(colectivo3, DateTime.Now.AddHours(-1)));
            Assert.AreEqual((decimal)221.59, (decimal)tarjeta2.Saldo);

            Assert.AreEqual(5, tarjeta2.ViajesTotal());
        }
        public void MedioBoleto()
        {
            Colectivo colectivo1 = new Colectivo("142", "Semtur", 1);
            Colectivo colectivo2 = new Colectivo("143", "Mixta", 1);
            Colectivo colectivo3 = new Colectivo("144", "Mixta", 1);

            Tarjeta tarjeta1 = new Tarjeta(false);
            Tarjeta tarjeta2 = new Tarjeta(true);

            Assert.AreEqual(false, tarjeta1.MedioBoleto);
            Assert.AreEqual(true, tarjeta2.MedioBoleto);
        }
 public bool PagarBoleto(Colectivo Colectivo, DateTime FechaHoraViaje)
 {
     if (viajes != null && viajes.Count() > 0)
     {
         var ultimoViaje = viajes.OrderBy(v => v.Fecha.Date).Last();
         TimeSpan diferenciaViajes = FechaHoraViaje - ultimoViaje.Fecha;
         if (ultimoViaje.ColectivoLinea != Colectivo.Linea && diferenciaViajes.TotalMinutes <= 60 && Transbordo)
         {
             if (MedioBoleto && 6 <= FechaHoraViaje.Hour && FechaHoraViaje.Hour <= 24)
             {
                 /*Transbordo Medio Boleto*/
                 if (Saldo >= 0.96)
                 {
                     Saldo -= 0.96;
                     Transbordo = false;
                     Viaje viaje = new Viaje(FechaHoraViaje, Colectivo.Linea, Colectivo.Empresa, 0.96);
                     viajes.Add(viaje);
                     return true;
                 }
                 else { return false; }
             }
             else
             {
                 /*Transbordo Comun*/
                 if (Saldo >= 1.90)
                 {
                     Saldo -= 1.90;
                     Transbordo = false;
                     Viaje viaje = new Viaje(FechaHoraViaje, Colectivo.Linea, Colectivo.Empresa, 1.90);
                     viajes.Add(viaje);
                     return true;
                 }
                 else { return false; }
             }
         }
     }
     if (MedioBoleto && 6 <= FechaHoraViaje.Hour && FechaHoraViaje.Hour <= 24)
     {
         /*Medio Boleto*/
         if (Saldo >= 1.90)
         {
             Saldo -= 1.90;
             Transbordo = true;
             Viaje viaje = new Viaje(FechaHoraViaje, Colectivo.Linea, Colectivo.Empresa, 1.90);
             viajes.Add(viaje);
             return true;
         }
         else
         {
             return false;
         }
     }
     else
     {
         /*Boleto Comun*/
         if (Saldo >= 5.75)
         {
             Saldo -= 5.75;
             Transbordo = true;
             Viaje viaje = new Viaje(FechaHoraViaje, Colectivo.Linea, Colectivo.Empresa, 5.75);
             viajes.Add(viaje);
             return true;
         }
         else
         {
             return false;
         }
     }
 }