|
|
|
|
|
from flask import request, jsonify |
|
from models.schemas.inventory_schema import create_inventory_item, update_inventory_item, get_inventory_item_by_id, \ |
|
get_all_inventory_items |
|
from controllers.data_logging import log_inventory_addition, log_inventory_update |
|
|
|
|
|
|
|
def add_inventory_item(): |
|
""" |
|
Adds a new inventory item to the system. |
|
|
|
Expects: |
|
- user_id: The ID of the user adding the item. |
|
- item_name: Name of the inventory item. |
|
- category: Category of the item (e.g., "Feed", "Medicine"). |
|
- quantity: Total quantity of the item. |
|
- unit: Unit of measurement (e.g., "kg", "liters"). |
|
- description: Optional. Additional notes or description about the item. |
|
|
|
Returns: |
|
- JSON response with the result of the addition. |
|
""" |
|
try: |
|
|
|
user_id = request.json.get('user_id') |
|
item_name = request.json.get('item_name') |
|
category = request.json.get('category') |
|
quantity = request.json.get('quantity') |
|
unit = request.json.get('unit') |
|
description = request.json.get('description') |
|
|
|
if not user_id or not item_name or not category or not quantity or not unit: |
|
return jsonify({"error": "Missing required fields"}), 400 |
|
|
|
|
|
item_id = create_inventory_item(item_name, category, quantity, unit, user_id, description) |
|
|
|
|
|
log_inventory_addition(user_id, item_name, category, quantity, unit, description) |
|
|
|
return jsonify({"message": "Inventory item added successfully", "item_id": item_id}), 201 |
|
|
|
except Exception as e: |
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
def update_inventory_item_by_id(): |
|
""" |
|
Updates an existing inventory item. |
|
|
|
Expects: |
|
- user_id: The ID of the user updating the item. |
|
- item_id: The ID of the inventory item to update. |
|
- updated_fields: Dictionary containing fields to update (e.g., "quantity", "used_quantity"). |
|
|
|
Returns: |
|
- JSON response with the result of the update. |
|
""" |
|
try: |
|
|
|
user_id = request.json.get('user_id') |
|
item_id = request.json.get('item_id') |
|
updated_fields = request.json.get('updated_fields') |
|
|
|
if not user_id or not item_id or not updated_fields: |
|
return jsonify({"error": "Missing required fields"}), 400 |
|
|
|
|
|
update_success = update_inventory_item(item_id, updated_fields) |
|
if update_success: |
|
|
|
log_inventory_update(user_id, item_id, updated_fields) |
|
return jsonify({"message": "Inventory item updated successfully"}), 200 |
|
else: |
|
return jsonify({"message": "Inventory item update failed"}), 400 |
|
|
|
except Exception as e: |
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
def get_inventory_by_id(item_id): |
|
""" |
|
Retrieves an inventory item by its item_id (MongoDB ObjectId). |
|
|
|
Expects: |
|
- item_id: ID of the inventory item. |
|
|
|
Returns: |
|
- JSON response with the inventory item details. |
|
""" |
|
try: |
|
inventory_item = get_inventory_item_by_id(item_id) |
|
if not inventory_item: |
|
return jsonify({"message": "Inventory item not found"}), 404 |
|
|
|
return jsonify(inventory_item), 200 |
|
|
|
except Exception as e: |
|
return jsonify({"error": str(e)}), 500 |
|
|
|
|
|
|
|
def get_all_inventory(): |
|
""" |
|
Retrieves all inventory items. |
|
|
|
Returns: |
|
- JSON response with the list of all inventory items. |
|
""" |
|
try: |
|
inventory_items = get_all_inventory_items() |
|
if not inventory_items: |
|
return jsonify({"message": "No inventory items found"}), 404 |
|
|
|
return jsonify(inventory_items), 200 |
|
|
|
except Exception as e: |
|
return jsonify({"error": str(e)}), 500 |
|
|