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 | 
