diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-06-03 00:42:55 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-06-03 00:42:55 +0200 | 
| commit | 8fb73687373a3a876f2ce790047c9972e616dc34 (patch) | |
| tree | e6547966d9f7c649e1403a546eeabcc9563d46a6 | |
| parent | 810505f6071739d265d967f618dc001f9d8049e4 (diff) | |
| download | Ishtar-8fb73687373a3a876f2ce790047c9972e616dc34.tar.bz2 Ishtar-8fb73687373a3a876f2ce790047c9972e616dc34.zip | |
Warehouse: work on packaging
| -rw-r--r-- | archaeological_finds/forms.py | 6 | ||||
| -rw-r--r-- | archaeological_finds/models.py | 22 | ||||
| -rw-r--r-- | archaeological_warehouse/forms.py | 12 | ||||
| -rw-r--r-- | archaeological_warehouse/views.py | 2 | ||||
| -rw-r--r-- | archaeological_warehouse/wizards.py | 17 | ||||
| -rw-r--r-- | ishtar_common/models.py | 2 | ||||
| -rw-r--r-- | ishtar_common/views.py | 3 | 
7 files changed, 42 insertions, 22 deletions
| diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 99907781b..f5387febe 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -432,8 +432,12 @@ class SelectFindBasketForm(forms.Form):      basket = forms.ChoiceField(label=_(u"Basket"), required=True, choices=[])      def __init__(self, *args, **kwargs): -        self.user = kwargs.pop('user') +        self.user = None +        if 'user' in kwargs: +            self.user = kwargs.pop('user')          super(SelectFindBasketForm, self).__init__(*args, **kwargs) +        if not self.user: +            return          self.fields['basket'].choices = [('', '--')] + [              (b.pk, unicode(b))              for b in models.FindBasket.objects.filter(user=self.user)] diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index 417dd3929..c8b392310 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -32,6 +32,7 @@ from ishtar_common.models import GeneralType, ImageModel, BaseHistorizedItem, \  from archaeological_operations.models import AdministrativeAct  from archaeological_context_records.models import ContextRecord, Dating +from ishtar_common.models import PRIVATE_FIELDS  from archaeological_warehouse.models import Warehouse, Container @@ -478,19 +479,24 @@ class Find(BaseHistorizedItem, ImageModel, OwnPerms, ShortMenuItem):          return q.filter(downstream_treatment__isnull=True).count()      def duplicate(self, user): -        # TODO -        raise +        model = self.__class__ +        # base fields +        table_cols = [field.name for field in model._meta.fields +                      if field.name not in PRIVATE_FIELDS or +                      field.name == 'order']          dct = dict([(attr, getattr(self, attr)) for attr in -                    ('order', 'label', 'description', -                     'volume', 'weight', 'find_number', 'dating', -                     'conservatory_state', 'preservation_to_consider', -                     'weight_unit', )]) +                    table_cols])          dct['order'] += 1          dct['history_modifier'] = user          new = self.__class__(**dct)          new.save() -        for base_find in self.base_finds.all(): -            new.base_finds.add(base_find) + +        # m2m fields +        m2m = [field.name for field in model._meta.many_to_many +               if field.name not in PRIVATE_FIELDS] +        for field in m2m: +            for val in getattr(self, field).all(): +                getattr(new, field).add(val)          return new      @classmethod diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py index fb36d6c18..080467e55 100644 --- a/archaeological_warehouse/forms.py +++ b/archaeological_warehouse/forms.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2010-2013  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2016  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU Affero General Public License as @@ -22,12 +22,13 @@ from django.conf import settings  from django.utils.translation import ugettext_lazy as _  from ishtar_common.models import Person, valid_id -from archaeological_finds.models import TreatmentType +from archaeological_finds.models import TreatmentType, FindBasket  import models  from ishtar_common import widgets  from ishtar_common.forms import name_validator, reverse_lazy, \      get_form_selection, TableSelect -from archaeological_finds.forms import FindMultipleFormSelection +from archaeological_finds.forms import FindMultipleFormSelection, \ +    SelectFindBasketForm  def get_warehouse_field(label=_(u"Warehouse"), required=True): @@ -137,11 +138,12 @@ ContainerFormSelection = get_form_selection(      new_message=_(u"Add a new container")) -class BasePackagingForm(forms.Form): +class BasePackagingForm(SelectFindBasketForm):      form_label = _(u"Packaging")      associated_models = {'treatment_type': TreatmentType,                           'person': Person, -                         'location': models.Warehouse} +                         'location': models.Warehouse, +                         'basket': FindBasket}      treatment_type = forms.IntegerField(label="", widget=forms.HiddenInput)      person = forms.IntegerField(          label=_(u"Packager"), diff --git a/archaeological_warehouse/views.py b/archaeological_warehouse/views.py index aab18ed40..be5e6150c 100644 --- a/archaeological_warehouse/views.py +++ b/archaeological_warehouse/views.py @@ -89,7 +89,7 @@ def autocomplete_container(request):  warehouse_packaging_wizard = PackagingWizard.as_view([      ('seleccontainer-packaging', ContainerFormSelection),      ('base-packaging', BasePackagingForm), -    ('multiselecitems-packaging', FindPackagingFormSelection), +    # ('multiselecitems-packaging', FindPackagingFormSelection),      ('final-packaging', FinalForm)],      label=_(u"Packaging"),      url_name='warehouse_packaging',) diff --git a/archaeological_warehouse/wizards.py b/archaeological_warehouse/wizards.py index 833c1c697..5f2b4346d 100644 --- a/archaeological_warehouse/wizards.py +++ b/archaeological_warehouse/wizards.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2012  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2012-2016  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU Affero General Public License as @@ -25,17 +25,24 @@ from archaeological_finds.models import Treatment  class PackagingWizard(TreatmentWizard): + +    def get_form_kwargs(self, step): +        kwargs = super(PackagingWizard, self).get_form_kwargs(step) +        if 'base-packaging' not in step: +            return kwargs +        kwargs['user'] = self.request.user +        return kwargs + +      def save_model(self, dct, m2m, whole_associated_models, form_list,                     return_object):          dct = self.get_extra_model(dct, form_list)          obj = self.get_current_saved_object()          dct['location'] = dct['container'].location -        items = dct.pop('finds') +        basket = dct.pop('basket')          treatment = Treatment(**dct)          treatment.save() -        if not hasattr(items, '__iter__'): -            items = [items] -        for item in items: +        for item in basket.items.all():              new = item.duplicate(self.request.user)              item.downstream_treatment = treatment              item.save() diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f3974d04d..dcf141dde 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -581,6 +581,8 @@ class HistoryError(Exception):      def __str__(self):          return repr(self.value) +PRIVATE_FIELDS = ('id', 'history_modifier', 'order') +  class BaseHistorizedItem(Imported):      IS_BASKET = False diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 59cfe6321..2df1f4b44 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -61,7 +61,7 @@ from archaeological_files.forms import DashboardForm as DashboardFormFile  from ishtar_common.forms import FinalForm, FinalDeleteForm  from ishtar_common import forms_common as forms  from ishtar_common import wizards -from ishtar_common.models import HistoryError +from ishtar_common.models import HistoryError, PRIVATE_FIELDS  import models @@ -325,7 +325,6 @@ def format_val(val):  HIERARCHIC_LEVELS = 5  HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types',                       'material_type', 'conservatory_state'] -PRIVATE_FIELDS = ('id', 'history_modifier', 'order')  def get_item(model, func_name, default_name, extra_request_keys=[], | 
