summaryrefslogtreecommitdiff
path: root/archaeological_files/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_files/models.py')
-rw-r--r--archaeological_files/models.py95
1 files changed, 94 insertions, 1 deletions
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index c0b668514..04a4ccc2c 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -31,7 +31,7 @@ from django.db.models.signals import post_save, m2m_changed, post_delete
from django.urls import reverse
from ishtar_common.models_common import OrderedHierarchicalType
-from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy, get_current_profile
+from ishtar_common.utils import ugettext_lazy as _, pgettext_lazy, get_current_profile, InlineClass
from ishtar_common.utils import (
cached_label_changed,
@@ -1072,9 +1072,99 @@ class File(
values[prefix + key_time_worked] = value
return values
+ @property
+ def montant_subvention_dotation(self):
+ """
+ France specific value used by templates
+ """
+ if not self.operation_type_for_royalties or not self.total_developed_surface:
+ return
+ return (self.total_developed_surface or 0) * (
+ self.operation_type_for_royalties.increased_final_value or 0)
+
+ @property
+ def jobs_list_permanent(self):
+ return self.jobs_list()
+
+ @property
+ def jobs_list_non_permanent(self):
+ return self.jobs_list(permanent=False)
+
+ def jobs_list(self, permanent=True):
+ jobs = {}
+ total_ground_cost_planned = 0
+ total_ground_cost_worked = 0
+ for job in self.ground_jobs.filter(job__permanent_contract=permanent).all():
+ name = job.job.label
+ ground_cost_total = (
+ (job.man_by_day_planned or 0) * (job.days_planned or 0) *
+ (job.cost_planned or 0)
+ )
+ total_ground_cost_planned += ground_cost_total
+ ground_cost_total_worked = (
+ (job.man_by_day_worked or 0) * (job.days_worked or 0) *
+ (job.cost_worked or 0)
+ )
+ total_ground_cost_worked += ground_cost_total_worked
+ jobs[name] = {
+ "ground_man_by_day_planned": job.man_by_day_planned,
+ "ground_days_planned": job.days_planned,
+ "ground_cost_planned": job.cost_planned,
+ "ground_cost_total_planned": ground_cost_total or "",
+ "ground_man_by_day_worked": job.man_by_day_worked,
+ "ground_days_worked": job.days_worked,
+ "ground_cost_worked": job.cost_worked,
+ "ground_cost_total_worked": ground_cost_total_worked or "",
+ }
+ total_cost_planned = 0
+ total_cost_worked = 0
+ for job in self.jobs.filter(job__permanent_contract=permanent).all():
+ name = job.job.label
+ if name not in jobs:
+ jobs[name] = {}
+ cost_total_planned = (
+ (job.man_by_day_planned or 0) * (job.days_planned or 0) *
+ (job.cost_planned or 0)
+ )
+ total_cost_planned += cost_total_planned
+ cost_total_worked = (
+ (job.man_by_day_worked or 0) * (job.days_worked or 0) *
+ (job.cost_worked or 0)
+ )
+ total_cost_worked += cost_total_worked
+ jobs[name].update({
+ "man_by_day_planned": job.man_by_day_planned,
+ "days_planned": job.days_planned,
+ "cost_planned": job.cost_planned,
+ "cost_total_planned": cost_total_planned or "",
+ "man_by_day_worked": job.man_by_day_worked,
+ "days_worked": job.days_worked,
+ "cost_worked": job.cost_worked,
+ "cost_total_worked": cost_total_worked or "",
+ })
+ result = []
+ for k in jobs:
+ dct = jobs[k]
+ dct["name"] = k
+ result.append(InlineClass(dct))
+ return result, total_ground_cost_planned, total_ground_cost_worked, \
+ total_cost_planned, total_cost_worked
+
def get_extra_values(self, prefix="", no_values=False, filtr=None, **kwargs):
values = get_values_town_related(self, prefix, {}, filtr=filtr)
values = self.get_dynamic_values(prefix, values, filtr=filtr)
+ values["montant_subvention_dotation"] = self.montant_subvention_dotation
+ values["jobs_list_permanent"], values["permanent_ground_cost_planned"], \
+ values["permanent_ground_cost_worked"], \
+ values["permanent_cost_planned"], \
+ values["permanent_cost_worked"] = self.jobs_list_permanent
+ values["jobs_list_non_permanent"], values["non_permanent_ground_cost_planned"], \
+ values["non_permanent_ground_cost_worked"], \
+ values["non_permanent_cost_planned"], \
+ values["non_permanent_cost_worked"] = self.jobs_list_non_permanent
+ values["used_equipments"] = self.used_equipments
+ values["equipments_cost_planned"] = sum([cost for _1, cost, _2, _3, _4 in self.used_equipments])
+ values["equipments_cost_worked"] = sum([cost for _1, _2, cost, _3, _4 in self.used_equipments])
return values
def render_parcels(self):
@@ -1303,6 +1393,9 @@ class File(
@property
def used_equipments(self):
+ """
+ -> [("Engins mécaniques", cost_planned, cost_worked, diff planned - worked, [cost1, cost2, ...])]
+ """
equipments = []
service_types = list(GenericEquipmentServiceType.objects.all())
for service_type in service_types: