This repository has been archived on 2025-04-28. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
GestionaleITSPy/GestionaleITS/gestionale/models.py
2024-10-17 11:39:51 +02:00

158 lines
8.1 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/.
from PIL import Image
from django.core.exceptions import ValidationError
from django.db import models
from django.conf import settings
# Create your models here.
class Record(models.Model):
date = models.DateField()
action = models.CharField(max_length=255)
user = models.CharField(max_length=255)
product = models.CharField(max_length=255)
product_detail = models.TextField(null=True)
prev_product_detail = models.TextField(null=True)
class Supplier(models.Model):
supplier_name = models.CharField(max_length=255)
supplier_address = models.CharField(max_length=255)
supplier_phone = models.CharField(max_length=255)
supplier_email = models.EmailField(max_length=255)
partita_iva = models.CharField(max_length=255)
codice_societa = models.CharField(max_length=255)
def __str__(self):
return f"Nome: {self.supplier_name}, Indirizzo: {self.supplier_address}, Telefono: {self.supplier_phone}, Email: {self.supplier_email}, Partita IVA: {self.partita_iva}, Codice Societá: {self.codice_societa}"
class Bundle(models.Model):
product_type = models.CharField(max_length=255)
product_name = models.CharField(max_length=255)
qt = models.IntegerField()
qt_available = models.IntegerField()
notes = models.CharField(max_length=255, blank=True)
brand = models.CharField(max_length=255)
line = models.CharField(max_length=255)
cpu = models.CharField(max_length=255, blank=True)
ram = models.CharField(max_length=255, blank=True)
storage_size = models.CharField(max_length=255, blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
delivery_date = models.DateField()
supplier_id = models.ForeignKey(Supplier, on_delete=models.PROTECT)
is_deleted = models.BooleanField(default=False)
def __str__(self):
return f"Tipo Prodotto: {self.product_type}, Nome Prodotto: {self.product_name}, Qt: {self.qt}, Qt. Disponibile: {self.qt_available}, Note: {self.notes}, Brand: {self.brand}, Linea: {self.line}, Cpu: {self.cpu}, Ram: {self.ram}, Storage: {self.storage_size}, Prezzo: {self.price}, Data di consegna: {self.delivery_date}, Fornitore: {self.supplier_id.supplier_name} È cancellato?: {self.is_deleted}"
class Course(models.Model):
course_name = models.CharField(max_length=255, blank= True)
course_name_extended = models.CharField(max_length=255, blank= True)
course_code = models.CharField(max_length=255)
course_year = models.IntegerField(blank= True)
student_number = models.IntegerField(blank= True, null= True)
course_location = models.CharField(max_length=255)
course_status = models.BooleanField(default= True)
def __str__(self):
return f"Id Corso: {self.id}, Nome Corso: {self.course_name}, Anno Corso: {self.course_year}"
def validate_image(image):
max_size = 2 * 1024 * 1024 # 2 MB
if image.size > max_size:
raise ValidationError("Il file è troppo grande. La dimensione massima è 2 MB.")
img = Image.open(image)
width = img.width
height = img.height
max_width = 200
max_height = 200
if width > max_width or height > max_height:
raise ValidationError(f"Le dimensioni dell'immagine devono essere al massimo {max_width}x{max_height} pixel.")
else:
return image
class Student(models.Model):
profile_image = models.ImageField(upload_to="profile_pictures/", blank=True, null=True, validators=[validate_image])
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
birth_date = models.DateField()
codice_fiscale = models.CharField(max_length=255)
gender = models.CharField(max_length=255)
id_student_course = models.IntegerField(blank= True, null=True)
course_acronym = models.CharField(max_length=255)
email_user = models.EmailField(max_length=255)
phone_number = models.CharField(max_length=255)
municipality_residence = models.CharField(max_length=255)
province_residence = models.CharField(max_length=255)
municipality_birth = models.CharField(max_length=255)
province_birth = models.CharField(max_length=255)
nation_birth = models.CharField(max_length=255)
resignation_date = models.DateField(null=True, blank=True)
student_status = models.CharField(max_length=255)
course_id = models.ForeignKey(Course, related_name="students", on_delete=models.PROTECT)
def __str__(self):
return f"Nome: {self.first_name}, Cognome: {self.last_name}, Sesso: {self.gender}, Data di nascita: {self.birth_date}, Corso: {self.course_id.course_name}, Anno corso {self.course_id.course_year}"
class Computer(models.Model):
id_student = models.ForeignKey(Student, blank=True, null=True, on_delete=models.PROTECT)
id_bundle = models.ForeignKey(Bundle, related_name="bundles" , on_delete=models.PROTECT)
# deve essere una choice
status = models.CharField(max_length=255)
assignment_date = models.DateField(blank=True, null=True)
#deve essere una choice
assignment_motivation = models.CharField(max_length=255, blank=True, null=True)
return_date = models.DateField(blank=True, null=True)
return_motivation = models.CharField(max_length=255, blank=True, null=True)
eol = models.BooleanField(default=False)
eol_date = models.DateField(null=True, blank=True)
notes = models.CharField(max_length=255, blank=True, null=True)
cespite = models.CharField(max_length=255, blank=True, null=True)
serial = models.CharField(max_length=255, unique=True)
is_deleted = models.BooleanField(default=False)
def __str__(self):
return f"Id Studente: {self.id_student}, Id Bundle: {self.id_bundle}, Status: {self.status}, Data di assegnazione: {self.assignment_date}, Motivazione di Assegnazione: {self.assignment_motivation}, Data di restituzione: {self.return_date}, Motivazione di restituzione: {self.return_motivation}, Eol: {self.eol}, Data di Eol: {self.eol_date}, Note: {self.notes}, Cespite: {self.cespite}, Seriale: {self.serial}"
class Accessory(models.Model):
id_student = models.ForeignKey(Student, blank=True, null=True, on_delete=models.PROTECT)
id_bundle = models.ForeignKey(Bundle, related_name="bundles_accessory" , on_delete=models.PROTECT)
name = models.CharField(max_length=255)
status = models.CharField(max_length=255)
description = models.CharField(max_length=255)
assignment_date = models.DateField(blank=True, null=True)
assignment_motivation = models.CharField(max_length=255, blank=True, null=True)
return_date = models.DateField(blank=True, null=True)
return_motivation = models.CharField(max_length=255, blank=True, null=True)
notes = models.CharField(max_length=255, blank=True, null=True)
is_deleted = models.BooleanField(default=False)
def __str__(self):
return f"Id Studente: {self.id_student}, Id Bundle: {self.id_bundle}, Name: {self.name}, Status: {self.status}, Data di assegnazione: {self.assignment_date}, Motivazione di Assegnazione: {self.assignment_motivation}, Data di restituzione: {self.return_date}, Motivazione di restituzione: {self.return_motivation}, Note: {self.notes}"
class StudentViewEditModel(models.Model):
profile_image = models.ImageField(upload_to="profile_pictures/", blank=True, null=True, validators=[validate_image])
class Ticket(models.Model):
title = models.CharField(max_length = 255)
content = models.TextField()
id_student = models.ForeignKey(Student, on_delete=models.PROTECT)
submit_date = models.DateField()
closing_date = models.DateField(blank=True, null=True)
is_closed = models.BooleanField(default=False)
id_user_in_charge = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,limit_choices_to={'is_staff': True}, on_delete=models.PROTECT)
def __str__(self):
return f"title: {self.title} content: {self.content} student: {self.id_student} submit_date:{self.submit_date} closing_date:{self.closing_date} is_closed:{self.is_closed}"