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/') 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/', 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//vehicles/', 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//vehicles/', 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//vehicles//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//vehicles/', 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)