from flask import request, jsonify from flask_login import current_user, login_required from app.service import service from app import db from datetime import datetime from app.classes.auth import Auth_User from app.classes.customer import Customer_Customer from app.classes.service import (Service_Call, Service_Call_schema, Service_Call_Notes_Dispatcher, Service_Call_Notes_Technician, Service_Call_Notes_Dispatcher_schema, ) from app.classes.cards import Card_Card from app.classes.employee import Employee_Employee @service.route("/", methods=["GET"]) @login_required def get_specific_service_call(service_id): service_call = db.session \ .query(Service_Call) \ .filter(Service_Call.id == service_id) \ .first() service_schema = Service_Call_schema(many=False) return jsonify(service_schema.dump(service_call)) @service.route("/paymenttype//", methods=["PUT"]) def update_a_service_payment(service_id, type_of_payment): """ This update a delivery for example if user updates to a fill """ service_call = (db.session .query(Service_Call) .filter(Service_Call.id == service_id) .first()) service_call.payment_type = type_of_payment db.session.add(service_call) db.session.commit() return jsonify({"ok": True}), 200 @service.route("/call/notes/", methods=["GET"]) @login_required def get_service_notes_call(service_id): service_call = db.session \ .query(Service_Call_Notes_Dispatcher) \ .filter(Service_Call_Notes_Dispatcher.service_call_id == service_id) \ .first() service_schema = Service_Call_Notes_Dispatcher_schema(many=False) return jsonify(service_schema.dump(service_call)) @service.route("/all", methods=["GET"]) def service_view_all(): """ Get all service calls """ service_calls = db.session \ .query(Service_Call) \ .filter(Service_Call.completed == 0) \ .order_by(Service_Call.when_called.desc()) \ .all() customer_schema = Service_Call_schema(many=True) return jsonify(customer_schema.dump(service_calls)) @service.route("/all/", methods=["GET"]) def service_view(page): """ Get all service calls """ per_page_amount = 50 if page is None: offset_limit = 0 elif page == 1: offset_limit = 0 else: offset_limit = (per_page_amount * page) - per_page_amount service_calls = db.session \ .query(Service_Call) \ .filter(Service_Call.completed == 0) \ .order_by(Service_Call.when_called.desc()) \ .limit(per_page_amount).offset(offset_limit) customer_schema = Service_Call_schema(many=True) return jsonify(customer_schema.dump(service_calls)) @service.route("/customer//", methods=["GET"]) def service_customer_view(customer_id, page): """ Get all service calls """ per_page_amount = 50 if page is None: offset_limit = 0 elif page == 1: offset_limit = 0 else: offset_limit = (per_page_amount * page) - per_page_amount service_calls = db.session \ .query(Service_Call) \ .filter(Service_Call.customer_id == customer_id) \ .order_by(Service_Call.id.desc()) \ .limit(per_page_amount).offset(offset_limit) customer_schema = Service_Call_schema(many=True) return jsonify(customer_schema.dump(service_calls)) @service.route("/create/", methods=["POST"]) def service_create_call(user_id): """ create a service call """ now = datetime.utcnow() get_customer = db.session \ .query(Customer_Customer) \ .filter(Customer_Customer.id == user_id) \ .first() print(request.json) get_service_type = request.json["type_of_service"] service_note = request.json["dispatcher_notes_taken"] service_subject = request.json["dispatcher_subject_taken"] scheduled_date_date = request.json["date_scheduled"] dispatcher_id = request.json["dispatcher_id"] card_payment = request.json["credit"] cash_payment = request.json["cash"] try: if request.json["credit_card_id"]: card_payment_id = request.json["credit_card_id"] else: card_payment_id = None except: card_payment_id = None if cash_payment is True and card_payment is False: delivery_payment_method = 0 elif card_payment is True and cash_payment is False: delivery_payment_method = 1 elif card_payment is True and cash_payment is True: delivery_payment_method = 2 else: delivery_payment_method = 3 if card_payment_id is not None: get_card = (db.session .query(Card_Card) .filter(Card_Card.id == card_payment_id) .filter(Card_Card.user_id == get_customer.id) .first()) card_id_from_customer = get_card.id else: card_id_from_customer = None date_object = datetime.strptime(scheduled_date_date, '%Y-%m-%d').date() get_tech = (db.session .query(Employee_Employee) .first()) create_a_call = Service_Call( customer_id=get_customer.id, customer_last_name=get_customer.customer_last_name, customer_first_name=get_customer.customer_first_name, customer_town=get_customer.customer_town, customer_state=get_customer.customer_state, customer_zip=get_customer.customer_zip, customer_apt=get_customer.customer_apt, customer_address=get_customer.customer_address, status=0, service_type=get_service_type, when_called=now, scheduled_date=date_object, when_serviced=None, tech_id=get_tech.id, tech_first_name=get_tech.employee_first_name, tech_last_name=get_tech.employee_last_name, completed=0, payment_type=delivery_payment_method, payment_card_id=card_id_from_customer, ) db.session.add(create_a_call) db.session.flush() create_new_note = Service_Call_Notes_Dispatcher( service_call_id=create_a_call.id, dispatcher_subject=service_subject, dispatcher_notes=service_note, time_added=now, dispatcher_id=dispatcher_id, dispatcher_name=None, ) db.session.add(create_new_note) db.session.commit() db.session.commit() return jsonify({"ok": True, 'user_id': get_customer.id, 'service_id': create_a_call.id, }), 200 @service.route("/delete/", methods=["DELETE"]) def service_delete_call(service_id): """ delete a service call """ get_call_to_delete = (db.session .query(Service_Call) .filter(Service_Call.id == service_id) .first()) db.session.delete(get_call_to_delete) db.session.commit() return jsonify({"ok": True}), 200 @service.route("/edit/", methods=["PUT"]) def service_edit_call(service_id): """ Update a service call """ get_service_type = request.json["type_of_service"] scheduled_date_date = request.json["date_scheduled"] dispatcher_subject_taken = request.json["dispatcher_subject_taken"] dispatcher_notes_taken = request.json["dispatcher_notes_taken"] tech_id = request.json["tech_id"] card_payment = request.json["credit"] cash_payment = request.json["cash"] if request.json["credit_card_id"]: card_payment_id = request.json["credit_card_id"] else: card_payment_id = None get_tech = db.session \ .query(Employee_Employee) \ .filter(Employee_Employee.id == tech_id) \ .first() get_service_call_call = db.session \ .query(Service_Call) \ .filter(Service_Call.id == service_id) \ .first() if card_payment_id is not None: get_customer = db.session \ .query(Customer_Customer) \ .filter(Customer_Customer.id == get_service_call_call.customer_id) \ .first() get_card = (db.session .query(Card_Card) .filter(Card_Card.id == card_payment_id) .filter(Card_Card.user_id == get_customer.id) .first()) card_id_from_customer = get_card.id else: card_id_from_customer = None if cash_payment is True and card_payment is False: delivery_payment_method = 0 elif card_payment is True and cash_payment is False: delivery_payment_method = 1 elif card_payment is True and cash_payment is True: delivery_payment_method = 2 else: delivery_payment_method = 3 get_service_call_notes = (db.session .query(Service_Call_Notes_Dispatcher) .filter(Service_Call_Notes_Dispatcher.service_call_id == get_service_call_call.id) .first()) get_service_call_notes.dispatcher_subject = dispatcher_subject_taken get_service_call_notes.dispatcher_notes = dispatcher_notes_taken get_service_call_call.service_type = get_service_type get_service_call_call.scheduled_date = scheduled_date_date get_service_call_call.tech_id = get_tech.id get_service_call_call.payment_type = delivery_payment_method get_service_call_call.payment_card_id = card_id_from_customer db.session.add(get_service_call_call) db.session.commit() return jsonify({"ok": True}), 200 @service.route("/update/type/", methods=["PUT"]) def service_update_service_type(service_id): """ Update a service call diagnosis """ get_service_type = request.json["service_type"] get_service_call = db.session \ .query(Service_Call) \ .filter(Service_Call.service_id == service_id) \ .first() get_service_call.service_type = get_service_type db.session.add(get_service_call) db.session.commit() return jsonify({"ok": True}), 200 @service.route("/note/dispatcher/", methods=["PUT"]) def service_create_note_dispatcher(service_id): """ Initial dispatcher note about the call """ service_note = request.json["dispatcher_text"] now = datetime.utcnow() user = db.session \ .query(Auth_User) \ .filter(Auth_User.id == current_user.id) \ .first() get_service_call_order = db.session \ .query(Service_Call) \ .filter(Service_Call.service_id == service_id) \ .first() create_new_note = Service_Call_Notes_Dispatcher( service_call_id=get_service_call_order.id, dispatcher_notes=service_note, time_added=now, dispatcher_id=user.id, dispatcher_name=user.username, ) db.session.add(create_new_note) db.session.commit() return jsonify({"ok": True}), 200 @service.route("/note/technician/", methods=["PUT"]) def service_create_note_technician(service_id): """ Technician can create notes on the call """ service_technician_notes = request.json["technician_comments"] now = datetime.utcnow() user = db.session \ .query(Auth_User) \ .filter(Auth_User.id == current_user.id) \ .first() get_service_call = db.session \ .query(Service_Call) \ .filter(Service_Call.service_id == service_id) \ .first() create_new_note = Service_Call_Notes_Technician( service_call_id=get_service_call.id, technician_comments=service_technician_notes, time_added=now, technician_id=user.id, technician_name=user.username, ) db.session.add(create_new_note) db.session.commit() return jsonify({"ok": True}), 200