diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-16 14:07:30 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-16 14:07:30 +0200 | 
| commit | 7791bc97e9e8fb903b36c91d1fef250b4034e417 (patch) | |
| tree | 1fb2664fcb5057f544d345974cb3e32d243c17d1 | |
| parent | f3eff0ab0b0842fb5a020128879ccd3912def9b6 (diff) | |
| download | Ishtar-7791bc97e9e8fb903b36c91d1fef250b4034e417.tar.bz2 Ishtar-7791bc97e9e8fb903b36c91d1fef250b4034e417.zip | |
Allow to attach shared basket to treatment files
| -rw-r--r-- | archaeological_finds/forms.py | 25 | ||||
| -rw-r--r-- | archaeological_finds/urls.py | 4 | ||||
| -rw-r--r-- | archaeological_finds/views.py | 26 | ||||
| -rw-r--r-- | ishtar_common/models.py | 3 | 
4 files changed, 54 insertions, 4 deletions
| diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 150acfa05..284b9a76c 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -83,7 +83,7 @@ __all__ = [      'check_value', 'check_type_field', 'check_type_not_field',      'check_treatment', 'ResultFindForm', 'ResultFindFormSet',      'FindDeletionForm', 'UpstreamFindFormSelection', 'NewFindBasketForm', -    'SelectFindBasketForm', 'FindBasketAddItemForm', +    'SelectFindBasketForm', 'SelectFindBasketWriteForm', 'FindBasketAddItemForm',      'QAFindFormSingle', 'QAFindFormMulti', 'QAFindBasketForm',      'QAFindTreatmentForm', 'QAFindbasketDuplicateForm',      'N1TreatmentForm', 'OneNTreatmentForm', 'ResultingFindForm', @@ -1646,7 +1646,28 @@ class SelectFindBasketForm(IshtarForm):              self.user = kwargs.pop('user')              if hasattr(self.user, 'ishtaruser'):                  self.user = self.user.ishtaruser -        super(SelectFindBasketForm, self).__init__(*args, **kwargs) +        super(SelectFindBasketWriteForm, self).__init__(*args, **kwargs) + + +class SelectFindBasketWriteForm(IshtarForm): +    form_label = _(u"Basket") +    associated_models = {'basket': models.FindBasket} +    need_user_for_initialization = True + +    basket = forms.IntegerField( +        label=_(u"Basket"), +        widget=widgets.JQueryAutoComplete( +            reverse_lazy('autocomplete-findbasket-write'), +            associated_model=models.FindBasket), +        validators=[valid_id(models.FindBasket)]) + +    def __init__(self, *args, **kwargs): +        self.user = None +        if 'user' in kwargs: +            self.user = kwargs.pop('user') +            if hasattr(self.user, 'ishtaruser'): +                self.user = self.user.ishtaruser +        super(SelectFindBasketWriteForm, self).__init__(*args, **kwargs)  class FindBasketAddItemForm(forms.Form): diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index b1d268a19..588777552 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -319,6 +319,10 @@ urlpatterns = [          check_rights(['change_find', 'change_own_find'])(              views.autocomplete_findbasket),          name='autocomplete-findbasket'), +    url(r'autocomplete-findbasket-write/$', +        check_rights(['change_find', 'change_own_find'])( +            views.autocomplete_findbasket_write), +        name='autocomplete-findbasket-write'),      url(r'api/public/find/$', views.PublicFindAPI.as_view(),          name='api-public-find'), diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index f440adea6..1a64f1c64 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -171,6 +171,30 @@ def autocomplete_findbasket(request, current_right=None):      limit = 20      result = OrderedDict()      for query in get_autocomplete_queries(request, ['label']): +        query = query & models.FindBasket.get_query_owns( +            request.user.ishtaruser) +        objects = models.FindBasket.objects.filter(query).distinct().order_by( +            'label')[:limit] +        for obj in objects: +            if obj.id not in list(result.keys()): +                result[obj.id] = obj.label +                limit -= 1 +                if not limit: +                    break +        if not limit: +            break +    data = json.dumps([{'id': obj[0], 'value': obj[1]} +                       for obj in list(result.items())]) +    return HttpResponse(data, content_type='text/plain') + + +def autocomplete_findbasket_write(request, current_right=None): +    if not request.GET.get('term'): +        return HttpResponse(content_type='text/plain') + +    limit = 20 +    result = OrderedDict() +    for query in get_autocomplete_queries(request, ['label']):          query = query & models.FindBasket.get_write_query_owns(              request.user.ishtaruser)          objects = models.FindBasket.objects.filter(query).distinct().order_by( @@ -414,7 +438,7 @@ class OwnBasket(object):  class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView):      template_name = 'ishtar/form.html' -    form_class = forms.SelectFindBasketForm +    form_class = forms.SelectFindBasketWriteForm      page_name = _(u"Manage items in basket")      def get_form_kwargs(self): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 0cefde4b5..adf83bf8e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -4774,7 +4774,8 @@ class Basket(FullSearch, OwnPerms, ValueGetter, TemplateItem):      @classmethod      def get_write_query_owns(cls, ishtaruser): -        return Q(user=ishtaruser) +        return Q(user=ishtaruser) | Q( +            shared_write_with=ishtaruser)      def get_values(self, prefix='', no_values=False):          values = super(Basket, self).get_values(prefix=prefix, | 
