diff options
-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, |