From 029d08540f66524c371ae87ede5c1281fbe2c568 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 19 Oct 2012 22:10:20 +0200 Subject: Djangoization - Major refactoring (step 2) models reorganization in django apps --- ishtar_common/admin.py | 6 +- ishtar_common/fixtures/initial_data.json | 1863 -------------------------- ishtar_common/fixtures/initial_data_bak.json | 1863 ++++++++++++++++++++++++++ ishtar_common/menus.py | 76 -- ishtar_common/migrations/0001_initial.py | 408 ++++++ ishtar_common/migrations/__init__.py | 0 ishtar_common/models.py | 952 +------------ 7 files changed, 2281 insertions(+), 2887 deletions(-) delete mode 100644 ishtar_common/fixtures/initial_data.json create mode 100644 ishtar_common/fixtures/initial_data_bak.json create mode 100644 ishtar_common/migrations/0001_initial.py create mode 100644 ishtar_common/migrations/__init__.py (limited to 'ishtar_common') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 6d22fbcfa..c4e5fa7f2 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -35,11 +35,11 @@ class HistorizedObjectAdmin(admin.ModelAdmin): obj.history_modifier = request.user obj.save() -class DepartementAdmin(admin.ModelAdmin): +class DepartmentAdmin(admin.ModelAdmin): list_display = ('number', 'label',) - model = models.Departement + model = models.Department -admin.site.register(models.Departement, DepartementAdmin) +admin.site.register(models.Department, DepartmentAdmin) class OrganizationAdmin(HistorizedObjectAdmin): list_display = ('name', 'organization_type') diff --git a/ishtar_common/fixtures/initial_data.json b/ishtar_common/fixtures/initial_data.json deleted file mode 100644 index dbed23faa..000000000 --- a/ishtar_common/fixtures/initial_data.json +++ /dev/null @@ -1,1863 +0,0 @@ -[ - { - "pk": 1, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "sra", - "label": "Service R\u00e9gional d'Arch\u00e9ologie" - } - }, - { - "pk": 2, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "D\u00e9cret 2004\r\n\r\n\"Op\u00e9rateurs\" les personnes qui r\u00e9alisent les op\u00e9rations arch\u00e9ologiques.", - "available": true, - "txt_idx": "operator", - "label": "Op\u00e9rateur d'arch\u00e9ologie pr\u00e9ventive" - } - }, - { - "pk": 4, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "Laboratoire ayant sous sa responsabilit\u00e9 du mobilier arch\u00e9ologique de mani\u00e8re temporaire. C'est un type de d\u00e9p\u00f4t. C'est un lieu de traitement.", - "available": true, - "txt_idx": "restoration_laboratory", - "label": "Laboratoire de restauration" - } - }, - { - "pk": 5, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "Pour des entreprises, collectivit\u00e9s territoriales ou autres organisations", - "available": true, - "txt_idx": "general_contractor", - "label": "Am\u00e9nageur" - } - }, - { - "pk": 7, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "Cette organisation et ses membres travaillent b\u00e9n\u00e9volement", - "available": true, - "txt_idx": "volunteer", - "label": "B\u00e9n\u00e9vole" - } - }, - { - "pk": 8, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "les services qui d\u00e9livrent les autorisations requises pour les diff\u00e9rents projets (DDE, services\r\nurbanisme des collectivit\u00e9s, pr\u00e9fectures, Drire, etc.)", - "available": true, - "txt_idx": "planning_service", - "label": "Service instructeur" - } - }, - { - "pk": 9, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "museum", - "label": "Mus\u00e9e" - } - }, - { - "pk": 6, - "model": "ishtar_common.organizationtype", - "fields": { - "comment": "Laboratoire de recherche du CNRS. Peut-\u00eatre une UMR et donc int\u00e9gr\u00e9 des chercheurs de l'universit\u00e9. n'inclus pas les \"laboratoires\" priv\u00e9s", - "available": true, - "txt_idx": "research_laboratory", - "label": "Laboratoire de recherche" - } - }, - { - "pk": 1, - "model": "ishtar_common.persontype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "administrator", - "label": "Administrateur" - } - }, - { - "pk": 2, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Article 13 D\u00e9cret 2004\r\n\r\nLe pr\u00e9fet de r\u00e9gion \u00e9dicte les prescriptions arch\u00e9ologiques, d\u00e9livre l'autorisation de fouille et d\u00e9signe le responsable scientifique de toute op\u00e9ration d'arch\u00e9ologie pr\u00e9ventive.\r\n\r\nLe responsable scientifique est l'interlocuteur du pr\u00e9fet de r\u00e9gion et le garant de la qualit\u00e9 scientifique de l'op\u00e9ration arch\u00e9ologique. A ce titre, il prend, dans le cadre de la mise en oeuvre du projet d'intervention de l'op\u00e9rateur, les d\u00e9cisions relatives \u00e0 la conduite scientifique de l'op\u00e9ration et \u00e0 l'\u00e9laboration du rapport dont il dirige la r\u00e9daction. Il peut \u00eatre diff\u00e9rent pour la r\u00e9alisation du diagnostic et pour la r\u00e9alisation de la fouille.", - "available": true, - "txt_idx": "head_scientist", - "label": "Responsable scientifique" - } - }, - { - "pk": 3, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Responsables de dossiers d'arch\u00e9ologie", - "available": true, - "txt_idx": "sra_agent", - "label": "Agent scientifique SRA" - } - }, - { - "pk": 4, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Acc\u00e8s pour les secr\u00e9taires d'un SRA", - "available": true, - "txt_idx": "secretarial_dept", - "label": "Secr\u00e9tariat SRA" - } - }, - { - "pk": 5, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Cette personne peut g\u00e9rer du mobilier qu'il n'a pas cr\u00e9\u00e9\r\n\r\n", - "available": true, - "txt_idx": "warehouse_manager", - "label": "Gestionnaire de d\u00e9p\u00f4t" - } - }, - { - "pk": 6, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Responsable de l'am\u00e9nagement", - "available": true, - "txt_idx": "general_contractor", - "label": "Am\u00e9nageur" - } - }, - { - "pk": 7, - "model": "ishtar_common.persontype", - "fields": { - "comment": "Un acc\u00e8s limit\u00e9 \u00e0 la base, uniquement en lecture. Apr\u00e8s enregistrement.", - "available": true, - "txt_idx": "public_access", - "label": "Acc\u00e8s public" - } - }, - { - "pk": 2, - "model": "ishtar_common.authortype", - "fields": { - "comment": "Il y a plusieurs \u00e0 une m\u00eame source. Au m\u00eame niveau de responsabilit\u00e9.", - "available": true, - "txt_idx": "co_author", - "label": "Co-auteur " - } - }, - { - "pk": 3, - "model": "ishtar_common.authortype", - "fields": { - "comment": "Cette personne est l'auteur principal de la source. Les autres auteurs sont des collaborateurs.", - "available": true, - "txt_idx": "main_author", - "label": "Auteur principal" - } - }, - { - "pk": 4, - "model": "ishtar_common.authortype", - "fields": { - "comment": "Cet auteur n'est pas l'auteur principal de la source mais un collaborateur. Il n'est pas auteur au m\u00eame niveau que l'auteur principal.", - "available": true, - "txt_idx": "associate_author", - "label": "Collaborateur" - } - }, - { - "pk": 1, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Photographie argentique sous une forme imprim\u00e9e", - "available": true, - "txt_idx": "photo_print", - "label": "Epreuve de photographie argentique" - } - }, - { - "pk": 2, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport de fouille arch\u00e9ologique", - "available": true, - "txt_idx": "final_archaeological_report", - "label": "Rapport final d'op\u00e9ration (fouille)" - } - }, - { - "pk": 3, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport li\u00e9 \u00e0 une autorisation de sondage.", - "available": true, - "txt_idx": "survey_report", - "label": "Rapport de sondage" - } - }, - { - "pk": 4, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport li\u00e9 \u00e0 un arr\u00eat\u00e9 de prescription de diagnostic arch\u00e9ologique.", - "available": true, - "txt_idx": "diagnostic_report", - "label": "Rapport de diagnostic" - } - }, - { - "pk": 5, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Source photographique num\u00e9rique", - "available": true, - "txt_idx": "digital_photo", - "label": "Photographie num\u00e9rique" - } - }, - { - "pk": 6, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport de laboratoire d'analyse", - "available": true, - "txt_idx": "lab_report", - "label": "Rapport d'analyse" - } - }, - { - "pk": 7, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport li\u00e9 \u00e0 la restauration ou la stabilisation d'un lot de mobilier ou d'un objet isol\u00e9", - "available": true, - "txt_idx": "restoration_report", - "label": "Rapport de restauration" - } - }, - { - "pk": 8, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport li\u00e9 \u00e0 une autorisation de prospection inventaire", - "available": true, - "txt_idx": "general_survey_report", - "label": "Rapport de prospection inventaire" - } - }, - { - "pk": 9, - "model": "ishtar_common.sourcetype", - "fields": { - "comment": "Rapport li\u00e9 \u00e0 une autorisation de prospection th\u00e9matique. Ce type de rapport passe d'ordinaire en CIRA.", - "available": true, - "txt_idx": "thematic_survey_report", - "label": "Rapport de prospection th\u00e9matique" - } - }, - { - "pk": 1, - "model": "ishtar_common.filetype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "preventive", - "label": "Arch\u00e9ologie pr\u00e9ventive" - } - }, - { - "pk": 2, - "model": "ishtar_common.filetype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "prog", - "label": "Arch\u00e9ologie programm\u00e9e" - } - }, - { - "pk": 1, - "model": "ishtar_common.permittype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "pc", - "label": "PC" - } - }, - { - "pk": 2, - "model": "ishtar_common.permittype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "pa", - "label": "PA" - } - }, - { - "pk": 3, - "model": "ishtar_common.permittype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "zac", - "label": "Dossier de r\u00e9alisation de ZAC" - } - }, - { - "pk": 4, - "model": "ishtar_common.permittype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "ei", - "label": "Etude d'impact" - } - }, - { - "pk": 5, - "model": "ishtar_common.permittype", - "fields": { - "comment": "Certificat d'urbanisme", - "available": true, - "txt_idx": "cu", - "label": "CU" - } - }, - { - "pk": 2, - "model": "ishtar_common.saisinetype", - "fields": { - "comment": " I. - Dans les cas mentionn\u00e9s aux 1\u00b0 \u00e0 5\u00b0 de l'article 4, le pr\u00e9fet de r\u00e9gion est saisi :\r\n\r\n1\u00b0 Pour les permis de construire, les permis d'am\u00e9nager et les permis de d\u00e9molir, par le pr\u00e9fet de d\u00e9partement qui lui adresse, d\u00e8s qu'il a re\u00e7u les \u00e9l\u00e9ments transmis par le maire en application des articles R. 423-7 \u00e0 R. 423-9 du code de l'urbanisme, les pi\u00e8ces pr\u00e9vues par le dernier alin\u00e9a de l'article R. 423-2, faisant notamment appara\u00eetre l'emplacement pr\u00e9vu des travaux sur le terrain d'assiette, leur superficie, leur impact sur le sous-sol ;\r\n\r\n2\u00b0 Pour les zones d'am\u00e9nagement concert\u00e9, par la personne publique ayant pris l'initiative de la cr\u00e9ation de la zone qui adresse au pr\u00e9fet de r\u00e9gion le dossier de r\u00e9alisation approuv\u00e9 pr\u00e9vu \u00e0 l'article R. 311-7 du code de l'urbanisme ;\r\n\r\n3\u00b0 Abrog\u00e9\r\n\r\n4\u00b0 Pour les am\u00e9nagements et ouvrages mentionn\u00e9s au 5\u00b0 de l'article 4 qui sont soumis \u00e0 une autorisation administrative autre qu'une autorisation d'urbanisme, par le service charg\u00e9 de recevoir la demande d'autorisation, qui adresse une copie du dossier de demande au pr\u00e9fet de r\u00e9gion ;\r\n\r\n5\u00b0 Pour les am\u00e9nagements et ouvrages mentionn\u00e9s au 5\u00b0 de l'article 4 qui ne sont pas soumis \u00e0 une autorisation administrative, par l'am\u00e9nageur. Celui-ci adresse au pr\u00e9fet de r\u00e9gion un dossier d\u00e9crivant les travaux projet\u00e9s, notamment leur emplacement pr\u00e9vu sur le terrain d'assiette, leur superficie, leur impact sur le sous-sol et indiquant la date \u00e0 laquelle ils ont \u00e9t\u00e9 arr\u00eat\u00e9s.\r\n\r\nII. - Pour les travaux sur des monuments historiques mentionn\u00e9s au 6\u00b0 de l'article 4, la saisine du pr\u00e9fet de r\u00e9gion au titre de l'autorisation exig\u00e9e par l'article L. 621-9 du code du patrimoine vaut saisine au titre du pr\u00e9sent d\u00e9cret.", - "available": true, - "txt_idx": "Article_8", - "delay": 21, - "label": "Article 8" - } - }, - { - "pk": 3, - "model": "ishtar_common.saisinetype", - "fields": { - "comment": " Les am\u00e9nageurs peuvent, avant de d\u00e9poser une demande pour obtenir les autorisations requises par les lois et r\u00e8glements ou avant d'engager toute autre proc\u00e9dure, saisir le pr\u00e9fet de r\u00e9gion afin qu'il examine si leur projet est susceptible de donner lieu \u00e0 des prescriptions arch\u00e9ologiques.\r\n\r\nA cette fin, ils produisent un dossier qui comporte un plan parcellaire et les r\u00e9f\u00e9rences cadastrales, le descriptif du projet et son emplacement sur le terrain d'assiette ainsi que, le cas \u00e9ch\u00e9ant, une notice pr\u00e9cisant les modalit\u00e9s techniques envisag\u00e9es pour l'ex\u00e9cution des travaux.\r\n\r\nSi le pr\u00e9fet de r\u00e9gion constate que le projet est susceptible d'affecter des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique, il informe le demandeur, dans le d\u00e9lai de deux mois \u00e0 compter de la r\u00e9ception de la demande, que le projet qu'il lui a pr\u00e9sent\u00e9 donnera lieu \u00e0 des prescriptions de diagnostic arch\u00e9ologique.", - "available": true, - "txt_idx": "Article_10", - "delay": 60, - "label": "Article 10" - } - }, - { - "pk": 4, - "model": "ishtar_common.saisinetype", - "fields": { - "comment": " Si le pr\u00e9fet de r\u00e9gion a fait conna\u00eetre, en application de l'article 10, la n\u00e9cessit\u00e9 d'un diagnostic, l'am\u00e9nageur peut le saisir d'une demande anticip\u00e9e de prescription.\r\n\r\nLe pr\u00e9fet de r\u00e9gion prescrit alors, dans les conditions pr\u00e9vues par le pr\u00e9sent d\u00e9cret, la r\u00e9alisation d'un diagnostic arch\u00e9ologique et, si des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique pr\u00e9sents sur le site sont d\u00e9j\u00e0 connus, prend les autres mesures pr\u00e9vues \u00e0 l'article 14.\r\n\r\nLa redevance d'arch\u00e9ologie pr\u00e9ventive correspondante est due par le demandeur, conform\u00e9ment au dernier alin\u00e9a de l'article L. 524-4 du code du patrimoine.", - "available": true, - "txt_idx": "Article_12", - "delay": 30, - "label": "Article 12" - } - }, - { - "pk": 5, - "model": "ishtar_common.saisinetype", - "fields": { - "comment": "Article 6\r\n\r\n Lorsqu'il dispose d'informations lui indiquant qu'un projet qui ne lui est pas transmis en application de l'arr\u00eat\u00e9 mentionn\u00e9 \u00e0 l'article 5 est n\u00e9anmoins susceptible d'affecter des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique, le pr\u00e9fet de r\u00e9gion peut demander au maire de lui communiquer au cours de l'instruction, selon le cas, le dossier de demande de permis de construire, de permis d'am\u00e9nager, de permis de d\u00e9molir ou le dossier de r\u00e9alisation de zone d'am\u00e9nagement concert\u00e9 qui correspond \u00e0 ce projet.\r\n\r\nIl peut, pour le m\u00eame motif, demander au maire de lui communiquer le dossier d'une d\u00e9claration pr\u00e9alable d\u00e9pos\u00e9e en application de l'article L. 421-4 du code de l'urbanisme.", - "available": true, - "txt_idx": "Article_6", - "delay": 30, - "label": "Auto-saisine" - } - }, - { - "pk": 1, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "Une op\u00e9ration arch\u00e9ologique visant \u00e0 qualifier et quantifier la pr\u00e9sence de vestiges sur une surface donn\u00e9e.", - "available": true, - "txt_idx": "arch_diagnostic", - "label": "Diagnostic arch\u00e9ologique" - } - }, - { - "pk": 2, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "A pr\u00e9ciser", - "available": true, - "txt_idx": "prev_excavation", - "label": "Fouille arch\u00e9ologique pr\u00e9ventive" - } - }, - { - "pk": 3, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "prog_excavation", - "label": "Fouille programm\u00e9e" - } - }, - { - "pk": 4, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "Pas assez gros pour \u00eatre une fouille, mais porte n\u00e9anmoins atteinte au sous-sol.", - "available": true, - "txt_idx": "Sampling", - "label": "Sondage" - } - }, - { - "pk": 5, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "Une campagne de prospection sur un th\u00e8me particulier", - "available": true, - "txt_idx": "thematic_survey", - "label": "Prospection th\u00e9matique" - } - }, - { - "pk": 6, - "model": "ishtar_common.operationtype", - "fields": { - "comment": "Prospection visant \u00e0 d\u00e9tecter tout type de vestiges (ou presque) sur une surface donn\u00e9e. ", - "available": true, - "txt_idx": "inventory_survey", - "label": "Prospection inventaire" - } - }, - { - "pk": 1, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "villa", - "label": "villa" - } - }, - { - "pk": 2, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "enclosure", - "label": "enclos" - } - }, - { - "pk": 3, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "church", - "label": "\u00e9glise" - } - }, - { - "pk": 4, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "pit", - "label": "fosse" - } - }, - { - "pk": 5, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "cairn", - "label": "cairn" - } - }, - { - "pk": 6, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "ditch", - "label": "foss\u00e9" - } - }, - { - "pk": 7, - "model": "ishtar_common.remaintype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "post_hole", - "label": "trous de poteaux" - } - }, - { - "pk": 1, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": -10000, - "order": 2000, - "label": "Pal\u00e9olithique", - "start_date": -450000, - "txt_idx": "paleolithic" - } - }, - { - "pk": 2, - "model": "ishtar_common.period", - "fields": { - "comment": "1100, 'Pal\u00e9olithique ancien', , )", - "available": true, - "parent": 1, - "end_date": -150000, - "order": 1100, - "label": "Pal\u00e9olithique ancien", - "start_date": -450000, - "txt_idx": "ancien_paleolithic" - } - }, - { - "pk": 3, - "model": "ishtar_common.period", - "fields": { - "comment": "1200, '', , ),", - "available": true, - "parent": 1, - "end_date": -35000, - "order": 1200, - "label": "Pal\u00e9olithique moyen", - "start_date": -150000, - "txt_idx": "middle_paleolithic" - } - }, - { - "pk": 4, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 1, - "end_date": -12000, - "order": 1300, - "label": "Pal\u00e9olithique sup\u00e9rieur", - "start_date": -35000, - "txt_idx": "late_paleolithic" - } - }, - { - "pk": 5, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 1, - "end_date": -10000, - "order": 1400, - "label": "Pal\u00e9olithique sup\u00e9rieur final", - "start_date": -12000, - "txt_idx": "final_paleolithic" - } - }, - { - "pk": 6, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": -5000, - "order": 3000, - "label": "M\u00e9solithique", - "start_date": -10000, - "txt_idx": "mesolithic" - } - }, - { - "pk": 7, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 6, - "end_date": -7000, - "order": 2100, - "label": "M\u00e9solithique ancien", - "start_date": -10000, - "txt_idx": "old_mesolithic" - } - }, - { - "pk": 8, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": false, - "parent": 6, - "end_date": 0, - "order": 2200, - "label": "M\u00e9solithique moyen", - "start_date": 0, - "txt_idx": "middle_mesolithic" - } - }, - { - "pk": 9, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 6, - "end_date": -5000, - "order": 2300, - "label": "M\u00e9solithique r\u00e9cent", - "start_date": -7000, - "txt_idx": "recent_mesolithic" - } - }, - { - "pk": 10, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": -2000, - "order": 4000, - "label": "N\u00e9olithique", - "start_date": -5500, - "txt_idx": "neolithic" - } - }, - { - "pk": 11, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 10, - "end_date": -4500, - "order": 3100, - "label": "N\u00e9olithique ancien", - "start_date": -5500, - "txt_idx": "old_neolithic" - } - }, - { - "pk": 12, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 10, - "end_date": -300, - "order": 3200, - "label": "N\u00e9olithique moyen", - "start_date": -4500, - "txt_idx": "middle_neolithic" - } - }, - { - "pk": 13, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 10, - "end_date": -2500, - "order": 3300, - "label": "N\u00e9olithique r\u00e9cent", - "start_date": -3200, - "txt_idx": "recent_neolithic" - } - }, - { - "pk": 14, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 10, - "end_date": -2000, - "order": 3400, - "label": "N\u00e9olithique final", - "start_date": -2800, - "txt_idx": "final_neolithic" - } - }, - { - "pk": 15, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": -40, - "order": 5000, - "label": "Protohistoire", - "start_date": -2000, - "txt_idx": "protohistory" - } - }, - { - "pk": 16, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 15, - "end_date": -750, - "order": 4100, - "label": "\u00c2ge du Bronze", - "start_date": -2000, - "txt_idx": "bronze_age" - } - }, - { - "pk": 17, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 15, - "end_date": -40, - "order": 4200, - "label": "\u00c2ge du Fer", - "start_date": -800, - "txt_idx": "iron_age" - } - }, - { - "pk": 18, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 16, - "end_date": -1600, - "order": 4110, - "label": "\u00c2ge du Bronze ancien", - "start_date": -2000, - "txt_idx": "old_bronze_age" - } - }, - { - "pk": 19, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 16, - "end_date": -1200, - "order": 4120, - "label": "\u00c2ge du Bronze moyen", - "start_date": -1600, - "txt_idx": "middle_bronze_age" - } - }, - { - "pk": 20, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 16, - "end_date": -750, - "order": 4130, - "label": "\u00c2ge du Bronze final", - "start_date": -1200, - "txt_idx": "final_bronze_age" - } - }, - { - "pk": 21, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 17, - "end_date": -450, - "order": 4210, - "label": "Premier \u00c2ge du Fer", - "start_date": -800, - "txt_idx": "first_iron_age" - } - }, - { - "pk": 22, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 17, - "end_date": -40, - "order": 4220, - "label": "Deuxi\u00e8me \u00c2ge du Fer", - "start_date": -500, - "txt_idx": "second_iron_age" - } - }, - { - "pk": 23, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": 476, - "order": 6000, - "label": "Gallo-romain", - "start_date": -40, - "txt_idx": "gallo-roman" - } - }, - { - "pk": 24, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 23, - "end_date": -27, - "order": 5100, - "label": "R\u00e9publique", - "start_date": -40, - "txt_idx": "republic" - } - }, - { - "pk": 25, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 23, - "end_date": 192, - "order": 5200, - "label": "Haut-empire", - "start_date": -27, - "txt_idx": "high-empire" - } - }, - { - "pk": 26, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 23, - "end_date": 476, - "order": 5300, - "label": "Bas-empire", - "start_date": 192, - "txt_idx": "low_empire" - } - }, - { - "pk": 27, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": 1492, - "order": 7000, - "label": "Moyen-\u00e2ge", - "start_date": 476, - "txt_idx": "middle_age" - } - }, - { - "pk": 28, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 27, - "end_date": 987, - "order": 6100, - "label": "Haut moyen-\u00e2ge", - "start_date": 476, - "txt_idx": "476" - } - }, - { - "pk": 29, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 27, - "end_date": 1204, - "order": 6200, - "label": "Moyen-\u00e2ge classique", - "start_date": 987, - "txt_idx": "classic_middle_age" - } - }, - { - "pk": 30, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 27, - "end_date": 1492, - "order": 6300, - "label": "Bas moyen-\u00e2ge", - "start_date": 1204, - "txt_idx": "low_middle_age" - } - }, - { - "pk": 31, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": 2011, - "order": 8000, - "label": "P\u00e9riode r\u00e9cente", - "start_date": 1492, - "txt_idx": "recent_times" - } - }, - { - "pk": 32, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 31, - "end_date": 1815, - "order": 7100, - "label": "Epoque moderne", - "start_date": 1492, - "txt_idx": "modern" - } - }, - { - "pk": 33, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": 31, - "end_date": 2011, - "order": 7200, - "label": "Epoque contemporaine", - "start_date": 1815, - "txt_idx": "contemporan" - } - }, - { - "pk": 34, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": 0, - "order": 0, - "label": "Epoque ind\u00e9termin\u00e9e", - "start_date": 0, - "txt_idx": "indetermined" - } - }, - { - "pk": 35, - "model": "ishtar_common.period", - "fields": { - "comment": "", - "available": true, - "parent": null, - "end_date": 0, - "order": 10000, - "label": "Non-renseign\u00e9", - "start_date": 0, - "txt_idx": "not_yet_documented" - } - }, - { - "pk": 2, - "model": "ishtar_common.datingtype", - "fields": { - "comment": "Une \u00e9tude du mobilier est la source de datation", - "available": true, - "txt_idx": "from_artefact", - "label": "D'apr\u00e8s \u00e9tude du mobilier" - } - }, - { - "pk": 1, - "model": "ishtar_common.datingtype", - "fields": { - "comment": "D'apr\u00e8s une datation de type C14, OSL, TL, arch\u00e9omagn\u00e9tisme, etc, forunissant une date en BPcal avec une marge.", - "available": true, - "txt_idx": "from_absolute_dating", - "label": "D'apr\u00e8s datation absolue" - } - }, - { - "pk": 2, - "model": "ishtar_common.datingquality", - "fields": { - "comment": "datation a v\u00e9rifier", - "available": true, - "txt_idx": "estimated", - "label": "Estim\u00e9e " - } - }, - { - "pk": 1, - "model": "ishtar_common.datingquality", - "fields": { - "comment": "Datation fond\u00e9e sur des faits", - "available": true, - "txt_idx": "sure", - "label": "Aver\u00e9e" - } - }, - { - "pk": 1, - "model": "ishtar_common.unit", - "fields": { - "comment": "Cette unit\u00e9 n'a pas de volume", - "available": true, - "parent": null, - "label": "N\u00e9gative", - "order": 100, - "txt_idx": "negative" - } - }, - { - "pk": 2, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": 1, - "label": "Creusement", - "order": 110, - "txt_idx": "digging" - } - }, - { - "pk": 3, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": 1, - "label": "D\u00e9rasement", - "order": 120, - "txt_idx": "partial_destruction" - } - }, - { - "pk": 4, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "Couche", - "order": 200, - "txt_idx": "layer" - } - }, - { - "pk": 5, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": 4, - "label": "Couche construite", - "order": 210, - "txt_idx": "builded_layer" - } - }, - { - "pk": 6, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": 4, - "label": "Remblai", - "order": 220, - "txt_idx": "embankment" - } - }, - { - "pk": 7, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "Alt\u00e9ration", - "order": 300, - "txt_idx": "alteration" - } - }, - { - "pk": 8, - "model": "ishtar_common.unit", - "fields": { - "comment": "", - "available": true, - "parent": 7, - "label": "Impact thermique", - "order": 310, - "txt_idx": "thermal_impact" - } - }, - { - "pk": 9, - "model": "ishtar_common.unit", - "fields": { - "comment": "Unit\u00e9 g\u00e9n\u00e9rale (d'ordinaire virtuelle) pouvant regrouper du mobilier trouver en dehors d'un contexte spatialis\u00e9 : mobilier trouver lors d'un d\u00e9capage, sous une semelle d'un fouilleur, dans les d\u00e9blais, etc.", - "available": true, - "parent": null, - "label": "Hors contexte", - "order": 1, - "txt_idx": "not_in_context" - } - }, - { - "pk": 10, - "model": "ishtar_common.unit", - "fields": { - "comment": "Unit\u00e9 repr\u00e9sentant une partie d'un niveau d\u00e9coup\u00e9 en carr\u00e9s r\u00e9f\u00e9renc\u00e9s.", - "available": true, - "parent": null, - "label": "Carr\u00e9", - "order": 10, - "txt_idx": "square" - } - }, - { - "pk": 1, - "model": "ishtar_common.activitytype", - "fields": { - "comment": "Unit\u00e9 enregistrement qui n'est pas directement d'origine anthropique. ", - "available": true, - "txt_idx": "natural", - "order": 1000, - "label": "Naturelle" - } - }, - { - "pk": 2, - "model": "ishtar_common.activitytype", - "fields": { - "comment": "Unit\u00e9 \u00e9labor\u00e9e par l'homme, comme une mur ou un sol am\u00e9nag\u00e9 par exemple", - "available": true, - "txt_idx": "construction", - "order": 1100, - "label": "Construction" - } - }, - { - "pk": 3, - "model": "ishtar_common.activitytype", - "fields": { - "comment": "Unit\u00e9 r\u00e9sultant de l'arr\u00eat d'anthropisation", - "available": true, - "txt_idx": "desertion", - "order": 1200, - "label": "Abandon" - } - }, - { - "pk": 4, - "model": "ishtar_common.activitytype", - "fields": { - "comment": "Unit\u00e9 li\u00e9e \u00e0 l'anthropisation elle-m\u00eame", - "available": true, - "txt_idx": "occupation", - "order": 1300, - "label": "Occupation" - } - }, - { - "pk": 1, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "Niveau cultiv\u00e9 ou non, actuel.", - "available": true, - "txt_idx": "soil", - "order": 1000, - "label": "Terre v\u00e9g\u00e9tale" - } - }, - { - "pk": 2, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "masonry", - "order": 1100, - "label": "Ma\u00e7onnerie" - } - }, - { - "pk": 3, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "wall", - "order": 1200, - "label": "Mur" - } - }, - { - "pk": 4, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "occupation_level", - "order": 1300, - "label": "Niveau d'occupation" - } - }, - { - "pk": 5, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "desertion_level", - "order": 1400, - "label": "Niveau d'abandon" - } - }, - { - "pk": 6, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "geological_level", - "order": 1400, - "label": "Niveau g\u00e9ologique" - } - }, - { - "pk": 7, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "embankment", - "order": 1500, - "label": "Remblai" - } - }, - { - "pk": 8, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "archaeological_soil", - "order": 1600, - "label": "Sol arch\u00e9ologique" - } - }, - { - "pk": 9, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "foundation_level", - "order": 1700, - "label": "Radier" - } - }, - { - "pk": 10, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "digging", - "order": 1800, - "label": "Creusement" - } - }, - { - "pk": 11, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "colluvial_unit", - "order": 1800, - "label": "Colluvions" - } - }, - { - "pk": 12, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "windthrow", - "order": 1900, - "label": "Chablis" - } - }, - { - "pk": 13, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "filling", - "order": 2000, - "label": "Comblement" - } - }, - { - "pk": 14, - "model": "ishtar_common.identificationtype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "unknown", - "order": 100, - "label": "Ind\u00e9termin\u00e9" - } - }, - { - "pk": 1, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "M\u00e9tal", - "recommendation": "Hygrom\u00e9trie contr\u00f4l\u00e9e, variation de temp\u00e9rature faible", - "txt_idx": "metal" - } - }, - { - "pk": 2, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "Os", - "recommendation": "Hygrom\u00e9trie contr\u00f4l\u00e9e, variations de temp\u00e9rature faible", - "txt_idx": "bone" - } - }, - { - "pk": 3, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": 2, - "label": "Os animal", - "recommendation": "idem os", - "txt_idx": "animal_bone" - } - }, - { - "pk": 4, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": 2, - "label": "Os humain", - "recommendation": "idem os", - "txt_idx": "human_bone" - } - }, - { - "pk": 5, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "Verre", - "recommendation": "fragile, oxydation, etc.", - "txt_idx": "glass" - } - }, - { - "pk": 6, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "C\u00e9ramique", - "recommendation": "a d\u00e9tailler", - "txt_idx": "ceramic" - } - }, - { - "pk": 7, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "Min\u00e9ral", - "recommendation": "a d\u00e9tailler", - "txt_idx": "mineral" - } - }, - { - "pk": 8, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": null, - "label": "\u00c9cofact", - "recommendation": "on en veut pas !", - "txt_idx": "ecofact" - } - }, - { - "pk": 9, - "model": "ishtar_common.materialtype", - "fields": { - "comment": "", - "available": true, - "parent": 1, - "label": "Bronze", - "recommendation": "blah", - "txt_idx": "bronze" - } - }, - { - "pk": 1, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Le mobilier arch\u00e9ologique reste dans ce d\u00e9p\u00f4t le temps d'un traitement puis part ailleurs...", - "available": true, - "txt_idx": "restoration_laboratory", - "label": "Laboratoire de restauration" - } - }, - { - "pk": 2, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Ce d\u00e9p\u00f4t est un centre de conservation et d'\u00e9tude. Il est d'ordinaire en convention avec l'\u00e9tat.", - "available": true, - "txt_idx": "cce", - "label": "CCE" - } - }, - { - "pk": 4, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Ce d\u00e9p\u00f4t poss\u00e8de une convention avec l'\u00e9tat pour conserver du mobilier qui est sous sa garde.", - "available": true, - "txt_idx": "conventioned_warehouse", - "label": "D\u00e9p\u00f4t conventionn\u00e9" - } - }, - { - "pk": 3, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Mobilier pr\u00e9sent dans un lieu de mani\u00e8re ill\u00e9gale : pas de convention, voire de responsabilit\u00e9 exprim\u00e9e...", - "available": true, - "txt_idx": "illegal_warehouse", - "label": "D\u00e9p\u00f4t non conventionn\u00e9" - } - }, - { - "pk": 5, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Ce d\u00e9p\u00f4t est sous la responsabilit\u00e9 directe de l'Etat. Il peut en \u00eatre locataire ou propri\u00e9taire.", - "available": true, - "txt_idx": "state_warehouse", - "label": "D\u00e9p\u00f4t de l'Etat" - } - }, - { - "pk": 6, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Pour le stockage de documents papier, rapports la plus part du temps.", - "available": true, - "txt_idx": "library", - "label": "Biblioth\u00e8que" - } - }, - { - "pk": 7, - "model": "ishtar_common.warehousetype", - "fields": { - "comment": "Lieu de stockage de documents vari\u00e9s, photos, relev\u00e9s, jusqu'aux rapports.", - "available": true, - "txt_idx": "documentation_center", - "label": "Centre de documentation" - } - }, - { - "pk": 3, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Suite \u00e0 une demande d'avis, les SRA \u00e9met un courrier signalant sa volont\u00e9 de prescrire un diagnostic ou une fouille sur l'emprise du projet en objet.", - "available": true, - "txt_idx": "pos_advice_reply", - "intented_to": "F", - "label": "R\u00e9ponse positive \u00e0 une demande d'avis (art.10)" - } - }, - { - "pk": 4, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Suite \u00e0 une demande d'avis, les SRA \u00e9met un courrier signalant sa volont\u00e9 de NE PAS prescrire un diagnostic ou une fouille sur l'emprise du projet en objet.", - "available": true, - "txt_idx": "neg_advice_reply", - "intented_to": "F", - "label": "R\u00e9ponse n\u00e9gative \u00e0 une demande d'avis (art.10)" - } - }, - { - "pk": 7, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Suite \u00e0 une Saisine (art.8), envoi d'une r\u00e9ponse de non prescription", - "available": true, - "txt_idx": "reply_no_prescription", - "intented_to": "F", - "label": "R\u00e9ponse NON prescription \u00e0 une saisine" - } - }, - { - "pk": 6, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Arr\u00eat\u00e9 donnant l'autorisation \u00e0 une responsable scientifique de fouiller sur un terrain donn\u00e9.", - "available": true, - "txt_idx": "prog_excav_autorization_order", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 d'autorisation de fouille programm\u00e9e" - } - }, - { - "pk": 5, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Arr\u00eat\u00e9 qui donne l'autorisation \u00e0 un Am\u00e9nageur de faire ex\u00e9cuter par un Op\u00e9rateur agr\u00e9e sous la responsabilit\u00e9 d'un Responsable scientifique, une op\u00e9ration.", - "available": true, - "txt_idx": "excavation_autorization_order", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 d'autorisation de fouille pr\u00e9ventive" - } - }, - { - "pk": 2, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Un arr\u00eat\u00e9 prescrivant la r\u00e9alisation d'une fouille sur une surface donn\u00e9e", - "available": true, - "txt_idx": "excavation_order", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 de prescription de fouille" - } - }, - { - "pk": 1, - "model": "ishtar_common.acttype", - "fields": { - "comment": "Un arr\u00eat\u00e9 prescrivant la r\u00e9alisation d'un diagnostic sur une surface donn\u00e9e, SANS pr\u00e9cision du responsable scientifique, SANS pr\u00e9cision de l'op\u00e9rateur", - "available": true, - "txt_idx": "diagnostic_order", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 de diagnostic, sans RS, sans op\u00e9rateur" - } - }, - { - "pk": 8, - "model": "ishtar_common.acttype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "responsible_act", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 de d\u00e9signation de RS" - } - }, - { - "pk": 9, - "model": "ishtar_common.acttype", - "fields": { - "comment": "D\u00e9signation de l'op\u00e9rateur pour un diagnostic : utile dans le cas o\u00f9 un service territorial ET l'INRAP sont en m\u00eame temps comp\u00e9tents pour un territoire donn\u00e9.", - "available": true, - "txt_idx": "operator_designation_act", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 de d\u00e9signation d'op\u00e9rateur" - } - }, - { - "pk": 10, - "model": "ishtar_common.acttype", - "fields": { - "comment": "", - "available": true, - "txt_idx": "thematic_survey_act", - "intented_to": "O", - "label": "Arr\u00eat\u00e9 d'autorisation de prospection th\u00e9matique" - } - }, - { - "pk": 1, - "model": "ishtar_common.containertype", - "fields": { - "comment": "Type de caisse tr\u00e8s commun dans le nord de la France. Pas cher, pas trop gros donc pas trop lourd.\r\n\r\nR\u00e9f\u00e9rences pr\u00e9cises \u00e0 trouver !!!!!", - "available": true, - "reference": "Inconnue", - "label": "Caisse \u00e0 pomme rouge", - "volume": 18, - "width": 20, - "length": null, - "height": 25, - "txt_idx": "red_apple_bin" - } - }, - { - "pk": 2, - "model": "ishtar_common.containertype", - "fields": { - "comment": "L'horrible caisse \u00e0 poisson ou du genre, a changer au plus vite", - "available": true, - "reference": "variable", - "label": "Caisse en polystyr\u00e8ne", - "volume": 0, - "width": 0, - "length": null, - "height": 0, - "txt_idx": "polystyren_bin" - } - }, - { - "pk": 4, - "model": "ishtar_common.containertype", - "fields": { - "comment": "Caisse Alibert grise standard, a pr\u00e9ciser et d\u00e9cliner en fonction des mod\u00e8les.", - "available": true, - "reference": "a pr\u00e9ciser", - "label": "Caisse Alibert standard", - "volume": 0, - "width": 0, - "length": null, - "height": 0, - "txt_idx": "stand_alibert_bin" - } - }, - { - "pk": 6, - "model": "ishtar_common.containertype", - "fields": { - "comment": "", - "available": true, - "reference": "Curver UNIBOX 29 L", - "label": "Curver UNIBOX 29 L", - "volume": 37, - "width": 355, - "length": null, - "height": 245, - "txt_idx": "curver_unibox_29" - } - }, - { - "pk": 7, - "model": "ishtar_common.containertype", - "fields": { - "comment": "", - "available": true, - "reference": "Curver UNIBOX 48 L", - "label": "Curver UNIBOX 48 L", - "volume": 63, - "width": 432, - "length": null, - "height": 280, - "txt_idx": "curver_unibox_48" - } - }, - { - "pk": 5, - "model": "ishtar_common.containertype", - "fields": { - "comment": "", - "available": true, - "reference": "Curver UNIBOX 20 lL", - "label": "Curver UNIBOX 20 L", - "volume": 25, - "width": 350, - "length": null, - "height": 165, - "txt_idx": "curver_unibox_20" - } - }, - { - "pk": 1, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Le fait de mettre du mobilier dans un contenant. Que cela soit le conditionnement initial ou un re-conditionnement. ", - "available": true, - "txt_idx": "packaging", - "virtual": false, - "label": "Conditionnement" - } - }, - { - "pk": 2, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Un lot mobilier ou un objet isol\u00e9 subit une radiographie (rayon X) qui produit un ou des films radio.", - "available": true, - "txt_idx": "regular_x_ray", - "virtual": false, - "label": "Radiographie argentique" - } - }, - { - "pk": 3, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Un lot mobilier ou un objet isol\u00e9 subit une radiographie (rayon X) qui produit un ou des fichiers num\u00e9riques.", - "available": true, - "txt_idx": "digital_x_ray", - "virtual": false, - "label": "Radiographie num\u00e9rique" - } - }, - { - "pk": 4, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "D\u00e9placement de mobilier, entre deux d\u00e9p\u00f4ts : le mobilier ne peut pas \u00eatre stocker ailleurs que dans un lieu consid\u00e9r\u00e9 comme un d\u00e9p\u00f4t.", - "available": true, - "txt_idx": "moving", - "virtual": false, - "label": "D\u00e9placement" - } - }, - { - "pk": 5, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Regroupement d'un ensemble de mobilier. Exemple : ensemble des outils provenant d'une fouille, Mobilier datant d'un site, tessonier virtuel, etc.", - "available": true, - "txt_idx": "virtual_group", - "virtual": true, - "label": "Groupement virtuel" - } - }, - { - "pk": 7, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Division d'un lot de mobilier en plusieurs lots", - "available": true, - "txt_idx": "split", - "virtual": false, - "label": "Division" - } - }, - { - "pk": 6, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "R\u00e9union de plusieurs objets ou lots mobiliers en un seul. Ce type de traitement peut impliquer ou non un reconditionnement.\r\n\r\nExemple : Remontage d'une c\u00e9ramique \u00e0 partir de tessons d\u00e9j\u00e0 pr\u00e9sents dans un contenant (pas de reconditionnement), regroupement d'une partie de la faune (os) d'une op\u00e9ration et cr\u00e9ation d'une nouvelle caisse dans ce but (reconditionnement \u00e0 faire)", - "available": true, - "txt_idx": "physical_grouping", - "virtual": false, - "label": "Groupement" - } - }, - { - "pk": 8, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Prise de vue \u00e0 l'aide d'un appareil photo num\u00e9rique", - "available": true, - "txt_idx": "digital_photography", - "virtual": false, - "label": "Photographie num\u00e9rique" - } - }, - { - "pk": 9, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Photographie produisant un film (positif ou n\u00e9gatif)", - "available": true, - "txt_idx": "regular_photography", - "virtual": false, - "label": "Photographie argentique" - } - }, - { - "pk": 10, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "Processus qui permet \u00e9liminer le sel qui impr\u00e8gne un objet arch\u00e9ologique ou lot d'objets.", - "available": true, - "txt_idx": "desalinisation", - "virtual": false, - "label": "D\u00e9salinisation" - } - }, - { - "pk": 11, - "model": "ishtar_common.treatmenttype", - "fields": { - "comment": "R\u00e9duction des oxydes d\u00e9velopp\u00e9s sur/dans un objet arch\u00e9ologique par l'usage de courant \u00e9lectrique.", - "available": true, - "txt_idx": "electrolysis", - "virtual": false, - "label": "Electrolyse" - } - } -] diff --git a/ishtar_common/fixtures/initial_data_bak.json b/ishtar_common/fixtures/initial_data_bak.json new file mode 100644 index 000000000..dbed23faa --- /dev/null +++ b/ishtar_common/fixtures/initial_data_bak.json @@ -0,0 +1,1863 @@ +[ + { + "pk": 1, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "sra", + "label": "Service R\u00e9gional d'Arch\u00e9ologie" + } + }, + { + "pk": 2, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "D\u00e9cret 2004\r\n\r\n\"Op\u00e9rateurs\" les personnes qui r\u00e9alisent les op\u00e9rations arch\u00e9ologiques.", + "available": true, + "txt_idx": "operator", + "label": "Op\u00e9rateur d'arch\u00e9ologie pr\u00e9ventive" + } + }, + { + "pk": 4, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "Laboratoire ayant sous sa responsabilit\u00e9 du mobilier arch\u00e9ologique de mani\u00e8re temporaire. C'est un type de d\u00e9p\u00f4t. C'est un lieu de traitement.", + "available": true, + "txt_idx": "restoration_laboratory", + "label": "Laboratoire de restauration" + } + }, + { + "pk": 5, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "Pour des entreprises, collectivit\u00e9s territoriales ou autres organisations", + "available": true, + "txt_idx": "general_contractor", + "label": "Am\u00e9nageur" + } + }, + { + "pk": 7, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "Cette organisation et ses membres travaillent b\u00e9n\u00e9volement", + "available": true, + "txt_idx": "volunteer", + "label": "B\u00e9n\u00e9vole" + } + }, + { + "pk": 8, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "les services qui d\u00e9livrent les autorisations requises pour les diff\u00e9rents projets (DDE, services\r\nurbanisme des collectivit\u00e9s, pr\u00e9fectures, Drire, etc.)", + "available": true, + "txt_idx": "planning_service", + "label": "Service instructeur" + } + }, + { + "pk": 9, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "museum", + "label": "Mus\u00e9e" + } + }, + { + "pk": 6, + "model": "ishtar_common.organizationtype", + "fields": { + "comment": "Laboratoire de recherche du CNRS. Peut-\u00eatre une UMR et donc int\u00e9gr\u00e9 des chercheurs de l'universit\u00e9. n'inclus pas les \"laboratoires\" priv\u00e9s", + "available": true, + "txt_idx": "research_laboratory", + "label": "Laboratoire de recherche" + } + }, + { + "pk": 1, + "model": "ishtar_common.persontype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "administrator", + "label": "Administrateur" + } + }, + { + "pk": 2, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Article 13 D\u00e9cret 2004\r\n\r\nLe pr\u00e9fet de r\u00e9gion \u00e9dicte les prescriptions arch\u00e9ologiques, d\u00e9livre l'autorisation de fouille et d\u00e9signe le responsable scientifique de toute op\u00e9ration d'arch\u00e9ologie pr\u00e9ventive.\r\n\r\nLe responsable scientifique est l'interlocuteur du pr\u00e9fet de r\u00e9gion et le garant de la qualit\u00e9 scientifique de l'op\u00e9ration arch\u00e9ologique. A ce titre, il prend, dans le cadre de la mise en oeuvre du projet d'intervention de l'op\u00e9rateur, les d\u00e9cisions relatives \u00e0 la conduite scientifique de l'op\u00e9ration et \u00e0 l'\u00e9laboration du rapport dont il dirige la r\u00e9daction. Il peut \u00eatre diff\u00e9rent pour la r\u00e9alisation du diagnostic et pour la r\u00e9alisation de la fouille.", + "available": true, + "txt_idx": "head_scientist", + "label": "Responsable scientifique" + } + }, + { + "pk": 3, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Responsables de dossiers d'arch\u00e9ologie", + "available": true, + "txt_idx": "sra_agent", + "label": "Agent scientifique SRA" + } + }, + { + "pk": 4, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Acc\u00e8s pour les secr\u00e9taires d'un SRA", + "available": true, + "txt_idx": "secretarial_dept", + "label": "Secr\u00e9tariat SRA" + } + }, + { + "pk": 5, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Cette personne peut g\u00e9rer du mobilier qu'il n'a pas cr\u00e9\u00e9\r\n\r\n", + "available": true, + "txt_idx": "warehouse_manager", + "label": "Gestionnaire de d\u00e9p\u00f4t" + } + }, + { + "pk": 6, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Responsable de l'am\u00e9nagement", + "available": true, + "txt_idx": "general_contractor", + "label": "Am\u00e9nageur" + } + }, + { + "pk": 7, + "model": "ishtar_common.persontype", + "fields": { + "comment": "Un acc\u00e8s limit\u00e9 \u00e0 la base, uniquement en lecture. Apr\u00e8s enregistrement.", + "available": true, + "txt_idx": "public_access", + "label": "Acc\u00e8s public" + } + }, + { + "pk": 2, + "model": "ishtar_common.authortype", + "fields": { + "comment": "Il y a plusieurs \u00e0 une m\u00eame source. Au m\u00eame niveau de responsabilit\u00e9.", + "available": true, + "txt_idx": "co_author", + "label": "Co-auteur " + } + }, + { + "pk": 3, + "model": "ishtar_common.authortype", + "fields": { + "comment": "Cette personne est l'auteur principal de la source. Les autres auteurs sont des collaborateurs.", + "available": true, + "txt_idx": "main_author", + "label": "Auteur principal" + } + }, + { + "pk": 4, + "model": "ishtar_common.authortype", + "fields": { + "comment": "Cet auteur n'est pas l'auteur principal de la source mais un collaborateur. Il n'est pas auteur au m\u00eame niveau que l'auteur principal.", + "available": true, + "txt_idx": "associate_author", + "label": "Collaborateur" + } + }, + { + "pk": 1, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Photographie argentique sous une forme imprim\u00e9e", + "available": true, + "txt_idx": "photo_print", + "label": "Epreuve de photographie argentique" + } + }, + { + "pk": 2, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport de fouille arch\u00e9ologique", + "available": true, + "txt_idx": "final_archaeological_report", + "label": "Rapport final d'op\u00e9ration (fouille)" + } + }, + { + "pk": 3, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport li\u00e9 \u00e0 une autorisation de sondage.", + "available": true, + "txt_idx": "survey_report", + "label": "Rapport de sondage" + } + }, + { + "pk": 4, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport li\u00e9 \u00e0 un arr\u00eat\u00e9 de prescription de diagnostic arch\u00e9ologique.", + "available": true, + "txt_idx": "diagnostic_report", + "label": "Rapport de diagnostic" + } + }, + { + "pk": 5, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Source photographique num\u00e9rique", + "available": true, + "txt_idx": "digital_photo", + "label": "Photographie num\u00e9rique" + } + }, + { + "pk": 6, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport de laboratoire d'analyse", + "available": true, + "txt_idx": "lab_report", + "label": "Rapport d'analyse" + } + }, + { + "pk": 7, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport li\u00e9 \u00e0 la restauration ou la stabilisation d'un lot de mobilier ou d'un objet isol\u00e9", + "available": true, + "txt_idx": "restoration_report", + "label": "Rapport de restauration" + } + }, + { + "pk": 8, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport li\u00e9 \u00e0 une autorisation de prospection inventaire", + "available": true, + "txt_idx": "general_survey_report", + "label": "Rapport de prospection inventaire" + } + }, + { + "pk": 9, + "model": "ishtar_common.sourcetype", + "fields": { + "comment": "Rapport li\u00e9 \u00e0 une autorisation de prospection th\u00e9matique. Ce type de rapport passe d'ordinaire en CIRA.", + "available": true, + "txt_idx": "thematic_survey_report", + "label": "Rapport de prospection th\u00e9matique" + } + }, + { + "pk": 1, + "model": "ishtar_common.filetype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "preventive", + "label": "Arch\u00e9ologie pr\u00e9ventive" + } + }, + { + "pk": 2, + "model": "ishtar_common.filetype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "prog", + "label": "Arch\u00e9ologie programm\u00e9e" + } + }, + { + "pk": 1, + "model": "ishtar_common.permittype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "pc", + "label": "PC" + } + }, + { + "pk": 2, + "model": "ishtar_common.permittype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "pa", + "label": "PA" + } + }, + { + "pk": 3, + "model": "ishtar_common.permittype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "zac", + "label": "Dossier de r\u00e9alisation de ZAC" + } + }, + { + "pk": 4, + "model": "ishtar_common.permittype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "ei", + "label": "Etude d'impact" + } + }, + { + "pk": 5, + "model": "ishtar_common.permittype", + "fields": { + "comment": "Certificat d'urbanisme", + "available": true, + "txt_idx": "cu", + "label": "CU" + } + }, + { + "pk": 2, + "model": "ishtar_common.saisinetype", + "fields": { + "comment": " I. - Dans les cas mentionn\u00e9s aux 1\u00b0 \u00e0 5\u00b0 de l'article 4, le pr\u00e9fet de r\u00e9gion est saisi :\r\n\r\n1\u00b0 Pour les permis de construire, les permis d'am\u00e9nager et les permis de d\u00e9molir, par le pr\u00e9fet de d\u00e9partement qui lui adresse, d\u00e8s qu'il a re\u00e7u les \u00e9l\u00e9ments transmis par le maire en application des articles R. 423-7 \u00e0 R. 423-9 du code de l'urbanisme, les pi\u00e8ces pr\u00e9vues par le dernier alin\u00e9a de l'article R. 423-2, faisant notamment appara\u00eetre l'emplacement pr\u00e9vu des travaux sur le terrain d'assiette, leur superficie, leur impact sur le sous-sol ;\r\n\r\n2\u00b0 Pour les zones d'am\u00e9nagement concert\u00e9, par la personne publique ayant pris l'initiative de la cr\u00e9ation de la zone qui adresse au pr\u00e9fet de r\u00e9gion le dossier de r\u00e9alisation approuv\u00e9 pr\u00e9vu \u00e0 l'article R. 311-7 du code de l'urbanisme ;\r\n\r\n3\u00b0 Abrog\u00e9\r\n\r\n4\u00b0 Pour les am\u00e9nagements et ouvrages mentionn\u00e9s au 5\u00b0 de l'article 4 qui sont soumis \u00e0 une autorisation administrative autre qu'une autorisation d'urbanisme, par le service charg\u00e9 de recevoir la demande d'autorisation, qui adresse une copie du dossier de demande au pr\u00e9fet de r\u00e9gion ;\r\n\r\n5\u00b0 Pour les am\u00e9nagements et ouvrages mentionn\u00e9s au 5\u00b0 de l'article 4 qui ne sont pas soumis \u00e0 une autorisation administrative, par l'am\u00e9nageur. Celui-ci adresse au pr\u00e9fet de r\u00e9gion un dossier d\u00e9crivant les travaux projet\u00e9s, notamment leur emplacement pr\u00e9vu sur le terrain d'assiette, leur superficie, leur impact sur le sous-sol et indiquant la date \u00e0 laquelle ils ont \u00e9t\u00e9 arr\u00eat\u00e9s.\r\n\r\nII. - Pour les travaux sur des monuments historiques mentionn\u00e9s au 6\u00b0 de l'article 4, la saisine du pr\u00e9fet de r\u00e9gion au titre de l'autorisation exig\u00e9e par l'article L. 621-9 du code du patrimoine vaut saisine au titre du pr\u00e9sent d\u00e9cret.", + "available": true, + "txt_idx": "Article_8", + "delay": 21, + "label": "Article 8" + } + }, + { + "pk": 3, + "model": "ishtar_common.saisinetype", + "fields": { + "comment": " Les am\u00e9nageurs peuvent, avant de d\u00e9poser une demande pour obtenir les autorisations requises par les lois et r\u00e8glements ou avant d'engager toute autre proc\u00e9dure, saisir le pr\u00e9fet de r\u00e9gion afin qu'il examine si leur projet est susceptible de donner lieu \u00e0 des prescriptions arch\u00e9ologiques.\r\n\r\nA cette fin, ils produisent un dossier qui comporte un plan parcellaire et les r\u00e9f\u00e9rences cadastrales, le descriptif du projet et son emplacement sur le terrain d'assiette ainsi que, le cas \u00e9ch\u00e9ant, une notice pr\u00e9cisant les modalit\u00e9s techniques envisag\u00e9es pour l'ex\u00e9cution des travaux.\r\n\r\nSi le pr\u00e9fet de r\u00e9gion constate que le projet est susceptible d'affecter des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique, il informe le demandeur, dans le d\u00e9lai de deux mois \u00e0 compter de la r\u00e9ception de la demande, que le projet qu'il lui a pr\u00e9sent\u00e9 donnera lieu \u00e0 des prescriptions de diagnostic arch\u00e9ologique.", + "available": true, + "txt_idx": "Article_10", + "delay": 60, + "label": "Article 10" + } + }, + { + "pk": 4, + "model": "ishtar_common.saisinetype", + "fields": { + "comment": " Si le pr\u00e9fet de r\u00e9gion a fait conna\u00eetre, en application de l'article 10, la n\u00e9cessit\u00e9 d'un diagnostic, l'am\u00e9nageur peut le saisir d'une demande anticip\u00e9e de prescription.\r\n\r\nLe pr\u00e9fet de r\u00e9gion prescrit alors, dans les conditions pr\u00e9vues par le pr\u00e9sent d\u00e9cret, la r\u00e9alisation d'un diagnostic arch\u00e9ologique et, si des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique pr\u00e9sents sur le site sont d\u00e9j\u00e0 connus, prend les autres mesures pr\u00e9vues \u00e0 l'article 14.\r\n\r\nLa redevance d'arch\u00e9ologie pr\u00e9ventive correspondante est due par le demandeur, conform\u00e9ment au dernier alin\u00e9a de l'article L. 524-4 du code du patrimoine.", + "available": true, + "txt_idx": "Article_12", + "delay": 30, + "label": "Article 12" + } + }, + { + "pk": 5, + "model": "ishtar_common.saisinetype", + "fields": { + "comment": "Article 6\r\n\r\n Lorsqu'il dispose d'informations lui indiquant qu'un projet qui ne lui est pas transmis en application de l'arr\u00eat\u00e9 mentionn\u00e9 \u00e0 l'article 5 est n\u00e9anmoins susceptible d'affecter des \u00e9l\u00e9ments du patrimoine arch\u00e9ologique, le pr\u00e9fet de r\u00e9gion peut demander au maire de lui communiquer au cours de l'instruction, selon le cas, le dossier de demande de permis de construire, de permis d'am\u00e9nager, de permis de d\u00e9molir ou le dossier de r\u00e9alisation de zone d'am\u00e9nagement concert\u00e9 qui correspond \u00e0 ce projet.\r\n\r\nIl peut, pour le m\u00eame motif, demander au maire de lui communiquer le dossier d'une d\u00e9claration pr\u00e9alable d\u00e9pos\u00e9e en application de l'article L. 421-4 du code de l'urbanisme.", + "available": true, + "txt_idx": "Article_6", + "delay": 30, + "label": "Auto-saisine" + } + }, + { + "pk": 1, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "Une op\u00e9ration arch\u00e9ologique visant \u00e0 qualifier et quantifier la pr\u00e9sence de vestiges sur une surface donn\u00e9e.", + "available": true, + "txt_idx": "arch_diagnostic", + "label": "Diagnostic arch\u00e9ologique" + } + }, + { + "pk": 2, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "A pr\u00e9ciser", + "available": true, + "txt_idx": "prev_excavation", + "label": "Fouille arch\u00e9ologique pr\u00e9ventive" + } + }, + { + "pk": 3, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "prog_excavation", + "label": "Fouille programm\u00e9e" + } + }, + { + "pk": 4, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "Pas assez gros pour \u00eatre une fouille, mais porte n\u00e9anmoins atteinte au sous-sol.", + "available": true, + "txt_idx": "Sampling", + "label": "Sondage" + } + }, + { + "pk": 5, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "Une campagne de prospection sur un th\u00e8me particulier", + "available": true, + "txt_idx": "thematic_survey", + "label": "Prospection th\u00e9matique" + } + }, + { + "pk": 6, + "model": "ishtar_common.operationtype", + "fields": { + "comment": "Prospection visant \u00e0 d\u00e9tecter tout type de vestiges (ou presque) sur une surface donn\u00e9e. ", + "available": true, + "txt_idx": "inventory_survey", + "label": "Prospection inventaire" + } + }, + { + "pk": 1, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "villa", + "label": "villa" + } + }, + { + "pk": 2, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "enclosure", + "label": "enclos" + } + }, + { + "pk": 3, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "church", + "label": "\u00e9glise" + } + }, + { + "pk": 4, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "pit", + "label": "fosse" + } + }, + { + "pk": 5, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "cairn", + "label": "cairn" + } + }, + { + "pk": 6, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "ditch", + "label": "foss\u00e9" + } + }, + { + "pk": 7, + "model": "ishtar_common.remaintype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "post_hole", + "label": "trous de poteaux" + } + }, + { + "pk": 1, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": -10000, + "order": 2000, + "label": "Pal\u00e9olithique", + "start_date": -450000, + "txt_idx": "paleolithic" + } + }, + { + "pk": 2, + "model": "ishtar_common.period", + "fields": { + "comment": "1100, 'Pal\u00e9olithique ancien', , )", + "available": true, + "parent": 1, + "end_date": -150000, + "order": 1100, + "label": "Pal\u00e9olithique ancien", + "start_date": -450000, + "txt_idx": "ancien_paleolithic" + } + }, + { + "pk": 3, + "model": "ishtar_common.period", + "fields": { + "comment": "1200, '', , ),", + "available": true, + "parent": 1, + "end_date": -35000, + "order": 1200, + "label": "Pal\u00e9olithique moyen", + "start_date": -150000, + "txt_idx": "middle_paleolithic" + } + }, + { + "pk": 4, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 1, + "end_date": -12000, + "order": 1300, + "label": "Pal\u00e9olithique sup\u00e9rieur", + "start_date": -35000, + "txt_idx": "late_paleolithic" + } + }, + { + "pk": 5, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 1, + "end_date": -10000, + "order": 1400, + "label": "Pal\u00e9olithique sup\u00e9rieur final", + "start_date": -12000, + "txt_idx": "final_paleolithic" + } + }, + { + "pk": 6, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": -5000, + "order": 3000, + "label": "M\u00e9solithique", + "start_date": -10000, + "txt_idx": "mesolithic" + } + }, + { + "pk": 7, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 6, + "end_date": -7000, + "order": 2100, + "label": "M\u00e9solithique ancien", + "start_date": -10000, + "txt_idx": "old_mesolithic" + } + }, + { + "pk": 8, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": false, + "parent": 6, + "end_date": 0, + "order": 2200, + "label": "M\u00e9solithique moyen", + "start_date": 0, + "txt_idx": "middle_mesolithic" + } + }, + { + "pk": 9, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 6, + "end_date": -5000, + "order": 2300, + "label": "M\u00e9solithique r\u00e9cent", + "start_date": -7000, + "txt_idx": "recent_mesolithic" + } + }, + { + "pk": 10, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": -2000, + "order": 4000, + "label": "N\u00e9olithique", + "start_date": -5500, + "txt_idx": "neolithic" + } + }, + { + "pk": 11, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 10, + "end_date": -4500, + "order": 3100, + "label": "N\u00e9olithique ancien", + "start_date": -5500, + "txt_idx": "old_neolithic" + } + }, + { + "pk": 12, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 10, + "end_date": -300, + "order": 3200, + "label": "N\u00e9olithique moyen", + "start_date": -4500, + "txt_idx": "middle_neolithic" + } + }, + { + "pk": 13, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 10, + "end_date": -2500, + "order": 3300, + "label": "N\u00e9olithique r\u00e9cent", + "start_date": -3200, + "txt_idx": "recent_neolithic" + } + }, + { + "pk": 14, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 10, + "end_date": -2000, + "order": 3400, + "label": "N\u00e9olithique final", + "start_date": -2800, + "txt_idx": "final_neolithic" + } + }, + { + "pk": 15, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": -40, + "order": 5000, + "label": "Protohistoire", + "start_date": -2000, + "txt_idx": "protohistory" + } + }, + { + "pk": 16, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 15, + "end_date": -750, + "order": 4100, + "label": "\u00c2ge du Bronze", + "start_date": -2000, + "txt_idx": "bronze_age" + } + }, + { + "pk": 17, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 15, + "end_date": -40, + "order": 4200, + "label": "\u00c2ge du Fer", + "start_date": -800, + "txt_idx": "iron_age" + } + }, + { + "pk": 18, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 16, + "end_date": -1600, + "order": 4110, + "label": "\u00c2ge du Bronze ancien", + "start_date": -2000, + "txt_idx": "old_bronze_age" + } + }, + { + "pk": 19, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 16, + "end_date": -1200, + "order": 4120, + "label": "\u00c2ge du Bronze moyen", + "start_date": -1600, + "txt_idx": "middle_bronze_age" + } + }, + { + "pk": 20, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 16, + "end_date": -750, + "order": 4130, + "label": "\u00c2ge du Bronze final", + "start_date": -1200, + "txt_idx": "final_bronze_age" + } + }, + { + "pk": 21, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 17, + "end_date": -450, + "order": 4210, + "label": "Premier \u00c2ge du Fer", + "start_date": -800, + "txt_idx": "first_iron_age" + } + }, + { + "pk": 22, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 17, + "end_date": -40, + "order": 4220, + "label": "Deuxi\u00e8me \u00c2ge du Fer", + "start_date": -500, + "txt_idx": "second_iron_age" + } + }, + { + "pk": 23, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": 476, + "order": 6000, + "label": "Gallo-romain", + "start_date": -40, + "txt_idx": "gallo-roman" + } + }, + { + "pk": 24, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 23, + "end_date": -27, + "order": 5100, + "label": "R\u00e9publique", + "start_date": -40, + "txt_idx": "republic" + } + }, + { + "pk": 25, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 23, + "end_date": 192, + "order": 5200, + "label": "Haut-empire", + "start_date": -27, + "txt_idx": "high-empire" + } + }, + { + "pk": 26, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 23, + "end_date": 476, + "order": 5300, + "label": "Bas-empire", + "start_date": 192, + "txt_idx": "low_empire" + } + }, + { + "pk": 27, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": 1492, + "order": 7000, + "label": "Moyen-\u00e2ge", + "start_date": 476, + "txt_idx": "middle_age" + } + }, + { + "pk": 28, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 27, + "end_date": 987, + "order": 6100, + "label": "Haut moyen-\u00e2ge", + "start_date": 476, + "txt_idx": "476" + } + }, + { + "pk": 29, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 27, + "end_date": 1204, + "order": 6200, + "label": "Moyen-\u00e2ge classique", + "start_date": 987, + "txt_idx": "classic_middle_age" + } + }, + { + "pk": 30, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 27, + "end_date": 1492, + "order": 6300, + "label": "Bas moyen-\u00e2ge", + "start_date": 1204, + "txt_idx": "low_middle_age" + } + }, + { + "pk": 31, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": 2011, + "order": 8000, + "label": "P\u00e9riode r\u00e9cente", + "start_date": 1492, + "txt_idx": "recent_times" + } + }, + { + "pk": 32, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 31, + "end_date": 1815, + "order": 7100, + "label": "Epoque moderne", + "start_date": 1492, + "txt_idx": "modern" + } + }, + { + "pk": 33, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": 31, + "end_date": 2011, + "order": 7200, + "label": "Epoque contemporaine", + "start_date": 1815, + "txt_idx": "contemporan" + } + }, + { + "pk": 34, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": 0, + "order": 0, + "label": "Epoque ind\u00e9termin\u00e9e", + "start_date": 0, + "txt_idx": "indetermined" + } + }, + { + "pk": 35, + "model": "ishtar_common.period", + "fields": { + "comment": "", + "available": true, + "parent": null, + "end_date": 0, + "order": 10000, + "label": "Non-renseign\u00e9", + "start_date": 0, + "txt_idx": "not_yet_documented" + } + }, + { + "pk": 2, + "model": "ishtar_common.datingtype", + "fields": { + "comment": "Une \u00e9tude du mobilier est la source de datation", + "available": true, + "txt_idx": "from_artefact", + "label": "D'apr\u00e8s \u00e9tude du mobilier" + } + }, + { + "pk": 1, + "model": "ishtar_common.datingtype", + "fields": { + "comment": "D'apr\u00e8s une datation de type C14, OSL, TL, arch\u00e9omagn\u00e9tisme, etc, forunissant une date en BPcal avec une marge.", + "available": true, + "txt_idx": "from_absolute_dating", + "label": "D'apr\u00e8s datation absolue" + } + }, + { + "pk": 2, + "model": "ishtar_common.datingquality", + "fields": { + "comment": "datation a v\u00e9rifier", + "available": true, + "txt_idx": "estimated", + "label": "Estim\u00e9e " + } + }, + { + "pk": 1, + "model": "ishtar_common.datingquality", + "fields": { + "comment": "Datation fond\u00e9e sur des faits", + "available": true, + "txt_idx": "sure", + "label": "Aver\u00e9e" + } + }, + { + "pk": 1, + "model": "ishtar_common.unit", + "fields": { + "comment": "Cette unit\u00e9 n'a pas de volume", + "available": true, + "parent": null, + "label": "N\u00e9gative", + "order": 100, + "txt_idx": "negative" + } + }, + { + "pk": 2, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": 1, + "label": "Creusement", + "order": 110, + "txt_idx": "digging" + } + }, + { + "pk": 3, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": 1, + "label": "D\u00e9rasement", + "order": 120, + "txt_idx": "partial_destruction" + } + }, + { + "pk": 4, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "Couche", + "order": 200, + "txt_idx": "layer" + } + }, + { + "pk": 5, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": 4, + "label": "Couche construite", + "order": 210, + "txt_idx": "builded_layer" + } + }, + { + "pk": 6, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": 4, + "label": "Remblai", + "order": 220, + "txt_idx": "embankment" + } + }, + { + "pk": 7, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "Alt\u00e9ration", + "order": 300, + "txt_idx": "alteration" + } + }, + { + "pk": 8, + "model": "ishtar_common.unit", + "fields": { + "comment": "", + "available": true, + "parent": 7, + "label": "Impact thermique", + "order": 310, + "txt_idx": "thermal_impact" + } + }, + { + "pk": 9, + "model": "ishtar_common.unit", + "fields": { + "comment": "Unit\u00e9 g\u00e9n\u00e9rale (d'ordinaire virtuelle) pouvant regrouper du mobilier trouver en dehors d'un contexte spatialis\u00e9 : mobilier trouver lors d'un d\u00e9capage, sous une semelle d'un fouilleur, dans les d\u00e9blais, etc.", + "available": true, + "parent": null, + "label": "Hors contexte", + "order": 1, + "txt_idx": "not_in_context" + } + }, + { + "pk": 10, + "model": "ishtar_common.unit", + "fields": { + "comment": "Unit\u00e9 repr\u00e9sentant une partie d'un niveau d\u00e9coup\u00e9 en carr\u00e9s r\u00e9f\u00e9renc\u00e9s.", + "available": true, + "parent": null, + "label": "Carr\u00e9", + "order": 10, + "txt_idx": "square" + } + }, + { + "pk": 1, + "model": "ishtar_common.activitytype", + "fields": { + "comment": "Unit\u00e9 enregistrement qui n'est pas directement d'origine anthropique. ", + "available": true, + "txt_idx": "natural", + "order": 1000, + "label": "Naturelle" + } + }, + { + "pk": 2, + "model": "ishtar_common.activitytype", + "fields": { + "comment": "Unit\u00e9 \u00e9labor\u00e9e par l'homme, comme une mur ou un sol am\u00e9nag\u00e9 par exemple", + "available": true, + "txt_idx": "construction", + "order": 1100, + "label": "Construction" + } + }, + { + "pk": 3, + "model": "ishtar_common.activitytype", + "fields": { + "comment": "Unit\u00e9 r\u00e9sultant de l'arr\u00eat d'anthropisation", + "available": true, + "txt_idx": "desertion", + "order": 1200, + "label": "Abandon" + } + }, + { + "pk": 4, + "model": "ishtar_common.activitytype", + "fields": { + "comment": "Unit\u00e9 li\u00e9e \u00e0 l'anthropisation elle-m\u00eame", + "available": true, + "txt_idx": "occupation", + "order": 1300, + "label": "Occupation" + } + }, + { + "pk": 1, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "Niveau cultiv\u00e9 ou non, actuel.", + "available": true, + "txt_idx": "soil", + "order": 1000, + "label": "Terre v\u00e9g\u00e9tale" + } + }, + { + "pk": 2, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "masonry", + "order": 1100, + "label": "Ma\u00e7onnerie" + } + }, + { + "pk": 3, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "wall", + "order": 1200, + "label": "Mur" + } + }, + { + "pk": 4, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "occupation_level", + "order": 1300, + "label": "Niveau d'occupation" + } + }, + { + "pk": 5, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "desertion_level", + "order": 1400, + "label": "Niveau d'abandon" + } + }, + { + "pk": 6, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "geological_level", + "order": 1400, + "label": "Niveau g\u00e9ologique" + } + }, + { + "pk": 7, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "embankment", + "order": 1500, + "label": "Remblai" + } + }, + { + "pk": 8, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "archaeological_soil", + "order": 1600, + "label": "Sol arch\u00e9ologique" + } + }, + { + "pk": 9, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "foundation_level", + "order": 1700, + "label": "Radier" + } + }, + { + "pk": 10, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "digging", + "order": 1800, + "label": "Creusement" + } + }, + { + "pk": 11, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "colluvial_unit", + "order": 1800, + "label": "Colluvions" + } + }, + { + "pk": 12, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "windthrow", + "order": 1900, + "label": "Chablis" + } + }, + { + "pk": 13, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "filling", + "order": 2000, + "label": "Comblement" + } + }, + { + "pk": 14, + "model": "ishtar_common.identificationtype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "unknown", + "order": 100, + "label": "Ind\u00e9termin\u00e9" + } + }, + { + "pk": 1, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "M\u00e9tal", + "recommendation": "Hygrom\u00e9trie contr\u00f4l\u00e9e, variation de temp\u00e9rature faible", + "txt_idx": "metal" + } + }, + { + "pk": 2, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "Os", + "recommendation": "Hygrom\u00e9trie contr\u00f4l\u00e9e, variations de temp\u00e9rature faible", + "txt_idx": "bone" + } + }, + { + "pk": 3, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": 2, + "label": "Os animal", + "recommendation": "idem os", + "txt_idx": "animal_bone" + } + }, + { + "pk": 4, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": 2, + "label": "Os humain", + "recommendation": "idem os", + "txt_idx": "human_bone" + } + }, + { + "pk": 5, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "Verre", + "recommendation": "fragile, oxydation, etc.", + "txt_idx": "glass" + } + }, + { + "pk": 6, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "C\u00e9ramique", + "recommendation": "a d\u00e9tailler", + "txt_idx": "ceramic" + } + }, + { + "pk": 7, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "Min\u00e9ral", + "recommendation": "a d\u00e9tailler", + "txt_idx": "mineral" + } + }, + { + "pk": 8, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": null, + "label": "\u00c9cofact", + "recommendation": "on en veut pas !", + "txt_idx": "ecofact" + } + }, + { + "pk": 9, + "model": "ishtar_common.materialtype", + "fields": { + "comment": "", + "available": true, + "parent": 1, + "label": "Bronze", + "recommendation": "blah", + "txt_idx": "bronze" + } + }, + { + "pk": 1, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Le mobilier arch\u00e9ologique reste dans ce d\u00e9p\u00f4t le temps d'un traitement puis part ailleurs...", + "available": true, + "txt_idx": "restoration_laboratory", + "label": "Laboratoire de restauration" + } + }, + { + "pk": 2, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Ce d\u00e9p\u00f4t est un centre de conservation et d'\u00e9tude. Il est d'ordinaire en convention avec l'\u00e9tat.", + "available": true, + "txt_idx": "cce", + "label": "CCE" + } + }, + { + "pk": 4, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Ce d\u00e9p\u00f4t poss\u00e8de une convention avec l'\u00e9tat pour conserver du mobilier qui est sous sa garde.", + "available": true, + "txt_idx": "conventioned_warehouse", + "label": "D\u00e9p\u00f4t conventionn\u00e9" + } + }, + { + "pk": 3, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Mobilier pr\u00e9sent dans un lieu de mani\u00e8re ill\u00e9gale : pas de convention, voire de responsabilit\u00e9 exprim\u00e9e...", + "available": true, + "txt_idx": "illegal_warehouse", + "label": "D\u00e9p\u00f4t non conventionn\u00e9" + } + }, + { + "pk": 5, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Ce d\u00e9p\u00f4t est sous la responsabilit\u00e9 directe de l'Etat. Il peut en \u00eatre locataire ou propri\u00e9taire.", + "available": true, + "txt_idx": "state_warehouse", + "label": "D\u00e9p\u00f4t de l'Etat" + } + }, + { + "pk": 6, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Pour le stockage de documents papier, rapports la plus part du temps.", + "available": true, + "txt_idx": "library", + "label": "Biblioth\u00e8que" + } + }, + { + "pk": 7, + "model": "ishtar_common.warehousetype", + "fields": { + "comment": "Lieu de stockage de documents vari\u00e9s, photos, relev\u00e9s, jusqu'aux rapports.", + "available": true, + "txt_idx": "documentation_center", + "label": "Centre de documentation" + } + }, + { + "pk": 3, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Suite \u00e0 une demande d'avis, les SRA \u00e9met un courrier signalant sa volont\u00e9 de prescrire un diagnostic ou une fouille sur l'emprise du projet en objet.", + "available": true, + "txt_idx": "pos_advice_reply", + "intented_to": "F", + "label": "R\u00e9ponse positive \u00e0 une demande d'avis (art.10)" + } + }, + { + "pk": 4, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Suite \u00e0 une demande d'avis, les SRA \u00e9met un courrier signalant sa volont\u00e9 de NE PAS prescrire un diagnostic ou une fouille sur l'emprise du projet en objet.", + "available": true, + "txt_idx": "neg_advice_reply", + "intented_to": "F", + "label": "R\u00e9ponse n\u00e9gative \u00e0 une demande d'avis (art.10)" + } + }, + { + "pk": 7, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Suite \u00e0 une Saisine (art.8), envoi d'une r\u00e9ponse de non prescription", + "available": true, + "txt_idx": "reply_no_prescription", + "intented_to": "F", + "label": "R\u00e9ponse NON prescription \u00e0 une saisine" + } + }, + { + "pk": 6, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Arr\u00eat\u00e9 donnant l'autorisation \u00e0 une responsable scientifique de fouiller sur un terrain donn\u00e9.", + "available": true, + "txt_idx": "prog_excav_autorization_order", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 d'autorisation de fouille programm\u00e9e" + } + }, + { + "pk": 5, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Arr\u00eat\u00e9 qui donne l'autorisation \u00e0 un Am\u00e9nageur de faire ex\u00e9cuter par un Op\u00e9rateur agr\u00e9e sous la responsabilit\u00e9 d'un Responsable scientifique, une op\u00e9ration.", + "available": true, + "txt_idx": "excavation_autorization_order", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 d'autorisation de fouille pr\u00e9ventive" + } + }, + { + "pk": 2, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Un arr\u00eat\u00e9 prescrivant la r\u00e9alisation d'une fouille sur une surface donn\u00e9e", + "available": true, + "txt_idx": "excavation_order", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 de prescription de fouille" + } + }, + { + "pk": 1, + "model": "ishtar_common.acttype", + "fields": { + "comment": "Un arr\u00eat\u00e9 prescrivant la r\u00e9alisation d'un diagnostic sur une surface donn\u00e9e, SANS pr\u00e9cision du responsable scientifique, SANS pr\u00e9cision de l'op\u00e9rateur", + "available": true, + "txt_idx": "diagnostic_order", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 de diagnostic, sans RS, sans op\u00e9rateur" + } + }, + { + "pk": 8, + "model": "ishtar_common.acttype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "responsible_act", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 de d\u00e9signation de RS" + } + }, + { + "pk": 9, + "model": "ishtar_common.acttype", + "fields": { + "comment": "D\u00e9signation de l'op\u00e9rateur pour un diagnostic : utile dans le cas o\u00f9 un service territorial ET l'INRAP sont en m\u00eame temps comp\u00e9tents pour un territoire donn\u00e9.", + "available": true, + "txt_idx": "operator_designation_act", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 de d\u00e9signation d'op\u00e9rateur" + } + }, + { + "pk": 10, + "model": "ishtar_common.acttype", + "fields": { + "comment": "", + "available": true, + "txt_idx": "thematic_survey_act", + "intented_to": "O", + "label": "Arr\u00eat\u00e9 d'autorisation de prospection th\u00e9matique" + } + }, + { + "pk": 1, + "model": "ishtar_common.containertype", + "fields": { + "comment": "Type de caisse tr\u00e8s commun dans le nord de la France. Pas cher, pas trop gros donc pas trop lourd.\r\n\r\nR\u00e9f\u00e9rences pr\u00e9cises \u00e0 trouver !!!!!", + "available": true, + "reference": "Inconnue", + "label": "Caisse \u00e0 pomme rouge", + "volume": 18, + "width": 20, + "length": null, + "height": 25, + "txt_idx": "red_apple_bin" + } + }, + { + "pk": 2, + "model": "ishtar_common.containertype", + "fields": { + "comment": "L'horrible caisse \u00e0 poisson ou du genre, a changer au plus vite", + "available": true, + "reference": "variable", + "label": "Caisse en polystyr\u00e8ne", + "volume": 0, + "width": 0, + "length": null, + "height": 0, + "txt_idx": "polystyren_bin" + } + }, + { + "pk": 4, + "model": "ishtar_common.containertype", + "fields": { + "comment": "Caisse Alibert grise standard, a pr\u00e9ciser et d\u00e9cliner en fonction des mod\u00e8les.", + "available": true, + "reference": "a pr\u00e9ciser", + "label": "Caisse Alibert standard", + "volume": 0, + "width": 0, + "length": null, + "height": 0, + "txt_idx": "stand_alibert_bin" + } + }, + { + "pk": 6, + "model": "ishtar_common.containertype", + "fields": { + "comment": "", + "available": true, + "reference": "Curver UNIBOX 29 L", + "label": "Curver UNIBOX 29 L", + "volume": 37, + "width": 355, + "length": null, + "height": 245, + "txt_idx": "curver_unibox_29" + } + }, + { + "pk": 7, + "model": "ishtar_common.containertype", + "fields": { + "comment": "", + "available": true, + "reference": "Curver UNIBOX 48 L", + "label": "Curver UNIBOX 48 L", + "volume": 63, + "width": 432, + "length": null, + "height": 280, + "txt_idx": "curver_unibox_48" + } + }, + { + "pk": 5, + "model": "ishtar_common.containertype", + "fields": { + "comment": "", + "available": true, + "reference": "Curver UNIBOX 20 lL", + "label": "Curver UNIBOX 20 L", + "volume": 25, + "width": 350, + "length": null, + "height": 165, + "txt_idx": "curver_unibox_20" + } + }, + { + "pk": 1, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Le fait de mettre du mobilier dans un contenant. Que cela soit le conditionnement initial ou un re-conditionnement. ", + "available": true, + "txt_idx": "packaging", + "virtual": false, + "label": "Conditionnement" + } + }, + { + "pk": 2, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Un lot mobilier ou un objet isol\u00e9 subit une radiographie (rayon X) qui produit un ou des films radio.", + "available": true, + "txt_idx": "regular_x_ray", + "virtual": false, + "label": "Radiographie argentique" + } + }, + { + "pk": 3, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Un lot mobilier ou un objet isol\u00e9 subit une radiographie (rayon X) qui produit un ou des fichiers num\u00e9riques.", + "available": true, + "txt_idx": "digital_x_ray", + "virtual": false, + "label": "Radiographie num\u00e9rique" + } + }, + { + "pk": 4, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "D\u00e9placement de mobilier, entre deux d\u00e9p\u00f4ts : le mobilier ne peut pas \u00eatre stocker ailleurs que dans un lieu consid\u00e9r\u00e9 comme un d\u00e9p\u00f4t.", + "available": true, + "txt_idx": "moving", + "virtual": false, + "label": "D\u00e9placement" + } + }, + { + "pk": 5, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Regroupement d'un ensemble de mobilier. Exemple : ensemble des outils provenant d'une fouille, Mobilier datant d'un site, tessonier virtuel, etc.", + "available": true, + "txt_idx": "virtual_group", + "virtual": true, + "label": "Groupement virtuel" + } + }, + { + "pk": 7, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Division d'un lot de mobilier en plusieurs lots", + "available": true, + "txt_idx": "split", + "virtual": false, + "label": "Division" + } + }, + { + "pk": 6, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "R\u00e9union de plusieurs objets ou lots mobiliers en un seul. Ce type de traitement peut impliquer ou non un reconditionnement.\r\n\r\nExemple : Remontage d'une c\u00e9ramique \u00e0 partir de tessons d\u00e9j\u00e0 pr\u00e9sents dans un contenant (pas de reconditionnement), regroupement d'une partie de la faune (os) d'une op\u00e9ration et cr\u00e9ation d'une nouvelle caisse dans ce but (reconditionnement \u00e0 faire)", + "available": true, + "txt_idx": "physical_grouping", + "virtual": false, + "label": "Groupement" + } + }, + { + "pk": 8, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Prise de vue \u00e0 l'aide d'un appareil photo num\u00e9rique", + "available": true, + "txt_idx": "digital_photography", + "virtual": false, + "label": "Photographie num\u00e9rique" + } + }, + { + "pk": 9, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Photographie produisant un film (positif ou n\u00e9gatif)", + "available": true, + "txt_idx": "regular_photography", + "virtual": false, + "label": "Photographie argentique" + } + }, + { + "pk": 10, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "Processus qui permet \u00e9liminer le sel qui impr\u00e8gne un objet arch\u00e9ologique ou lot d'objets.", + "available": true, + "txt_idx": "desalinisation", + "virtual": false, + "label": "D\u00e9salinisation" + } + }, + { + "pk": 11, + "model": "ishtar_common.treatmenttype", + "fields": { + "comment": "R\u00e9duction des oxydes d\u00e9velopp\u00e9s sur/dans un objet arch\u00e9ologique par l'usage de courant \u00e9lectrique.", + "available": true, + "txt_idx": "electrolysis", + "virtual": false, + "label": "Electrolyse" + } + } +] diff --git a/ishtar_common/menus.py b/ishtar_common/menus.py index 8bc2087c1..c55e2a328 100644 --- a/ishtar_common/menus.py +++ b/ishtar_common/menus.py @@ -58,82 +58,6 @@ for order, menu in sorted(_extra_menus, key=lambda x:x[0]): _section_items += menu """ - SectionItem('file_management', _(u"Archaeological file"), - childs=[ - MenuItem('file_search', _(u"Search"), - model=models.File, - access_controls=['view_file', 'view_own_file']), - MenuItem('file_creation', _(u"Creation"), - model=models.File, - access_controls=['add_file', 'add_own_file']), - MenuItem('file_modification', _(u"Modification"), - model=models.File, - access_controls=['change_file', 'change_own_file']), - MenuItem('file_closing', _(u"Closing"), - model=models.File, - access_controls=['change_file', - 'change_own_file']), - MenuItem('file_deletion', _(u"Deletion"), - model=models.File, - access_controls=['delete_file', 'delete_own_file']), - SectionItem('admin_act_files', _(u"Administrative act"), - childs=[ - MenuItem('file_administrativeactfile', - _(u"Add"), - model=models.Operation, - access_controls=['change_file', 'change_own_file']), - MenuItem('file_administrativeactfile_modification', - _(u"Modification"), - model=models.AdministrativeAct, - access_controls=['change_file', 'change_own_file']), - MenuItem('file_administrativeactfile_deletion', - _(u"Deletion"), - model=models.AdministrativeAct, - access_controls=['delete_file', 'delete_own_file']), - ],), - ]), - SectionItem('operation_management', _(u"Operation"), - childs=[ - MenuItem('operation_search', _(u"Search"), - model=models.Operation, - access_controls=['view_operation', - 'view_own_operation']), - MenuItem('operation_creation', _(u"Creation"), - model=models.Operation, - access_controls=['add_operation', - 'add_own_operation']), - MenuItem('operation_modification', _(u"Modification"), - model=models.Operation, - access_controls=['change_operation', - 'change_own_operation']), - MenuItem('operation_closing', _(u"Closing"), - model=models.Operation, - access_controls=['change_operation', - 'change_own_operation']), - MenuItem('operation_deletion', _(u"Deletion"), - model=models.Operation, - access_controls=['change_operation', - 'change_own_operation']), - SectionItem('admin_act_operations', - _(u"Administrative act"), - childs=[ - MenuItem('operation_administrativeactop', - _(u"Add"), - model=models.Operation, - access_controls=['change_operation', - 'change_own_operation']), - MenuItem('operation_administrativeactop_modification', - _(u"Modification"), - model=models.AdministrativeAct, - access_controls=['change_operation', - 'change_own_operation']), - MenuItem('operation_administrativeactop_deletion', - _(u"Deletion"), - model=models.AdministrativeAct, - access_controls=['operation_deletion', - 'delete_own_operation']), - ],), - ]), SectionItem('record_management', _(u"Context record"), childs=[ MenuItem('record_search', _(u"Search"), diff --git a/ishtar_common/migrations/0001_initial.py b/ishtar_common/migrations/0001_initial.py new file mode 100644 index 000000000..fc22881bc --- /dev/null +++ b/ishtar_common/migrations/0001_initial.py @@ -0,0 +1,408 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'Wizard' + db.create_table('ishtar_common_wizard', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('url_name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=128)), + )) + db.send_create_signal('ishtar_common', ['Wizard']) + + # Adding model 'WizardStep' + db.create_table('ishtar_common_wizardstep', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('wizard', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Wizard'])), + ('url_name', self.gf('django.db.models.fields.CharField')(max_length=128)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=128)), + )) + db.send_create_signal('ishtar_common', ['WizardStep']) + + # Adding model 'Department' + db.create_table('ishtar_common_department', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=30)), + ('number', self.gf('django.db.models.fields.CharField')(unique=True, max_length=3)), + )) + db.send_create_signal('ishtar_common', ['Department']) + + # Adding model 'OrganizationType' + db.create_table('ishtar_common_organizationtype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=False)), + )) + db.send_create_signal('ishtar_common', ['OrganizationType']) + + # Adding model 'HistoricalOrganization' + db.create_table('ishtar_common_historicalorganization', ( + ('id', self.gf('django.db.models.fields.IntegerField')(db_index=True, blank=True)), + ('history_modifier_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('address', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('address_complement', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('postal_code', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)), + ('town', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('country', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('mobile_phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('organization_type_id', self.gf('django.db.models.fields.IntegerField')(db_index=True, null=True, blank=True)), + ('history_id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('history_user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True)), + ('history_type', self.gf('django.db.models.fields.CharField')(max_length=1)), + )) + db.send_create_signal('ishtar_common', ['HistoricalOrganization']) + + # Adding model 'Organization' + db.create_table('ishtar_common_organization', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_modifier', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['auth.User'])), + ('address', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('address_complement', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('postal_code', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)), + ('town', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('country', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('mobile_phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('organization_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.OrganizationType'])), + )) + db.send_create_signal('ishtar_common', ['Organization']) + + # Adding model 'PersonType' + db.create_table('ishtar_common_persontype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=False)), + )) + db.send_create_signal('ishtar_common', ['PersonType']) + + # Adding M2M table for field rights on 'PersonType' + db.create_table('ishtar_common_persontype_rights', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('persontype', models.ForeignKey(orm['ishtar_common.persontype'], null=False)), + ('wizardstep', models.ForeignKey(orm['ishtar_common.wizardstep'], null=False)) + )) + db.create_unique('ishtar_common_persontype_rights', ['persontype_id', 'wizardstep_id']) + + # Adding model 'Person' + db.create_table('ishtar_common_person', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('history_modifier', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['auth.User'])), + ('address', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('address_complement', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('postal_code', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)), + ('town', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('country', self.gf('django.db.models.fields.CharField')(max_length=30, null=True, blank=True)), + ('phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('mobile_phone', self.gf('django.db.models.fields.CharField')(max_length=18, null=True, blank=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=2)), + ('surname', self.gf('django.db.models.fields.CharField')(max_length=20)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=30)), + ('email', self.gf('django.db.models.fields.CharField')(max_length=40, null=True, blank=True)), + ('person_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.PersonType'])), + ('attached_to', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Organization'], null=True, blank=True)), + )) + db.send_create_signal('ishtar_common', ['Person']) + + # Adding model 'IshtarUser' + db.create_table('ishtar_common_ishtaruser', ( + ('user_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True, primary_key=True)), + ('person', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Person'], unique=True)), + )) + db.send_create_signal('ishtar_common', ['IshtarUser']) + + # Adding model 'AuthorType' + db.create_table('ishtar_common_authortype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=False)), + )) + db.send_create_signal('ishtar_common', ['AuthorType']) + + # Adding model 'Author' + db.create_table('ishtar_common_author', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('person', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Person'])), + ('author_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.AuthorType'])), + )) + db.send_create_signal('ishtar_common', ['Author']) + + # Adding model 'SourceType' + db.create_table('ishtar_common_sourcetype', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('txt_idx', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)), + ('comment', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('available', self.gf('django.db.models.fields.BooleanField')(default=False)), + )) + db.send_create_signal('ishtar_common', ['SourceType']) + + # Adding model 'Arrondissement' + db.create_table('ishtar_common_arrondissement', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=30)), + ('department', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Department'])), + )) + db.send_create_signal('ishtar_common', ['Arrondissement']) + + # Adding model 'Canton' + db.create_table('ishtar_common_canton', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=30)), + ('arrondissement', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Arrondissement'])), + )) + db.send_create_signal('ishtar_common', ['Canton']) + + # Adding model 'Town' + db.create_table('ishtar_common_town', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), + ('surface', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('center', self.gf('django.contrib.gis.db.models.fields.PointField')(srid=27572, null=True, blank=True)), + ('numero_insee', self.gf('django.db.models.fields.CharField')(unique=True, max_length=6)), + ('departement', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Department'], null=True, blank=True)), + ('canton', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ishtar_common.Canton'], null=True, blank=True)), + )) + db.send_create_signal('ishtar_common', ['Town']) + + + def backwards(self, orm): + # Deleting model 'Wizard' + db.delete_table('ishtar_common_wizard') + + # Deleting model 'WizardStep' + db.delete_table('ishtar_common_wizardstep') + + # Deleting model 'Department' + db.delete_table('ishtar_common_department') + + # Deleting model 'OrganizationType' + db.delete_table('ishtar_common_organizationtype') + + # Deleting model 'HistoricalOrganization' + db.delete_table('ishtar_common_historicalorganization') + + # Deleting model 'Organization' + db.delete_table('ishtar_common_organization') + + # Deleting model 'PersonType' + db.delete_table('ishtar_common_persontype') + + # Removing M2M table for field rights on 'PersonType' + db.delete_table('ishtar_common_persontype_rights') + + # Deleting model 'Person' + db.delete_table('ishtar_common_person') + + # Deleting model 'IshtarUser' + db.delete_table('ishtar_common_ishtaruser') + + # Deleting model 'AuthorType' + db.delete_table('ishtar_common_authortype') + + # Deleting model 'Author' + db.delete_table('ishtar_common_author') + + # Deleting model 'SourceType' + db.delete_table('ishtar_common_sourcetype') + + # Deleting model 'Arrondissement' + db.delete_table('ishtar_common_arrondissement') + + # Deleting model 'Canton' + db.delete_table('ishtar_common_canton') + + # Deleting model 'Town' + db.delete_table('ishtar_common_town') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'ishtar_common.arrondissement': { + 'Meta': {'object_name': 'Arrondissement'}, + 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.author': { + 'Meta': {'object_name': 'Author'}, + 'author_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.AuthorType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Person']"}) + }, + 'ishtar_common.authortype': { + 'Meta': {'object_name': 'AuthorType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'ishtar_common.canton': { + 'Meta': {'object_name': 'Canton'}, + 'arrondissement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Arrondissement']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}) + }, + 'ishtar_common.department': { + 'Meta': {'ordering': "['number']", 'object_name': 'Department'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3'}) + }, + 'ishtar_common.historicalorganization': { + 'Meta': {'ordering': "('-history_date', '-history_id')", 'object_name': 'HistoricalOrganization'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'history_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'history_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'history_modifier_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'history_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'history_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}), + 'id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'blank': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'organization_type_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.ishtaruser': { + 'Meta': {'object_name': 'IshtarUser', '_ormbases': ['auth.User']}, + 'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Person']", 'unique': 'True'}), + 'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'ishtar_common.organization': { + 'Meta': {'object_name': 'Organization'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'organization_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.OrganizationType']"}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.organizationtype': { + 'Meta': {'object_name': 'OrganizationType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'ishtar_common.person': { + 'Meta': {'object_name': 'Person'}, + 'address': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address_complement': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'attached_to': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Organization']", 'null': 'True', 'blank': 'True'}), + 'country': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}), + 'history_modifier': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['auth.User']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mobile_phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}), + 'person_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.PersonType']"}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '18', 'null': 'True', 'blank': 'True'}), + 'postal_code': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), + 'surname': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '2'}), + 'town': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.persontype': { + 'Meta': {'object_name': 'PersonType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'rights': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ishtar_common.WizardStep']", 'symmetrical': 'False'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'ishtar_common.sourcetype': { + 'Meta': {'object_name': 'SourceType'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'comment': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'txt_idx': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'ishtar_common.town': { + 'Meta': {'ordering': "['numero_insee']", 'object_name': 'Town'}, + 'canton': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Canton']", 'null': 'True', 'blank': 'True'}), + 'center': ('django.contrib.gis.db.models.fields.PointField', [], {'srid': '27572', 'null': 'True', 'blank': 'True'}), + 'departement': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Department']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'numero_insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '6'}), + 'surface': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'ishtar_common.wizard': { + 'Meta': {'ordering': "['url_name']", 'object_name': 'Wizard'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'url_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'ishtar_common.wizardstep': { + 'Meta': {'ordering': "['wizard', 'order']", 'object_name': 'WizardStep'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'url_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'wizard': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ishtar_common.Wizard']"}) + } + } + + complete_apps = ['ishtar_common'] \ No newline at end of file diff --git a/ishtar_common/migrations/__init__.py b/ishtar_common/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 56c381e94..4406a2b86 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2011 Étienne Loks +# Copyright (C) 2010-2012 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -30,7 +30,7 @@ from django.utils.safestring import SafeUnicode, mark_safe from django.core.urlresolvers import reverse, NoReverseMatch from django.db.utils import DatabaseError from django.db.models import Q, Max, Count, Sum, Avg -from django.db.models.signals import m2m_changed, post_save +from django.db.models.signals import post_save from django.contrib.auth.models import User from django.contrib.gis.db import models @@ -1053,13 +1053,13 @@ class Dashboard: if vals[v] == mx: return v -class Departement(models.Model): +class Department(models.Model): label = models.CharField(_(u"Label"), max_length=30) number = models.CharField(_(u"Number"), unique=True, max_length=3) class Meta: - verbose_name = _(u"Departement") - verbose_name_plural = _(u"Departements") + verbose_name = _(u"Department") + verbose_name_plural = _(u"Departments") ordering = ['number'] def __unicode__(self): @@ -1213,891 +1213,10 @@ class Source(models.Model): def __unicode__(self): return self.title -class FileType(GeneralType): - class Meta: - verbose_name = _(u"Archaeological file type") - verbose_name_plural = _(u"Archaeological file types") - - @classmethod - def is_preventive(cls, file_type_id, key=''): - key = key or 'preventive' - try: - preventive = FileType.objects.get(txt_idx=key).pk - return file_type_id == preventive - except ObjectDoesNotExist: - return False - -class PermitType(GeneralType): - class Meta: - verbose_name = _(u"Permit type") - verbose_name_plural = _(u"Permit types") - -if settings.COUNTRY == 'fr': - class SaisineType(GeneralType): - delay = models.IntegerField(_(u"Delay (in days)")) - class Meta: - verbose_name = u"Type Saisine" - verbose_name_plural = u"Types Saisine" - -class File(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['numeric_reference', 'year', 'internal_reference', - 'file_type', 'saisine_type', 'towns', ] - year = models.IntegerField(_(u"Year"), - default=lambda:datetime.datetime.now().year) - numeric_reference = models.IntegerField(_(u"Numeric reference")) - internal_reference = models.CharField(_(u"Internal reference"), - max_length=60, unique=True) - file_type = models.ForeignKey(FileType, verbose_name=_(u"File type")) - in_charge = models.ForeignKey(Person, related_name='+', - verbose_name=_(u"Person in charge")) - general_contractor = models.ForeignKey(Person, related_name='+', - verbose_name=_(u"General contractor"), blank=True, null=True) - town_planning_service = models.ForeignKey(Organization, related_name='+', - verbose_name=_(u"Town planning service"), blank=True, null=True) - permit_type = models.ForeignKey(PermitType, verbose_name=_(u"Permit type"), - blank=True, null=True) - permit_reference = models.CharField(_(u"Permit reference"), - max_length=60, blank=True, null=True) - end_date = models.DateField(_(u"Closing date"), null=True, blank=True) - towns = models.ManyToManyField("Town", verbose_name=_(u"Towns"), - related_name='file') - creation_date = models.DateField(_(u"Creation date"), - default=datetime.date.today) - reception_date = models.DateField(_(u'Reception date'), blank=True, - null=True) - related_file = models.ForeignKey("File", verbose_name=_(u"Related file"), - blank=True, null=True) - if settings.COUNTRY == 'fr': - saisine_type = models.ForeignKey(SaisineType, blank=True, null=True, - verbose_name= u"Type de saisine") - reference_number = models.IntegerField(_(u"Reference number"), - blank=True, null=True) - total_surface = models.IntegerField(_(u"Total surface (m²)"), - blank=True, null=True) - total_developed_surface = models.IntegerField( - _(u"Total developed surface (m²)"), blank=True, null=True) - address = models.TextField(_(u"Main address"), null=True, blank=True) - address_complement = models.TextField(_(u"Main address - complement"), - null=True, blank=True) - postal_code = models.CharField(_(u"Main address - postal code"), - max_length=10, null=True, blank=True) - comment = models.TextField(_(u"Comment"), null=True, blank=True) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Archaeological file") - verbose_name_plural = _(u"Archaeological files") - permissions = ( - ("view_own_file", ugettext(u"Can view own Archaelogical file")), - ("add_own_file", ugettext(u"Can add own Archaelogical file")), - ("change_own_file", ugettext(u"Can change own Archaelogical file")), - ("delete_own_file", ugettext(u"Can delete own Archaelogical file")), - ) - ordering = ['-year', '-numeric_reference'] - - @classmethod - def get_years(cls): - return [res['year'] for res in list(cls.objects.values('year').annotate( - Count("id")).order_by())] - - @classmethod - def get_by_year(cls, year): - return cls.objects.filter(year=year) - - @classmethod - def get_total_number(cls): - return cls.objects.count() - - def __unicode__(self): - items = [unicode(_('Intercommunal'))] - if self.towns.count() == 1: - items[0] = unicode(self.towns.all()[0]) - items.append("-".join((unicode(self.year), - unicode(self.numeric_reference)))) - items += [unicode(getattr(self, k))[:36] - for k in ['internal_reference',] if getattr(self, k)] - return JOINT.join(items) - - @classmethod - def get_query_owns(cls, user): - return Q(history_modifier=user) & Q(end_date__isnull=True) - - def is_active(self): - return not bool(self.end_date) - - def closing(self): - if self.is_active(): - return - for item in self.history.all(): - if not item.end_date: - break - return {'date':item.history_date, - 'user':IshtarUser.objects.get(pk=item.history_modifier_id)} - - def total_surface_ha(self): - if self.total_surface: - return self.total_surface/10000.0 - - def total_developed_surface_ha(self): - if self.total_developed_surface: - return self.total_developed_surface/10000.0 - - def operation_acts(self): - acts = [] - for ope in self.operations.all(): - for act in ope.administrative_act.all(): - acts.append(act) - return acts - - def is_preventive(self): - return FileType.is_preventive(self.file_type.pk) - -class FileByDepartment(models.Model): - ''' - Database view: don't forget to create it - - create view file_department (id, department_id, file_id) as - select town."id", town."departement_id", file_towns."file_id" - from ishtar_base_town town - inner join ishtar_base_file_towns file_towns on - file_towns."town_id"=town."id" order by town."departement_id"; - CREATE RULE file_department_delete - AS ON DELETE TO file_department DO INSTEAD(); - ''' - file = models.ForeignKey(File, verbose_name=_(u"File")) - department = models.ForeignKey(Departement, verbose_name=_(u"Department"), - blank=True, null=True) - class Meta: - managed = False - db_table = 'file_department' - -class OperationType(GeneralType): - class Meta: - verbose_name = _(u"Operation type") - verbose_name_plural = _(u"Operation types") - - @classmethod - def is_preventive(cls, ope_type_id, key=''): - key = key or 'prev_excavation' - try: - preventive = OperationType.objects.get(txt_idx=key).pk - return ope_type_id == preventive - except ObjectDoesNotExist: - return False - -class RemainType(GeneralType): - class Meta: - verbose_name = _(u"Remain type") - verbose_name_plural = _(u"Remain types") - -class Operation(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['year_index', 'operation_type', 'remains', 'towns', - 'associated_file', 'start_date', 'excavation_end_date'] - start_date = models.DateField(_(u"Start date"), null=True, blank=True) - excavation_end_date = models.DateField(_(u"Excavation end date"), null=True, - blank=True) - end_date = models.DateField(_(u"Closing date"), null=True, blank=True) - in_charge = models.ForeignKey('Person', related_name='+', null=True, - blank=True, verbose_name=_(u"In charge")) - year = models.IntegerField(_(u"Year")) - operation_code = models.IntegerField(_(u"Operation code")) - associated_file = models.ForeignKey(File, related_name='operations', - verbose_name=_(u"File"), blank=True, null=True) - operation_type = models.ForeignKey(OperationType, related_name='+', - verbose_name=_(u"Operation type")) - surface = models.IntegerField(_(u"Surface (m²)"), blank=True, null=True) - remains = models.ManyToManyField("RemainType", verbose_name=_(u'Remains')) - towns = models.ManyToManyField("Town", verbose_name=_(u"Towns")) - cost = models.IntegerField(_(u"Cost (€)"), blank=True, null=True) - periods = models.ManyToManyField('Period', verbose_name=_(u"Periods")) - scheduled_man_days = models.IntegerField(_(u"Scheduled man-days"), - blank=True, null=True) - optional_man_days = models.IntegerField(_(u"Optional man-days"), - blank=True, null=True) - effective_man_days = models.IntegerField(_(u"Effective man-days"), - blank=True, null=True) - if settings.COUNTRY == 'fr': - code_patriarche = models.IntegerField(u"Code PATRIARCHE", null=True, - blank=True) - TABLE_COLS = ['code_patriarche'] + TABLE_COLS - code_dracar = models.CharField(u"Code DRACAR", max_length=10, null=True, - blank=True) - fnap_financing = models.FloatField(u"Financement FNAP (%)", - blank=True, null=True) - fnap_cost = models.IntegerField(u"Financement FNAP (€)", - blank=True, null=True) - zoning_prescription = models.NullBooleanField( - _(u"Prescription on zoning"), blank=True, null=True) - large_area_prescription = models.NullBooleanField( - _(u"Prescription on large area"), blank=True, null=True) - geoarchaeological_context_prescription = models.NullBooleanField( - _(u"Prescription on geoarchaeological context"), blank=True, null=True) - operator_reference = models.CharField(_(u"Operator reference"), - max_length=20, null=True, blank=True) - common_name = models.CharField(_(u"Generic name"), max_length=120, null=True, - blank=True) - comment = models.TextField(_(u"Comment"), null=True, blank=True) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Operation") - verbose_name_plural = _(u"Operations") - permissions = ( - ("view_own_operation", ugettext(u"Can view own Operation")), - ("add_own_operation", ugettext(u"Can add own Operation")), - ("change_own_operation", ugettext(u"Can change own Operation")), - ("delete_own_operation", ugettext(u"Can delete own Operation")), - ) - - def __unicode__(self): - items = [unicode(_('Intercommunal'))] - if self.towns.count() == 1: - items[0] = unicode(self.towns.all()[0]) - items.append("-".join((unicode(self.year), - unicode(self.operation_code)))) - return JOINT.join(items) - - @classmethod - def get_available_operation_code(cls, year=None): - if not year: - year = datetime.date.today().year - max_val = cls.objects.filter(year=year).aggregate( - Max('operation_code'))["operation_code__max"] - return (max_val + 1) if max_val else 1 - - @classmethod - def get_years(cls): - return [res['year'] for res in list(cls.objects.values('year').annotate( - Count("id")).order_by())] - - @classmethod - def get_by_year(cls, year): - return cls.objects.filter(year=year) - - @classmethod - def get_total_number(cls): - return cls.objects.count() - - year_index_lbl = _(u"Operation code") - @property - def year_index(self): - lbl = unicode(self.operation_code) - lbl = u"%d-%s%s" % (self.year, (3-len(lbl))*"0", lbl) - return lbl - - def clean(self): - objs = self.__class__.objects.filter(year=self.year, - operation_code=self.operation_code) - if self.pk: - objs = objs.exclude(pk=self.pk) - if objs.count(): - raise ValidationError(_(u"This operation code already exists for " - u"this year")) - - def is_own(self, person): - return False - - @property - def surface_ha(self): - if self.surface: - return self.surface/10000.0 - - @property - def cost_by_m2(self): - if not self.surface or not self.cost: - return - return round(float(self.cost)/self.surface, 2) - - @property - def cost_by_m2(self): - if not self.surface or not self.cost: - return - return round(float(self.cost)/self.surface, 2) - - @classmethod - def get_query_owns(cls, user): - return Q(in_charge=user.person)|Q(history_modifier=user)\ - & Q(end_date__isnull=True) - - def is_active(self): - return not bool(self.end_date) - - def closing(self): - if self.is_active(): - return - for item in self.history.all(): - if not item.end_date: - break - return {'date':item.history_date, - 'user':IshtarUser.objects.get(pk=item.history_modifier_id)} - -def operation_post_save(sender, **kwargs): - if not kwargs['instance']: - return - operation = kwargs['instance'] - if operation.fnap_financing and operation.cost: - fnap_cost = int(float(operation.cost)/100*operation.fnap_financing) - if not operation.fnap_cost or operation.fnap_cost != fnap_cost: - operation.fnap_cost = fnap_cost - operation.save() - elif operation.fnap_cost and operation.cost: - fnap_percent = float(operation.fnap_cost)*100/operation.cost - operation.fnap_financing = fnap_percent - operation.save() -post_save.connect(operation_post_save, sender=Operation) - -class OperationByDepartment(models.Model): - ''' - Database view: don't forget to create it - - create view operation_department (id, department_id, operation_id) as - select town."id", town."departement_id", operation_towns."operation_id" - from ishtar_base_town town - inner join ishtar_base_operation_towns operation_towns on - operation_towns."town_id"=town."id" order by town."departement_id"; - CREATE RULE operation_department_delete - AS ON DELETE TO operation_department DO INSTEAD(); - ''' - operation = models.ForeignKey(Operation, verbose_name=_(u"Operation")) - department = models.ForeignKey(Departement, verbose_name=_(u"Department"), - blank=True, null=True) - class Meta: - managed = False - db_table = 'operation_department' - -class OperationSource(Source): - class Meta: - verbose_name = _(u"Operation documentation") - verbose_name_plural = _(u"Operation documentations") - operation = models.ForeignKey(Operation, verbose_name=_(u"Operation"), - related_name="source") - index = models.IntegerField(verbose_name=_(u"Index")) - TABLE_COLS = ['operation.year', 'operation.operation_code'] + \ - Source.TABLE_COLS - -class Parcel(LightHistorizedItem): - associated_file = models.ForeignKey(File, related_name='parcels', - blank=True, null=True, verbose_name=_(u"File")) - operation = models.ForeignKey(Operation, related_name='parcels', blank=True, - null=True, verbose_name=_(u"Operation")) - year = models.IntegerField(_(u"Year"), blank=True, null=True) - town = models.ForeignKey("Town", related_name='parcels', - verbose_name=_(u"Town")) - section = models.CharField(_(u"Section"), max_length=4) - parcel_number = models.CharField(_(u"Parcel number"), max_length=6) - - class Meta: - verbose_name = _(u"Parcel") - verbose_name_plural = _(u"Parcels") - - def short_label(self): - return JOINT.join([unicode(item) for item in [self.section, - self.parcel_number] if item]) - - def __unicode__(self): - return self.short_label() - - def long_label(self): - items = [unicode(self.operation or self.associated_file)] - items += [unicode(item) for item in [self.section, self.parcel_number] - if item] - return JOINT.join(items) - -class Period(GeneralType) : - order = models.IntegerField(_(u"Order")) - start_date = models.IntegerField(_(u"Start date")) - end_date = models.IntegerField(_(u"End date")) - parent = models.ForeignKey("Period", verbose_name=_(u"Parent period"), - blank=True, null=True) - - class Meta: - verbose_name = _(u"Type Period") - verbose_name_plural = _(u"Types Period") - - def __unicode__(self): - return self.label - -class DatingType(GeneralType): - class Meta: - verbose_name = _(u"Dating type") - verbose_name_plural = _(u"Dating types") - -class DatingQuality(GeneralType): - class Meta: - verbose_name = _(u"Dating quality") - verbose_name_plural = _(u"Dating qualities") - -class Dating(models.Model): - period = models.ForeignKey(Period, verbose_name=_(u"Period")) - start_date = models.IntegerField(_(u"Start date"), blank=True, null=True) - end_date = models.IntegerField(_(u"End date"), blank=True, null=True) - dating_type = models.ForeignKey(DatingType, verbose_name=_(u"Dating type"), - blank=True, null=True) - quality = models.ForeignKey(DatingQuality, verbose_name=_(u"Quality"), - blank=True, null=True) - - class Meta: - verbose_name = _(u"Dating") - verbose_name_plural = _(u"Datings") - - def __unicode__(self): - start_date = self.start_date and unicode(self.start_date) or u"" - end_date = self.end_date and unicode(self.end_date) or u"" - if not start_date and not end_date: - return unicode(self.period) - return u"%s (%s-%s)" % (self.period, start_date, end_date) - -class Unit(GeneralType): - order = models.IntegerField(_(u"Order")) - parent = models.ForeignKey("Unit", verbose_name=_(u"Parent unit"), - blank=True, null=True) - - class Meta: - verbose_name = _(u"Type Unit") - verbose_name_plural = _(u"Types Unit") - - def __unicode__(self): - return self.label - -class ActivityType(GeneralType): - order = models.IntegerField(_(u"Order")) - - class Meta: - verbose_name = _(u"Type Activity") - verbose_name_plural = _(u"Types Activity") - - def __unicode__(self): - return self.label - -class IdentificationType(GeneralType): - order = models.IntegerField(_(u"Order")) - class Meta: - verbose_name = _(u"Type Identification") - verbose_name_plural = _(u"Types Identification") - - def __unicode__(self): - return self.label - -class ContextRecord(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['parcel.town', 'operation.year', - 'operation.operation_code', - 'label', 'unit'] - if settings.COUNTRY == 'fr': - TABLE_COLS.insert(1, 'parcel.operation.code_patriarche') - parcel = models.ForeignKey(Parcel, verbose_name=_(u"Parcel"), - related_name='context_record') - operation = models.ForeignKey(Operation, verbose_name=_(u"Operation"), - related_name='context_record') - label = models.CharField(_(u"ID"), max_length=200) - description = models.TextField(_(u"Description"), blank=True, null=True) - length = models.IntegerField(_(u"Length (cm)"), blank=True, null=True) - width = models.IntegerField(_(u"Width (cm)"), blank=True, null=True) - thickness = models.IntegerField(_(u"Thickness (cm)"), blank=True, null=True) - depth = models.IntegerField(_(u"Depth (cm)"), blank=True, null=True) - location = models.CharField(_(u"Location"), blank=True, null=True, - max_length=200, - help_text=_(u"A short description of the location of the context record")) - datings = models.ManyToManyField(Dating) - unit = models.ForeignKey(Unit, verbose_name=_(u"Unit"), related_name='+', - blank=True, null=True) - has_furniture = models.NullBooleanField(u"Has furniture?", blank=True, - null=True) - filling = models.TextField(_(u"Filling"), blank=True, null=True) - interpretation = models.TextField(_(u"Interpretation"), blank=True, - null=True) - taq = models.IntegerField(_(u"TAQ"), blank=True, null=True, - help_text=_(u"\"Terminus Ante Quem\" the context record can't have been " - "created after this date")) - taq_estimated = models.IntegerField(_(u"Estimated TAQ"), blank=True, - null=True, help_text=_(u"Estimation of a \"Terminus Ante Quem\"")) - tpq = models.IntegerField(_(u"TPQ"), blank=True, null=True, - help_text=_(u"\"Terminus Post Quem\" the context record can't have been " - " created before this date")) - tpq_estimated = models.IntegerField(_(u"Estimated TPQ"), blank=True, - null=True, help_text=_(u"Estimation of a \"Terminus Post Quem\"")) - identification = models.ForeignKey(IdentificationType, blank=True, - null=True, verbose_name=_(u"Identification"),) - activity = models.ForeignKey(ActivityType,blank=True, null=True, - verbose_name=_(u"Activity"),) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Context Record") - verbose_name_plural = _(u"Context Record") - permissions = ( - ("view_own_contextrecord", ugettext(u"Can view own Context Record")), - ("add_own_contextrecord", ugettext(u"Can add own Context Record")), - ("change_own_contextrecord", ugettext(u"Can change own Context Record")), - ("delete_own_contextrecord", ugettext(u"Can delete own Context Record")), - ) - - def __unicode__(self): - return self.short_label() - - def short_label(self): - return JOINT.join([unicode(item) for item in [self.parcel, - self.label] if item]) - - def full_label(self): - if not self.parcel.operation: - return unicode(self) - return self._real_label() or self._temp_label() - - def _real_label(self): - if not self.parcel.operation.code_patriarche: - return - return JOINT.join((self.parcel.operation.code_patriarche, - self.label)) - - def _temp_label(self): - if self.parcel.operation.code_patriarche: - return - return JOINT.join([unicode(lbl) for lbl in [self.parcel.operation.year, - self.parcel.operation.operation_code, - self.label] if lbl]) - - @classmethod - def get_years(cls): - years = set() - for res in list(cls.objects.values('operation__start_date')): - yr = res['operation__start_date'].year - years.add(yr) - return list(years) - - @classmethod - def get_by_year(cls, year): - return cls.objects.filter(operation__start_date__year=year) - - @classmethod - def get_operations(cls): - return [dct['operation__pk'] - for dct in cls.objects.values('operation__pk').distinct()] - - @classmethod - def get_by_operation(cls, operation_id): - return cls.objects.filter(operation__pk=operation_id) - - @classmethod - def get_total_number(cls): - return cls.objects.filter(operation__start_date__isnull=False).count() - -class ContextRecordSource(Source): - class Meta: - verbose_name = _(u"Context record documentation") - verbose_name_plural = _(u"Context record documentations") - context_record = models.ForeignKey(ContextRecord, - verbose_name=_(u"Context record"), related_name="source") - -class MaterialType(GeneralType): - recommendation = models.TextField(_(u"Recommendation")) - parent = models.ForeignKey("MaterialType", blank=True, null=True, - verbose_name=_(u"Parent material")) - - class Meta: - verbose_name = _(u"Material type") - verbose_name_plural = _(u"Material types") - -class BaseItem(BaseHistorizedItem, OwnPerms): - label = models.CharField(_(u"ID"), max_length=60) - description = models.TextField(_(u"Description")) - context_record = models.ForeignKey(ContextRecord, - related_name='base_items', verbose_name=_(u"Context Record")) - is_isolated = models.NullBooleanField(_(u"Is isolated?"), blank=True, - null=True) - index = models.IntegerField(u"Index", default=0) - material_index = models.IntegerField(u"Material index", default=0) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Base item") - verbose_name_plural = _(u"Base items") - permissions = ( - ("view_own_baseitem", ugettext(u"Can view own Base item")), - ("add_own_baseitem", ugettext(u"Can add own Base item")), - ("change_own_baseitem", ugettext(u"Can change own Base item")), - ("delete_own_baseitem", ugettext(u"Can delete own Base item")), - ) - - def __unicode__(self): - return self.label - - def get_last_item(self): - #TODO: manage virtuals - property(last_item) ? - items = self.item.filter().order_by("-order").all() - return items and items[0] - - def full_label(self): - return self._real_label() or self._temp_label() - - def material_type_label(self): - item = self.get_last_item() - items = [item and unicode(item.material_type) or ''] - ope = self.context_record.operation - items += [ope.code_patriarche or \ - (unicode(ope.year) + "-" + unicode(ope.operation_code))] - items += [self.context_record.label, unicode(self.material_index)] - return JOINT.join(items) - - def _real_label(self): - if not self.context_record.parcel.operation.code_patriarche: - return - item = self.get_last_item() - lbl = item.label or self.label - return JOINT.join([unicode(it) for it in ( - self.context_record.parcel.operation.code_patriarche, - self.context_record.label, - lbl) if it]) - - def _temp_label(self): - if self.context_record.parcel.operation.code_patriarche: - return - item = self.get_last_item() - lbl = item.label or self.label - return JOINT.join([unicode(it) for it in ( - self.context_record.parcel.year, - self.index, - self.context_record.label, - lbl) if it]) - -class Item(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['label', 'material_type', 'dating.period', - 'base_items.context_record.parcel.town', - 'base_items.context_record.parcel.operation.year', - 'base_items.context_record.parcel.operation.operation_code', - 'base_items.is_isolated'] - if settings.COUNTRY == 'fr': - TABLE_COLS.insert(6, - 'base_items.context_record.parcel.operation.code_patriarche') - base_items = models.ManyToManyField(BaseItem, verbose_name=_(u"Base item"), - related_name='item') - order = models.IntegerField(_(u"Order")) - label = models.CharField(_(u"ID"), max_length=60) - description = models.TextField(_(u"Description"), blank=True, null=True) - material_type = models.ForeignKey(MaterialType, - verbose_name = _(u"Material type")) - volume = models.FloatField(_(u"Volume (l)"), blank=True, null=True) - weight = models.FloatField(_(u"Weight (g)"), blank=True, null=True) - item_number = models.IntegerField(_("Item number"), blank=True, null=True) - upstream_treatment = models.ForeignKey("Treatment", blank=True, null=True, - related_name='downstream_treatment', verbose_name=_("Upstream treatment")) - downstream_treatment = models.ForeignKey("Treatment", blank=True, null=True, - related_name='upstream_treatment', verbose_name=_("Downstream treatment")) - dating = models.ForeignKey(Dating, verbose_name=_(u"Dating")) - container = models.ForeignKey('Container', verbose_name=_(u"Container"), - blank=True, null=True, related_name='items') - history = HistoricalRecords() - - @classmethod - def get_years(cls): - years = set() - items = cls.objects.filter(downstream_treatment__isnull=True) - for item in items: - bi = item.base_items.all() - if not bi: - continue - bi = bi[0] - yr = bi.context_record.operation.start_date.year - years.add(yr) - return list(years) - - @classmethod - def get_by_year(cls, year): - return cls.objects.filter(downstream_treatment__isnull=True, - base_items__context_record__operation__start_date__year=year) - - @classmethod - def get_operations(cls): - operations = set() - items = cls.objects.filter(downstream_treatment__isnull=True) - for item in items: - bi = item.base_items.all() - if not bi: - continue - bi = bi[0] - pk = bi.context_record.operation.pk - operations.add(pk) - return list(operations) - - @classmethod - def get_by_operation(cls, operation_id): - return cls.objects.filter(downstream_treatment__isnull=True, - base_items__context_record__operation__pk=operation_id) - - @classmethod - def get_total_number(cls): - return cls.objects.filter(downstream_treatment__isnull=True).count() - - def duplicate(self, user): - dct = dict([(attr, getattr(self, attr)) for attr in ('order', 'label', - 'description', 'material_type', 'volume', 'weight', - 'item_number', 'dating')]) - dct['order'] += 1 - dct['history_modifier'] = user - new = self.__class__(**dct) - new.save() - for base_item in self.base_items.all(): - new.base_items.add(base_item) - return new - - class Meta: - verbose_name = _(u"Item") - verbose_name_plural = _(u"Items") - permissions = ( - ("view_own_item", ugettext(u"Can view own Item")), - ("add_own_item", ugettext(u"Can add own Item")), - ("change_own_item", ugettext(u"Can change own Item")), - ("delete_own_item", ugettext(u"Can delete own Item")), - ) - - def __unicode__(self): - return self.label - - def save(self, *args, **kwargs): - if not self.pk: - super(Item, self).save(*args, **kwargs) - for base_item in self.base_items.all(): - if not base_item.index: - idx = BaseItem.objects.filter(context_record=\ - base_item.context_record).aggregate(Max('index')) - base_item.index = idx and idx['index__max'] + 1 or 1 - if not base_item.material_index: - idx = BaseItem.objects.filter(context_record=\ - base_item.context_record, - item__material_type=self.material_type).aggregate( - Max('material_index')) - base_item.material_index = idx and \ - idx['material_index__max'] + 1 or 1 - base_item.save() - super(Item, self).save(*args, **kwargs) - -class ItemSource(Source): - class Meta: - verbose_name = _(u"Item documentation") - verbose_name_plural = _(u"Item documentations") - item = models.ForeignKey(Item, verbose_name=_(u"Item"), - related_name="source") - -class ParcelOwner(LightHistorizedItem): - owner = models.ForeignKey(Person, verbose_name=_(u"Owner")) - parcel = models.ForeignKey(Parcel, verbose_name=_(u"Parcel")) - start_date = models.DateField(_(u"Start date")) - end_date = models.DateField(_(u"End date")) - - class Meta: - verbose_name = _(u"Parcel owner") - verbose_name_plural = _(u"Parcel owners") - - def __unicode__(self): - return self.owner + JOINT + self.parcel - -class WarehouseType(GeneralType): - class Meta: - verbose_name = _(u"Warehouse type") - verbose_name_plural = _(u"Warehouse types") - -class Warehouse(Address, OwnPerms): - name = models.CharField(_(u"Name"), max_length=40) - warehouse_type = models.ForeignKey(WarehouseType, - verbose_name=_(u"Warehouse type")) - person_in_charge = models.ForeignKey(Person, - verbose_name=_(u"Person in charge"), null=True, blank=True) - comment = models.TextField(_(u"Comment"), null=True, blank=True) - - class Meta: - verbose_name = _(u"Warehouse") - verbose_name_plural = _(u"Warehouses") - permissions = ( - ("view_own_warehouse", ugettext(u"Can view own Warehouse")), - ("add_own_warehouse", ugettext(u"Can add own Warehouse")), - ("change_own_warehouse", ugettext(u"Can change own Warehouse")), - ("delete_own_warehouse", ugettext(u"Can delete own Warehouse")), - ) - - def __unicode__(self): - return u"%s (%s)" % (self.name, unicode(self.warehouse_type)) - -class ActType(GeneralType): - TYPE = (('F', _(u'Archaelogical file')), - ('O', _(u'Operation')), - ) - intented_to = models.CharField(_(u"Intended to"), max_length=1, - choices=TYPE) - class Meta: - verbose_name = _(u"Act type") - verbose_name_plural = _(u"Act types") - -class AdministrativeAct(BaseHistorizedItem, OwnPerms): - TABLE_COLS = ['act_type', 'associated_file', 'operation', - 'associated_file.towns', 'operation.towns'] - TABLE_COLS_FILE = ['act_type', 'associated_file', 'associated_file.towns',] - TABLE_COLS_OPE = ['act_type', 'operation', 'operation.towns'] - act_type = models.ForeignKey(ActType, verbose_name=_(u"Act type")) - in_charge = models.ForeignKey(Person, blank=True, null=True, - related_name='+', verbose_name=_(u"Person in charge of the operation")) - operator = models.ForeignKey(Organization, blank=True, null=True, - verbose_name=_(u"Archaeological preventive operator")) - scientific = models.ForeignKey(Person, blank=True, null=True, -related_name='+', verbose_name=_(u"Person in charge of the scientific part")) - signatory = models.ForeignKey(Person, blank=True, null=True, - related_name='+', verbose_name=_(u"Signatory")) - operation = models.ForeignKey(Operation, blank=True, null=True, - related_name='administrative_act', verbose_name=_(u"Operation")) - associated_file = models.ForeignKey(File, blank=True, null=True, - related_name='administrative_act', verbose_name=_(u"Archaelogical file")) - signature_date = models.DateField(_(u"Signature date"), blank=True, - null=True) - act_object = models.CharField(_(u"Object"), max_length=200) - if settings.COUNTRY == 'fr': - ref_sra = models.CharField(u"Référence SRA", max_length=15) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Administrative act") - verbose_name_plural = _(u"Administrative acts") - permissions = ( -("view_own_administrativeact", ugettext(u"Can view own Administrative act")), -("add_own_administrativeact", ugettext(u"Can add own Administrative act")), -("change_own_administrativeact", ugettext(u"Can change own Administrative act")), -("delete_own_administrativeact", ugettext(u"Can delete own Administrative act")), - ) - - def __unicode__(self): - return JOINT.join([unicode(item) - for item in [self.operation, self.associated_file, self.act_object] - if item]) - -class ContainerType(GeneralType): - length = models.IntegerField(_(u"Length (mm)"), blank=True, null=True) - width = models.IntegerField(_(u"Width (mm)"), blank=True, null=True) - height = models.IntegerField(_(u"Height (mm)"), blank=True, null=True) - volume = models.IntegerField(_(u"Volume (l)"), blank=True, null=True) - reference = models.CharField(_(u"Reference"), max_length=30) - - class Meta: - verbose_name = _(u"Container type") - verbose_name_plural = _(u"Container types") - -class Container(LightHistorizedItem): - TABLE_COLS = ['reference', 'container_type', 'location',] - location = models.ForeignKey(Warehouse, verbose_name=_(u"Warehouse")) - container_type = models.ForeignKey(ContainerType, - verbose_name=_("Container type")) - reference = models.CharField(_(u"Reference"), max_length=40) - comment = models.TextField(_(u"Comment")) - - class Meta: - verbose_name = _(u"Container") - verbose_name_plural = _(u"Containers") - - def __unicode__(self): - lbl = u" - ".join((self.reference, unicode(self.container_type), - unicode(self.location))) - return lbl - if settings.COUNTRY == 'fr': class Arrondissement(models.Model): name = models.CharField(u"Nom", max_length=30) - department = models.ForeignKey(Departement, verbose_name=u"Département") + department = models.ForeignKey(Department, verbose_name=u"Département") def __unicode__(self): return JOINT.join((self.name, unicode(self.department))) @@ -2117,7 +1236,7 @@ class Town(models.Model): if settings.COUNTRY == 'fr': numero_insee = models.CharField(u"Numéro INSEE", max_length=6, unique=True) - departement = models.ForeignKey(Departement, verbose_name=u"Département", + departement = models.ForeignKey(Department, verbose_name=u"Département", null=True, blank=True) canton = models.ForeignKey(Canton, verbose_name=u"Canton", null=True, blank=True) @@ -2134,61 +1253,4 @@ class Town(models.Model): return u"%s (%s)" % (self.name, self.numero_insee) return self.name -class TreatmentType(GeneralType): - virtual = models.BooleanField(_(u"Virtual")) - class Meta: - verbose_name = _(u"Treatment type") - verbose_name_plural = _(u"Treatment types") - -class Treatment(BaseHistorizedItem, OwnPerms): - container = models.ForeignKey(Container, verbose_name=_(u"Container"), - blank=True, null=True) - description = models.TextField(_(u"Description"), blank=True, null=True) - treatment_type = models.ForeignKey(TreatmentType, - verbose_name=_(u"Treatment type")) - location = models.ForeignKey(Warehouse, verbose_name=_(u"Location"), - blank=True, null=True) - person = models.ForeignKey(Person, verbose_name=_(u"Person"), - blank=True, null=True) - start_date = models.DateField(_(u"Start date"), blank=True, null=True) - end_date = models.DateField(_(u"End date"), blank=True, null=True) - history = HistoricalRecords() - - class Meta: - verbose_name = _(u"Treatment") - verbose_name_plural = _(u"Treatments") - permissions = ( - ("view_own_treatment", ugettext(u"Can view own Treatment")), - ("add_own_treatment", ugettext(u"Can add own Treatment")), - ("change_own_treatment", ugettext(u"Can change own Treatment")), - ("delete_own_treatment", ugettext(u"Can delete own Treatment")), - ) - - def __unicode__(self): - lbl = unicode(self.treatment_type) - if self.person: - lbl += u" %s %s" % (_(u"by"), unicode(self.person)) - return lbl - -class TreatmentSource(Source): - class Meta: - verbose_name = _(u"Treatment documentation") - verbose_name_plural = _(u"Treament documentations") - treatment = models.ForeignKey(Treatment, verbose_name=_(u"Treatment"), - related_name="source") - -class Property(LightHistorizedItem): - item = models.ForeignKey(Item, verbose_name=_(u"Item")) - administrative_act = models.ForeignKey(AdministrativeAct, - verbose_name=_(u"Administrative act")) - person = models.ForeignKey(Person, verbose_name=_(u"Person")) - start_date = models.DateField(_(u"Start date")) - end_date = models.DateField(_(u"End date")) - - class Meta: - verbose_name = _(u"Property") - verbose_name_plural = _(u"Properties") - - def __unicode__(self): - return self.person + JOINT + self.item -- cgit v1.2.3