Initial checkin
This commit is contained in:
97
app/routes/shift.py
Normal file
97
app/routes/shift.py
Normal 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)
|
||||
Reference in New Issue
Block a user