Compare commits
10 Commits
e44bb5677d
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| c13d96c39d | |||
| 3e0f51fc37 | |||
| 1d93d3d8f4 | |||
| a24f5d1026 | |||
| 77350f2136 | |||
| c161995ae7 | |||
| d4fa6b8c6e | |||
| e27aba1cd1 | |||
| dc623fdb52 | |||
| b762b57ec3 |
@@ -77,8 +77,6 @@ networks:
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
- Default value of association "Pagamento effettuato"
|
|
||||||
- import of storage, computers, courses.
|
|
||||||
- Tables Sorting with filters
|
- Tables Sorting with filters
|
||||||
|
|
||||||
# Licence
|
# Licence
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from logging import disable
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import SelectDateWidget, ModelForm, formset_factory, BaseFormSet
|
from django.forms import SelectDateWidget, ModelForm, formset_factory, BaseFormSet
|
||||||
from .models import Supplier, Bundle, Computer, Accessory, Course, Student, Record, validate_image, StudentViewEditModel, Ticket
|
from .models import Supplier, Bundle, Computer, Accessory, Course, Student, Record, validate_image, StudentViewEditModel, Ticket
|
||||||
@@ -15,12 +16,11 @@ class BundleForm(forms.ModelForm):
|
|||||||
("Accessory", "Accessorio"),
|
("Accessory", "Accessorio"),
|
||||||
("Computer", "Computer")
|
("Computer", "Computer")
|
||||||
)
|
)
|
||||||
product_type = forms.ChoiceField(choices=type_choices, initial="")
|
product_type = forms.ChoiceField(choices=type_choices, initial="", label= "Tipo prodotto")
|
||||||
delivery_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date() )
|
delivery_date = forms.DateField(widget=SelectDateWidget(), initial=datetime.now().date(), label="Data di Consegna")
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Bundle
|
model = Bundle
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
labels = {
|
labels = {
|
||||||
"product_type": "Tipo Prodotto",
|
"product_type": "Tipo Prodotto",
|
||||||
"product_name": "Nome Prodotto",
|
"product_name": "Nome Prodotto",
|
||||||
@@ -89,6 +89,34 @@ class SupplierForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class ComputerForm(forms.ModelForm):
|
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:
|
class Meta:
|
||||||
model = Computer
|
model = Computer
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
@@ -104,9 +132,13 @@ class ComputerForm(forms.ModelForm):
|
|||||||
"eol_date": "Data di eol",
|
"eol_date": "Data di eol",
|
||||||
"notes": "Note",
|
"notes": "Note",
|
||||||
"cespite": "Cespite",
|
"cespite": "Cespite",
|
||||||
"serial": "Seriale"
|
"serial": "Seriale",
|
||||||
|
"is_deleted": "É cancellato?"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CespiteForm(forms.Form):
|
||||||
|
cespite = forms.CharField(label="Cespite")
|
||||||
|
serial = forms.CharField(label="Seriale")
|
||||||
|
|
||||||
class AccessoryForm(forms.ModelForm):
|
class AccessoryForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -120,6 +152,30 @@ class AccessoryForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class EditAccessoryForm(forms.ModelForm):
|
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:
|
class Meta:
|
||||||
model = Accessory
|
model = Accessory
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
@@ -135,13 +191,6 @@ class EditAccessoryForm(forms.ModelForm):
|
|||||||
"return_motivation": "Motivazione di restituzione",
|
"return_motivation": "Motivazione di restituzione",
|
||||||
"notes": "Note",
|
"notes": "Note",
|
||||||
}
|
}
|
||||||
exclude = [
|
|
||||||
"assignment_date",
|
|
||||||
"assignment_motivation",
|
|
||||||
"return_date",
|
|
||||||
"return_motivation"
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
class CSVUpdateForm(forms.Form):
|
class CSVUpdateForm(forms.Form):
|
||||||
file = forms.FileField(label="Seleziona un file CSV")
|
file = forms.FileField(label="Seleziona un file CSV")
|
||||||
@@ -162,7 +211,6 @@ class CourseForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class ResignationForm(forms.ModelForm):
|
class ResignationForm(forms.ModelForm):
|
||||||
|
|
||||||
resignation_date = forms.DateField(widget=SelectDateWidget(), label="Data di Dimissioni:", initial=datetime.now().date())
|
resignation_date = forms.DateField(widget=SelectDateWidget(), label="Data di Dimissioni:", initial=datetime.now().date())
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Student
|
model = Student
|
||||||
@@ -170,6 +218,14 @@ class ResignationForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class StudentForm(forms.ModelForm):
|
class StudentForm(forms.ModelForm):
|
||||||
|
choice=(
|
||||||
|
("ok","Ok"),
|
||||||
|
("resigned", "Dimesso")
|
||||||
|
)
|
||||||
|
|
||||||
|
birth_date = forms.DateField(widget=SelectDateWidget(), label="Data di Nascita")
|
||||||
|
resignation_date = forms.DateField(widget=SelectDateWidget(), required=False, label="Data di Dimissioni:")
|
||||||
|
student_status = forms.ChoiceField(choices=choice, label="Status Studente")
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Student
|
model = Student
|
||||||
fields= "__all__"
|
fields= "__all__"
|
||||||
@@ -197,7 +253,7 @@ class StudentForm(forms.ModelForm):
|
|||||||
"nation_birth": "Nazione di Nascita",
|
"nation_birth": "Nazione di Nascita",
|
||||||
"course_id": "Corso"
|
"course_id": "Corso"
|
||||||
}
|
}
|
||||||
exclude = ["course_acronym", "course_code", "course_status", "course_year", "course_name"]
|
exclude = ["course_code", "course_status", "course_year", "course_name"]
|
||||||
|
|
||||||
|
|
||||||
class AssignmentComputerForm(forms.Form):
|
class AssignmentComputerForm(forms.Form):
|
||||||
@@ -208,7 +264,6 @@ class AssignmentComputerForm(forms.Form):
|
|||||||
)
|
)
|
||||||
course_code = forms.CharField(label="Codice Corso", max_length=255)
|
course_code = forms.CharField(label="Codice Corso", max_length=255)
|
||||||
codice_fiscale = forms.CharField(label="Codice Fiscale", max_length=255)
|
codice_fiscale = forms.CharField(label="Codice Fiscale", max_length=255)
|
||||||
cespite = forms.CharField(label="Cespite", max_length=255)
|
|
||||||
serial = forms.CharField(label="Seriale", 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_date = forms.DateField(widget=SelectDateWidget(), label="Data di assegnazione", initial=datetime.now().date)
|
||||||
assignment_motivation = forms.ChoiceField(choices=choice)
|
assignment_motivation = forms.ChoiceField(choices=choice)
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 4.2.16 on 2024-10-24 14:51
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('gestionale', '0002_supplier_is_deleted'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='student',
|
||||||
|
name='id_student_course',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -87,7 +87,6 @@ class Student(models.Model):
|
|||||||
birth_date = models.DateField()
|
birth_date = models.DateField()
|
||||||
codice_fiscale = models.CharField(max_length=255)
|
codice_fiscale = models.CharField(max_length=255)
|
||||||
gender = 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)
|
course_acronym = models.CharField(max_length=255)
|
||||||
email_user = models.EmailField(max_length=255)
|
email_user = models.EmailField(max_length=255)
|
||||||
phone_number = models.CharField(max_length=255)
|
phone_number = models.CharField(max_length=255)
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
<div class="benvenuto">
|
<div class="benvenuto">
|
||||||
<h3>Stai aggiungendo un seriale al bundle</h3>
|
<h3>Stai aggiungendo un seriale al bundle</h3>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="/import/serials" class="pure-button pure-button-primary add-button">Importa Seriali</a>
|
||||||
|
<a href="/storage" class="pure-button pure-button-primary add-button">Ritorna al Magazzino</a>
|
||||||
<form action="/add/serial" method="post" class="pure-form pure-form-2 pure-form-stacked">
|
<form action="/add/serial" method="post" class="pure-form pure-form-2 pure-form-stacked">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-content width-100">
|
<div class="form-content width-100">
|
||||||
|
|||||||
@@ -21,10 +21,18 @@
|
|||||||
viewBox="0 0 16 16">
|
viewBox="0 0 16 16">
|
||||||
<path d="M13.5 3a.5.5 0 0 1 .5.5V11H2V3.5a.5.5 0 0 1 .5-.5zm-11-1A1.5 1.5 0 0 0 1 3.5V12h14V3.5A1.5 1.5 0 0 0 13.5 2zM0 12.5h16a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 12.5"/>
|
<path d="M13.5 3a.5.5 0 0 1 .5.5V11H2V3.5a.5.5 0 0 1 .5-.5zm-11-1A1.5 1.5 0 0 0 1 3.5V12h14V3.5A1.5 1.5 0 0 0 13.5 2zM0 12.5h16a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 12.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
Computer
|
<p>Computer</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<a href="/assignment/cespite">
|
||||||
|
<div class="link-card">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-123" viewBox="0 0 16 16">
|
||||||
|
<path d="M2.873 11.297V4.142H1.699L0 5.379v1.137l1.64-1.18h.06v5.961zm3.213-5.09v-.063c0-.618.44-1.169 1.196-1.169.676 0 1.174.44 1.174 1.106 0 .624-.42 1.101-.807 1.526L4.99 10.553v.744h4.78v-.99H6.643v-.069L8.41 8.252c.65-.724 1.237-1.332 1.237-2.27C9.646 4.849 8.723 4 7.308 4c-1.573 0-2.36 1.064-2.36 2.15v.057zm6.559 1.883h.786c.823 0 1.374.481 1.379 1.179.01.707-.55 1.216-1.421 1.21-.77-.005-1.326-.419-1.379-.953h-1.095c.042 1.053.938 1.918 2.464 1.918 1.478 0 2.642-.839 2.62-2.144-.02-1.143-.922-1.651-1.551-1.714v-.063c.535-.09 1.347-.66 1.326-1.678-.026-1.053-.933-1.855-2.359-1.845-1.5.005-2.317.88-2.348 1.898h1.116c.032-.498.498-.944 1.206-.944.703 0 1.206.435 1.206 1.07.005.64-.504 1.106-1.2 1.106h-.75z"/>
|
||||||
|
</svg>
|
||||||
|
<p>Cespite</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
<a href="/assignment/accessory">
|
<a href="/assignment/accessory">
|
||||||
<div class="link-card">
|
<div class="link-card">
|
||||||
@@ -32,11 +40,14 @@
|
|||||||
viewBox="0 0 16 16">
|
viewBox="0 0 16 16">
|
||||||
<path d="M7 0q-.891.002-1.527.463c-.418.302-.717.726-.93 1.208C4.123 2.619 4 3.879 4 5.187v.504L3.382 6A2.5 2.5 0 0 0 2 8.236v2.576C2 13.659 4.22 16 7 16h2c2.78 0 5-2.342 5-5.188V5.186c0-1.13-.272-2.044-.748-2.772-.474-.726-1.13-1.235-1.849-1.59C9.981.123 8.26 0 7 0m2.5 6.099V1.232c.51.11 1.008.267 1.46.49.596.293 1.099.694 1.455 1.24.355.543.585 1.262.585 2.225v1.69zm-1-5.025v4.803L5 5.099c.006-1.242.134-2.293.457-3.024.162-.366.363-.63.602-.801C6.292 1.105 6.593 1 7 1c.468 0 .98.018 1.5.074M5 6.124 13 7.9v2.912C13 13.145 11.19 15 9 15H7c-2.19 0-4-1.855-4-4.188V8.236a1.5 1.5 0 0 1 .83-1.342l.187-.093c.01.265.024.58.047.92.062.938.19 2.12.462 2.937a.5.5 0 1 0 .948-.316c-.227-.683-.35-1.75-.413-2.688a29 29 0 0 1-.06-1.528v-.002z"/>
|
<path d="M7 0q-.891.002-1.527.463c-.418.302-.717.726-.93 1.208C4.123 2.619 4 3.879 4 5.187v.504L3.382 6A2.5 2.5 0 0 0 2 8.236v2.576C2 13.659 4.22 16 7 16h2c2.78 0 5-2.342 5-5.188V5.186c0-1.13-.272-2.044-.748-2.772-.474-.726-1.13-1.235-1.849-1.59C9.981.123 8.26 0 7 0m2.5 6.099V1.232c.51.11 1.008.267 1.46.49.596.293 1.099.694 1.455 1.24.355.543.585 1.262.585 2.225v1.69zm-1-5.025v4.803L5 5.099c.006-1.242.134-2.293.457-3.024.162-.366.363-.63.602-.801C6.292 1.105 6.593 1 7 1c.468 0 .98.018 1.5.074M5 6.124 13 7.9v2.912C13 13.145 11.19 15 9 15H7c-2.19 0-4-1.855-4-4.188V8.236a1.5 1.5 0 0 1 .83-1.342l.187-.093c.01.265.024.58.047.92.062.938.19 2.12.462 2.937a.5.5 0 1 0 .948-.316c-.227-.683-.35-1.75-.413-2.688a29 29 0 0 1-.06-1.528v-.002z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Accessorio
|
<p>Accessorio</p>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<!-- 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/. -->
|
||||||
|
|
||||||
|
{% extends "gestionale/base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
{% if success == True %}
|
||||||
|
<div>
|
||||||
|
<p>Cespite assegnato con successo!</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if err == True %}
|
||||||
|
<div>
|
||||||
|
<p>{{ err_str }}</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<form action="/assignment/cespite" method="post" class="pure-form pure-form-2 pure-form-stacked">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-content width-100">
|
||||||
|
{{ form }}
|
||||||
|
</div>
|
||||||
|
<div class="form-buttons">
|
||||||
|
<button type="submit" class="pure-button pure-button-primary">Assegna</button>
|
||||||
|
<button type="reset" class="pure-button button-warning">Reset</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
@@ -20,12 +20,12 @@
|
|||||||
<div class="pure-menu pure-menu-horizontal">
|
<div class="pure-menu pure-menu-horizontal">
|
||||||
<a href="/" class="pure-menu-heading pure-menu-link"><img src="{% static 'images/xlogo-itsaltoadriatico.svg' %}" width="150px"></a>
|
<a href="/" class="pure-menu-heading pure-menu-link"><img src="{% static 'images/xlogo-itsaltoadriatico.svg' %}" width="150px"></a>
|
||||||
<ul class="pure-menu-list">
|
<ul class="pure-menu-list">
|
||||||
<li class="pure-menu-item">
|
|
||||||
<a href="/storage" class="pure-menu-link">Magazzino</a>
|
|
||||||
</li>
|
|
||||||
<li class="pure-menu-item">
|
<li class="pure-menu-item">
|
||||||
<a href="/suppliers" class="pure-menu-link">Fornitori</a>
|
<a href="/suppliers" class="pure-menu-link">Fornitori</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="pure-menu-item">
|
||||||
|
<a href="/storage" class="pure-menu-link">Magazzino</a>
|
||||||
|
</li>
|
||||||
<li class="pure-menu-item">
|
<li class="pure-menu-item">
|
||||||
<a href="/courses" class="pure-menu-link">Corsi</a>
|
<a href="/courses" class="pure-menu-link">Corsi</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -7,7 +7,12 @@
|
|||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
|
|
||||||
<div class="detail-content">
|
<div class="detail-content">
|
||||||
|
{% if bundle.product_type == "Computer" %}
|
||||||
|
<a href="/import/serials" class="pure-button pure-button-primary add-button">Importa Computer</a>
|
||||||
|
<a href="/export/computers/{{ bundle.id }}" class="pure-button pure-button-primary add-button">Esporta Computer Assegnati</a>
|
||||||
|
{% endif %}
|
||||||
<table class="pure-table pure-table-horizontal width-100">
|
<table class="pure-table pure-table-horizontal width-100">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
<li>Data di Nascita: {{ student.birth_date }}</li>
|
<li>Data di Nascita: {{ student.birth_date }}</li>
|
||||||
<li>Codice Fiscale: {{ student.codice_fiscale }}</li>
|
<li>Codice Fiscale: {{ student.codice_fiscale }}</li>
|
||||||
<li>Sesso: {{ student.gender }}</li>
|
<li>Sesso: {{ student.gender }}</li>
|
||||||
<li>Id Studente Corso: {{ student.id_student_course }}</li>
|
|
||||||
<li>Sigla Corso: {{ student.course_acronym }}</li>
|
<li>Sigla Corso: {{ student.course_acronym }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,16 +12,16 @@
|
|||||||
<p>{{ err_str }}</p>
|
<p>{{ err_str }}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h3>Stai modificando: </h3>
|
<h3>Stai modificando lo studente {{ id }}:</h3>
|
||||||
<form action="/edit/student/{{ id }}" method="post" enctype="multipart/form-data" class="pure-form pure-form-2 pure-form-stacked">
|
<form action="/edit/student/{{ id }}" method="post" enctype="multipart/form-data" class="pure-form pure-form-2 pure-form-stacked">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="from-content width-100">
|
<div class="from-content width-100">
|
||||||
{{ form }}
|
{{ form }}
|
||||||
</div>
|
</div>
|
||||||
<div class="form-buttons">
|
<div class="form-buttons">
|
||||||
<button type="submit" class="pure-button pure-button-primary">Modifica</button>
|
<button type="submit" class="pure-button pure-button-primary">Modifica</button>
|
||||||
<button type="reset" class="pure-button button-warning">Reset</button>
|
<button type="reset" class="pure-button button-warning">Reset</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<!-- 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/. -->
|
||||||
|
|
||||||
|
{% extends "gestionale/base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
{% if err == True %}
|
||||||
|
<div>
|
||||||
|
{{ e }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="import-card">
|
||||||
|
<div>
|
||||||
|
<form action="/import/courses" method="post" enctype="multipart/form-data" class="pure-form pure-form-stacked">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-content">
|
||||||
|
{{ form }}
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="pure-button pure-button-primary">Carica</button>
|
||||||
|
<button type="reset" class="pure-button button-warning">Reset</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<!-- 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/. -->
|
||||||
|
|
||||||
|
{% extends "gestionale/base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block content %}
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
{% if err == True %}
|
||||||
|
<div>
|
||||||
|
{{ e }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="import-card">
|
||||||
|
<div>
|
||||||
|
<form action="/import/serials" method="post" enctype="multipart/form-data" class="pure-form pure-form-stacked">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-content">
|
||||||
|
{{ form }}
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="pure-button pure-button-primary">Carica</button>
|
||||||
|
<button type="reset" class="pure-button button-warning">Reset</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
@@ -9,6 +9,8 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<a href="/add/course" class="pure-button pure-button-primary add-button">Aggiungi Corso</a>
|
<a href="/add/course" class="pure-button pure-button-primary add-button">Aggiungi Corso</a>
|
||||||
|
<a href="/import/courses" class="pure-button pure-button-primary add-button">Importa Corsi</a>
|
||||||
|
|
||||||
<table class="pure-table pure-table-horizontal width-100">
|
<table class="pure-table pure-table-horizontal width-100">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
<li>Data di Nascita: {{ student.birth_date }}</li>
|
<li>Data di Nascita: {{ student.birth_date }}</li>
|
||||||
<li>Codice Fiscale: {{ student.codice_fiscale }}</li>
|
<li>Codice Fiscale: {{ student.codice_fiscale }}</li>
|
||||||
<li>Sesso: {{ student.gender }}</li>
|
<li>Sesso: {{ student.gender }}</li>
|
||||||
<li>Id Studente Corso: {{ student.id_student_course }}</li>
|
|
||||||
<li>Sigla Corso: {{ student.course_acronym }}</li>
|
<li>Sigla Corso: {{ student.course_acronym }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -24,10 +24,10 @@ urlpatterns = [
|
|||||||
path("assignment", views_assignment.assignment, name="assignment"),
|
path("assignment", views_assignment.assignment, name="assignment"),
|
||||||
path("assignment/computer", views_assignment.assignment_computer, name="assignment_computer"),
|
path("assignment/computer", views_assignment.assignment_computer, name="assignment_computer"),
|
||||||
path("assignment/accessory", views_assignment.assignment_accessory, name="assignment_accessory"),
|
path("assignment/accessory", views_assignment.assignment_accessory, name="assignment_accessory"),
|
||||||
|
path("assignment/cespite", views_assignment.assignment_cespite, name="assignment_cespite"),
|
||||||
path("add/bundle", views_add.add_bundle, name="add_bundle"),
|
path("add/bundle", views_add.add_bundle, name="add_bundle"),
|
||||||
path("add/supplier", views_add.add_supplier, name="add_supplier"),
|
path("add/supplier", views_add.add_supplier, name="add_supplier"),
|
||||||
path("add/serial", views_add.add_serial, name="add_serial"),
|
path("add/serial", views_add.add_serial, name="add_serial"),
|
||||||
path("add/accessory", views_add.add_accessory, name="add_accessory"),
|
path("add/accessory", views_add.add_accessory, name="add_accessory"),
|
||||||
path("add/course", views_add.add_course, name="add_course"),
|
path("add/course", views_add.add_course, name="add_course"),
|
||||||
path("add/ticket", views_add.add_ticket, name="add_ticket"),
|
path("add/ticket", views_add.add_ticket, name="add_ticket"),
|
||||||
@@ -57,6 +57,10 @@ urlpatterns = [
|
|||||||
path("reset/accessory/<int:id>", views_reset.reset_accessory, name="reset_accessory"),
|
path("reset/accessory/<int:id>", views_reset.reset_accessory, name="reset_accessory"),
|
||||||
|
|
||||||
path("import/students", views.import_students, name="import_students"),
|
path("import/students", views.import_students, name="import_students"),
|
||||||
|
path("import/serials", views.import_serials, name="import_serials"),
|
||||||
|
path("import/courses", views.import_courses, name="import_courses"),
|
||||||
|
|
||||||
|
path("export/computers/<int:id_b>", views.export_computers, name="export_computers"),
|
||||||
|
|
||||||
path("toggle/course/<int:id>", views.toggle_course, name="toggle_course"),
|
path("toggle/course/<int:id>", views.toggle_course, name="toggle_course"),
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import copy
|
|||||||
import csv
|
import csv
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from django.views.defaults import bad_request
|
from django.views.defaults import bad_request
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ def import_students(request):
|
|||||||
if not csv_file.name.endswith(".csv"):
|
if not csv_file.name.endswith(".csv"):
|
||||||
form = CSVUpdateForm()
|
form = CSVUpdateForm()
|
||||||
err = True
|
err = True
|
||||||
return render(request, "gestionale/importstudents.html", {
|
return render(request, "gestionale/import/students.html", {
|
||||||
"err": err, "form": form
|
"err": err, "form": form
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
@@ -58,15 +59,18 @@ def import_students(request):
|
|||||||
csv_data = csv_file.read().decode("utf-8").splitlines()
|
csv_data = csv_file.read().decode("utf-8").splitlines()
|
||||||
reader = csv.DictReader(csv_data)
|
reader = csv.DictReader(csv_data)
|
||||||
for row in reader:
|
for row in reader:
|
||||||
course = get_object_or_404(Course, course_code=row["Codice Corso"])
|
course = get_object_or_404(Course, course_code=row["CodiceCorso"])
|
||||||
birth_date = datetime.strptime(row["DataNascita"], "%d/%m/%Y")
|
birth_date = datetime.strptime(row["DataNascita"], "%m/%d/%Y")
|
||||||
|
if row["DataDimissioni"] == "":
|
||||||
|
resignation_date = None
|
||||||
|
else:
|
||||||
|
resignation_date = datetime.strptime(row["DataDimissioni"], "%m/%d/$Y")
|
||||||
student = Student()
|
student = Student()
|
||||||
student.id_student_course = row["IDAllievoCorso"]
|
|
||||||
student.codice_fiscale = row["CodiceFiscale"]
|
student.codice_fiscale = row["CodiceFiscale"]
|
||||||
student.course_acronym = row["SiglaCorso"]
|
student.course_acronym = row["AcronimoCorso"]
|
||||||
student.last_name = row["Cognome"]
|
student.last_name = row["Cognome"]
|
||||||
student.first_name = row["Nome"]
|
student.first_name = row["Nome"]
|
||||||
student.email_user = row["EmailUser"]
|
student.email_user = f"{row['Nome'].strip().replace(" ", "").lower()}.{row['Cognome'].strip().replace(" ","").lower()}@stud.itsaltoadriatico.it" if row["EmailGSuite"] == "" else row["EmailGSuite"].lower()
|
||||||
student.phone_number = row["Tel"]
|
student.phone_number = row["Tel"]
|
||||||
student.municipality_residence = row["ComuneRes"]
|
student.municipality_residence = row["ComuneRes"]
|
||||||
student.province_residence = row["ProvRes"]
|
student.province_residence = row["ProvRes"]
|
||||||
@@ -74,90 +78,96 @@ def import_students(request):
|
|||||||
student.birth_date = birth_date
|
student.birth_date = birth_date
|
||||||
student.municipality_birth = row["ComuneNascita"]
|
student.municipality_birth = row["ComuneNascita"]
|
||||||
student.province_birth = row["ProvNascita"]
|
student.province_birth = row["ProvNascita"]
|
||||||
student.resignation_date = None if row["DataDimissioni"]=="" else row["DataDimissioni"]
|
student.resignation_date = resignation_date
|
||||||
student.gender = row["Genere"]
|
student.gender = row["Sex"]
|
||||||
student.nation_birth = row["NazioneNasc"]
|
student.nation_birth = row["NazioneNasc"]
|
||||||
student.course_id = course
|
student.course_id = course
|
||||||
student.save()
|
student.save()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
form = CSVUpdateForm()
|
form = CSVUpdateForm()
|
||||||
err = True
|
err = True
|
||||||
return render(request, "gestionale/importstudents.html", {
|
return render(request, "gestionale/import/students.html", {
|
||||||
"err": err, "form": form, "e": e
|
"err": err, "form": form, "e": e
|
||||||
})
|
})
|
||||||
return redirect('import_students')
|
return redirect('import_students')
|
||||||
else:
|
else:
|
||||||
form = CSVUpdateForm()
|
form = CSVUpdateForm()
|
||||||
err = True
|
err = True
|
||||||
return render(request, "gestionale/importstudents.html", {
|
return render(request, "gestionale/import/students.html", {
|
||||||
"err": err, "form": form
|
"err": err, "form": form
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
form = CSVUpdateForm()
|
form = CSVUpdateForm()
|
||||||
return render(request, "gestionale/importstudents.html", {
|
return render(request, "gestionale/import/students.html", {
|
||||||
"form": form
|
"form": form
|
||||||
})
|
})
|
||||||
|
|
||||||
def import_bundle(request):
|
def import_courses(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/import/courses.html",{
|
||||||
|
"err": err, "form": form
|
||||||
|
})
|
||||||
|
try:
|
||||||
|
record = Record()
|
||||||
|
record.date = datetime.now().date()
|
||||||
|
record.action = "import"
|
||||||
|
record.product = "courses"
|
||||||
|
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 = Course()
|
||||||
|
course.course_name = row["Nome"]
|
||||||
|
course.course_name_extended = row["NomeEsteso"]
|
||||||
|
course.course_code = row["Codice"]
|
||||||
|
course.course_year = row["Anno"]
|
||||||
|
course.course_location = row["Posizione"]
|
||||||
|
course.student_number = row["NumeroStudenti"]
|
||||||
|
if row["Status"] == 0:
|
||||||
|
course.course_status = False
|
||||||
|
else:
|
||||||
|
course.course_status = True
|
||||||
|
|
||||||
|
course.save()
|
||||||
|
|
||||||
|
return redirect("courses")
|
||||||
|
except Exception as e:
|
||||||
|
form = CSVUpdateForm()
|
||||||
|
err = True
|
||||||
|
return render(request, "gestionale/import/courses.html", {
|
||||||
|
"err": err, "form": form, "e": e})
|
||||||
|
|
||||||
|
else:
|
||||||
|
form = CSVUpdateForm()
|
||||||
|
err = True
|
||||||
|
return render(request, "gestionale/import/courses.html", {
|
||||||
|
"err": err, "form": form
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
form = CSVUpdateForm()
|
||||||
|
return render(request, "gestionale/import/courses.html", {
|
||||||
|
"form": form
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def import_serials(request):
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = CSVUpdateForm(request.POST, request.FILES)
|
form = CSVUpdateForm(request.POST, request.FILES)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
csv_file = request.FILES["file"]
|
csv_file = request.FILES["file"]
|
||||||
if not csv_file.endswith(".csv"):
|
if not csv_file.name.endswith(".csv"):
|
||||||
form = CSVUpdateForm()
|
form = CSVUpdateForm()
|
||||||
err = True
|
err = True
|
||||||
return render(request, "gestionale/import/bundle.html",{
|
return render(request, "gestionale/import/serials.html",{
|
||||||
"err": err, "form": form
|
|
||||||
})
|
|
||||||
try:
|
|
||||||
record = Record()
|
|
||||||
record.date = datetime.now().date()
|
|
||||||
record.action = "import"
|
|
||||||
record.product = "bundle"
|
|
||||||
record.user = request.user
|
|
||||||
record.save()
|
|
||||||
|
|
||||||
csv_data = csv_file.read().decode("utf-8").splitlines()
|
|
||||||
reader = csv.DictReader(csv_data)
|
|
||||||
for row in reader:
|
|
||||||
pass
|
|
||||||
except:
|
|
||||||
if request.method == "POST":
|
|
||||||
form = CSVUpdateForm(request.POST, request.FILES)
|
|
||||||
if form.is_valid():
|
|
||||||
csv_file = request.FILES["file"]
|
|
||||||
if not csv_file.endswith(".csv"):
|
|
||||||
form = CSVUpdateForm()
|
|
||||||
err = True
|
|
||||||
return render(request, "gestionale/import/bundle.html",{
|
|
||||||
"err": err, "form": form
|
|
||||||
})
|
|
||||||
try:
|
|
||||||
record = Record()
|
|
||||||
record.date = datetime.now().date()
|
|
||||||
record.action = "import"
|
|
||||||
record.product = "bundle"
|
|
||||||
record.user = request.user
|
|
||||||
record.save()
|
|
||||||
|
|
||||||
csv_data = csv_file.read().decode("utf-8").splitlines()
|
|
||||||
reader = csv.DictReader(csv_data)
|
|
||||||
for row in reader:
|
|
||||||
pass
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
passpass
|
|
||||||
pass
|
|
||||||
|
|
||||||
def import_computers(request):
|
|
||||||
if request.method == "POST":
|
|
||||||
form = CSVUpdateForm(request.POST, request.FILES)
|
|
||||||
if form.is_valid():
|
|
||||||
csv_file = request.FILES["file"]
|
|
||||||
if not csv_file.endswith(".csv"):
|
|
||||||
form = CSVUpdateForm()
|
|
||||||
err = True
|
|
||||||
return render(request, "gestionale/import/computers.html",{
|
|
||||||
"err": err, "form": form
|
"err": err, "form": form
|
||||||
})
|
})
|
||||||
try:
|
try:
|
||||||
@@ -165,23 +175,41 @@ def import_computers(request):
|
|||||||
record.date = datetime.now().date()
|
record.date = datetime.now().date()
|
||||||
record.action = "import"
|
record.action = "import"
|
||||||
record.product = "computers"
|
record.product = "computers"
|
||||||
|
record.product_detail = csv_file
|
||||||
record.user = request.user
|
record.user = request.user
|
||||||
record.save()
|
record.save()
|
||||||
|
|
||||||
csv_data = csv_file.read().decode("utf-8").splitlines()
|
csv_data = csv_file.read().decode("utf-8").splitlines()
|
||||||
reader = csv.DictReader(csv_data)
|
reader = csv.DictReader(csv_data)
|
||||||
for row in reader:
|
for row in reader:
|
||||||
bundle= get_object_or_404(Bundle, id = row["Id Bundle"])
|
bundle = get_object_or_404(Bundle, id = row["IdBundle"])
|
||||||
|
computer = Computer()
|
||||||
|
computer.id_bundle = bundle
|
||||||
|
computer.status = "in_stock"
|
||||||
|
computer.serial = row["Seriale"]
|
||||||
|
computer.is_deleted = False
|
||||||
|
computer.eol = False
|
||||||
|
computer.eol_date = None
|
||||||
|
computer.save()
|
||||||
|
|
||||||
pass
|
return redirect("storage")
|
||||||
except:
|
except Exception as e:
|
||||||
pass
|
form = CSVUpdateForm()
|
||||||
|
err = True
|
||||||
|
return render(request, "gestionale/import/serials.html", {
|
||||||
|
"err": err, "form": form, "e": e})
|
||||||
|
|
||||||
def import_accessories(request):
|
else:
|
||||||
pass
|
form = CSVUpdateForm()
|
||||||
|
err = True
|
||||||
def import_courses(request):
|
return render(request, "gestionale/import/serials.html", {
|
||||||
pass
|
"err": err, "form": form
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
form = CSVUpdateForm()
|
||||||
|
return render(request, "gestionale/import/serials.html", {
|
||||||
|
"form": form
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff )
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff )
|
||||||
@@ -215,3 +243,24 @@ def take_ticket(request, id):
|
|||||||
return redirect("tickets")
|
return redirect("tickets")
|
||||||
else:
|
else:
|
||||||
return bad_request
|
return bad_request
|
||||||
|
|
||||||
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff )
|
||||||
|
def export_computers(request, id_b):
|
||||||
|
response = HttpResponse(
|
||||||
|
content_type="text/csv",
|
||||||
|
headers={"Content-Disposition": "attachment; filename=export_computers.csv"}
|
||||||
|
)
|
||||||
|
writer = csv.writer(response)
|
||||||
|
writer.writerow(["Nome", "Cognome", "Corso", "CodiceFiscale", "Cespite", "Seriale", "DataConsegna"])
|
||||||
|
computers = Computer.objects.filter(status="assigned", id_bundle = id_b).order_by("id")
|
||||||
|
for computer in computers:
|
||||||
|
writer.writerow([
|
||||||
|
computer.id_student.first_name,
|
||||||
|
computer.id_student.last_name,
|
||||||
|
computer.id_student.course_id.course_name,
|
||||||
|
computer.id_student.codice_fiscale,
|
||||||
|
computer.cespite,
|
||||||
|
computer.serial,
|
||||||
|
computer.assignment_date
|
||||||
|
])
|
||||||
|
return response
|
||||||
@@ -87,7 +87,7 @@ def add_supplier(request):
|
|||||||
return render(request, "gestionale/add/addsupplier.html", {
|
return render(request, "gestionale/add/addsupplier.html", {
|
||||||
"form": form, "err": err
|
"form": form, "err": err
|
||||||
})
|
})
|
||||||
return redirect('storage')
|
return redirect('suppliers')
|
||||||
else:
|
else:
|
||||||
form = SupplierForm()
|
form = SupplierForm()
|
||||||
return render(request, "gestionale/add/addsupplier.html", {
|
return render(request, "gestionale/add/addsupplier.html", {
|
||||||
@@ -95,7 +95,7 @@ def add_supplier(request):
|
|||||||
})
|
})
|
||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def add_serial(request):
|
def add_serial(request, form_serial=None):
|
||||||
bundle = Bundle.objects.last()
|
bundle = Bundle.objects.last()
|
||||||
qt = range(bundle.qt)
|
qt = range(bundle.qt)
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
@@ -122,9 +122,8 @@ def add_serial(request):
|
|||||||
record.user = request.user
|
record.user = request.user
|
||||||
record.save()
|
record.save()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return redirect('storage')
|
return redirect('storage')
|
||||||
|
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
err = True
|
err = True
|
||||||
err_str = "L'inserimento é errato o incompleto!"
|
err_str = "L'inserimento é errato o incompleto!"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.http import Http404
|
|||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from django.views.defaults import bad_request
|
from django.views.defaults import bad_request
|
||||||
|
|
||||||
from ..forms import AssignmentComputerForm, AssignmentAccessoryForm
|
from ..forms import AssignmentComputerForm, AssignmentAccessoryForm, CespiteForm
|
||||||
from ..models import Computer, Accessory, Student, Course, Record
|
from ..models import Computer, Accessory, Student, Course, Record
|
||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
@@ -23,6 +23,7 @@ def assignment(request):
|
|||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def assignment_computer(request):
|
def assignment_computer(request):
|
||||||
|
success_ = None
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = AssignmentComputerForm(request.POST)
|
form = AssignmentComputerForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@@ -35,7 +36,6 @@ def assignment_computer(request):
|
|||||||
computer_copy = copy.deepcopy(computer)
|
computer_copy = copy.deepcopy(computer)
|
||||||
record.prev_product_detail = computer_copy
|
record.prev_product_detail = computer_copy
|
||||||
eol_date = (form["assignment_date"] + timedelta(days=1460))
|
eol_date = (form["assignment_date"] + timedelta(days=1460))
|
||||||
computer.cespite = form["cespite"]
|
|
||||||
computer.status = "assigned"
|
computer.status = "assigned"
|
||||||
computer.id_student = student
|
computer.id_student = student
|
||||||
computer.assignment_date = form["assignment_date"]
|
computer.assignment_date = form["assignment_date"]
|
||||||
@@ -52,17 +52,19 @@ def assignment_computer(request):
|
|||||||
|
|
||||||
except Http404:
|
except Http404:
|
||||||
form = AssignmentComputerForm()
|
form = AssignmentComputerForm()
|
||||||
|
success_ = False
|
||||||
err = True
|
err = True
|
||||||
err_str = "Uno o più dei valori inseriti non é stato trovato"
|
err_str = "Uno o più dei valori inseriti non é stato trovato"
|
||||||
return render(request, "gestionale/assignment/assignment_computer.html", {
|
return render(request, "gestionale/assignment/assignment_computer.html", {
|
||||||
"err": err, "err_str": err_str, "form": form
|
"err": err, "err_str": err_str, "form": form, "success": success_
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
form = AssignmentComputerForm()
|
form = AssignmentComputerForm()
|
||||||
|
success_ = False
|
||||||
err = True
|
err = True
|
||||||
err_str = "L'inserimento è incompleto o errato!"
|
err_str = "L'inserimento è incompleto o errato!"
|
||||||
return render(request, "gestionale/assignment/assignment_computer.html", {
|
return render(request, "gestionale/assignment/assignment_computer.html", {
|
||||||
"err": err, "err_str": err_str, "form": form
|
"err": err, "err_str": err_str, "form": form, "success": success_
|
||||||
})
|
})
|
||||||
return redirect("assignment_computer")
|
return redirect("assignment_computer")
|
||||||
else:
|
else:
|
||||||
@@ -70,11 +72,12 @@ def assignment_computer(request):
|
|||||||
err = False
|
err = False
|
||||||
err_str = ""
|
err_str = ""
|
||||||
return render(request, "gestionale/assignment/assignment_computer.html", {
|
return render(request, "gestionale/assignment/assignment_computer.html", {
|
||||||
"form": form, "err": err, "err_str": err_str
|
"form": form, "err": err, "err_str": err_str, "success": success_
|
||||||
})
|
})
|
||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def assignment_accessory(request):
|
def assignment_accessory(request):
|
||||||
|
success_ = None
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = AssignmentAccessoryForm(request.POST)
|
form = AssignmentAccessoryForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@@ -101,17 +104,19 @@ def assignment_accessory(request):
|
|||||||
|
|
||||||
except Http404:
|
except Http404:
|
||||||
form = AssignmentAccessoryForm()
|
form = AssignmentAccessoryForm()
|
||||||
|
success_ = False
|
||||||
err = True
|
err = True
|
||||||
err_str = "Uno o più dei valori inseriti non é stato trovato"
|
err_str = "Uno o più dei valori inseriti non é stato trovato"
|
||||||
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
||||||
"err": err, "err_str": err_str, "form": form
|
"err": err, "err_str": err_str, "form": form, "success": success_
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
form = AssignmentAccessoryForm()
|
form = AssignmentAccessoryForm()
|
||||||
|
success_ = False
|
||||||
err = True
|
err = True
|
||||||
err_str = "L'inserimento è incompleto o errato!"
|
err_str = "L'inserimento è incompleto o errato!"
|
||||||
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
||||||
"err": err, "err_str": err_str, "form": form
|
"err": err, "err_str": err_str, "form": form, "success": success_
|
||||||
})
|
})
|
||||||
return redirect("assignment_accessory")
|
return redirect("assignment_accessory")
|
||||||
else:
|
else:
|
||||||
@@ -119,5 +124,51 @@ def assignment_accessory(request):
|
|||||||
err = False
|
err = False
|
||||||
err_str = ""
|
err_str = ""
|
||||||
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
return render(request, "gestionale/assignment/assignment_accessory.html", {
|
||||||
"form": form, "err": err, "err_str": err_str
|
"form": form, "err": err, "err_str": err_str, "success": success_
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
|
def assignment_cespite(request):
|
||||||
|
success_ = None
|
||||||
|
if request.method == "POST":
|
||||||
|
form = CespiteForm(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
form = form.cleaned_data
|
||||||
|
try:
|
||||||
|
record = Record()
|
||||||
|
computer = get_object_or_404(Computer, serial=form["serial"])
|
||||||
|
computer_copy = copy.deepcopy(computer)
|
||||||
|
computer.cespite = form["cespite"]
|
||||||
|
computer.save()
|
||||||
|
|
||||||
|
record.date = datetime.now().date()
|
||||||
|
record.action = "assignment"
|
||||||
|
record.product = "cespite"
|
||||||
|
record.product_detail = computer
|
||||||
|
record.prev_product_detail = computer_copy
|
||||||
|
record.user = request.user
|
||||||
|
record.save()
|
||||||
|
except Http404:
|
||||||
|
form = CespiteForm()
|
||||||
|
success_ = False
|
||||||
|
err = True
|
||||||
|
err_str = "Uno o più dei valori inseriti non é stato trovato"
|
||||||
|
return render(request, "gestionale/assignment/cespite.html", {
|
||||||
|
"err": err, "err_str": err_str, "form": form, "success": success_
|
||||||
|
})
|
||||||
|
return redirect("assignment_cespite")
|
||||||
|
else:
|
||||||
|
form = CespiteForm()
|
||||||
|
success_ = False
|
||||||
|
err = True
|
||||||
|
err_str = "L'inserimento é incompleto o errato!"
|
||||||
|
return render(request, "gestionale/assignment/cespite.html", {
|
||||||
|
"form": form, "err": err, "err_str": err_str , "success": success_ })
|
||||||
|
|
||||||
|
else:
|
||||||
|
form = CespiteForm()
|
||||||
|
err = False
|
||||||
|
err_str = ""
|
||||||
|
return render(request, "gestionale/assignment/cespite.html", {
|
||||||
|
"form": form , "err": err, "err_str": err_str, "success": success_ })
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ def delete_supplier(request, id):
|
|||||||
supplier.is_deleted = True
|
supplier.is_deleted = True
|
||||||
|
|
||||||
record.date = datetime.now().date()
|
record.date = datetime.now().date()
|
||||||
record.action = "reset"
|
record.action = "delete"
|
||||||
record.product = "supplier"
|
record.product = "supplier"
|
||||||
record.user = request.user
|
record.user = request.user
|
||||||
record.save()
|
record.save()
|
||||||
@@ -91,7 +91,7 @@ def delete_computer(request, id):
|
|||||||
computer.delete()
|
computer.delete()
|
||||||
|
|
||||||
record.date = datetime.now().date()
|
record.date = datetime.now().date()
|
||||||
record.action = "reset"
|
record.action = "delete"
|
||||||
record.product = "computer"
|
record.product = "computer"
|
||||||
record.user = request.user
|
record.user = request.user
|
||||||
record.save()
|
record.save()
|
||||||
@@ -118,8 +118,8 @@ def delete_accessory(request, id):
|
|||||||
accessory.delete()
|
accessory.delete()
|
||||||
|
|
||||||
record.date = datetime.now().date()
|
record.date = datetime.now().date()
|
||||||
record.action = "reset"
|
record.action = "delete"
|
||||||
record.product = "computer"
|
record.product = "accessory"
|
||||||
record.user = request.user
|
record.user = request.user
|
||||||
record.save()
|
record.save()
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ def details_bundle(request, id):
|
|||||||
computers = None
|
computers = None
|
||||||
accessories = None
|
accessories = None
|
||||||
if bundle.product_type == "Computer":
|
if bundle.product_type == "Computer":
|
||||||
computers = Computer.objects.filter(id_bundle_id=id)
|
computers = Computer.objects.filter(id_bundle_id=id).order_by("id")
|
||||||
if bundle.product_type == "Accessory":
|
if bundle.product_type == "Accessory":
|
||||||
accessories = Accessory.objects.filter(id_bundle_id=id)
|
accessories = Accessory.objects.filter(id_bundle_id=id).order_by("id")
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render(request, "gestionale/details/detailsbundle.html", {
|
return render(request, "gestionale/details/detailsbundle.html", {
|
||||||
"bundle": bundle, "computers": computers, "accessories": accessories, "bundle_type": bundle_type,
|
"bundle": bundle, "computers": computers, "accessories": accessories, "bundle_type": bundle_type,
|
||||||
@@ -32,7 +32,7 @@ def details_bundle(request, id):
|
|||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def details_course(request, id):
|
def details_course(request, id):
|
||||||
course = get_object_or_404(Course, id=id)
|
course = get_object_or_404(Course, id=id)
|
||||||
students = Student.objects.filter(course_id= id)
|
students = Student.objects.filter(course_id=id).order_by("id")
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render(request, "gestionale/details/detailscourse.html", {
|
return render(request, "gestionale/details/detailscourse.html", {
|
||||||
"course": course, "students": students
|
"course": course, "students": students
|
||||||
@@ -43,8 +43,8 @@ def details_course(request, id):
|
|||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def details_student(request, id):
|
def details_student(request, id):
|
||||||
student = get_object_or_404(Student, id=id)
|
student = get_object_or_404(Student, id=id)
|
||||||
computers = Computer.objects.filter(id_student_id=id)
|
computers = Computer.objects.filter(id_student_id=id).order_by("id")
|
||||||
accessories = Accessory.objects.filter(id_student_id=id)
|
accessories = Accessory.objects.filter(id_student_id=id).order_by("id")
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render(request, "gestionale/details/detailsstudent.html", {
|
return render(request, "gestionale/details/detailsstudent.html", {
|
||||||
"student": student, "computers": computers, "accessories": accessories
|
"student": student, "computers": computers, "accessories": accessories
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from ..models import Bundle, Supplier, Student, Course, Ticket
|
|||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def storage(request):
|
def storage(request):
|
||||||
bundles = Bundle.objects.all()
|
bundles = Bundle.objects.all().order_by("-id")
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render(request, "gestionale/list/storage.html", {
|
return render(request, "gestionale/list/storage.html", {
|
||||||
"bundles": bundles
|
"bundles": bundles
|
||||||
@@ -31,7 +31,7 @@ def suppliers(request):
|
|||||||
|
|
||||||
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
@user_passes_test(lambda u: u.is_superuser or u.is_staff)
|
||||||
def students(request):
|
def students(request):
|
||||||
students = Student.objects.all().order_by("course_acronym")
|
students = Student.objects.all().order_by("course_id")
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
return render(request, "gestionale/list/students.html", {
|
return render(request, "gestionale/list/students.html", {
|
||||||
"students": students
|
"students": students
|
||||||
|
|||||||
Reference in New Issue
Block a user