97 lines
3.4 KiB
Python
97 lines
3.4 KiB
Python
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) |