summaryrefslogtreecommitdiff
path: root/archaeological_files/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-08-05 19:22:26 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:48 +0200
commit61fbdfe4d35eddf998dc66459c2b5d1a6aeb4e7e (patch)
treeb97918956184f4ab2427fc5c8cf56f9596f13507 /archaeological_files/models.py
parentf56be26de069b226582d0dd9aaaa42a8b7c1c3a0 (diff)
downloadIshtar-61fbdfe4d35eddf998dc66459c2b5d1a6aeb4e7e.tar.bz2
Ishtar-61fbdfe4d35eddf998dc66459c2b5d1a6aeb4e7e.zip
Preventive file: cost propertues - display cost in sheet files
Diffstat (limited to 'archaeological_files/models.py')
-rw-r--r--archaeological_files/models.py87
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