Skip to content

Commit 9721fea

Browse files
committed
Merge remote-tracking branch 'origin/main' into main
2 parents e301e59 + 53b0d7f commit 9721fea

File tree

3 files changed

+240
-1
lines changed

3 files changed

+240
-1
lines changed

Dipendente.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from ast import match_case
2+
3+
4+
class Dipendente(Lavoratore):
5+
def __init__(self,nome, cognome, data_nascita, sesso, peso, idbadge, mansione, livello):
6+
super().__init__(nome, cognome, data_nascita, sesso, peso, idbadge, mansione)
7+
self._livello = livello
8+
logger.info("E' stato inserito un dipendente.")
9+
10+
def __str__(self):
11+
return super().__str__() + ' ' + self._livello
12+
13+
def __eq__(self, other):
14+
if isinstance(other, Dipendente):
15+
if super().__eq__(other) and other._livello == self._livello:
16+
return True
17+
return False
18+
19+
def __hash__(self):
20+
return hash((super().__hash__(), self._livello))
21+
22+
def get_livello(self):
23+
return self._livello
24+
25+
def set_idbadge(self, x):
26+
Lavoratore.check_id(x)
27+
self._livello = x
28+
29+
@staticmethod
30+
def check_liv(liv):
31+
if isinstance(liv,int) and liv>0:
32+
pass
33+
else:
34+
raise('Inserire un livello corretto')
35+
36+
def calcolo_stipendio(self, mansione, livl):
37+
item = [mansione, livl]
38+
match item:
39+
case [7, 'addetto pulizie']:
40+
stipendio = 1275.00
41+
case [7, 'inserviente']:
42+
stipendio = 1230.00
43+
case [6, 'operaio comune']:
44+
stipendio = 1392.00
45+
case [6, 'fattorino']:
46+
stipendio = 1359.00
47+
case [5, 'impiegato']:
48+
stipendio = 1476.00
49+
case [5, 'operaio qualificato']:
50+
stipendio = 1494.00
51+
case [4, "impiegato d'ordine"]:
52+
stipendio = 1600.00
53+
case [4, 'operaio specialzzato']:
54+
stipendio = 1610.00
55+
case [3, 'impiegato di concetto']:
56+
stipendio = 1772.00
57+
case [3, 'operaio specializzato provetto']:
58+
stipendio = 1789.00
59+
case [2, 'impiegato autonomo']:
60+
stipendio = 1988.00
61+
case [2, 'impiegato direttivo']:
62+
stipendio = 1979.00
63+
case [1, 'manager']:
64+
stipendio = 2670.00
65+
case [1, 'direttore']:
66+
stipendio = 2790.00
67+
case [1, 'responsabile']:
68+
stipendio = 2390.00
69+
case _:
70+
return ("Errore nel calcolo dello stipendio")
71+
return stipendio

