Files
xvatayka/core/apps/management/views/common/edit.py
Abdulaziz Axmadaliyev 3691e2d068 Initial commit
2026-02-17 19:05:54 +05:00

205 lines
6.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"}
# )