Version 1.0

This commit is contained in:
2024-10-09 21:10:49 +02:00
commit 03efc31923
620 changed files with 67495 additions and 0 deletions

View File

@@ -0,0 +1,131 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
import csv
from datetime import datetime
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import CSVUpdateForm
from ..models import Computer, Accessory, Student, Course, Record, Ticket
from django.contrib.auth.decorators import user_passes_test, login_required
# Create your views here.
@login_required
def index(request):
if request.user.is_superuser or request.user.is_staff:
computers_available_count = Computer.objects.filter(status="in_stock").count()
accessories_available_count = Accessory.objects.filter(status="in_stock").count()
if request.method == "GET":
return render(request, "gestionale/index.html",{
"computers_available_count": computers_available_count,
"accessories_available_count": accessories_available_count
})
else:
return bad_request
else:
return redirect("studentview")
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def import_students(request):
if request.method == "POST":
form = CSVUpdateForm(request.POST, request.FILES)
if form.is_valid():
csv_file = request.FILES["file"]
if not csv_file.name.endswith(".csv"):
form = CSVUpdateForm()
err = True
return render(request, "gestionale/importstudents.html", {
"err": err, "form": form
})
try:
record = Record()
record.date = datetime.now().date()
record.action = "import"
record.product = "students"
record.product_detail = csv_file
record.user = request.user
record.save()
csv_data = csv_file.read().decode("utf-8").splitlines()
reader = csv.DictReader(csv_data)
for row in reader:
course = get_object_or_404(Course, course_code=row["Codice Corso"])
birth_date = datetime.strptime(row["DataNascita"], "%d/%m/%Y")
student = Student()
student.id_student_course = row["IDAllievoCorso"]
student.codice_fiscale = row["CodiceFiscale"]
student.course_acronym = row["SiglaCorso"]
student.last_name = row["Cognome"]
student.first_name = row["Nome"]
student.email_user = row["EmailUser"]
student.phone_number = row["Tel"]
student.municipality_residence = row["ComuneRes"]
student.province_residence = row["ProvRes"]
student.student_status = row["StatoAllievo"]
student.birth_date = birth_date
student.municipality_birth = row["ComuneNascita"]
student.province_birth = row["ProvNascita"]
student.resignation_date = None if row["DataDimissioni"]=="" else row["DataDimissioni"]
student.gender = row["Genere"]
student.nation_birth = row["NazioneNasc"]
student.course_id = course
student.save()
except Exception as e:
form = CSVUpdateForm()
err = True
return render(request, "gestionale/importstudents.html", {
"err": err, "form": form, "e": e
})
return redirect('import_students')
else:
form = CSVUpdateForm()
err = True
return render(request, "gestionale/importstudents.html", {
"err": err, "form": form
})
else:
form = CSVUpdateForm()
return render(request, "gestionale/importstudents.html", {
"form": form
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff )
def toggle_course(request, id):
course = get_object_or_404(Course, id=id)
if request.method == "POST":
course.course_status = not course.course_status
course.save()
return redirect("courses")
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff )
def take_ticket(request, id):
ticket = get_object_or_404(Ticket, id=id)
if request.method == "POST":
record = Record()
ticket_copy = copy.deepcopy(ticket)
ticket.id_user_in_charge = request.user
ticket.save()
record.date = datetime.now().date()
record.action = "take"
record.product = "ticket"
record.product_detail = ticket
record.prev_product_detail = ticket_copy
record.user = request.user
record.save()
return redirect("tickets")
else:
return bad_request

View File

