205 lines
6.7 KiB
Python
205 lines
6.7 KiB
Python
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, \
|
||
DevicePaymentForm
|
||
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("common/create/income_create.html")
|
||
else:
|
||
form = IncomeForm(instance=income)
|
||
|
||
return render(request, "common/create/income_create.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",
|
||
})
|
||
|
||
|
||
@login_required
|
||
@role_required(["employee"])
|
||
def mark_device_paid(request, pk):
|
||
device = get_object_or_404(Device, pk=pk)
|
||
|
||
# Security check
|
||
if device.district.region != request.user.region:
|
||
return redirect("device_payment_list")
|
||
|
||
if request.method == "POST":
|
||
device.is_paid = True
|
||
device.save()
|
||
|
||
return redirect("device_payment_list")
|
||
|
||
# @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"}
|
||
# ) |