lavoratoreP.iva.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ def __init__(self,nome, cognome, data_nascita, sesso, peso, idbadge, mansione,ta
66
super().__init__(nome, cognome, data_nascita, sesso, peso, idbadge, mansione, tariffa_gg, ore_lavorate)
77
self._tariffa_gg=tariffa_gg
88
self._ore_lavorate=ore_lavorate
9+
10+
911

1012
def __str__(self):
1113
return super().__str__() + ' ' + self._tariffa_gg + ' ' + self._ore_lavorate

persona.py

Lines changed: 167 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,170 @@ def check_id(idbadge):
9797

9898
@abstractmethod
9999
def stipendio(self):
100-
pass
100+
pass
101+
102+
103+
from persona import Persona
104+
from datetime import datetime
105+
import logging
106+
107+
logger = logging.getLogger(__name__)
108+
109+
110+
class Studente(Persona):
111+
112+
@property
113+
def matricola(self):
114+
return self._matricola
115+
116+
@matricola.setter
117+
def matricola(self, matricola):
118+
self._matricola = matricola
119+
120+
@property
121+
def corso_di_studio(self):
122+
return self._corso_di_studio
123+
124+
@corso_di_studio.setter
125+
def corso_di_studio(self, corso_di_sudtio):
126+
self._corso_di_studio = corso_di_sudtio
127+
128+
@property
129+
def alchool(self):
130+
return self._alchool
131+
132+
@alchool.setter
133+
def alchool(self, alchool):
134+
self._alchool = alchool
135+
136+
@alchool.deleter
137+
def alchool(self):
138+
self._alchool = list()
139+
140+
@property
141+
def esami(self):
142+
return self._esami
143+
144+
@esami.setter
145+
def esami(self, esami):
146+
self._esami = esami
147+
148+
def __init__(self, nome: str, cognome: str, sesso: bool, peso: int, data_di_nascita: datetime, matricola: int,
149+
corso_di_studio: str, alchool: list, esami: dict):
150+
"""
151+
Metodo init per la creazione di uno studente
152+
:param nome: nome dello studente, deve essere di tipo str.
153+
:param cognome: cognome dello studente, deve essere di tipo str.
154+
:param sesso: sesso dello studente, deve essere True per maschio False per le femmina.
155+
:param peso: peso dello studente, deve essere un intero.
156+
:param data_di_nascita: data di nascita dello studente, deve essere di tipo datetime.
157+
:param matricola: matricola dello studente, deve essere un intero.
158+
:param corso_di_studio: cordo di studio dello studente, deve essere una stringa.
159+
:param alchool: lista di bevande consumate dallo studente, deve essere una lista di tuple di lunghezza due, al
160+
primo posto il tasso alcholico della bevanda e al secondo il volume della bevanda e.g. [(14, 200), (30, 50)]
161+
si nota che il primo membro della tupla e` una percentuale quiindi i valori devono essere compresi tra 0 e 100.
162+
:param esami: dizionario degli esami conseguiti dallo studente, il dizionario deve avere come chiave il nome
163+
dell'esame e come valore la tupla (crediti, voto, lode), dove crediti e voto sono interi e il voto deve essere
164+
compreso tra 18 e 30, mentre lode e` un boolean, si nota che la lode non puo` essere assegnata se il voto non
165+
e` 30.
166+
"""
167+
168+
for e in esami.values():
169+
assert isinstance(e, tuple)
170+
assert len(e) == 3
171+
assert isinstance(e[0], int) and isinstance(e[1], int) and isinstance(e[2], bool)
172+
assert 18 <= e[1] <= 30
173+
assert e[1] != 30 and e[3] is True
174+
assert isinstance(nome, str)
175+
assert isinstance(cognome, str)
176+
assert isinstance(data_di_nascita, datetime)
177+
for a in alchool:
178+
assert isinstance(a, tuple)
179+
assert len(a) == 2
180+
assert 0 <= a[0] <= 100
181+
182+
super().__init__(nome, cognome, data_di_nascita, sesso, peso)
183+
self._matricola = matricola
184+
self._corso_di_studio = corso_di_studio
185+
self._alchool = alchool
186+
self._esami = esami
187+
188+
def __eq__(self, other):
189+
"""
190+
funziona equal che paragona se due studenti sono uguali usando il numero matricola.
191+
:param other: oggetto di tipo persona
192+
:return: True se i due oggetti Studente hanno la stessa matricola altrimenti False.
193+
"""
194+
return True if self._matricola == other.matricola else False
195+
196+
def __str__(self):
197+
return str(f"Studente {self._nome} {self._cognome}, matricola {self._matricola}, iscritto al corso di studio"
198+
f"{self._corso_di_studio}")
199+
200+
def calcolo_media_esami(self):
201+
"""
202+
metodo che calcola la media degli esami.
203+
:return: ritorna la media degli esami.
204+
"""
205+
crediti_totali = sum(map(lambda x: x[0], self._esami.values()))
206+
media = sum(map(lambda x: x[0] * x[1], self._esami.values())) / crediti_totali
207+
return media
208+
209+
def calcola_tasso_alcolemico(self):
210+
"""
211+
metodo che calcola il tasso alcolemico.
212+
:return: ritornoa il tasso alcolemico.
213+
"""
214+
coefficente_difusione = 0.73 if self._sesso else 0.66
215+
sum_beverage = sum(map(lambda x: x[0] * x[1], self._alchool))
216+
return sum_beverage * 0.008 * 1.055 / (coefficente_difusione * self._peso)
217+
218+
219+
from persona import Lavoratore
220+
221+
222+
class LavoratorePiva(Lavoratore):
223+
def __init__(self,nome, cognome, data_nascita, sesso, peso, idbadge, mansione,tariffa_gg, ore_lavorate):
224+
super().__init__(nome, cognome, data_nascita, sesso, peso, idbadge, mansione, tariffa_gg, ore_lavorate)
225+
self._tariffa_gg=tariffa_gg
226+
self._ore_lavorate=ore_lavorate
227+
logger.info("E' stato inserito un lavoratore con P.iva.")
228+
229+
230+
231+
232+
def __str__(self):
233+
return super().__str__() + ' ' + self._tariffa_gg + ' ' + self._ore_lavorate
234+
235+
def __eq__(self, other):
236+
if isinstance(other, LavoratorePiva):
237+
if super().__eq__(other) and other._tariffa_gg == self._tariffa_gg and other._ore_lavorate == self._ore_lavorate:
238+
return True
239+
return False
240+
241+
def get_tariffa_gg (self):
242+
return self.get_tariffa_gg
243+
244+
def set_tariffa_gg (self,x):
245+
if x<=0:
246+
raise ('Tariffa non valida!')
247+
else:
248+
self._tariffa_gg=x
249+
250+
def get_ore_lavorate(self):
251+
return self.get_ore_lavorate
252+
253+
def set_ore_lavorate(self,x):
254+
if x<0:
255+
raise ('Ore lavorate non può essere negativo!')
256+
elif x==0:
257+
raise ('Nessuna ora di lavoro')
258+
else:
259+
self._ore_lavorate=x
260+
261+
262+
263+
def calcola_stipendio(self):
264+
stipendio= sum(map(lambda x: x[0] + x[1], self._tariffa_gg.values(),self._ore_lavorate.values()))
265+
return stipendio
266+

0 commit comments

Comments
 (0)