|
class Model(object): |
|
'''modelo de datos base''' |
|
|
|
def __init__(self, item, collection): |
|
|
|
self.__collection = collection |
|
|
|
@property |
|
def collection(self): |
|
'''instancia de colleccion padre a la que se encuentra vinculado el |
|
modelo''' |
|
|
|
return self.__collection |
|
|
|
|
|
class Employee(Model): |
|
'''modelo de datos del empleado''' |
|
|
|
def __init__(self, item, collection): |
|
|
|
super().__init__(item, collection) |
|
|
|
self.__id = int(item['id']) |
|
self.__first_name = item['first_name'] |
|
self.__last_name = item['last_name'] |
|
self.__age = item['age'] |
|
self.__salary_type = item['salary_type'] |
|
self.__amount = float(item.get('amount') or 0) |
|
|
|
def week_hours(self): |
|
'''recupera/genera las hs trabajadas cada semana del mes y luego las |
|
suma''' |
|
|
|
return sum(record.hours for record in |
|
self.collection.week_hours.get_by_employee(self.id)) |
|
|
|
# este diccionario mapea los metodos que recuperarn el modo de operar el |
|
# monto que se le asigna a un empleado |
|
SALARY_OPTION = { |
|
'm': lambda x: 1, # multiplo de hs de un empleado con sueldo fijo |
|
'v': lambda x: 0, # multiplo de hs de un voluntario (sin sueldo) |
|
'h': week_hours |
|
} |
|
|
|
@property |
|
def cant_hours(self): |
|
'''recupera la contidad de hs trabajadas por un empleado, si es |
|
<<voluntario>> son 0 hs, si cobra <<sueldo fijo>> es 1 y en ultimo caso |
|
devuelve la <<suma semanal>> de su jornadas''' |
|
|
|
return self.SALARY_OPTION[self.salary_type](self) |
|
|
|
@property |
|
def salary_collect(self): |
|
'''importe del sueldo a cobrar del empleado''' |
|
|
|
return self.cant_hours * self.amount |
|
|
|
@property |
|
def id(self): |
|
'''numero identificador del empleado o legajo''' |
|
|
|
return self.__id |
|
|
|
@property |
|
def fist_name(self): |
|
'''nombre''' |
|
|
|
return self.__first_name |
|
|
|
@property |
|
def last_name(self): |
|
'''apellido''' |
|
|
|
return self.__last_name |
|
|
|
@property |
|
def fullname(self): |
|
'''nombre compledo''' |
|
|
|
return "%s %s" % (self.fist_name, self.last_name) |
|
|
|
@property |
|
def age(self): |
|
'''edad''' |
|
|
|
return self.__age |
|
|
|
@property |
|
def salary_type(self): |
|
'''tipo del suelo: m (fijo mensual), h (suma de horas semanales), |
|
v (voluntario)''' |
|
|
|
return self.__salary_type |
|
|
|
@property |
|
def amount(self): |
|
'''monto unitario del sueldo ya sea por hora o mensual''' |
|
|
|
return self.__amount |
|
|
|
|
|
class WeekHour(Model): |
|
'''modelo de datos de un registro de las horas hechas en una semana''' |
|
|
|
def __init__(self, item, collection): |
|
super().__init__(item, collection) |
|
|
|
self.__year_month = item['year_month'] |
|
self.__week_num = int(item['week_num']) |
|
self.__employee_id = int(item['employee_id']) |
|
self.__cant_hours = int(item['cant_hours']) |
|
|
|
@property |
|
def year_month(self): |
|
'''formato yyyy-mm del anio al que pertenece esta suma semanal de |
|
horas''' |
|
|
|
return self.__year_month |
|
|
|
@property |
|
def week_num(self): |
|
'''numero de la semana a la que pertenece''' |
|
|
|
return self.__week_num |
|
|
|
@property |
|
def employee(self): |
|
'''numero id del empleado al que pertenece el registro horario |
|
semanal''' |
|
|
|
return self.__employee_id |
|
|
|
@property |
|
def hours(self): |
|
'''cantidad de horas detalladas''' |
|
|
|
return self.__cant_hours |