Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions warehouse_managment/product/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
supplier_product_list,
update_supplier_product,
product_stock_summary,
get_suppliers_for_product,
get_products_for_supplier
)

urlpatterns = [
Expand All @@ -23,8 +25,15 @@

# Supplier product endpoints
path('supplier-products/', supplier_product_list, name='supplier-product-list'),

path('supplier-products/update/', update_supplier_product, name='update-supplier-product'),

# Product count endpoint
path('product-stock-summary/<str:sku_code>/', product_stock_summary),

# GET SupplierIds for a product Id
path('suppliers-by-product', get_suppliers_for_product, name='get-suppliers-for-product'),

# GET Product Ids for a supplier ID
path('products-by-supplier', get_products_for_supplier, name='get-products-for-supplier'),
]
45 changes: 44 additions & 1 deletion warehouse_managment/product/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def category_detail(request, pk):

@api_view(['GET'])
def supplier_product_list(request):

sp = SupplierProduct.objects.all()
serializer = SupplierProductSerializer(sp, many=True)
return Response(serializer.data)
Expand Down Expand Up @@ -95,3 +94,47 @@ def product_stock_summary(request, sku_code):
"product_SKU": product.product_SKU,
"current_stock": float(total_stock)
}, status=status.HTTP_200_OK)


@api_view(['GET'])
def get_suppliers_for_product(request):
product_id = request.query_params.get('product_id')
if not product_id:
return Response({"error": "product_id is required"}, status=400)

supplier_ids = (
SupplierProduct.objects
.filter(product_id=product_id)
.values_list('supplier_id', flat=True)
.distinct()
)

return Response({
"product_id": int(product_id),
"supplier_ids": list(supplier_ids)
})



@api_view(['GET'])
def get_products_for_supplier(request):
supplier_id = request.query_params.get('supplier_id')
if not supplier_id:
return Response({"error": "supplier_id is required"}, status=400)

products = (
SupplierProduct.objects
.filter(supplier_id=supplier_id)
.values('product_id', 'supplier_price')
.distinct()
)

return Response({
"supplier_id": int(supplier_id),
"products": [
{
"product_id": item["product_id"],
"supplier_price": float(item["supplier_price"])
} for item in products
]
})
34 changes: 24 additions & 10 deletions warehouse_managment/warehouse/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,31 +256,45 @@ def get_supplier_products(request, supplier_id):

return Response(result)


@api_view(['GET'])
def get_supplier_product_prices(request):
supplier_id = request.query_params.get('supplier_id')
if not supplier_id:
return Response({"error": "supplier_id required"}, status=400)

connected_warehouses = WarehouseSupplier.objects.filter(
supplier_id=supplier_id
).values_list('warehouse_id', flat=True)

supplier_products = (
SupplierProduct.objects
.filter(supplier_id=supplier_id)
.select_related('product')
.annotate(
product_name=F('product__product_name'),
SKU=F('product__product_SKU')
SKU=F('product__product_SKU'),
)
.values('product_name', 'SKU', 'supplier_price')
)

summary = [
{
"product_name": item['product_name'],
"SKU": item['SKU'],
"supplier_price": float(item['supplier_price']),
}
for item in supplier_products
]
summary = []
for sp in supplier_products:
warehouse_names = (
Warehouse.objects
.filter(
id__in=WarehouseSupplier.objects.filter(supplier_id=supplier_id)
.values_list('warehouse_id', flat=True)
)
.values_list('warehouse_name', flat=True)
.distinct()
)

summary.append({
"product_name": sp.product.product_name,

Copilot AI May 10, 2025

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code assumes sp is a model instance by using sp.product, but supplier_products is constructed with .values(...), resulting in dictionaries. To fix this, either remove the .values() call or access dictionary keys appropriately.

Copilot uses AI. Check for mistakes.
"SKU": sp.product.product_SKU,
"supplier_price": float(sp.supplier_price),
"warehouses": list(warehouse_names),
})

return Response(summary)

Expand Down