diff options
Diffstat (limited to 'archaeological_files/models.py')
-rw-r--r-- | archaeological_files/models.py | 87 |
1 files changed, 78 insertions, 9 deletions
diff --git a/archaeological_files/models.py b/archaeological_files/models.py index 79dabc84d..0eac73119 100644 --- a/archaeological_files/models.py +++ b/archaeological_files/models.py @@ -235,6 +235,12 @@ class EquipmentServiceCost(models.Model): def history_compress(self): return self.slug + @property + def unit_label(self): + if self.unit and self.unit in DCT_ES_UNITS: + return DCT_ES_UNITS[self.unit] + return "" + class FileType(GeneralType): class Meta: @@ -1033,6 +1039,47 @@ class File( self.general_contractor.save() return True + @property + def job_cost_planned(self): + return sum(job.cost_planned for job in self.jobs.all()) + + @property + def ground_job_cost_planned(self): + return sum(job.cost_planned for job in self.ground_jobs.all()) + + @property + def job_cost_worked(self): + return sum(job.cost_worked for job in self.jobs.all()) + + @property + def ground_job_cost_worked(self): + return sum(job.cost_worked for job in self.ground_jobs.all()) + + @property + def job_cost_diff_planned_worked(self): + return self.job_cost_planned - self.job_cost_worked + + @property + def ground_job_cost_diff_planned_worked(self): + return self.ground_job_cost_planned - self.ground_job_cost_worked + + @property + def used_equipments(self): + equipments = [] + service_types = list(GenericEquipmentServiceType.objects.all()) + for service_type in service_types: + q = self.equipment_costs.filter( + equipment_service_cost__equipment_service_type__generic_equipment_type=service_type) + if not q.count(): + continue + equipments.append([service_type.label, 0, 0, 0, []]) + for cost in q.all(): + equipments[-1][-4] += cost.cost_planned + equipments[-1][-3] += cost.cost_worked + equipments[-1][-1].append(cost) + equipments[-1][-2] = equipments[-1][-4] - equipments[-1][-3] + return equipments + def get_extra_actions(self, request): # url, base_text, icon, extra_text, extra css class, is a quick action actions = super(File, self).get_extra_actions(request) @@ -1318,6 +1365,14 @@ class PreventiveFileGroundJob(ManDays): class Meta: ordering = ("job",) + @property + def cost_planned(self): + return (self.job.ground_daily_cost or 0) * self.quantity_planned + + @property + def cost_worked(self): + return (self.job.ground_daily_cost or 0) * self.quantity_worked + class PreventiveFileJob(ManDays): file = models.ForeignKey(File, related_name="jobs") @@ -1326,8 +1381,18 @@ class PreventiveFileJob(ManDays): class Meta: ordering = ("job",) + @property + def cost_planned(self): + return (self.job.daily_cost or 0) * self.quantity_planned + + @property + def cost_worked(self): + return (self.job.daily_cost or 0) * self.quantity_worked + -class TechDays(models.Model): +class PreventiveFileEquipmentServiceCost(models.Model): + file = models.ForeignKey(File, related_name="equipment_costs") + equipment_service_cost = models.ForeignKey(EquipmentServiceCost) quantity_by_day_planned = models.FloatField( _("Quantity by day - planned"), null=True, blank=True ) @@ -1338,24 +1403,28 @@ class TechDays(models.Model): days_worked = models.FloatField(_("Days - worked"), null=True, blank=True) class Meta: - abstract = True + ordering = ("equipment_service_cost",) @property def quantity_planned(self): + if self.equipment_service_cost.flat_rate: + return self.quantity_by_day_planned or 0 if not self.days_planned or not self.quantity_by_day_planned: return 0 return self.days_planned * self.quantity_by_day_planned @property def quantity_worked(self): - if not self.days_worked or not self.quantity_by_day_worked: + if self.equipment_service_cost.flat_rate: + return self.quantity_by_day_worked or 0 + if not self.quantity_by_day_worked or not self.days_worked: return 0 return self.days_worked * self.quantity_by_day_worked + @property + def cost_planned(self): + return (self.equipment_service_cost.unitary_cost or 0) * self.quantity_planned -class PreventiveFileEquipmentServiceCost(TechDays): - file = models.ForeignKey(File, related_name="equipment_costs") - equipment_service_cost = models.ForeignKey(EquipmentServiceCost) - - class Meta: - ordering = ("equipment_service_cost",) + @property + def cost_worked(self): + return (self.equipment_service_cost.unitary_cost or 0) * self.quantity_worked |