@@ -0,0 +1,229 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from datetime import datetime
from django.contrib.auth.decorators import user_passes_test
from django.core.exceptions import ValidationError
from django.shortcuts import get_object_or_404, render, redirect
from ..models import Bundle, Student, Supplier, Computer, Accessory, Record, Ticket
from ..forms import BundleForm, SupplierForm, SerialFormSet, AccessoryForm, CourseForm, TicketForm
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_bundle(request):
if request.method == "POST":
form = BundleForm(request.POST)
if form.is_valid():
record = Record()
form = form.cleaned_data
bundle = Bundle()
bundle.product_type = form["product_type"]
bundle.product_name = form["product_name"]
bundle.qt = form["qt"]
bundle.qt_available = form["qt_available"]
bundle.notes = form["notes"]
bundle.brand = form["brand"]
bundle.line = form["line"]
if form["product_type"] == "Computer":
bundle.cpu = form["cpu"]
bundle.ram = form["ram"]
bundle.storage_size = form["storage_size"]
bundle.price = form["price"]
bundle.delivery_date = form["delivery_date"]
bundle.supplier_id = form["supplier_id"]
bundle.is_deleted = form["is_deleted"]
bundle.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "bundle"
record.product_detail = bundle
record.user = request.user
record.save()
if form["product_type"] == "Computer":
return redirect("/add/serial")
if form["product_type"] == "Accessory":
return redirect("/add/accessory")
else:
err = True
return render(request, "gestionale/add/addbundle.html", {
"err": err, "form": form
})
return redirect('storage')
else:
form = BundleForm()
return render(request, "gestionale/add/addbundle.html", {
"form": form
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_supplier(request):
if request.method == "POST":
form = SupplierForm(request.POST)
if form.is_valid():
record = Record()
form = form.cleaned_data
supplier = Supplier()
supplier.supplier_name = form["supplier_name"]
supplier.supplier_address = form["supplier_address"]
supplier.supplier_phone = form["supplier_phone"]
supplier.supplier_email = form["supplier_email"]
supplier.partita_iva = form["partita_iva"]
supplier.codice_societa = form["codice_societa"]
supplier.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "supplier"
record.product_detail = supplier
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/add/addsupplier.html", {
"form": form, "err": err
})
return redirect('storage')
else:
form = SupplierForm()
return render(request, "gestionale/add/addsupplier.html", {
"form": form
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_serial(request):
bundle = Bundle.objects.last()
qt = range(bundle.qt)
if request.method == "POST":
form_serial = SerialFormSet(request.POST, initial=[{} for _ in qt])
try:
if form_serial.clean():
if form_serial.is_valid():
for form in form_serial:
form = form.cleaned_data
record = Record()
computer = Computer()
computer.id_bundle = bundle
computer.status = "in_stock"
computer.eol = False
computer.eol_date = None
computer.serial = form["serial"]
computer.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "computer"
record.product_detail = computer
record.user = request.user
record.save()
return redirect('storage')
except ValidationError:
err = True
err_str = "L'inserimento é errato o incompleto!"
return render(request, "gestionale/add/addserial.html", {
"err": err, "form_serial": form_serial, "err_str": err_str
})
else:
form_serial = SerialFormSet(initial=[{} for _ in qt])
return render(request, "gestionale/add/addserial.html", {
"form_serial": form_serial, "bundle_qt": qt
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_accessory(request):
bundle = Bundle.objects.last()
qt = range(bundle.qt)
if request.method == "POST":
form = AccessoryForm(request.POST)
if form.is_valid():
form = form.cleaned_data
for _ in qt:
record = Record()
accessory = Accessory()
accessory.id_bundle = bundle
accessory.name = form["name"]
accessory.description = form["description"]
accessory.status = "in_stock"
accessory.notes = form["notes"]
accessory.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "accessory"
record.product_detail = accessory
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/add/addaccessory.html", {
"err": err, "form": form
})
return redirect('storage')
else:
form = AccessoryForm()
return render(request, "gestionale/add/addaccessory.html", {
"form": form
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_course(request):
if request.method == "POST":
form = CourseForm(request.POST)
if form.is_valid():
record = Record()
form.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "course"
record.product_detail = form.cleaned_data
record.user = request.user
record.save()
else:
form = CourseForm()
err = True
return render(request, "gestionale/add/addcourse.html", {
"form": form, "err": err
})
return redirect("courses")
else:
form = CourseForm()
return render(request, "gestionale/add/addcourse.html",{
"form": form
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def add_ticket(request):
if request.method == "POST":
form = TicketForm(request.POST)
if form.is_valid():
record = Record()
form.save()
record.date = datetime.now().date()
record.action = "add"
record.product = "ticket"
record.product_detail = form.cleaned_data
record.user = request.user
record.save()
else:
form = TicketForm()
err = True
return render(request, "gestionale/add/addticket.html", {
"form": form, "err": err})
return redirect("tickets")
else:
form = TicketForm(initial={"id_user_in_charge": request.user})
return render(request, "gestionale/add/addticket.html", {
"form": form})

View File

@@ -0,0 +1,123 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
from datetime import datetime, timedelta
from django.contrib.auth.decorators import user_passes_test
from django.http import Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import AssignmentComputerForm, AssignmentAccessoryForm
from ..models import Computer, Accessory, Student, Course, Record
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def assignment(request):
if request.method == "GET":
return render(request, "gestionale/assignment/assignment.html")
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def assignment_computer(request):
if request.method == "POST":
form = AssignmentComputerForm(request.POST)
if form.is_valid():
form = form.cleaned_data
try:
course = get_object_or_404(Course, course_code=form["course_code"])
student = get_object_or_404(Student, codice_fiscale=form["codice_fiscale"], course_id=course)
computer = get_object_or_404(Computer, serial=form["serial"])
record = Record()
computer_copy = copy.deepcopy(computer)
record.prev_product_detail = computer_copy
eol_date = (form["assignment_date"] + timedelta(days=1460))
computer.cespite = form["cespite"]
computer.status = "assigned"
computer.id_student = student
computer.assignment_date = form["assignment_date"]
computer.eol_date = eol_date
computer.assignment_motivation = form["assignment_motivation"]
computer.save()
record.date = datetime.now().date()
record.action = "assignment"
record.product = "computer"
record.product_detail = computer
record.user = request.user
record.save()
except Http404:
form = AssignmentComputerForm()
err = True
err_str = "Uno o più dei valori inseriti non é stato trovato"
return render(request, "gestionale/assignment/assignment_computer.html", {
"err": err, "err_str": err_str, "form": form
})
else:
form = AssignmentComputerForm()
err = True
err_str = "L'inserimento è incompleto o errato!"
return render(request, "gestionale/assignment/assignment_computer.html", {
"err": err, "err_str": err_str, "form": form
})
return redirect("assignment_computer")
else:
form = AssignmentComputerForm()
err = False
err_str = ""
return render(request, "gestionale/assignment/assignment_computer.html", {
"form": form, "err": err, "err_str": err_str
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def assignment_accessory(request):
if request.method == "POST":
form = AssignmentAccessoryForm(request.POST)
if form.is_valid():
form = form.cleaned_data
try:
course = get_object_or_404(Course, course_code=form["course_code"])
student = get_object_or_404(Student, codice_fiscale=form["codice_fiscale"], course_id=course)
accessory = get_object_or_404(Accessory, id=form["id"])
record = Record()
accessory_copy = copy.deepcopy(accessory)
record.prev_product_detail = accessory_copy
accessory.id_student = student
accessory.status = "assigned"
accessory.assignment_date = form["assignment_date"]
accessory.assignment_motivation = form["assignment_motivation"]
accessory.save()
record.date = datetime.now().date()
record.action = "assignment"
record.product = "accessory"
record.product_detail = accessory
record.user = request.user
record.save()
except Http404:
form = AssignmentAccessoryForm()
err = True
err_str = "Uno o più dei valori inseriti non é stato trovato"
return render(request, "gestionale/assignment/assignment_accessory.html", {
"err": err, "err_str": err_str, "form": form
})
else:
form = AssignmentAccessoryForm()
err = True
err_str = "L'inserimento è incompleto o errato!"
return render(request, "gestionale/assignment/assignment_accessory.html", {
"err": err, "err_str": err_str, "form": form
})
return redirect("assignment_accessory")
else:
form = AssignmentAccessoryForm()
err = False
err_str = ""
return render(request, "gestionale/assignment/assignment_accessory.html", {
"form": form, "err": err, "err_str": err_str
})

View File

@@ -0,0 +1,217 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
from datetime import datetime
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import ResignationForm
from ..models import Bundle, Supplier, Computer, Accessory, Student, Course, Record, Ticket
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_bundle(request, id):
bundle = get_object_or_404(Bundle, id=id)
computers = None
accessories = None
if bundle.product_type == "Computer":
computers = Computer.objects.filter(id_bundle=bundle)
if bundle.product_type == "Accessory":
accessories = Accessory.objects.filter(id_bundle=bundle)
if request.method == "POST":
record = Record()
bundle_copy = copy.deepcopy(bundle)
record.prev_product_detail = bundle_copy
if computers is not None:
for computer in computers:
computer.is_deleted = True
computer.save()
bundle.qt_available += -1
if accessories is not None:
for accessory in accessories:
accessory.is_deleted = True
accessory.save()
bundle.qt_available += -1
bundle.is_deleted = True
bundle.save()
record.date = datetime.now().date()
record.action = "delete"
record.product = "bundle"
record.user = request.user
record.save()
return redirect('storage')
elif request.method == "GET":
return render(request, "gestionale/delete/deletebundle.html", {
"id": id
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_supplier(request, id):
supplier = get_object_or_404(Supplier, id=id)
if request.method == "POST":
record = Record()
supplier_copy= copy.deepcopy(supplier)
record.prev_product_detail = supplier_copy
supplier.delete()
record.date = datetime.now().date()
record.action = "reset"
record.product = "supplier"
record.user = request.user
record.save()
return redirect('storage')
elif request.method == "GET":
return render(request, "gestionale/delete/deletesupplier.html", {
"id": id
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_computer(request, id):
computer = get_object_or_404(Computer, id=id)
bundle = get_object_or_404(Bundle, id=computer.id_bundle.id)
if request.method == "POST":
record = Record()
computer_copy = copy.deepcopy(computer)
record.prev_product_detail = computer_copy
bundle.qt = bundle.qt - 1
bundle.qt_available = bundle.qt_available - 1
bundle.save()
computer.delete()
record.date = datetime.now().date()
record.action = "reset"
record.product = "computer"
record.user = request.user
record.save()
return redirect(f"/details/bundle/{computer.id_bundle.id}")
elif request.method == "GET":
return render(request, "gestionale/delete/deletecomputer.html", {
"id": id, "id_bundle": computer.id_bundle.id
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_accessory(request, id):
accessory = get_object_or_404(Accessory, id=id)
bundle = get_object_or_404(Bundle, id=accessory.id_bundle.id)
if request.method == "POST":
record = Record()
accessory_copy = copy.deepcopy(accessory)
record.prev_product_detail = accessory_copy
bundle.qt = bundle.qt - 1
bundle.qt_available = bundle.qt_available - 1
bundle.save()
accessory.delete()
record.date = datetime.now().date()
record.action = "reset"
record.product = "computer"
record.user = request.user
record.save()
return redirect(f"/details/bundle/{accessory.id_bundle.id}")
elif request.method == "GET":
return render(request, "gestionale/delete/deleteaccessory.html", {
"id": id, "id_bundle": accessory.id_bundle.id
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_course(request, id):
course = get_object_or_404(Course, id=id)
if request.method == "POST":
record = Record()
course_copy = copy.deepcopy(course)
record.prev_product_detail = course_copy
course.course_status = False
course.save()
record.date = datetime.now().date()
record.action = "delete"
record.product = "course"
record.product_detail = course
record.user = request.user
record.save()
return redirect("courses")
elif request.method == "GET":
return render(request, "gestionale/delete/deletecourse.html", {
"id": id
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_student(request, id):
student = get_object_or_404(Student, id=id)
course = get_object_or_404(Course, id=student.course_id.id)
if request.method == "POST":
form = ResignationForm(request.POST, instance=student)
if form.is_valid():
record = Record()
student_copy = copy.deepcopy(student)
record.prev_product_detail = student_copy
student.resignation_date = datetime.strptime(form["resignation_date"].value(), "%d/%m/%Y")
student.student_status = "resigned"
student.save()
record.date = datetime.now().date()
record.action = "delete"
record.product = "student"
record.product_detail = student
record.user = request.user
record.save()
else:
form = ResignationForm()
err = True
return render(request, "gestionale/delete/deletestudent.html", {
"err": err, "form": form, "id": id
})
return redirect(f"/details/course/{course.id}")
else:
form = ResignationForm()
return render(request, "gestionale/delete/deletestudent.html", {
"form": form, "id": id, "student": student, "course": course
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def delete_ticket(request, id):
if request.method == "POST":
ticket = get_object_or_404(Ticket, id=id)
record = Record()
ticket_copy = copy.deepcopy(ticket)
record.prev_product_detail = ticket_copy
ticket.closing_date = datetime.now().date()
ticket.is_closed = True
ticket.save()
record.date = datetime.now().date()
record.action = "close"
record.product = "ticket"
record.product_detail = ticket
record.user = request.user
record.save()
return redirect("tickets")
elif request.method == "GET":
return render(request, "gestionale/delete/deleteticket.html", {
"id": id})
else:
return bad_request

View File

@@ -0,0 +1,62 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render, get_object_or_404
from django.utils.autoreload import request_finished
from django.views.defaults import bad_request
from ..models import Bundle, Computer, Accessory, Student, Course, Ticket
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def details_bundle(request, id):
bundle = get_object_or_404(Bundle, id=id)
bundle_type = bundle.product_type
supplier = bundle.supplier_id
computers = None
accessories = None
if bundle.product_type == "Computer":
computers = Computer.objects.filter(id_bundle_id=id)
if bundle.product_type == "Accessory":
accessories = Accessory.objects.filter(id_bundle_id=id)
if request.method == "GET":
return render(request, "gestionale/details/detailsbundle.html", {
"bundle": bundle, "computers": computers, "accessories": accessories, "bundle_type": bundle_type,
"supplier": supplier
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def details_course(request, id):
course = get_object_or_404(Course, id=id)
students = Student.objects.filter(course_id= id)
if request.method == "GET":
return render(request, "gestionale/details/detailscourse.html", {
"course": course, "students": students
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def details_student(request, id):
student = get_object_or_404(Student, id=id)
computers = Computer.objects.filter(id_student_id=id)
accessories = Accessory.objects.filter(id_student_id=id)
if request.method == "GET":
return render(request, "gestionale/details/detailsstudent.html", {
"student": student, "computers": computers, "accessories": accessories
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def details_ticket(request, id):
ticket = get_object_or_404(Ticket, id=id)
if request.method == "GET":
return render(request, "gestionale/details/detailsticket.html", {
"ticket": ticket})
else:
return bad_request

View File

@@ -0,0 +1,240 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
from datetime import datetime
from django.contrib.auth.decorators import user_passes_test
from django.core.exceptions import ValidationError
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import BundleForm, SupplierForm, ComputerForm, EditAccessoryForm, CourseForm, StudentForm, TicketCompleteForm, TicketForm
from ..models import Bundle, Supplier, Computer, Accessory, Student, Course, Record, Ticket
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_bundle(request, id):
bundle = get_object_or_404(Bundle, id=id)
if request.method == "POST":
form = BundleForm(request.POST)
if form.is_valid():
record = Record()
bundle_copy = copy.deepcopy(bundle)
record.prev_product_detail = bundle_copy
form = form.cleaned_data
#verificare se si può usare form.save()
bundle.product_type = form["product_type"]
bundle.product_name = form["product_name"]
bundle.qt = form["qt"]
bundle.qt_available = form["qt_available"]
bundle.notes = form["notes"]
bundle.brand = form["brand"]
bundle.line = form["line"]
if form["product_type"] == "Computer":
bundle.cpu = form["cpu"]
bundle.ram = form["ram"]
bundle.storage_size = form["storage_size"]
bundle.price = form["price"]
bundle.delivery_date = form["delivery_date"]
bundle.supplier_id = form["supplier_id"]
bundle.is_deleted = form["is_deleted"]
bundle.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "bundle"
record.product_detail = bundle
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/edit/editbundle.html", {
"err": err, "id": id, "form": form
})
return redirect('storage')
else:
form = BundleForm(instance=bundle)
return render(request, "gestionale/edit/editbundle.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_supplier(request, id):
supplier = get_object_or_404(Supplier, id=id)
if request.method == "POST":
form = SupplierForm(request.POST, instance=supplier)
if form.is_valid():
record = Record()
supplier_copy = copy.deepcopy(supplier)
record.prev_product_detail = supplier_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "supplier"
record.product_detail = supplier
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/edit/editsupplier.html", {
"err": err, "id": id, "form": form
})
return redirect('suppliers')
else:
form = SupplierForm(instance=supplier)
return render(request, "gestionale/edit/editsupplier.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_computer(request, id):
computer = get_object_or_404(Computer, id = id)
bundle_id = computer.id_bundle.id
if request.method == "POST":
form = ComputerForm(request.POST, instance=computer)
if form.is_valid():
record = Record()
computer_copy = copy.deepcopy(computer)
record.prev_product_detail = computer_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "computer"
record.product_detail = computer
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/edit/editcomputer.html", {
"err": err, "form": form, "id": id
})
return redirect(f'/details/bundle/{bundle_id}')
else:
form = ComputerForm(instance=computer)
return render(request, "gestionale/edit/editcomputer.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_accessory(request, id):
accessory = get_object_or_404(Accessory, id=id)
bundle_id = accessory.id_bundle.id
if request.method == "POST":
form = EditAccessoryForm(request.POST, instance=accessory)
if form.is_valid():
record = Record()
accessory_copy = copy.deepcopy(accessory)
record.prev_product_detail = accessory_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "accessory"
record.product_detail = accessory
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/edit/editaccessory.html", {
"err": err, "form": form, "id": id
})
return redirect(f'/details/bundle/{bundle_id}')
else:
form = EditAccessoryForm(instance=accessory)
return render(request, "gestionale/edit/editaccessory.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_course(request, id):
course = get_object_or_404(Course, id=id)
if request.method == "POST":
form = CourseForm(request.POST, instance=course)
if form.is_valid():
record = Record()
course_copy = copy.deepcopy(course)
record.prev_product_detail = course_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "course"
record.product_detail = course
record.user = request.user
record.save()
else:
form = CourseForm(instance=course)
err = True
return render(request, "gestionale/edit/edutcourse.html", {
"form": form, "err": err, "id": id
})
return redirect("courses")
else:
form = CourseForm(instance=course)
return render(request, "gestionale/edit/editcourse.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_student(request, id):
student = get_object_or_404(Student, id=id)
if request.method == "POST":
form = StudentForm(request.POST, request.FILES, instance=student)
try:
if form.is_valid():
record = Record()
student_copy = copy.deepcopy(student)
record.prev_product_detail = student_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "student"
record.product_detail = student
record.user = request.user
record.save()
except ValidationError as e:
form = StudentForm(instance=student)
err = True
err_str = e
return render(request, "gestionale/editstudent.html", {
"form": form, "err": err, "err_str": err_str
})
return redirect(f"/details/course/{student.course_id.id}")
else:
form = StudentForm(instance=student)
return render(request, "gestionale/edit/editstudent.html", {
"form": form, "id": id
})
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def edit_ticket(request, id):
ticket = get_object_or_404(Ticket, id=id)
if request.method == "POST":
form = TicketCompleteForm(request.POST, instance=ticket)
if form.is_valid():
record = Record()
ticket_copy = copy.deepcopy(ticket)
record.prev_product_detail = ticket_copy
form.save()
record.date = datetime.now().date()
record.action = "edit"
record.product = "ticket"
record.product_detail = ticket
record.user = request.user
record.save()
return redirect("tickets")
else:
form = TicketCompleteForm(instance=ticket, initial={"id_user_in_charge": request.user})
return render(request, "gestionale/edit/editticket.html", {
"form": form, "id": id})

View File

@@ -0,0 +1,68 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render
from django.views.defaults import bad_request
from ..models import Bundle, Supplier, Student, Course, Ticket
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def storage(request):
bundles = Bundle.objects.all()
if request.method == "GET":
return render(request, "gestionale/list/storage.html", {
"bundles": bundles
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def suppliers(request):
suppliers = Supplier.objects.all()
if request.method == "GET":
return render(request, "gestionale/list/suppliers.html", {
"suppliers": suppliers
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def students(request):
students = Student.objects.all().order_by("course_acronym")
if request.method == "GET":
return render(request, "gestionale/list/students.html", {
"students": students
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def courses(request):
courses = Course.objects.all()
if request.method == "GET":
return render(request, "gestionale/list/courses.html", {
"courses": courses
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def tickets(request):
tickets = Ticket.objects.filter(is_closed = False).order_by("-submit_date", "-id")
if request.method == "GET":
return render(request, "gestionale/list/tickets.html", {
"tickets": tickets})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def tickets_closed(request):
tickets = Ticket.objects.filter(is_closed = True).order_by("-closing_date", "-id")
if request.method == "GET":
return render(request, "gestionale/list/ticketsclosed.html", {
"tickets": tickets})
else:
return bad_request

View File

@@ -0,0 +1,84 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
from copy import deepcopy
from datetime import datetime
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import ReturnComputerDateForm, ReturnAccessoryDateForm
from ..models import Bundle, Computer, Accessory, Record
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def reset_computer(request, id):
computer = get_object_or_404(Computer, id=id)
bundle = get_object_or_404(Bundle, id=computer.id_bundle.id)
if request.method == "POST":
form = ReturnComputerDateForm(request.POST)
if form.is_valid():
record = Record()
computer_copy = copy.deepcopy(computer)
record.prev_product_detail = computer_copy
form = form.cleaned_data
computer.assignment_date = None
computer.assignment_motivation = None
computer.id_student = None
computer.status = "in_stock"
computer.return_date = form["return_date"]
computer.return_motivation = form["return_motivation"]
computer.save()
record.date = datetime.now().date()
record.action = "reset"
record.product = "computer"
record.product_detail = computer
record.user = request.user
record.save()
return redirect(f"/details/bundle/{computer.id_bundle.id}")
elif request.method == "GET":
form = ReturnComputerDateForm()
return render(request, "gestionale/reset/resetcomputer.html",{
"computer": computer, "bundle": bundle, "form": form
})
else:
return bad_request
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
def reset_accessory(request, id):
accessory = get_object_or_404(Accessory, id=id)
bundle = get_object_or_404(Bundle, id=accessory.id_bundle.id)
if request.method == "POST":
form = ReturnAccessoryDateForm(request.POST)
if form.is_valid():
record = Record()
accessory_copy = copy.deepcopy(accessory)
record.prev_product_detail = accessory_copy
form = form.cleaned_data
accessory.assignment_date = None
accessory.assignment_motivation = None
accessory.id_student = None
accessory.status = "in_stock"
accessory.return_date = form["return_date"]
accessory.return_motivation = form["return_motivation"]
accessory.save()
record.date = datetime.now().date()
record.action = "reset"
record.product = "computer"
record.product_detail = accessory
record.user = request.user
record.save()
return redirect(f"/details/bundle/{accessory.id_bundle.id}")
elif request.method == "GET":
form = ReturnAccessoryDateForm()
return render(request, "gestionale/reset/resetaccessory.html", {
"accessory": accessory, "bundle": bundle, "form": form
})
else:
return bad_request

View File

@@ -0,0 +1,133 @@
# Copyright (C) 2024 Nastro_
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
import copy
from datetime import datetime
from django.core.exceptions import ValidationError
from django.shortcuts import render, get_object_or_404, redirect
from django.views.defaults import bad_request
from ..forms import StudentViewEditForm, StudentViewSubmitTicketForm
from ..models import Computer, Accessory, Student, Record, Ticket
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentview(request):
student = get_object_or_404(Student, email_user=request.user.email)
computers = Computer.objects.filter(id_student=student)
accessories = Accessory.objects.filter(id_student=student)
if request.method == "GET":
return render(request, "gestionale/studentview/studentview.html" ,{
"student": student, "computers": computers, "accessories": accessories
})
else:
return bad_request
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentview_edit(request):
student = get_object_or_404(Student, email_user=request.user.email)
if request.method == "POST":
form = StudentViewEditForm(request.POST, request.FILES, instance=student)
try:
if form.is_valid():
form.save()
except ValidationError as e:
err = True
err_str = e
return render(request, "gestionale/studentview/studentviewedit.html",{
"student": student, "err": err, "err_str": err_str
})
return redirect("studentview")
elif request.method == "GET":
form = StudentViewEditForm(instance=student)
return render(request, "gestionale/studentview/studentviewedit.html",{
"student": student, "form": form
})
else:
return bad_request
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentviewtickets(request):
student = get_object_or_404(Student, email_user = request.user.email)
tickets = Ticket.objects.filter(id_student = student).order_by("is_closed","-submit_date", "-id")
if request.method == "GET":
return render(request, "gestionale/studentview/studentviewtickets.html", {
"tickets": tickets})
else:
return bad_request
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentviewsubmitticket(request):
student = get_object_or_404(Student, email_user = request.user.email)
if request.method == "POST":
form = StudentViewSubmitTicketForm(request.POST)
if form.is_valid():
record = Record()
form = form.cleaned_data
ticket = Ticket()
ticket.title = form["title"]
ticket.content = form["content"]
ticket.id_student = student
ticket.submit_date = form["submit_date"]
ticket.save()
record.date = datetime.now().date()
record.action = "submit"
record.product = "ticket"
record.product_detail = ticket
record.user = request.user
record.save()
else:
err = True
return render(request, "gestionale/studentview/studentviewsubmitticket.html",{
"form": form, "err": err} )
return redirect("studentview_tickets")
else:
form = StudentViewSubmitTicketForm();
return render(request, "gestionale/studentview/studentviewsubmitticket.html", {
"form": form})
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentviewcloseticket(request, id):
ticket = get_object_or_404(Ticket, id=id)
if request.method == "POST":
record = Record()
ticket.is_closed = True
ticket.closing_date = datetime.now().date()
ticket_copy = copy.deepcopy(ticket)
ticket.save()
record.date = datetime.now().date()
record.action = "close"
record.product = "ticket"
record.product_detail = ticket
record.prev_product_detail = ticket_copy
record.user = request.user
record.save()
return redirect("studentview_tickets")
elif request.method == "GET":
return render(request, "gestionale/studentview/studentviewcloseticket.html", {
"ticket": ticket})
else:
return bad_request
@user_passes_test(lambda u: u.groups.filter(name='student').exists())
def studentviewdetailsticket(request, id):
ticket = get_object_or_404(Ticket, id=id)
if request.method == "GET":
return render(request, "gestionale/studentview/studentviewdetailsticket.html", {
"ticket": ticket})
else:
return bad_request