Initial checkin

This commit is contained in:
2023-05-18 18:21:00 -04:00
commit 1c64f16aef
21 changed files with 1020 additions and 0 deletions

97
app/routes/shift.py Normal file
View File

@@ -0,0 +1,97 @@
from flask import Blueprint, request, render_template_string
from app.extensions import db
from app.models.shift import Shift, ShiftSchema
from app.models.battery_change import BatteryChange, BatteryChangeSchema
shift_routes = Blueprint('shift_routes', __name__)
@shift_routes.route('/shifts')
def list_shifts():
shift_schema = ShiftSchema(many=True)
shifts = Shift.query.all()
return shift_schema.dumps(shifts)
@shift_routes.route('/shifts/<id>')
def get_shift(id):
shift_schema = ShiftSchema(many=False)
shift = Shift.query.get_or_404(id)
return shift_schema.dumps(shift)
@shift_routes.route('/shifts', methods=['POST'])
def create_shift():
new_shift = Shift()
if request.form.get('vehicles'):
vehicle_ids = [int(i) for i in request.form.get('vehicles').split(',')]
for id in vehicle_ids:
new_change = BatteryChange(**{
"shift_id": new_shift.id,
"vehicle_id": id
})
new_shift.battery_changes.append(new_change)
db.session.add(new_shift)
db.session.commit()
shift_schema = ShiftSchema(many=False)
return shift_schema.dumps(new_shift)
@shift_routes.route('/shifts/<id>', methods=['DELETE'])
def delete_shift(id):
shift = Shift.query.get_or_404(id)
for change in shift.battery_changes:
db.session.delete(change)
db.session.commit()
db.session.delete(shift)
db.session.commit()
return id
@shift_routes.route('/shifts/<shift_id>/vehicles/<vehicle_id>', methods=['GET'])
def get_vehicle_in_shift(shift_id, vehicle_id):
shift = Shift.query.get_or_404(shift_id)
for change in shift.battery_changes:
if change.vehicle_id == int(vehicle_id):
change_schema = BatteryChangeSchema(many=False)
return change_schema.dumps(change)
return 'No vehicle found with id %s in shift %s' % (vehicle_id, shift_id), 404
@shift_routes.route('/shifts/<shift_id>/vehicles/<vehicle_id>', methods=['POST'])
def add_vehicle_to_shift(shift_id, vehicle_id):
shift_schema = ShiftSchema(many=False)
shift = Shift.query.get_or_404(shift_id)
shift.battery_changes.append(BatteryChange**{
'shift_id': shift.id,
'vehicle_id': vehicle_id
})
db.session.commit()
return shift_schema.dumps(shift)
@shift_routes.route('/shifts/<shift_id>/vehicles/<vehicle_id>/completed', methods=['POST'])
def complete_vehicle_in_shift(shift_id, vehicle_id):
shift_schema = ShiftSchema(many=False)
shift = Shift.query.get_or_404(shift_id)
for change in shift.battery_changes:
if int(change.vehicle_id) == int(vehicle_id):
change.completed = True
db.session.commit()
return shift_schema.dumps(shift)
return 'Vehicle not found', 404
@shift_routes.route('/shifts/<shift_id>/vehicles/<vehicle_id>', methods=['DELETE'])
def remove_vehicle_from_shift(shift_id, vehicle_id):
shift_schema = ShiftSchema(many=False)
shift = Shift.query.get_or_404(shift_id)
delete_me = []
keep_me = []
for change in shift.battery_changes:
if int(change.vehicle_id) == int(vehicle_id):
delete_me.append(change)
else:
keep_me.append(change)
if not delete_me: return 'No vehicles found with id %s' % vehicle_id, 404
shift.battery_changes = keep_me
for change in delete_me:
db.session.delete(change)
db.session.commit()
return shift_schema.dumps(shift)