# 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, timedelta from logging import disable from django import forms from django.forms import SelectDateWidget, ModelForm, formset_factory, BaseFormSet from .models import Supplier, Bundle, Computer, Accessory, Course, Student, Record, validate_image, StudentViewEditModel, Ticket class BundleForm(forms.ModelForm): type_choices = ( ("", "Selezionare il tipo di prodotto"), ("Accessory", "Accessorio"), ("Computer", "Computer") ) product_type = forms.ChoiceField(choices=type_choices, initial="") delivery_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date() ) class Meta: model = Bundle fields = "__all__" labels = { "product_type": "Tipo Prodotto", "product_name": "Nome Prodotto", "qt": "Qt", "qt_available": "Qt. Disponibile", "notes": "Note", "brand": "Brand", "line": "Linea", "cpu": "Cpu", "ram": "Ram", "storage_size": "Dimensione Storage", "price": "Prezzo", "delivery_date": "Data di consegna", "supplier_id": "Fornitore", "is_deleted": "È cancellato?" } widgets = { "delivery_date": forms.SelectDateWidget() } class BaseSerialFormSet(BaseFormSet): def clean(self): super().clean() values = [] for form in self.forms: if form.is_valid(): form_value = form.cleaned_data.get("serial") if form_value: values.append(form_value) if len(values) != len(set(values)): raise forms.ValidationError("I valori devono essere univoci") else: return True class SerialForm(forms.ModelForm): serial = forms.CharField(max_length=255) class Meta: model = Computer fields = ["serial"] labels = { "serial": "Seriale" } SerialFormSet = formset_factory(SerialForm, formset=BaseSerialFormSet, extra=0) class SupplierForm(forms.ModelForm): class Meta: model = Supplier fields = "__all__" labels = { "supplier_name": "Nome", "supplier_address": "Indirizzo", "supplier_phone": "Telefono", "supplier_email": "Email", "partita_iva": "Partita IVA", "codice_societa": "Codice Società" } exclude = ["is_deleted"] class ComputerForm(forms.ModelForm): choice = ( ("assigned", "Assegnato"), ("in_stock", "In Magazzino"), ("eol", "Eol"), ("damaged", "Danneggiato"), ("replaced", "Sostituito"), ("in_repearing", "In Riparazione"), ("disposed", "Smaltito") ) choice_motv = ( (None, "Seleziona un motivo"), ("deposit_paid", "Pagamento Effettuato"), ("replacement", "Sostitutivo"), ("temporary", "Temporaneo") ) choice_retmotv = ( (None, "Seleziona un motivo"), ("student_resigned", "Studente Dimesso"), ("damaged","Danneggato"), ("not_necessary", "Non più necessario"), ) status = forms.ChoiceField(choices=choice, initial = "", label="Status") assignment_date = forms.DateField(widget=SelectDateWidget(), label="Data di assegnazione", required=False) assignment_motivation = forms.ChoiceField(choices=choice_motv, label="Motivazione di assegnazione", required=False) return_date = forms.DateField(widget=SelectDateWidget(), label="Data di restituzione", required=False) return_motivation = forms.ChoiceField(choices=choice_retmotv, label="Motivazione di restituzione", required=False) eol_date = forms.DateField(widget=SelectDateWidget(), label="Data di Eol: ", required= False, disabled=True) class Meta: model = Computer fields = "__all__" labels = { "id_student": "Studente", "id_bundle": "Bundle", "status": "Status", "assignment_date": "Data di assegnazione", "assignment_motivation": "Motivazione di assegnazione", "return_date": "Data di restituzione", "return_motivation": "Motivazione di restituzione", "eol": "Eol", "eol_date": "Data di eol", "notes": "Note", "cespite": "Cespite", "serial": "Seriale", "is_deleted": "É cancellato?" } class CespiteForm(forms.Form): cespite = forms.CharField(label="Cespite") serial = forms.CharField(label="Seriale") class AccessoryForm(forms.ModelForm): class Meta: model = Accessory fields = ["name", "description", "notes"] labels = { "name": "Nome Prodotto", "description": "Descrizione", "notes": "Note" } class EditAccessoryForm(forms.ModelForm): choice= ( ("assigned", "Assegnato"), ("in_stock", "In Magazzino"), ("damaged", "Danneggiato"), ("replaced", "Sostituito"), ("in_repearing", "In Riparazione"), ("disposed","Smaltito") ) choice_motv = ( (None, "Seleziona un motivo"), ("needed", "Necessario"), ("replacement", "Sostitutivo"), ("temporary", "Temporaneo") ) choice_retmotv = ( (None, "Seleziona un motivo"), ("not_necessary", "Non più necessario"), ("damaged", "Danneggiato") ) status = forms.ChoiceField(choices=choice, initial = "", label="Status") assignment_date = forms.DateField(widget=SelectDateWidget(), label="Data di assegnazione", required=False) assignment_motivation = forms.ChoiceField(choices=choice_motv, label="Motivazione di assegnazione", required=False) return_date = forms.DateField(widget=SelectDateWidget(), label="Data di restituzione", required=False) return_motivation = forms.ChoiceField(choices=choice_retmotv, label="Motivazione di restituzione", required=False) class Meta: model = Accessory fields = "__all__" labels = { "name": "Nome Prodotto", "description": "Descrizione", "id_student": "Studente", "id_bundle": "Bundle", "status": "Status", "assignment_date": "Data di assegnazione", "assignment_motivation": "Motivazione di assegnazione", "return_date": "Data di restituzione", "return_motivation": "Motivazione di restituzione", "notes": "Note", } class CSVUpdateForm(forms.Form): file = forms.FileField(label="Seleziona un file CSV") class CourseForm(forms.ModelForm): class Meta: model = Course fields = "__all__" labels = { "course_name": "Nome Corso", "course_name_extended": "Nome Corso esteso", "course_code": "Codice Corso", "course_year": "Anno Corso", "student_number": "Numero Studenti", "course_location": "Posizione Corso", "course_status": "Status Corso" } class ResignationForm(forms.ModelForm): resignation_date = forms.DateField(widget=SelectDateWidget(), label="Data di Dimissioni:", initial=datetime.now().date()) class Meta: model = Student fields = ["resignation_date"] class StudentForm(forms.ModelForm): birth_date = forms.DateField(widget=SelectDateWidget(), label="Data di Nascita") resignation_date = forms.DateField(widget=SelectDateWidget(), label="Data di Dimissioni:") class Meta: model = Student fields= "__all__" labels= { "first_name": "Nome", "last_name": "Cognome", "course_name": "Nome Corso", "gender": "Sesso", "profile_image": "Immagine Profilo", "id_student_course": "Id Studente Corso", "codice_fiscale": "Codice Fiscale", "course_acronym": "Sigla Corso", "course_code": "Codice Corso", "email_user": "Email Studente", "phone_number": "Numero di Telefono", "municipality_residence": "Comune di Residenza", "province_residence": "Provincia di Residenza", "student_status": "Status Studente", "course_status": "Status Corso", "course_year": "Anno Corso", "birth_date": "Data di Nascita", "municipality_birth": "Comune di Nascita", "province_birth": "Provincia di Nascita", "resignation_date": "Data di Dimissioni", "nation_birth": "Nazione di Nascita", "course_id": "Corso" } exclude = ["course_acronym", "course_code", "course_status", "course_year", "course_name"] class AssignmentComputerForm(forms.Form): choice= ( ("deposit_paid", "Pagamento Effettuato"), ("replacement", "Sostitutivo"), ("temporary", "Temporaneo") ) course_code = forms.CharField(label="Codice Corso", max_length=255) codice_fiscale = forms.CharField(label="Codice Fiscale", max_length=255) serial = forms.CharField(label="Seriale", max_length=255) assignment_date = forms.DateField(widget=SelectDateWidget(), label="Data di assegnazione", initial=datetime.now().date) assignment_motivation = forms.ChoiceField(choices=choice) class AssignmentAccessoryForm(forms.Form): choice= ( ("needed", "Necessario"), ("replacement", "Sostitutivo"), ("temporary", "Temporaneo") ) course_code = forms.CharField(label="Codice Corso", max_length=255) codice_fiscale = forms.CharField(label="Codice Fiscale", max_length=255) id = forms.IntegerField() assignment_date = forms.DateField(widget=SelectDateWidget(), label="Data di assegnazione", initial=datetime.now().date) assignment_motivation = forms.ChoiceField(choices=choice) class ReturnComputerDateForm(forms.Form): choice = ( ("student_resigned", "Studente Dimesso"), ("damaged", "Danneggiato"), ("not_necessary", "Non più necessario") ) return_date = forms.DateField(widget=SelectDateWidget(), label="Data di ritorno", initial=datetime.now().date) return_motivation = forms.ChoiceField(choices=choice) class ReturnAccessoryDateForm(forms.Form): choice = ( ("not_necessary", "Non più necessario"), ("damaged", "Danneggiato"), ) return_date = forms.DateField(widget=SelectDateWidget(), label="Data di ritorno", initial=datetime.now().date) return_motivation = forms.ChoiceField(choices=choice) class StudentViewEditForm(forms.ModelForm): class Meta: model = StudentViewEditModel fields = "__all__" labels = { "profile_image": "Immagine Profilo" } class TicketForm(forms.ModelForm): submit_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date(), label="Data del Ticket") id_student = forms.ModelChoiceField(Student.objects.order_by("course_id_id")) class Meta: model = Ticket fields = "__all__" labels = { "title": "Titolo del Ticket", "content": "Contenuto del Ticket", "id_student": "Studente", "submit_date": "Data del Ticket", "id_user_in_charge" : "Utente Staff assegnato" } exclude = ["is_closed", "closing_date"] class TicketCompleteForm(forms.ModelForm): submit_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date(), label="Data del Ticket") closing_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date(), label="Data di Chiusura") id_student = forms.ModelChoiceField(Student.objects.order_by("course_acronym"), label="Studente") class Meta: model = Ticket fields = "__all__" labels = { "title": "Titolo del Ticket", "content": "Contenuto del Ticket", "id_student": "Studente", "submit_date": "Data del Ticket", "closing_date": "Data di chiusura Ticket", "is_closed": "É Chiuso?", "id_user_in_charge": "Utente Staff assegnato" } class StudentViewSubmitTicketForm(forms.ModelForm): submit_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date(), label="Data del Ticket", disabled=True) class Meta: model = Ticket fields = "__all__" labels = { "title": "Titolo del Ticket", "content": "Contenuto del Ticket", "id_student": "Studente", "submit_date": "Data del Ticket", "closing_date": "Data di Chiusura Ticket", "is_closed": "É Chiuso?" } exclude = ["is_closed","id_student", "closing_date", "id_user_in_charge"]