summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
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
commit1e05946531d237dc954f46ddfc25a6b61c084a74 (patch)
tree8b9137dd9b68121db86e4e22dfdb7b7016a6f1ad /archaeological_warehouse
parent4779acd3006e6d6b17babd13585a4d83fb8d2332 (diff)
parent9eced41d76545bd2921605b7b81bd14b875ce541 (diff)
downloadIshtar-1e05946531d237dc954f46ddfc25a6b61c084a74.tar.bz2
Ishtar-1e05946531d237dc954f46ddfc25a6b61c084a74.zip
Merge branch 'develop'
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/forms.py5
-rw-r--r--archaeological_warehouse/ishtar_menu.py8
-rw-r--r--archaeological_warehouse/locale/django.pot170
-rw-r--r--archaeological_warehouse/migrations/0026_auto_20181203_1442.py374
-rw-r--r--archaeological_warehouse/models.py17
-rw-r--r--archaeological_warehouse/urls.py10
-rw-r--r--archaeological_warehouse/views.py31
-rw-r--r--archaeological_warehouse/wizards.py13
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,