diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 16:19:59 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 16:19:59 +0100 |
| commit | 1e05946531d237dc954f46ddfc25a6b61c084a74 (patch) | |
| tree | 8b9137dd9b68121db86e4e22dfdb7b7016a6f1ad /archaeological_warehouse | |
| parent | 4779acd3006e6d6b17babd13585a4d83fb8d2332 (diff) | |
| parent | 9eced41d76545bd2921605b7b81bd14b875ce541 (diff) | |
| download | Ishtar-1e05946531d237dc954f46ddfc25a6b61c084a74.tar.bz2 Ishtar-1e05946531d237dc954f46ddfc25a6b61c084a74.zip | |
Merge branch 'develop'
Diffstat (limited to 'archaeological_warehouse')
| -rw-r--r-- | archaeological_warehouse/forms.py | 5 | ||||
| -rw-r--r-- | archaeological_warehouse/ishtar_menu.py | 8 | ||||
| -rw-r--r-- | archaeological_warehouse/locale/django.pot | 170 | ||||
| -rw-r--r-- | archaeological_warehouse/migrations/0026_auto_20181203_1442.py | 374 | ||||
| -rw-r--r-- | archaeological_warehouse/models.py | 17 | ||||
| -rw-r--r-- | archaeological_warehouse/urls.py | 10 | ||||
| -rw-r--r-- | archaeological_warehouse/views.py | 31 | ||||
| -rw-r--r-- | archaeological_warehouse/wizards.py | 13 |
8 files changed, 525 insertions, 103 deletions
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index 954c01918..2dc963ca0 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -18,6 +18,7 @@ # See the file COPYING for details. from collections import OrderedDict +import datetime from django import forms from django.conf import settings @@ -294,7 +295,9 @@ class BasePackagingForm(SelectFindBasketForm): associated_model=Person, new=True), validators=[valid_id(Person)]) start_date = forms.DateField( - label=_(u"Date"), required=False, widget=DatePicker) + label=_(u"Date"), required=False, widget=DatePicker, + initial=datetime.date.today + ) class FindPackagingFormSelection(FindMultipleFormSelection): diff --git a/archaeological_warehouse/ishtar_menu.py b/archaeological_warehouse/ishtar_menu.py index b697c4dd3..414b0431d 100644 --- a/archaeological_warehouse/ishtar_menu.py +++ b/archaeological_warehouse/ishtar_menu.py @@ -29,14 +29,6 @@ import models MENU_SECTIONS = [ - (70, SectionItem('treatment_management', _(u"Treatment"), - profile_restriction='warehouse', - css='menu-warehouse', - childs=[ - MenuItem('warehouse_packaging', _(u"Packaging"), - model=Treatment, - access_controls=['add_treatment', 'add_own_treatment']), - ])), (80, SectionItem('warehouse', _(u"Warehouse"), profile_restriction='warehouse', css='menu-warehouse', diff --git a/archaeological_warehouse/locale/django.pot b/archaeological_warehouse/locale/django.pot index 139895395..ac527e894 100644 --- a/archaeological_warehouse/locale/django.pot +++ b/archaeological_warehouse/locale/django.pot @@ -9,315 +9,315 @@ msgid "" msgstr "" -#: forms.py:41 forms.py:113 ishtar_menu.py:40 models.py:94 models.py:258 +#: forms.py:42 forms.py:114 ishtar_menu.py:32 models.py:95 models.py:259 #: templates/ishtar/sheet_warehouse.html:4 msgid "Warehouse" msgstr "" -#: forms.py:50 forms.py:55 models.py:622 +#: forms.py:51 forms.py:56 models.py:638 msgid "Division" msgstr "" -#: forms.py:57 models.py:286 +#: forms.py:58 models.py:287 msgid "Order" msgstr "" -#: forms.py:71 +#: forms.py:72 msgid "There are identical divisions." msgstr "" -#: forms.py:76 models.py:83 +#: forms.py:77 models.py:84 msgid "Divisions" msgstr "" -#: forms.py:77 +#: forms.py:78 msgid "Warehouse - 020 - Divisions" msgstr "" -#: forms.py:85 forms.py:254 +#: forms.py:86 forms.py:255 msgid "Full text search" msgstr "" -#: forms.py:88 forms.py:119 models.py:75 models.py:255 +#: forms.py:89 forms.py:120 models.py:76 models.py:256 msgid "Name" msgstr "" -#: forms.py:89 forms.py:121 models.py:39 models.py:77 +#: forms.py:90 forms.py:122 models.py:40 models.py:78 msgid "Warehouse type" msgstr "" -#: forms.py:101 views.py:108 +#: forms.py:102 views.py:120 msgid "Warehouse search" msgstr "" -#: forms.py:114 +#: forms.py:115 msgid "Warehouse - 010 - General" msgstr "" -#: forms.py:124 models.py:80 +#: forms.py:125 models.py:81 msgid "Person in charge" msgstr "" -#: forms.py:130 forms.py:198 models.py:81 models.py:381 +#: forms.py:131 forms.py:199 models.py:82 models.py:383 msgid "Comment" msgstr "" -#: forms.py:132 +#: forms.py:133 msgid "Address" msgstr "" -#: forms.py:134 +#: forms.py:135 msgid "Address complement" msgstr "" -#: forms.py:136 +#: forms.py:137 msgid "Postal code" msgstr "" -#: forms.py:138 +#: forms.py:139 msgid "Town" msgstr "" -#: forms.py:139 +#: forms.py:140 msgid "Country" msgstr "" -#: forms.py:141 +#: forms.py:142 msgid "Phone" msgstr "" -#: forms.py:142 +#: forms.py:143 msgid "Mobile phone" msgstr "" -#: forms.py:167 forms.py:168 +#: forms.py:168 forms.py:169 msgid "Would you like to delete this warehouse?" msgstr "" -#: forms.py:172 models.py:395 models.py:619 +#: forms.py:173 models.py:397 models.py:635 #: templates/ishtar/sheet_container.html:4 msgid "Container" msgstr "" -#: forms.py:173 +#: forms.py:174 msgid "Container - 010 - General" msgstr "" -#: forms.py:179 forms.py:261 models.py:301 +#: forms.py:180 forms.py:262 models.py:302 msgid "Ref." msgstr "" -#: forms.py:180 models.py:389 +#: forms.py:181 models.py:391 msgid "Old reference" msgstr "" -#: forms.py:182 forms.py:260 models.py:304 models.py:379 +#: forms.py:183 forms.py:261 models.py:306 models.py:381 msgid "Container type" msgstr "" -#: forms.py:184 forms.py:258 +#: forms.py:185 forms.py:259 msgid "Current location (warehouse)" msgstr "" -#: forms.py:190 forms.py:259 models.py:376 +#: forms.py:191 forms.py:260 models.py:378 msgid "Responsible warehouse" msgstr "" -#: forms.py:196 +#: forms.py:197 msgid "Image" msgstr "" -#: forms.py:223 +#: forms.py:224 msgid "ID" msgstr "" -#: forms.py:245 +#: forms.py:246 msgid "This ID already exists for this warehouse." msgstr "" -#: forms.py:272 forms.py:278 views.py:150 +#: forms.py:273 forms.py:279 views.py:162 msgid "Container search" msgstr "" -#: forms.py:274 forms.py:280 +#: forms.py:275 forms.py:281 msgid "You should select a container." msgstr "" -#: forms.py:275 +#: forms.py:276 msgid "Add a new container" msgstr "" -#: forms.py:285 ishtar_menu.py:36 views.py:103 +#: forms.py:286 views.py:115 msgid "Packaging" msgstr "" -#: forms.py:291 +#: forms.py:292 msgid "Packager" msgstr "" -#: forms.py:297 +#: forms.py:298 msgid "Date" msgstr "" -#: forms.py:301 +#: forms.py:304 msgid "Packaged finds" msgstr "" -#: forms.py:305 +#: forms.py:308 msgid "Container - 020 - Localisation" msgstr "" -#: forms.py:307 models.py:382 +#: forms.py:310 models.py:384 msgid "Localisation" msgstr "" -#: forms.py:331 forms.py:332 +#: forms.py:334 forms.py:335 msgid "Would you like to delete this container?" msgstr "" -#: ishtar_menu.py:32 -msgid "Treatment" -msgstr "" - -#: ishtar_menu.py:44 ishtar_menu.py:59 +#: ishtar_menu.py:36 ishtar_menu.py:51 msgid "Search" msgstr "" -#: ishtar_menu.py:47 ishtar_menu.py:63 +#: ishtar_menu.py:39 ishtar_menu.py:55 msgid "Creation" msgstr "" -#: ishtar_menu.py:50 ishtar_menu.py:67 +#: ishtar_menu.py:42 ishtar_menu.py:59 msgid "Modification" msgstr "" -#: ishtar_menu.py:53 ishtar_menu.py:71 +#: ishtar_menu.py:45 ishtar_menu.py:63 msgid "Deletion" msgstr "" -#: ishtar_menu.py:57 models.py:396 templates/ishtar/sheet_warehouse.html:42 +#: ishtar_menu.py:49 models.py:398 templates/ishtar/sheet_warehouse.html:42 #: templates/ishtar/sheet_warehouse.html:87 msgid "Containers" msgstr "" -#: models.py:40 +#: models.py:41 msgid "Warehouse types" msgstr "" -#: models.py:60 +#: models.py:61 msgctxt "key for text search" msgid "name" msgstr "" -#: models.py:64 models.py:356 +#: models.py:65 models.py:358 msgctxt "key for text search" msgid "type" msgstr "" -#: models.py:87 +#: models.py:88 msgid "Documents" msgstr "" -#: models.py:89 models.py:390 +#: models.py:90 models.py:392 msgid "External ID" msgstr "" -#: models.py:91 models.py:392 +#: models.py:92 models.py:394 msgid "External ID is set automatically" msgstr "" -#: models.py:95 +#: models.py:96 msgid "Warehouses" msgstr "" -#: models.py:257 +#: models.py:258 msgid "Description" msgstr "" -#: models.py:262 models.py:263 +#: models.py:263 models.py:264 msgid "Collection" msgstr "" -#: models.py:272 +#: models.py:273 msgid "Warehouse division type" msgstr "" -#: models.py:273 +#: models.py:274 msgid "Warehouse division types" msgstr "" -#: models.py:297 +#: models.py:298 msgid "Length (mm)" msgstr "" -#: models.py:298 +#: models.py:299 msgid "Width (mm)" msgstr "" -#: models.py:299 +#: models.py:300 msgid "Height (mm)" msgstr "" -#: models.py:300 +#: models.py:301 msgid "Volume (l)" msgstr "" -#: models.py:305 +#: models.py:307 msgid "Container types" msgstr "" -#: models.py:339 +#: models.py:341 msgid "Location - index" msgstr "" -#: models.py:340 +#: models.py:342 msgid "Precise localisation" msgstr "" -#: models.py:341 +#: models.py:343 msgid "Type" msgstr "" -#: models.py:348 +#: models.py:350 msgctxt "key for text search" msgid "location" msgstr "" -#: models.py:352 +#: models.py:354 msgctxt "key for text search" msgid "responsible-warehouse" msgstr "" -#: models.py:360 +#: models.py:362 msgctxt "key for text search" msgid "reference" msgstr "" -#: models.py:373 +#: models.py:375 msgid "Location (warehouse)" msgstr "" -#: models.py:380 +#: models.py:382 msgid "Container ref." msgstr "" -#: models.py:384 +#: models.py:386 msgid "Cached location" msgstr "" -#: models.py:386 +#: models.py:388 msgid "Cached division" msgstr "" -#: models.py:623 +#: models.py:584 +msgid "Add treatment" +msgstr "" + +#: models.py:639 msgid "Reference" msgstr "" -#: models.py:626 +#: models.py:642 msgid "Container localisation" msgstr "" -#: models.py:627 +#: models.py:643 msgid "Container localisations" msgstr "" @@ -378,26 +378,26 @@ msgid "" "change divisions." msgstr "" -#: views.py:120 +#: views.py:132 msgid "Warehouse creation" msgstr "" -#: views.py:129 +#: views.py:141 msgid "Warehouse modification" msgstr "" -#: views.py:145 +#: views.py:157 msgid "Warehouse deletion" msgstr "" -#: views.py:161 +#: views.py:173 msgid "Container creation" msgstr "" -#: views.py:170 +#: views.py:182 msgid "Container modification" msgstr "" -#: views.py:185 +#: views.py:197 msgid "Container deletion" msgstr "" diff --git a/archaeological_warehouse/migrations/0026_auto_20181203_1442.py b/archaeological_warehouse/migrations/0026_auto_20181203_1442.py new file mode 100644 index 000000000..141ac8d2d --- /dev/null +++ b/archaeological_warehouse/migrations/0026_auto_20181203_1442.py @@ -0,0 +1,374 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-12-03 14:42 +from __future__ import unicode_literals + +from django.conf import settings +import django.contrib.postgres.search +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import re + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_warehouse', '0025_auto_20181112_1842'), + ] + + operations = [ + migrations.AlterModelOptions( + name='container', + options={'ordering': ('cached_label',), 'permissions': (('view_container', 'Can view all Containers'), ('view_own_container', 'Can view own Container'), ('add_own_container', 'Can add own Container'), ('change_own_container', 'Can change own Container'), ('delete_own_container', 'Can delete own Container')), 'verbose_name': 'Contenant', 'verbose_name_plural': 'Contenants'}, + ), + migrations.AlterModelOptions( + name='containerlocalisation', + options={'ordering': ('container', 'division__order'), 'verbose_name': 'Localisation de contenant', 'verbose_name_plural': 'Localisations de contenant'}, + ), + migrations.AlterModelOptions( + name='containertype', + options={'ordering': ('label',), 'verbose_name': 'Type de contenant', 'verbose_name_plural': 'Types de contenant'}, + ), + migrations.AlterModelOptions( + name='warehouse', + options={'permissions': (('view_warehouse', 'Can view all Warehouses'), ('view_own_warehouse', 'Can view own Warehouse'), ('add_own_warehouse', 'Can add own Warehouse'), ('change_own_warehouse', 'Can change own Warehouse'), ('delete_own_warehouse', 'Can delete own Warehouse')), 'verbose_name': 'Lieu de conservation', 'verbose_name_plural': 'Lieux de conservation'}, + ), + migrations.AlterModelOptions( + name='warehousedivision', + options={'verbose_name': 'Type de division de lieu de conservation', 'verbose_name_plural': 'Types de division de lieu de conservation'}, + ), + migrations.AlterModelOptions( + name='warehousetype', + options={'ordering': ('label',), 'verbose_name': 'Type de lieu de conservation', 'verbose_name_plural': 'Types de lieu de conservation'}, + ), + migrations.AlterField( + model_name='collection', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Cr\xe9ateur'), + ), + migrations.AlterField( + model_name='collection', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Dernier \xe9diteur'), + ), + migrations.AlterField( + model_name='collection', + name='name', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Nom'), + ), + migrations.AlterField( + model_name='collection', + name='search_vector', + field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'), + ), + migrations.AlterField( + model_name='collection', + name='warehouse', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='collections', to='archaeological_warehouse.Warehouse', verbose_name='Lieu de conservation'), + ), + migrations.AlterField( + model_name='container', + name='auto_external_id', + field=models.BooleanField(default=False, verbose_name="L'identifiant est attribu\xe9 automatiquement"), + ), + migrations.AlterField( + model_name='container', + name='cached_division', + field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Division mise en cache'), + ), + migrations.AlterField( + model_name='container', + name='cached_location', + field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Localisation - en cache'), + ), + migrations.AlterField( + model_name='container', + name='comment', + field=models.TextField(blank=True, null=True, verbose_name='Commentaire'), + ), + migrations.AlterField( + model_name='container', + name='container_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.ContainerType', verbose_name='Type de contenant'), + ), + migrations.AlterField( + model_name='container', + name='external_id', + field=models.TextField(blank=True, null=True, verbose_name='Identifiant'), + ), + migrations.AlterField( + model_name='container', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Cr\xe9ateur'), + ), + migrations.AlterField( + model_name='container', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Dernier \xe9diteur'), + ), + migrations.AlterField( + model_name='container', + name='location', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='containers', to='archaeological_warehouse.Warehouse', verbose_name='Localisation (lieu de conservation)'), + ), + migrations.AlterField( + model_name='container', + name='old_reference', + field=models.TextField(blank=True, null=True, verbose_name='Ancienne r\xe9f\xe9rence'), + ), + migrations.AlterField( + model_name='container', + name='reference', + field=models.TextField(verbose_name='R\xe9f. du contenant'), + ), + migrations.AlterField( + model_name='container', + name='responsible', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owned_containers', to='archaeological_warehouse.Warehouse', verbose_name='Lieu de conservation responsable'), + ), + migrations.AlterField( + model_name='container', + name='search_vector', + field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'), + ), + migrations.AlterField( + model_name='containerlocalisation', + name='container', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='division', to='archaeological_warehouse.Container', verbose_name='Contenant'), + ), + migrations.AlterField( + model_name='containerlocalisation', + name='reference', + field=models.CharField(default=b'', max_length=200, verbose_name='R\xe9f\xe9rence'), + ), + migrations.AlterField( + model_name='containertype', + name='available', + field=models.BooleanField(default=True, verbose_name='Disponible'), + ), + migrations.AlterField( + model_name='containertype', + name='comment', + field=models.TextField(blank=True, null=True, verbose_name='Commentaire'), + ), + migrations.AlterField( + model_name='containertype', + name='height', + field=models.IntegerField(blank=True, null=True, verbose_name='Hauteur (mm)'), + ), + migrations.AlterField( + model_name='containertype', + name='label', + field=models.TextField(verbose_name='D\xe9nomination'), + ), + migrations.AlterField( + model_name='containertype', + name='length', + field=models.IntegerField(blank=True, null=True, verbose_name='Longueur (mm)'), + ), + migrations.AlterField( + model_name='containertype', + name='reference', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='R\xe9f.'), + ), + migrations.AlterField( + model_name='containertype', + name='txt_idx', + field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'), + ), + migrations.AlterField( + model_name='containertype', + name='width', + field=models.IntegerField(blank=True, null=True, verbose_name='Largeur (mm)'), + ), + migrations.AlterField( + model_name='warehouse', + name='address', + field=models.TextField(blank=True, null=True, verbose_name='Adresse'), + ), + migrations.AlterField( + model_name='warehouse', + name='address_complement', + field=models.TextField(blank=True, null=True, verbose_name="Compl\xe9ment d'adresse"), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_address', + field=models.TextField(blank=True, null=True, verbose_name='Autre adresse : adresse'), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_address_complement', + field=models.TextField(blank=True, null=True, verbose_name="Autre adresse : compl\xe9ment d'adresse"), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_address_is_prefered', + field=models.BooleanField(default=False, verbose_name="L'adresse alternative est pr\xe9f\xe9r\xe9e"), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_country', + field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Autre adresse : pays'), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_postal_code', + field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Autre adresse : code postal'), + ), + migrations.AlterField( + model_name='warehouse', + name='alt_town', + field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Autre adresse : ville'), + ), + migrations.AlterField( + model_name='warehouse', + name='auto_external_id', + field=models.BooleanField(default=False, verbose_name="L'identifiant est attribu\xe9 automatiquement"), + ), + migrations.AlterField( + model_name='warehouse', + name='comment', + field=models.TextField(blank=True, null=True, verbose_name='Commentaire'), + ), + migrations.AlterField( + model_name='warehouse', + name='country', + field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Pays'), + ), + migrations.AlterField( + model_name='warehouse', + name='email', + field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='Courriel'), + ), + migrations.AlterField( + model_name='warehouse', + name='external_id', + field=models.TextField(blank=True, null=True, verbose_name='Identifiant'), + ), + migrations.AlterField( + model_name='warehouse', + name='history_creator', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Cr\xe9ateur'), + ), + migrations.AlterField( + model_name='warehouse', + name='history_modifier', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Dernier \xe9diteur'), + ), + migrations.AlterField( + model_name='warehouse', + name='mobile_phone', + field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone portable'), + ), + migrations.AlterField( + model_name='warehouse', + name='name', + field=models.CharField(max_length=200, verbose_name='Nom'), + ), + migrations.AlterField( + model_name='warehouse', + name='person_in_charge', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='warehouse_in_charge', to='ishtar_common.Person', verbose_name='Dossier suivi par'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone', + field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone2', + field=models.CharField(blank=True, max_length=18, null=True, verbose_name='Type de t\xe9l\xe9phone 2'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone3', + field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone 3'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone_desc', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone_desc2', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 2'), + ), + migrations.AlterField( + model_name='warehouse', + name='phone_desc3', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 3'), + ), + migrations.AlterField( + model_name='warehouse', + name='postal_code', + field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Code postal'), + ), + migrations.AlterField( + model_name='warehouse', + name='raw_phone', + field=models.TextField(blank=True, null=True, verbose_name='T\xe9l\xe9phone brut'), + ), + migrations.AlterField( + model_name='warehouse', + name='search_vector', + field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'), + ), + migrations.AlterField( + model_name='warehouse', + name='town', + field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Commune'), + ), + migrations.AlterField( + model_name='warehouse', + name='warehouse_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='archaeological_warehouse.WarehouseType', verbose_name='Type de lieu de conservation'), + ), + migrations.AlterField( + model_name='warehousedivision', + name='available', + field=models.BooleanField(default=True, verbose_name='Disponible'), + ), + migrations.AlterField( + model_name='warehousedivision', + name='comment', + field=models.TextField(blank=True, null=True, verbose_name='Commentaire'), + ), + migrations.AlterField( + model_name='warehousedivision', + name='label', + field=models.TextField(verbose_name='D\xe9nomination'), + ), + migrations.AlterField( + model_name='warehousedivision', + name='txt_idx', + field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'), + ), + migrations.AlterField( + model_name='warehousedivisionlink', + name='order', + field=models.IntegerField(default=10, verbose_name='Ordre'), + ), + migrations.AlterField( + model_name='warehousetype', + name='available', + field=models.BooleanField(default=True, verbose_name='Disponible'), + ), + migrations.AlterField( + model_name='warehousetype', + name='comment', + field=models.TextField(blank=True, null=True, verbose_name='Commentaire'), + ), + migrations.AlterField( + model_name='warehousetype', + name='label', + field=models.TextField(verbose_name='D\xe9nomination'), + ), + migrations.AlterField( + model_name='warehousetype', + name='txt_idx', + field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'), + ), + ] diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 5565bc504..92eaf5d2f 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -21,6 +21,7 @@ import datetime from django.conf import settings from django.contrib.gis.db import models +from django.core.urlresolvers import reverse from django.db.models import Q from django.db.models.signals import post_save, post_delete from django.template.defaultfilters import slugify @@ -311,7 +312,7 @@ post_save.connect(post_save_cache, sender=ContainerType) post_delete.connect(post_save_cache, sender=ContainerType) -class Container(LightHistorizedItem, ImageModel): +class Container(LightHistorizedItem, ImageModel, OwnPerms): TABLE_COLS = ['reference', 'container_type__label', 'cached_location', 'cached_division', 'old_reference'] IMAGE_PREFIX = 'containers/' @@ -570,6 +571,20 @@ class Container(LightHistorizedItem, ImageModel): def set_localisation_9(self, context, value): return self.set_localisation(8, value) + def get_extra_actions(self, request): + """ + extra actions for the sheet template + """ + # url, base_text, icon, extra_text, extra css class, is a quick action + actions = [] + can_edit_find = self.can_do(request, 'change_find') + if can_edit_find: + actions += [ + (reverse('container-add-treatment', args=[self.pk]), + _(u"Add treatment"), "fa fa-exchange", "", "", False), + ] + return actions + def pre_save(self): if not self.index: q = Container.objects.filter(responsible=self.responsible).order_by( diff --git a/archaeological_warehouse/urls.py b/archaeological_warehouse/urls.py index fa895b7c4..47058a352 100644 --- a/archaeological_warehouse/urls.py +++ b/archaeological_warehouse/urls.py @@ -28,8 +28,9 @@ from archaeological_warehouse import models # forms urlpatterns = [ - url(r'warehouse_packaging/(?P<step>.+)?$', - views.warehouse_packaging_wizard, name='warehouse_packaging'), + url(r'warehouse_packaging/(?P<step>.+)?$', # AFAC + check_rights(['change_find', 'change_own_find'])( + views.warehouse_packaging_wizard), name='warehouse_packaging'), url(r'new-warehouse/(?P<parent_name>.+)?/$', views.new_warehouse, name='new-warehouse'), @@ -67,6 +68,11 @@ urlpatterns = [ url(r'warehouse-modify/(?P<pk>.+)/$', views.warehouse_modify, name='warehouse_modify'), + url(r'^container-add-treatment/(?P<pk>[0-9-]+)/$', + check_rights(['change_find', 'change_own_find'])( + views.container_treatment_add), + name='container-add-treatment'), + url(r'^container_search/(?P<step>.+)?$', check_rights(['view_container', 'view_own_container'])( views.container_search_wizard), diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index 9b83fd829..83fd7f4e1 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -21,13 +21,26 @@ import json from django.core.urlresolvers import reverse from django.db.models import Q -from django.http import HttpResponse +from django.http import HttpResponse, Http404 from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ -from forms import * +from archaeological_warehouse import models + +from archaeological_warehouse.forms import WarehouseForm, ContainerForm, \ + ContainerFormSelection, BasePackagingForm, WarehouseFormSelection, \ + SelectedDivisionFormset, WarehouseDeletionForm, \ + MainContainerFormSelection, ContainerModifyForm, LocalisationForm, \ + ContainerDeletionForm +from ishtar_common.forms import FinalForm + from ishtar_common.views_item import get_item, show_item, new_item -from wizards import * +from archaeological_finds.views import treatment_add + +from archaeological_warehouse.wizards import PackagingWizard, WarehouseSearch, \ + WarehouseWizard, WarehouseModificationWizard, WarehouseDeletionWizard, \ + ContainerSearch, ContainerWizard, ContainerModificationWizard, \ + ContainerDeletionWizard get_container = get_item(models.Container, 'get_container', 'container') show_container = show_item(models.Container, 'container') @@ -95,10 +108,9 @@ def autocomplete_container(request): for container in containers]) return HttpResponse(data, content_type='text/plain') -warehouse_packaging_wizard = PackagingWizard.as_view([ +warehouse_packaging_wizard = PackagingWizard.as_view([ # AFAC ('seleccontainer-packaging', ContainerFormSelection), ('base-packaging', BasePackagingForm), - # ('multiselecitems-packaging', FindPackagingFormSelection), ('final-packaging', FinalForm)], label=_(u"Packaging"), url_name='warehouse_packaging',) @@ -185,6 +197,15 @@ container_deletion_wizard = ContainerDeletionWizard.as_view([ label=_(u"Container deletion"), url_name='container_deletion',) + +def container_treatment_add(request, pk, current_right=None): + try: + container = models.Container.objects.get(pk=pk) + except models.Container.DoesNotExist: + raise Http404() + return treatment_add( + request, ",".join([str(f.pk) for f in container.finds.all()])) + """ warehouse_packaging_wizard = ItemSourceWizard.as_view([ ('selec-warehouse_packaging', ItemsSelection), diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 41c5c5945..03258f1e2 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -38,9 +38,18 @@ class ContainerSearch(SearchWizard): class PackagingWizard(TreatmentWizard): basket_step = 'base-packaging' + def get_form_initial(self, step, data=None): + initial = super(PackagingWizard, self).get_form_initial(step) + user = self.request.user + if step != 'base-packaging' or not getattr(user, 'ishtaruser', None) \ + or not user.ishtaruser.person: + return initial + initial['person'] = user.ishtaruser.person.pk + return initial + def save_model(self, dct, m2m, whole_associated_models, form_list, return_object): - dct = self.get_extra_model(dct, form_list) + dct = self.get_extra_model(dct, m2m, form_list) obj = self.get_current_saved_object() dct['location'] = dct['container'].location items = None @@ -51,6 +60,8 @@ class PackagingWizard(TreatmentWizard): items = dct.pop('basket') else: dct.pop('basket') + if 'treatment_type_list' in dct: + dct.pop('treatment_type_list') treatment = Treatment(**dct) extra_args_for_new = {"container": dct['container']} treatment.save(items=items, user=self.request.user, |
