132 lines
5.0 KiB
Python
132 lines
5.0 KiB
Python
|
|
# 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
|