El siguiente trabajo es un enunciado iterativo. Todas las semanas nuevos requerimientos serán agregados y/o modificados para ilustrar la dinámica de desarrollo de software.
Escribir un programa con programación orientada a objetos que permita ilustrar el funcionamiento del transporte urbano de pasajeros de la ciudad de rosario.
Las clases que interactuan en la simulación son: Colectivo, Tarjeta y Boleto.
Cuando un usuario viaja en colectivo con una tarjeta, obtiene un boleto como resultado de la operación $coletivo->pagarCon($tarjeta);
Para esta iteracion se consideran los siguientes supuestos:
Se pide:
Para instalar el codigo inicial clonar el repositorio y luego ejecutar:
composer install
En caso de no contar con composer instalado, descargarlo desde: https://getcomposer.org/
Para correr los tests:
./vendor/bin/phpunit
Si se agregan nuevas clases al código tal vez sea necesario correr:
composer dump-autoload
Para esta iteración hay 3 tareas principales. Crear un issue en github copiando la descripción de cada tarea y completar cada uno en una rama diferente. Éstas serán mergeadas al validar, luego de una revisión cruzada (de ambos integrantes del grupo), que todo el código tiene sentido y está correctamente implementado.
No es necesario que todo el código para un issue esté funcionando al 100% antes de mergiarlo, pueden crear pull requests que solucionen algún item particular del problema para avanzar más rápido.
Además de las tareas planteadas, cada grupo tiene tareas pendientes de la iteración anterior que debe finalizar antes de comenzar con la iteración 2. Cuando la iteración 1 este completada, crear un tag llamado iteracion1: Y subirlo a github
IMPORTANTE: Como punto de control, alguna de estas dos funcionalidades: "Viaje plus" o "Franquicia de Boleto" tiene que estar lista para revisar a mitad de la iteración. (21 de Agosto).
$colectivo->pagarCon($tarjeta)
devuelve FALSE,Escribir un test que valide que el monto del boleto pagado con medio boleto es siempre la mitad del normal.
Al igual que la iteración anterior, se pide mantener la mecánica de trabajo para ir añadiendo las nuevas funcionalidades y/o modificaciones (issue, una rama específica para cada tarea y finalmente el mergeo cuando todo funcione correctamente..., etc.)
En esta iteración daremos una introducción a la manipulación de fechas y horarios. Éstos serán necesarios en esta oportunidad para realizar las modificaciones pedidas. Consultar este video para conocer más sobre el manejo de fechas y horas en PHP: https://www.youtube.com/watch?v=dVRl1kqxdwY
La clase boleto tendrá nuevos métodos que permitan conocer: (Fecha, tipo de tarjeta, línea de colectivo, total abonado, saldo e ID de la tarjeta. Recordar que el tipo de boleto (Normal, Viaje Plus) de los boletos indican si se hizo un viaje plus o no
Además el boleto tiene una descripcion extra indicando si se canceló viaje plus con el pago de este boleto (Ejemplo: Abona viajes plus 29.63 y).
Deben crearse los atributos faltantes de las correspondientes clases, si los hubiere. Considerar la siguiente imagen para entender las posibles variaciones de un boleto:
Escribir los tests correspondientes a los posibles tipos de boletos a obtener según el tipo de tarjeta.
Para evitar el uso de una tarjeta de tipo medio boleto en más de una persona en el mismo viaje se pide que:
Cuando se realiza un trasbordo, el 2º viaje se cancela a un 33% de la tarifa vigente:
Se pueden abonar solamente con las tarjetas y se pueden realizar todos los días del año durante las 24 hs, exceptuando la misma línea y bandera, teniendo en cuenta tiempos máximos para realizarlos por franja horaria:
Sólo se permite 1 trasbordo por tarjeta en cada viaje.
Acercando la tarjeta se cancela el viaje emitiendo un boleto impreso con la palabra "trasbordo". No se efectiviza el trasbordo con la cancelación del pasaje plus.