from django.contrib.auth.decorators import login_required from core.apps.accounts.models import User from core.apps.management.forms import DeviceForm, IncomeForm, ExpenseForm, WarehouseForm, UserCreateForm, \ ToyMovementEmployeeForm, ToyMovementForm, ExpenseFormEmployee, ExpenseFormManager, ExpenseFormBusinessman from django.shortcuts import render, redirect, get_object_or_404 from core.apps.management.models import Device, Income, Expense, Warehouse, ToyMovement from django.db import transaction from django.contrib.auth import logout from core.apps.management.decorators import role_required from core.apps.management.forms import UserEditFormBusinessman, UserEditFormManagerToEmployee @login_required @role_required(["manager", "businessman"]) def edit_device(request, pk): device = get_object_or_404(Device, pk=pk) form = DeviceForm(request.POST or None, instance=device, user=request.user) if form.is_valid(): form.save() return redirect("device_list") return render(request, "common/edit/device_edit.html", {"form": form, "title": "Aparatni tahrirlash"}) @login_required @role_required(["manager", "businessman"]) def edit_income(request, pk): income = get_object_or_404(Income, pk=pk) if request.method == "POST": form = IncomeForm(request.POST, instance=income) if form.is_valid(): form.save() return redirect("income_list") else: form = IncomeForm(instance=income) return render(request, "common/edit/income_edit.html", { "form": form, "title": "Kirimni tahrirlash" }) @login_required @role_required(["businessman"]) def edit_expense(request, pk): user = request.user expense = get_object_or_404(Expense, pk=pk) # select form based on role if user.role == "employee": form_class = ExpenseFormEmployee elif user.role == "manager": form_class = ExpenseFormManager else: # businessman or superuser form_class = ExpenseFormBusinessman if request.method == "POST": form = form_class(request.POST, instance=expense) if form.is_valid(): with transaction.atomic(): expense = form.save(commit=False) expense.save() # redirect based on role if user.role == "employee": return redirect("expense_list") elif user.role == "manager": return redirect("expense_list") else: return redirect("expense_list") else: form = form_class(instance=expense) return render(request, "common/edit/expense_edit.html", { "form": form, "title": "Xarajatni tahrirlash", "user_role": user.role }) @login_required @role_required(["businessman"]) def edit_warehouse(request, pk): warehouse = get_object_or_404(Warehouse, pk=pk) form = WarehouseForm(request.POST or None, instance=warehouse) if form.is_valid(): form.save() return redirect("warehouse_list") return render(request, "common/edit/warehouse_edit.html", {"form": form, "title": "Omborni tahrirlash"}) @login_required @role_required(["manager", "businessman"]) def edit_user(request, pk): user = get_object_or_404(User, pk=pk) if request.user.role == "manager" and user.role == "manager": return redirect("user_list") if request.user.role == "businessman": form_class = UserEditFormBusinessman form_kwargs = {} redirect_to = "user_list" else: # manager form_class = UserEditFormManagerToEmployee form_kwargs = {"manager": request.user} redirect_to = "user_list" form = form_class( request.POST or None, instance=user, **form_kwargs ) if form.is_valid(): form.save() # if user edited himself → logout → normal login if request.user.pk == user.pk: logout(request) return redirect("login") return redirect(redirect_to) return render(request, "common/edit/user_edit.html", { "form": form, "title": "Foydalanuvchini tahrirlash", }) # @role_required(["businessman"]) # @login_required # def edit_toy_movement(request, pk): # movement = get_object_or_404(ToyMovement, pk=pk) # user = request.user # # # auto-detect form based on role # if user.role == "employee": # form_class = ToyMovementEmployeeForm # else: # form_class = ToyMovementForm # # if request.method == "POST": # form = form_class(request.POST, instance=movement) # if form.is_valid(): # with transaction.atomic(): # movement = form.save(commit=False) # # # Employee logic # if user.role == "employee": # movement.movement_type = ToyMovement.FROM_WAREHOUSE # movement.to_warehouse = None # # # Stock validation # from_wh = movement.from_warehouse # if from_wh.toys_count < movement.quantity: # form.add_error("quantity", "Not enough toys in warehouse.") # return render( # request, # "common/toy_movement_edit.html", # {"form": form, "user_role": user.role, "title": "Oʻyinchoq harakatini tahrirlash"} # ) # # # Update counts # from_wh.toys_count -= movement.quantity # from_wh.save() # # if movement.device: # movement.device.toys_count += movement.quantity # movement.device.save() # # movement.created_by = user # movement.save() # # # role-based redirect # if user.role == "employee": # return redirect("employee_dashboard") # elif user.role == "manager": # return redirect("manager_dashboard") # elif user.role == "businessman": # return redirect("businessman_dashboard") # else: # return redirect("login") # else: # form = form_class(instance=movement) # # return render( # request, # "common/toy_movement_edit.html", # {"form": form, "user_role": user.role, "title": "Oʻyinchoq harakatini tahrirlash"} # )