summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-08-02 17:19:16 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-08-02 17:24:05 +0200
commita4d00559bd8dad2605aaf7e38da873663e3bff0e (patch)
tree134b06750346dfe806fc73eb564104e70f0608d0
parent8cc2fa3f7df67daa316621e645ea0988732c5730 (diff)
downloadIshtar-a4d00559bd8dad2605aaf7e38da873663e3bff0e.tar.bz2
Ishtar-a4d00559bd8dad2605aaf7e38da873663e3bff0e.zip
Preventive file: copy planned, add default cost - tests - fixtures
-rw-r--r--Makefile.example10
-rw-r--r--archaeological_files/fixtures/initial_data-fr.json2751
-rw-r--r--archaeological_files/models.py6
-rw-r--r--archaeological_files/templates/ishtar/forms/preventive_detail.html10
-rw-r--r--archaeological_files/tests.py186
-rw-r--r--archaeological_files/urls.py11
-rw-r--r--archaeological_files/views.py34
7 files changed, 2993 insertions, 15 deletions
diff --git a/Makefile.example b/Makefile.example
index 0d49c0c70..f7f6b7b90 100644
--- a/Makefile.example
+++ b/Makefile.example
@@ -1,5 +1,6 @@
SHELL := /bin/bash
+NB_PROCESS=8
# if a virtualenv is used put the full python path
# e.g.: PYTHON=$$HOME/.virtualenvs/ishtar/bin/python
PYTHON=python3
@@ -81,6 +82,10 @@ soft_test: clean ## launch tests without database regeneration
cd $(project); $(PYTHON) manage.py test -k --tag gis $(apps)
cd $(project); $(PYTHON) manage.py test -k --exclude-tag gis $(apps)
+soft_test_multi: clean ## launch multi-process tests without database regeneration
+ cd $(project); $(PYTHON) manage.py test -k --parallel $(NB_PROCESS) --tag gis $(apps)
+ cd $(project); $(PYTHON) manage.py test -k --parallel $(NB_PROCESS) --exclude-tag gis $(apps)
+
soft_test_verbose: clean ## launch tests without database regeneration - verbose
cd $(project); $(PYTHON) manage.py test -k --verbosity 2 $(apps)
@@ -237,9 +242,12 @@ fixtures_files:
archaeological_files.saisinetype \
archaeological_files.filetype \
archaeological_files.permittype \
+ archaeological_files.job \
+ archaeological_files.genericequipmentservicetype \
+ archaeological_files.equipmentservicetype \
+ archaeological_files.equipmentservicecost \
> '../archaeological_files/fixtures/initial_data-'$(default_data)'.json'
-
readme_md_to_rst:
pandoc --from=markdown --to=rst --output=README.rst README.md
diff --git a/archaeological_files/fixtures/initial_data-fr.json b/archaeological_files/fixtures/initial_data-fr.json
index 2c9847587..1bfd8d08c 100644
--- a/archaeological_files/fixtures/initial_data-fr.json
+++ b/archaeological_files/fixtures/initial_data-fr.json
@@ -249,5 +249,2756 @@
"comment": "Saisine suite \u00e0 une demande de travaux MH :\r\nArticle R523-10 \r\n\r\nPour les travaux sur les monuments historiques class\u00e9s mentionn\u00e9s au 6\u00b0 de l'article R. 523-4, la saisine du pr\u00e9fet de r\u00e9gion au titre de l'autorisation exig\u00e9e par l'article L. 621-9 vaut saisine au titre du pr\u00e9sent chapitre",
"available": true
}
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Frais de repas",
+ "txt_idx": "frais-de-repas",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 17.5,
+ "daily_cost": 17.5,
+ "permanent_contract": true,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 1000,
+ "child": null
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Responsable d'op\u00e9ration",
+ "txt_idx": "responsable-doperation",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 245.0,
+ "daily_cost": 245.0,
+ "permanent_contract": true,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 10,
+ "child": [
+ "frais-de-repas"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Topographe",
+ "txt_idx": "topographe",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 172.0,
+ "daily_cost": 172.0,
+ "permanent_contract": true,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 20,
+ "child": [
+ "frais-de-repas"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "DAO",
+ "txt_idx": "dao",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 155.0,
+ "daily_cost": 155.0,
+ "permanent_contract": true,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 30,
+ "child": [
+ "frais-de-repas"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Frais de repas",
+ "txt_idx": "frais-de-repas-temp",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 17.5,
+ "daily_cost": 17.5,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 1000,
+ "child": null
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "DAO",
+ "txt_idx": "dao-temp",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 180.0,
+ "daily_cost": 180.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 30,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Gestionnaire des collections",
+ "txt_idx": "gestionnaire-des-collections",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 180.0,
+ "daily_cost": 180.0,
+ "permanent_contract": true,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 40,
+ "child": [
+ "frais-de-repas"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Responsable de secteur",
+ "txt_idx": "responsable-de-secteur-temp",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 150.0,
+ "daily_cost": 150.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 10,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Responsable de secteur (avec anciennet\u00e9)",
+ "txt_idx": "responsable-de-secteur-avec-anciennete-temp",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 180.0,
+ "daily_cost": 180.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 15,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Sp\u00e9cialiste",
+ "txt_idx": "specialiste-temp",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 140.0,
+ "daily_cost": 140.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 20,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Sp\u00e9cialiste (avec anciennet\u00e9)",
+ "txt_idx": "specialiste-avec-anciennete",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 180.0,
+ "daily_cost": 180.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 25,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.job",
+ "fields": {
+ "label": "Technicien de fouille",
+ "txt_idx": "technicien-de-fouille",
+ "comment": "",
+ "available": true,
+ "ground_daily_cost": 140.0,
+ "daily_cost": 140.0,
+ "permanent_contract": false,
+ "default_daily_need_on_ground": 0.0,
+ "default_daily_need": 0.0,
+ "order": 40,
+ "child": [
+ "frais-de-repas-temp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.genericequipmentservicetype",
+ "fields": {
+ "label": "Engins m\u00e9caniques",
+ "txt_idx": "engins-mecaniques",
+ "comment": "",
+ "available": true,
+ "order": 10
+ }
+},
+{
+ "model": "archaeological_files.genericequipmentservicetype",
+ "fields": {
+ "label": "Locaux de chantiers et prestations techniques",
+ "txt_idx": "locaux-de-chantiers-et-prestations-techniques",
+ "comment": "",
+ "available": true,
+ "order": 20
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Amen\u00e9e",
+ "txt_idx": "amenee",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 12
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Repli",
+ "txt_idx": "repli",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 14
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Transfert",
+ "txt_idx": "transfert",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 16
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Amen\u00e9e et repli",
+ "txt_idx": "amenee-repli",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 18
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pelle m\u00e9canique hydraulique \u00e0 chenilles (18 T- 24 T)",
+ "txt_idx": "pelle-mecanique-chenille-18-t-24-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 20
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pelle m\u00e9canique hydraulique \u00e0 chenilles (25 T- 29 T)",
+ "txt_idx": "pelle-mecanique-chenille-25-t-29-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 30
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pelle m\u00e9canique hydraulique \u00e0 chenilles (30 T)",
+ "txt_idx": "pelle-mecanique-chenille-30-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 40
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pelle m\u00e9canique hydraulique \u00e0 pneus (18 T mini)",
+ "txt_idx": "pelle-meca-hydrau-pneus-18-t-mini",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 50
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Mini-pelle m\u00e9canique hydraulique \u00e0 chenilles (800 kg)",
+ "txt_idx": "mini-pelle-meca-hy-chenilles-800kg",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 60
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Mini-pelle m\u00e9canique hydraulique \u00e0 chenilles (1 - 1,5 T)",
+ "txt_idx": "mini-pelle-meca-hydrau-chen-1-15-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 70
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Mini-pelle hydraulique \u00e0 chenilles caoutchouc (2,5 T)",
+ "txt_idx": "mini-pelle-hydrau-chen-caout-25-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 80
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Mini-pelle hydraulique \u00e0 chenilles (5-6 T)",
+ "txt_idx": "mini-pelle-hydrau-chen-5-6-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 90
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Mini-pelle hydraulique \u00e0 chenilles (10 T)",
+ "txt_idx": "mini-pelle-hydrau-chen-10-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 100
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Tracteur sur chenilles \u00e0 lames (15 - 18 T)",
+ "txt_idx": "tracteur-sur-chen-lam-15-18-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 110
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Chargeur sur chenilles (12 - 15 T)",
+ "txt_idx": "chargeur-sur-chenilles-12-15-t",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 120
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Tombereau automoteur 6x4 (14 m\u00b3)",
+ "txt_idx": "tombereau-automoteur-6x4-14-m",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 130
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Tracteur agricole (200 cv minimum) avec benne TP de 11 m\u00b3",
+ "txt_idx": "tracteur-agricole-avec-benne-tp",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 140
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Camion benne 6x4",
+ "txt_idx": "camion-benne-6x4",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 150
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Camion semi-remorque \u00e0 benne 20 m\u00b3",
+ "txt_idx": "camion-semi-remorque-benne-20-m",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 160
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Sciage de chauss\u00e9e ou de dalle b\u00e9ton",
+ "txt_idx": "sciage-de-chaussee-ou-de-dalle-beton",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 170
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pompe thermique \u00e0 eaux charg\u00e9es (25 m\u00b3/h mini)",
+ "txt_idx": "pompe-thermique-eaux-chargees-25-mh-mini",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 180
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Pompe thermique \u00e0 eaux charg\u00e9es (65 m\u00b3/h mini)",
+ "txt_idx": "pompe-thermique-eaux-chargees-65-mh-mini",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 190
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "V\u00e9hicule de transport de mat\u00e9riel et/ou de personnel",
+ "txt_idx": "vehicule-de-transport-de-materiel-etou-de-personne",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "engins-mecaniques"
+ ],
+ "order": 200
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Bungalow r\u00e9fectoire \u00e9quip\u00e9 de 15m\u00b2 (tables et chaises)",
+ "txt_idx": "bungalow-refectoire-equipe-de-15m2-tables-et-chais",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 230
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Bungalow suppl\u00e9mentaire de 15 m\u00b2",
+ "txt_idx": "bungalow-supplementaire-de-15-m",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 240
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Amen\u00e9e et repli",
+ "txt_idx": "amenee-et-repli-locaux",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 210
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Assemblage / d\u00e9sassemblage",
+ "txt_idx": "assemblage-desassemblage-locaux",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 212
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Bungalow vestiaire (armoires de rangement)",
+ "txt_idx": "bungalow-vestiaire-armoires-de-rangement",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 240
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Container de stockage m\u00e9tallique ferm\u00e9 10 m\u00b3",
+ "txt_idx": "container-de-stockage-metallique-ferme-10-m3",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 240
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Container de stockage m\u00e9tallique ferm\u00e9 15 m\u00b3",
+ "txt_idx": "container-de-stockage-metallique-ferme-15-m",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 250
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Container de stockage m\u00e9tallique ferm\u00e9 30 m\u00b3",
+ "txt_idx": "container-de-stockage-metallique-ferme-30-m3",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 260
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Groupe \u00e9lectrog\u00e8ne 6 kwa",
+ "txt_idx": "groupe-electrogene-6-kwa",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 270
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Raccordement \u00e9lectrique bungalow au d\u00e9part compteur EDF",
+ "txt_idx": "raccordement-electrique-bungalow-au-depart-compteu",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 280
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "R\u00e9serve d'eau de 500 \u00e0 1 000 litres mini",
+ "txt_idx": "reserve-deau-de-500-1-000-litres-mini",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 290
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "WC chimique avec produits",
+ "txt_idx": "wc-chimique-avec-produits",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 300
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Vidange WC",
+ "txt_idx": "vidange-wc",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 310
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Cl\u00f4ture mobile de chantier par panneaux en treillis",
+ "txt_idx": "cloture-mobile-de-chantier-par-panneaux-en-treilli",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 320
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "Amen\u00e9e et pose de 1 \u00e0 50 ml",
+ "txt_idx": "amenee-et-pose-de-1-50-ml",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 330
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicetype",
+ "fields": {
+ "label": "D\u00e9pose et repli de 1 \u00e0 50 ml",
+ "txt_idx": "depose-et-repli-de-1-50-ml",
+ "comment": "",
+ "available": true,
+ "generic_equipment_type": [
+ "locaux-de-chantiers-et-prestations-techniques"
+ ],
+ "order": 340
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-18-t-24-t"
+ ],
+ "slug": "pelle-mecanique-chenille-18-t-24-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 10,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-18-t-24-t"
+ ],
+ "slug": "pelle-mecanique-chenille-18-t-24-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 12,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "pelle-mecanique-chenille-18-t-24-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 14,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-18-t-24-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "pelle-mecanique-chenille-18-t-24-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 16,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-18-t-24-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "pelle-mecanique-chenille-18-t-24-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 18,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-18-t-24-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-25-t-29-t"
+ ],
+ "slug": "pelle-mecanique-chenille-25-t-29-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 20,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-25-t-29-t"
+ ],
+ "slug": "pelle-mecanique-chenille-25-t-29-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 22,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "pelle-mecanique-chenille-25-t-29-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 24,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-25-t-29-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "pelle-mecanique-chenille-25-t-29-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 26,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-25-t-29-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "pelle-mecanique-chenille-25-t-29-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 28,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-25-t-29-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-30-t"
+ ],
+ "slug": "pelle-mecanique-chenille-30-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 30,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-mecanique-chenille-30-t"
+ ],
+ "slug": "pelle-mecanique-chenille-30-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 32,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "pelle-mecanique-chenille-30-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 34,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-30-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "pelle-mecanique-chenille-30-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 36,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-30-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "pelle-mecanique-chenille-30-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 38,
+ "available": true,
+ "parent": [
+ "pelle-mecanique-chenille-30-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-meca-hydrau-pneus-18-t-mini"
+ ],
+ "slug": "pelle-meca-hydrau-pneus-18-t-mini-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 40,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pelle-meca-hydrau-pneus-18-t-mini"
+ ],
+ "slug": "pelle-meca-hydrau-pneus-18-t-mini-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 42,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "pelle-meca-hydrau-pneus-18-t-mini-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 44,
+ "available": true,
+ "parent": [
+ "pelle-meca-hydrau-pneus-18-t-mini"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "pelle-meca-hydrau-pneus-18-t-mini-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 46,
+ "available": true,
+ "parent": [
+ "pelle-meca-hydrau-pneus-18-t-mini"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "pelle-meca-hydrau-pneus-18-t-mini-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 48,
+ "available": true,
+ "parent": [
+ "pelle-meca-hydrau-pneus-18-t-mini"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-meca-hy-chenilles-800kg"
+ ],
+ "slug": "mini-pelle-meca-hy-chenilles-800kg-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 50,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-meca-hy-chenilles-800kg"
+ ],
+ "slug": "mini-pelle-meca-hy-chenilles-800kg-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 52,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "mini-pelle-meca-hy-chenilles-800kg-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 54,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hy-chenilles-800kg"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "mini-pelle-meca-hy-chenilles-800kg-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 56,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hy-chenilles-800kg"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "mini-pelle-meca-hy-chenilles-800kg-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 58,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hy-chenilles-800kg"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-meca-hydrau-chen-1-15-t"
+ ],
+ "slug": "mini-pelle-meca-hydrau-chen-1-15-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 60,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-meca-hydrau-chen-1-15-t"
+ ],
+ "slug": "mini-pelle-meca-hydrau-chen-1-15-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 62,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "mini-pelle-meca-hydrau-chen-1-15-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 64,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hydrau-chen-1-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "mini-pelle-meca-hydrau-chen-1-15-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 66,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hydrau-chen-1-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "mini-pelle-meca-hydrau-chen-1-15-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 68,
+ "available": true,
+ "parent": [
+ "mini-pelle-meca-hydrau-chen-1-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-caout-25-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-caout-25-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 70,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-caout-25-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-caout-25-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 72,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "mini-pelle-hydrau-chen-caout-25-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 74,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-caout-25-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "mini-pelle-hydrau-chen-caout-25-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 76,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-caout-25-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "mini-pelle-hydrau-chen-caout-25-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 78,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-caout-25-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-5-6-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-5-6-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 80,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-5-6-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-5-6-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 82,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "mini-pelle-hydrau-chen-5-6-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 84,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-5-6-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "mini-pelle-hydrau-chen-5-6-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 86,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-5-6-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "mini-pelle-hydrau-chen-5-6-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 88,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-5-6-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-10-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-10-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 90,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "mini-pelle-hydrau-chen-10-t"
+ ],
+ "slug": "mini-pelle-hydrau-chen-10-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 92,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "mini-pelle-hydrau-chen-10-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 94,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-10-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "mini-pelle-hydrau-chen-10-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 96,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-10-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "mini-pelle-hydrau-chen-10-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 98,
+ "available": true,
+ "parent": [
+ "mini-pelle-hydrau-chen-10-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tracteur-sur-chen-lam-15-18-t"
+ ],
+ "slug": "tracteur-sur-chen-lam-15-18-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 100,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tracteur-sur-chen-lam-15-18-t"
+ ],
+ "slug": "tracteur-sur-chen-lam-15-18-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 102,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "tracteur-sur-chen-lam-15-18-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 104,
+ "available": true,
+ "parent": [
+ "tracteur-sur-chen-lam-15-18-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "tracteur-sur-chen-lam-15-18-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 106,
+ "available": true,
+ "parent": [
+ "tracteur-sur-chen-lam-15-18-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "tracteur-sur-chen-lam-15-18-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 108,
+ "available": true,
+ "parent": [
+ "tracteur-sur-chen-lam-15-18-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "chargeur-sur-chenilles-12-15-t"
+ ],
+ "slug": "chargeur-sur-chenilles-12-15-t-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 110,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "chargeur-sur-chenilles-12-15-t"
+ ],
+ "slug": "chargeur-sur-chenilles-12-15-t-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 112,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "chargeur-sur-chenilles-12-15-t-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 114,
+ "available": true,
+ "parent": [
+ "chargeur-sur-chenilles-12-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "chargeur-sur-chenilles-12-15-t-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 116,
+ "available": true,
+ "parent": [
+ "chargeur-sur-chenilles-12-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "chargeur-sur-chenilles-12-15-t-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 118,
+ "available": true,
+ "parent": [
+ "chargeur-sur-chenilles-12-15-t"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tombereau-automoteur-6x4-14-m"
+ ],
+ "slug": "tombereau-automoteur-6x4-14-m-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 120,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tombereau-automoteur-6x4-14-m"
+ ],
+ "slug": "tombereau-automoteur-6x4-14-m-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 122,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "tombereau-automoteur-6x4-14-m-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 124,
+ "available": true,
+ "parent": [
+ "tombereau-automoteur-6x4-14-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "tombereau-automoteur-6x4-14-m-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 126,
+ "available": true,
+ "parent": [
+ "tombereau-automoteur-6x4-14-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "tombereau-automoteur-6x4-14-m-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 128,
+ "available": true,
+ "parent": [
+ "tombereau-automoteur-6x4-14-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tracteur-agricole-avec-benne-tp"
+ ],
+ "slug": "tracteur-agricole-avec-benne-tp-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 130,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "tracteur-agricole-avec-benne-tp"
+ ],
+ "slug": "tracteur-agricole-avec-benne-tp-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 132,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee"
+ ],
+ "slug": "tracteur-agricole-avec-benne-tp-amenee",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 134,
+ "available": true,
+ "parent": [
+ "tracteur-agricole-avec-benne-tp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "repli"
+ ],
+ "slug": "tracteur-agricole-avec-benne-tp-repli",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 136,
+ "available": true,
+ "parent": [
+ "tracteur-agricole-avec-benne-tp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "transfert"
+ ],
+ "slug": "tracteur-agricole-avec-benne-tp-transfert",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 138,
+ "available": true,
+ "parent": [
+ "tracteur-agricole-avec-benne-tp"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "camion-benne-6x4"
+ ],
+ "slug": "camion-benne-6x4-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 140,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "camion-benne-6x4"
+ ],
+ "slug": "camion-benne-6x4-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 142,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "camion-semi-remorque-benne-20-m"
+ ],
+ "slug": "camion-semi-remorque-benne-20-m-lj",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "D",
+ "specificity": "lundi au jeudi",
+ "default_quantity_by_day": 0,
+ "order": 150,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "camion-semi-remorque-benne-20-m"
+ ],
+ "slug": "camion-semi-remorque-benne-20-m-v",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 400.0,
+ "unit": "D",
+ "specificity": "vendredi",
+ "default_quantity_by_day": 0,
+ "order": 152,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "sciage-de-chaussee-ou-de-dalle-beton"
+ ],
+ "slug": "sciage-de-chaussee-ou-de-dalle-beton",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 500.0,
+ "unit": "L",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 160,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-repli"
+ ],
+ "slug": "sciage-de-chaussee-ou-de-dalle-beton-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 400.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 162,
+ "available": true,
+ "parent": [
+ "sciage-de-chaussee-ou-de-dalle-beton"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pompe-thermique-eaux-chargees-25-mh-mini"
+ ],
+ "slug": "pompe-thermique-eaux-chargees-25-mh-mini",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 100.0,
+ "unit": "D",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 170,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "pompe-thermique-eaux-chargees-65-mh-mini"
+ ],
+ "slug": "pompe-thermique-eaux-chargees-65-mh-mini",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 100.0,
+ "unit": "D",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 180,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "vehicule-de-transport-de-materiel-etou-de-personne"
+ ],
+ "slug": "vehicule-de-transport-de-materiel-etou-de-personne",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 100.0,
+ "unit": "D",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 190,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "bungalow-refectoire-equipe-de-15m2-tables-et-chais"
+ ],
+ "slug": "bungalow-refectoire-equipe-de-15m2-tables-et-chais-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 200,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "bungalow-refectoire-equipe-de-15m2-tables-et-chais"
+ ],
+ "slug": "bungalow-refectoire-equipe-de-15m2-tables-et-chais-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 202,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "bungalow-refectoire-equipe-de-15m2-tables-et-chais-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 204,
+ "available": true,
+ "parent": [
+ "bungalow-refectoire-equipe-de-15m2-tables-et-chais"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "bungalow-supplementaire-de-15-m"
+ ],
+ "slug": "bungalow-supplementaire-de-15-m",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 210,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "assemblage-desassemblage-locaux"
+ ],
+ "slug": "bungalow-supplementaire-de-15-m-assemblage-desassemblage-locaux",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 140.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 212,
+ "available": true,
+ "parent": [
+ "bungalow-supplementaire-de-15-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "bungalow-supplementaire-de-15-m-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 214,
+ "available": true,
+ "parent": [
+ "bungalow-supplementaire-de-15-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "bungalow-vestiaire-armoires-de-rangement"
+ ],
+ "slug": "bungalow-vestiaire-armoires-de-rangement-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 220,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "bungalow-vestiaire-armoires-de-rangement"
+ ],
+ "slug": "bungalow-vestiaire-armoires-de-rangement-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 222,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "bungalow-vestiaire-armoires-de-rangement-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 224,
+ "available": true,
+ "parent": [
+ "bungalow-vestiaire-armoires-de-rangement"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-10-m3"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-10-m3-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 230,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-10-m3"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-10-m3-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 232,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-10-m3-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 234,
+ "available": true,
+ "parent": [
+ "container-de-stockage-metallique-ferme-10-m3"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-15-m"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-15-m-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 240,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-15-m"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-15-m-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 242,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-15-m-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 244,
+ "available": true,
+ "parent": [
+ "container-de-stockage-metallique-ferme-15-m"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-30-m3"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-30-m3-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 250,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "container-de-stockage-metallique-ferme-30-m3"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-30-m3-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 252,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "container-de-stockage-metallique-ferme-30-m3-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 254,
+ "available": true,
+ "parent": [
+ "container-de-stockage-metallique-ferme-30-m3"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "groupe-electrogene-6-kwa"
+ ],
+ "slug": "groupe-electrogene-6-kwa-jour",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 80.0,
+ "unit": "D",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 260,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "groupe-electrogene-6-kwa"
+ ],
+ "slug": "groupe-electrogene-6-kwa-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 262,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "groupe-electrogene-6-kwa"
+ ],
+ "slug": "groupe-electrogene-6-kwa-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 264,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "raccordement-electrique-bungalow-au-depart-compteu"
+ ],
+ "slug": "groupe-electrogene-6-kwa-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 266,
+ "available": true,
+ "parent": [
+ "groupe-electrogene-6-kwa"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "reserve-deau-de-500-1-000-litres-mini"
+ ],
+ "slug": "reserve-deau-de-500-1-000-litres-mini-jour",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 80.0,
+ "unit": "D",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 270,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "reserve-deau-de-500-1-000-litres-mini"
+ ],
+ "slug": "reserve-deau-de-500-1-000-litres-mini-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 272,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "reserve-deau-de-500-1-000-litres-mini"
+ ],
+ "slug": "reserve-deau-de-500-1-000-litres-mini-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 140.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 274,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "wc-chimique-avec-produits"
+ ],
+ "slug": "wc-chimique-avec-produits-mois",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 80.0,
+ "unit": "M",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 280,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "wc-chimique-avec-produits"
+ ],
+ "slug": "wc-chimique-avec-produits-semaine",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 120.0,
+ "unit": "W",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 282,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-repli-locaux"
+ ],
+ "slug": "wc-chimique-avec-produits-am-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 100.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 284,
+ "available": true,
+ "parent": [
+ "wc-chimique-avec-produits"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "vidange-wc"
+ ],
+ "slug": "wc-chimique-avec-produits-vidange",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 100.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 286,
+ "available": true,
+ "parent": [
+ "wc-chimique-avec-produits"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "cloture-mobile-de-chantier-par-panneaux-en-treilli"
+ ],
+ "slug": "cloture-mobile-de-chantier-par-panneaux-en-treilli",
+ "service_provider": "",
+ "flat_rate": false,
+ "unitary_cost": 1.0,
+ "unit": "L",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 290,
+ "available": true,
+ "parent": null
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "amenee-et-pose-de-1-50-ml"
+ ],
+ "slug": "cloture-mobile-de-chantier-par-panneaux-en-treilli-am-pos",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 292,
+ "available": true,
+ "parent": [
+ "cloture-mobile-de-chantier-par-panneaux-en-treilli"
+ ]
+ }
+},
+{
+ "model": "archaeological_files.equipmentservicecost",
+ "fields": {
+ "equipment_service_type": [
+ "depose-et-repli-de-1-50-ml"
+ ],
+ "slug": "cloture-mobile-de-chantier-par-panneaux-en-treilli-dep-rep",
+ "service_provider": "",
+ "flat_rate": true,
+ "unitary_cost": 200.0,
+ "unit": "",
+ "specificity": "",
+ "default_quantity_by_day": 0,
+ "order": 294,
+ "available": true,
+ "parent": [
+ "cloture-mobile-de-chantier-par-panneaux-en-treilli"
+ ]
+ }
}
]
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index 3237f594c..51273a17e 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -227,6 +227,12 @@ class EquipmentServiceCost(models.Model):
lbl += " - " + str(DCT_ES_UNITS[self.unit])
return lbl
+ def natural_key(self):
+ return (self.slug,)
+
+ def history_compress(self):
+ return self.slug
+
class FileType(GeneralType):
class Meta:
diff --git a/archaeological_files/templates/ishtar/forms/preventive_detail.html b/archaeological_files/templates/ishtar/forms/preventive_detail.html
index cc27e26f3..3c58053ba 100644
--- a/archaeological_files/templates/ishtar/forms/preventive_detail.html
+++ b/archaeological_files/templates/ishtar/forms/preventive_detail.html
@@ -17,10 +17,16 @@
</div>
</div>
<div class="w-100 pb-3 text-center form-group">
- <button class="btn btn-secondary btn-sm form-planned" type="button">{% trans "Add default costs" %}</button>
+ <a class="btn btn-secondary btn-sm form-planned" type="button"
+ href="{% url 'file-edit-preventive-default-cost' file.pk %}">
+ {% trans "Add default costs" %}
+ </a>
</div>
<div class="w-100 pb-3 text-center form-group">
- <button class="btn btn-secondary btn-sm form-worked" type="button">{% trans "Copy planned costs" %}</button>
+ <a class="btn btn-secondary btn-sm form-worked" type="button"
+ href="{% url 'file-edit-preventive-copy-planned' file.pk %}">
+ {% trans "Copy planned costs" %}
+ </a>
</div>
{% for inline in inline_forms %}
<h4>{{inline.form_label}}</h4>
diff --git a/archaeological_files/tests.py b/archaeological_files/tests.py
index bf9ac14c0..53c7d5282 100644
--- a/archaeological_files/tests.py
+++ b/archaeological_files/tests.py
@@ -61,7 +61,7 @@ def create_administrativact(user, fle):
class FileTest(TestCase, FileInit):
- fixtures = COMMON_FIXTURES
+ fixtures = FILE_TOWNS_FIXTURES
model = models.File
def setUp(self):
@@ -234,7 +234,6 @@ class FileTest(TestCase, FileInit):
self.assertEqual(parcel_nb, Parcel.objects.count())
def test_show(self):
- c = Client()
url = "show-file"
pk = self.item.pk
response = self.client.get(reverse(url, kwargs={"pk": pk}))
@@ -247,6 +246,189 @@ class FileTest(TestCase, FileInit):
self.assertEqual(response.status_code, 200)
self.assertIn('class="card sheet"', response.content.decode())
+ def test_preventive(self):
+ pk = self.item.pk
+ url = reverse("file-edit-preventive", kwargs={"pk": pk})
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 302)
+ self.login_as_superuser()
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 200)
+ job1 = models.Job.objects.all()[0]
+ job2 = models.Job.objects.all()[1]
+ cost1 = models.EquipmentServiceCost.objects.filter(
+ equipment_service_type=models.EquipmentServiceType.objects.all()[0]
+ ).all()[0]
+ cost2 = models.EquipmentServiceCost.objects.filter(
+ equipment_service_type=models.EquipmentServiceType.objects.all()[1]
+ ).all()[1]
+ data = {
+ "pk": pk,
+ "start_date": "2021-05-03",
+ "total_surface": 6000,
+ "linear_meter": 200,
+ "preventive-040-ground-jobs-0-file_id": pk,
+ "preventive-040-ground-jobs-0-job": job1.pk,
+ "preventive-040-ground-jobs-0-man_by_day_planned": 5,
+ "preventive-040-ground-jobs-0-days_planned": 6,
+ "preventive-040-ground-jobs-0-man_by_day_worked": 0,
+ "preventive-040-ground-jobs-0-days_worked": 0,
+ "preventive-030-post-excavation-0-file_id": pk,
+ "preventive-030-post-excavation-0-job": job2.pk,
+ "preventive-030-post-excavation-0-man_by_day_planned": 5,
+ "preventive-030-post-excavation-0-days_planned": 6,
+ "preventive-030-post-excavation-0-man_by_day_worked": 0,
+ "preventive-030-post-excavation-0-days_worked": 0,
+ "engins-mecaniques-0-file_id": pk,
+ "engins-mecaniques-0-equipment_service_cost": cost1.pk,
+ "engins-mecaniques-0-quantity_by_day_planned": 5,
+ "engins-mecaniques-0-days_planned": 6,
+ "engins-mecaniques-0-quantity_by_day_worked": 0,
+ "engins-mecaniques-0-days_worked": 0,
+ "locaux-de-chantiers-et-prestations-techniques-0-file_id": pk,
+ "locaux-de-chantiers-et-prestations-techniques-0-equipment_service_cost": cost2.pk,
+ "locaux-de-chantiers-et-prestations-techniques-0-quantity_by_day_planned": 5,
+ "locaux-de-chantiers-et-prestations-techniques-0-days_planned": 6,
+ "locaux-de-chantiers-et-prestations-techniques-0-quantity_by_day_worked": 0,
+ "locaux-de-chantiers-et-prestations-techniques-0-days_worked": 0,
+ }
+ for k in (
+ "preventive-040-ground-jobs",
+ "preventive-030-post-excavation",
+ "engins-mecaniques",
+ "locaux-de-chantiers-et-prestations-techniques",
+ ):
+ data[k + "-TOTAL_FORMS"] = 1
+ data[k + "-INITIAL_FORMS"] = 0
+ data[k + "-MIN_NUM_FORMS"] = 0
+ data[k + "-MAX_NUM_FORMS"] = 1000
+ response = self.client.post(url, data)
+ self.assertRedirects(
+ response,
+ url,
+ status_code=302,
+ target_status_code=200,
+ fetch_redirect_response=True,
+ )
+ file = models.File.objects.get(pk=self.item.pk)
+ self.assertEqual(file.total_surface, 6000)
+ self.assertEqual(file.linear_meter, 200)
+ self.assertEqual(file.start_date, datetime.date(2021, 5, 3))
+ self.assertEqual(
+ models.PreventiveFileGroundJob.objects.filter(file_id=pk, job=job1).count(),
+ 1,
+ )
+ self.assertEqual(
+ models.PreventiveFileGroundJob.objects.filter(
+ file_id=pk, job=job1.child
+ ).count(),
+ 1,
+ )
+ self.assertEqual(
+ models.PreventiveFileJob.objects.filter(file_id=pk, job=job2).count(), 1
+ )
+ self.assertEqual(
+ models.PreventiveFileJob.objects.filter(file_id=pk, job=job2.child).count(),
+ 1,
+ )
+ self.assertEqual(
+ models.PreventiveFileEquipmentServiceCost.objects.filter(
+ file_id=pk, equipment_service_cost=cost1.pk
+ ).count(),
+ 1,
+ )
+ self.assertEqual(
+ models.PreventiveFileEquipmentServiceCost.objects.filter(
+ file_id=pk, equipment_service_cost=cost2.pk
+ ).count(),
+ 1,
+ )
+
+ def test_preventive_add_default(self):
+ pk = self.item.pk
+ url = reverse("file-edit-preventive", kwargs={"pk": pk})
+ self.login_as_superuser()
+ for job in models.Job.objects.all()[:5]:
+ job.default_daily_need_on_ground = 4
+ job.save()
+ for job in models.Job.objects.all()[:3]:
+ job.default_daily_need = 5
+ job.save()
+ nb = models.EquipmentServiceCost.objects.update(default_quantity_by_day=10)
+ response = self.client.get(
+ reverse("file-edit-preventive-default-cost", kwargs={"pk": pk})
+ )
+ self.assertRedirects(
+ response,
+ url,
+ status_code=302,
+ target_status_code=200,
+ fetch_redirect_response=True,
+ )
+ self.assertEqual(models.PreventiveFileJob.objects.filter(file_id=pk).count(), 3)
+ self.assertEqual(
+ models.PreventiveFileGroundJob.objects.filter(file_id=pk).count(), 5
+ )
+ self.assertEqual(
+ models.PreventiveFileEquipmentServiceCost.objects.filter(
+ file_id=pk
+ ).count(),
+ nb,
+ )
+
+ def test_preventive_copy_planned(self):
+ pk = self.item.pk
+ url = reverse("file-edit-preventive", kwargs={"pk": pk})
+ self.login_as_superuser()
+
+ for job in models.Job.objects.all()[:5]:
+ models.PreventiveFileJob.objects.create(
+ file_id=pk, job=job, man_by_day_planned=5, days_planned=42
+ )
+ models.PreventiveFileGroundJob.objects.create(
+ file_id=pk, job=job, man_by_day_planned=2, days_planned=50
+ )
+
+ nb = models.EquipmentServiceCost.objects.count()
+ for cost in models.EquipmentServiceCost.objects.all():
+ models.PreventiveFileEquipmentServiceCost.objects.create(
+ equipment_service_cost=cost,
+ file_id=pk,
+ quantity_by_day_planned=4,
+ days_planned=3,
+ )
+
+ response = self.client.get(
+ reverse("file-edit-preventive-copy-planned", kwargs={"pk": pk})
+ )
+ self.assertRedirects(
+ response,
+ url,
+ status_code=302,
+ target_status_code=200,
+ fetch_redirect_response=True,
+ )
+ self.assertEqual(
+ models.PreventiveFileJob.objects.filter(
+ file_id=pk, man_by_day_worked=5, days_worked=42
+ ).count(),
+ 5,
+ )
+ self.assertEqual(
+ models.PreventiveFileGroundJob.objects.filter(
+ file_id=pk, man_by_day_worked=2, days_worked=50
+ ).count(),
+ 5,
+ )
+ self.assertEqual(
+ models.PreventiveFileEquipmentServiceCost.objects.filter(
+ file_id=pk,
+ days_worked=3,
+ quantity_by_day_worked=4,
+ ).count(),
+ nb,
+ )
+
class FileOperationTest(TestCase, OperationInitTest, FileInit):
model = models.File
diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py
index 1b1c4c771..dda3ce8e7 100644
--- a/archaeological_files/urls.py
+++ b/archaeological_files/urls.py
@@ -138,17 +138,24 @@ urlpatterns = [
name="file-add-operation",
),
url(
- r'^file/edit-preventive/(?P<pk>.+)/$',
+ r'^file/edit-preventive/(?P<pk>\d+)/$',
check_rights(["change_file", "change_own_file"])(
views.PreventiveEditView.as_view()
),
name="file-edit-preventive",
),
url(
- r'^file/edit-preventive/(?P<pk>.+)/add-default-cost/$',
+ r'^file/edit-preventive/add-default-cost/(?P<pk>\d+)/$',
check_rights(["change_file", "change_own_file"])(
views.file_edit_preventive_add_default
),
name="file-edit-preventive-default-cost",
),
+ url(
+ r'^file/edit-preventive/copy-planned/(?P<pk>\d+)/$',
+ check_rights(["change_file", "change_own_file"])(
+ views.file_edit_preventive_copy_planned
+ ),
+ name="file-edit-preventive-copy-planned",
+ ),
]
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 26787142f..9f45d5e08 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -21,7 +21,7 @@ import json
import re
from django.core.urlresolvers import reverse
-from django.db.models import Q
+from django.db.models import Q, F
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.forms.formsets import formset_factory
from django.views.generic.edit import UpdateView
@@ -489,7 +489,7 @@ class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateVi
return context
-def file_edit_preventive_add_default(request, pk):
+def file_edit_preventive_add_default(request, pk, current_right=None):
job_attrs = (
("default_daily_need_on_ground", models.PreventiveFileGroundJob),
("default_daily_need", models.PreventiveFileJob),
@@ -503,18 +503,36 @@ def file_edit_preventive_add_default(request, pk):
"job": job,
"file_id": pk,
"days_planned": 1,
- "man_by_day_planned": getattr(job, attr)
+ "man_by_day_planned": getattr(job, attr),
}
- job_model.create(**dct)
- q = models.EquipmentServiceCost.exclude(default_quantity_by_day=0)
+ job_model.objects.create(**dct)
+ q = models.EquipmentServiceCost.objects.exclude(default_quantity_by_day=0)
for cost in list(q.all()):
q = models.PreventiveFileEquipmentServiceCost.objects.filter(
- equipment_service_cost=cost, file_id=pk)
+ equipment_service_cost=cost, file_id=pk
+ )
if not q.count():
models.PreventiveFileEquipmentServiceCost.objects.create(
- equipment_service_cost=cost, file_id=pk,
+ equipment_service_cost=cost,
+ file_id=pk,
quantity_by_day_planned=cost.default_quantity_by_day,
- days_planned=1
+ days_planned=1,
)
+ return redirect(reverse("file-edit-preventive", kwargs={"pk": pk}))
+
+def file_edit_preventive_copy_planned(request, pk, current_right=None):
+ job_models = (
+ models.PreventiveFileGroundJob,
+ models.PreventiveFileJob,
+ )
+ for job_model in job_models:
+ job_model.objects.filter(file_id=pk).update(
+ man_by_day_worked=F("man_by_day_planned"), days_worked=F("days_planned")
+ )
+
+ models.PreventiveFileEquipmentServiceCost.objects.filter(file_id=pk).update(
+ quantity_by_day_worked=F("quantity_by_day_planned"),
+ days_worked=F("days_planned"),
+ )
return redirect(reverse("file-edit-preventive", kwargs={"pk": pk}))