|
|
from django.shortcuts import render, redirect
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
from django.http import JsonResponse
|
|
|
import json
|
|
|
from product_directory.models import Product
|
|
|
from .models import Warehouse, StockOperation
|
|
|
from django.http import HttpResponse
|
|
|
|
|
|
def scan_barcode_camera(request):
|
|
|
return render(request, 'scan_barcode.html')
|
|
|
|
|
|
def get_product_by_barcode(request, barcode):
|
|
|
"""
|
|
|
Возвращает информацию о продукте по штрих-коду.
|
|
|
"""
|
|
|
try:
|
|
|
product = Product.objects.get(barcode=barcode)
|
|
|
response_data = {
|
|
|
"name": product.name,
|
|
|
"barcode": product.barcode,
|
|
|
"shelf_life_days": product.shelf_life_days,
|
|
|
"dimensions": product.dimensions,
|
|
|
"unit_of_measure": product.unit_of_measure,
|
|
|
"manufacturer": product.manufacturer,
|
|
|
"category": product.get_category_display(),
|
|
|
"storage_temperature": product.storage_temperature,
|
|
|
"promotion": product.get_promotion_display() if product.promotion else "Нет акции"
|
|
|
}
|
|
|
print(response_data)
|
|
|
return JsonResponse(response_data)
|
|
|
except Product.DoesNotExist:
|
|
|
return JsonResponse({"error": "Продукт с указанным штрих-кодом не найден"}, status=404)
|
|
|
|
|
|
@csrf_exempt
|
|
|
def process_barcode(request):
|
|
|
if request.method == 'POST':
|
|
|
data = json.loads(request.body)
|
|
|
barcode = data.get('barcode')
|
|
|
|
|
|
print(barcode)
|
|
|
|
|
|
# # Логика для обработки штрих-кода
|
|
|
# country_code = int(barcode[:3])
|
|
|
# manufacturer_code = barcode[3:7]
|
|
|
# product_code = barcode[7:12]
|
|
|
# control_digit = barcode[-1]
|
|
|
|
|
|
return get_product_by_barcode(barcode)
|
|
|
return JsonResponse({"error": "Метод не поддерживается"}, status=405)
|
|
|
|
|
|
|
|
|
def dashboard(request):
|
|
|
incoming_count = StockOperation.objects.filter(operation_type='Incoming').count()
|
|
|
outgoing_count = StockOperation.objects.filter(operation_type='Outgoing').count()
|
|
|
transfer_count = StockOperation.objects.filter(operation_type='Transfer').count()
|
|
|
writeoff_count = StockOperation.objects.filter(operation_type='WriteOff').count()
|
|
|
|
|
|
return render(request, 'warehouse/dashboard.html', {
|
|
|
'incoming_count': incoming_count,
|
|
|
'outgoing_count': outgoing_count,
|
|
|
'transfer_count': transfer_count,
|
|
|
'writeoff_count': writeoff_count
|
|
|
})
|
|
|
|
|
|
def warehouses_list(request):
|
|
|
warehouses = Warehouse.objects.all()
|
|
|
return render(request, 'warehouse/warehouses.html', {'warehouses': warehouses})
|
|
|
|
|
|
def operations_list(request):
|
|
|
operations = StockOperation.objects.all()
|
|
|
return render(request, 'warehouse/operations_list.html', {'operations': operations})
|
|
|
|
|
|
def add_warehouse(request):
|
|
|
if request.method == 'POST':
|
|
|
name = request.POST.get('name')
|
|
|
location = request.POST.get('location')
|
|
|
if name and location:
|
|
|
Warehouse.objects.create(name=name, location=location)
|
|
|
return redirect('warehouses')
|
|
|
return HttpResponse("Ошибка: заполните все поля", status=400)
|
|
|
return render(request, 'warehouse/add_warehouse.html') |