from flask import Blueprint, render_template, redirect, url_for, session, flash from .models import DeliveryOrder main = Blueprint('main', __name__) @main.route('/') def home(): return """

DO Tracker Online

Login as Store

Store Dashboard

""" @main.route('/store') def store_dashboard(): if 'store_id' not in session: flash("You must be logged in to access the store dashboard.", "warning") return redirect(url_for('auth.login')) store_name = session.get('store_name') return f"""

Welcome, {store_name}

Logout

""" from flask import request from .models import DeliveryOrder, Store from . import db @main.route('/store/do-entry', methods=['GET', 'POST']) def do_entry(): if 'store_id' not in session: return redirect(url_for('auth.login')) stores = Store.query.order_by(Store.name).all() if request.method == 'POST': do_number = request.form.get('do_number') delivery_number = request.form.get('delivery_number') final_location = int(request.form.get('final_location')) created_by = session.get('store_name') # Prevent duplicate DO numbers existing = DeliveryOrder.query.filter_by(do_number=do_number).first() if existing: flash("DO already exists!", "danger") return redirect(url_for('main.do_entry')) new_do = DeliveryOrder( do_number=do_number, delivery_number=delivery_number, final_location=final_location, created_by=created_by, status="Ready for Collection" ) db.session.add(new_do) db.session.commit() flash("DO created successfully.", "success") return redirect(url_for('main.store_dashboard')) return render_template("do_entry.html", stores=stores) @main.route('/store/track', methods=['GET', 'POST']) def track_do(): if 'store_id' not in session: return redirect(url_for('auth.login')) do = None movements = [] if request.method == 'POST': search = request.form.get('search') do = DeliveryOrder.query.filter( (DeliveryOrder.do_number == search) | (DeliveryOrder.delivery_number == search) ).first() if do: movements = do.movements return render_template('track_do.html', do=do, movements=movements) from datetime import datetime from .models import Movement @main.route('/store/move', methods=['GET', 'POST']) def move_do(): if 'store_id' not in session: return redirect(url_for('auth.login')) message = None if request.method == 'POST': search = request.form.get('do_search') do = DeliveryOrder.query.filter( (DeliveryOrder.do_number == search) | (DeliveryOrder.delivery_number == search) ).first() if not do: flash("DO not found", "danger") return redirect(url_for('main.move_do')) handled_by = request.form.get('handled_by') comment = request.form.get('comment') mark_departed = request.form.get('departed') branch_id = session.get('store_id') # Check if this store has already logged a movement existing = Movement.query.filter_by(do_id=do.id, branch_id=branch_id).first() if not existing: # First time it arrived at this store move = Movement( do_id=do.id, branch_id=branch_id, handled_by=handled_by, comment=comment ) db.session.add(move) else: # Already exists → optionally mark departure if mark_departed == "on" and not existing.departed_at: existing.departed_at = datetime.utcnow() existing.comment = (existing.comment or '') + f" | {comment}" db.session.commit() flash("Movement updated successfully.", "success") return redirect(url_for('main.track_do')) return render_template("move_do.html") @main.route('/store/complete/', methods=['POST']) def mark_completed(do_id): if 'store_id' not in session: return redirect(url_for('auth.login')) do = DeliveryOrder.query.get_or_404(do_id) # Ensure only the final destination can mark complete if session['store_id'] != do.final_location: flash("You are not authorized to mark this DO as completed.", "danger") return redirect(url_for('main.track_do')) do.status = "Completed" db.session.commit() flash("DO marked as completed.", "success") return redirect(url_for('main.track_do'))