def table_validate_waybills(request, queryset=ets.models.Waybill.objects.all(), filtering=None): """Ajax view that returns list of validated/not validated waybills for using in datatables""" if filtering in ["dispatch_validated", "validate_dispatch"]: url = "validate_dispatch" logger_action = ets.models.CompasLogger.DISPATCH queryset = queryset.filter(**get_dispatch_compas_filters(request.user)) elif filtering in ["receipt_validated", "validate_receipt"]: url = "validate_receipt" logger_action = ets.models.CompasLogger.RECEIPT queryset = queryset.filter(**get_receipt_compas_filters(request.user)) column_index_map = { 0: 'order__pk', 1: 'pk', 2: 'order__warehouse__name', 3: 'order__consignee__name', 4: 'order__location__name', 5: 'transport_dispach_signed_date', 6: 'receipt_signed_date', 7: 'pk', 8: 'pk', } params = { 'filtering': filtering } if filtering else None redirect_url = get_api_url(request, column_index_map, "api_waybills", params) if redirect_url: return HttpResponse(simplejson.dumps({'redirect_url': redirect_url}), content_type="application/json; charset=utf-8") return get_datatables_records(request, queryset, column_index_map, lambda item: [ fill_link(item.order.get_absolute_url(), item.order.pk), fill_link(item.get_absolute_url(), item.pk), item.order.warehouse.name, item.order.consignee.name, item.order.location.name, item.transport_dispach_signed_date and date_filter(item.transport_dispach_signed_date).upper() or _("Pending"), item.receipt_signed_date and date_filter(item.receipt_signed_date).upper() or _("Pending"), fill_link(reverse(url, kwargs={'waybill_pk': item.pk}), _("Validate"), "validate-link"), fill_link(reverse("waybill_errors", kwargs={'waybill_pk': item.pk, "logger_action": logger_action}), _("Show errors"), "error-link") if item.compass_loggers.filter(action=logger_action).exists() else "", ])
""" if not user.is_superuser: #possible further optimization with persons queryset = queryset.filter(Q(order__warehouse__persons__pk=user.pk) | Q(order__warehouse__compas__officers__pk = user.pk) | Q(destination__persons__pk=user.pk) | Q(destination__compas__officers__pk = user.pk)).distinct() return queryset waybill_user_related = user_filtered(felter=waybill_user_related_filter) def waybill_officer_related_filter(queryset, user): """ Returns a queryset with filter by user in widest range: it could be a dispatcher, a recepient, officer of both compases. Status of waybill does not matter. """ if not user.is_superuser: queryset = queryset.filter(Q(order__warehouse__compas__officers__pk = user.pk) | Q(destination__compas__officers__pk = user.pk)).distinct() return queryset waybill_officer_related = user_filtered(felter=waybill_officer_related_filter) #Validation dispatch_compas = user_filtered(felter=lambda queryset, user: queryset.filter(**get_dispatch_compas_filters(user))) receipt_compas = user_filtered(felter=lambda queryset, user: queryset.filter(**get_receipt_compas_filters(user)))
def read(self, request, slug="", warehouse="", destination="", filtering=None, **kwargs): """Return waybills in CSV""" waybills = self.model.objects.all() if filtering: officer_required = ets.models.Compas.objects.filter(officers=request.user).exists() filter_choice = { 'dispatches': lambda user: self.model.dispatches(user), 'receptions': lambda user: self.model.receptions(user), 'user_related': lambda user: waybill_user_related_filter(waybills, user), 'compas_receipt': lambda user: waybill_officer_related_filter(waybills.filter(receipt_sent_compas__isnull=False), user), 'compas_dispatch': lambda user: waybill_officer_related_filter(waybills.filter(sent_compas__isnull=False), user), 'validate_receipt': lambda user: officer_required and waybills.filter(**get_receipt_compas_filters(user)).filter(receipt_validated=False), 'validate_dispatch': lambda user: officer_required and waybills.filter(**get_dispatch_compas_filters(user)).filter(validated=False), 'dispatch_validated': lambda user: officer_required and waybills.filter(**get_dispatch_compas_filters(user)).filter(validated=True), 'receipt_validated': lambda user: officer_required and waybills.filter(**get_receipt_compas_filters(user)).filter(receipt_validated=True), } waybills = filter_choice[filtering](request.user) elif not request.user.has_perm("ets.waybill_api_full_access"): waybills = waybills.filter(order__warehouse__persons__pk=request.user.pk) if request.GET.has_key('sSearch'): waybills = get_datatables_filtering(request, waybills) return waybills
def read(self, request, slug="", warehouse="", destination="", filtering=None, format=""): """Return waybills in CSV""" waybills = self.model.objects.all() if filtering: officer_required = ets.models.Compas.objects.filter(officers=request.user).exists() # 1 variant filter_choice = { 'dispatches': lambda user: self.model.dispatches(user), 'receptions': lambda user: self.model.receptions(user), 'user_related': lambda user: waybill_user_related_filter(waybills, user), 'compas_receipt': lambda user: waybill_officer_related_filter(waybills.filter(receipt_sent_compas__isnull=False), user), 'compas_dispatch': lambda user: waybill_officer_related_filter(waybills.filter(sent_compas__isnull=False), user), 'validate_receipt': lambda user: officer_required and waybills.filter(**get_receipt_compas_filters(user)).filter(receipt_validated=False), 'validate_dispatch': lambda user: officer_required and waybills.filter(**get_dispatch_compas_filters(user)).filter(validated=False), 'dispatch_validated': lambda user: officer_required and waybills.filter(**get_dispatch_compas_filters(user)).filter(validated=True), 'receipt_validated': lambda user: officer_required and waybills.filter(**get_receipt_compas_filters(user)).filter(receipt_validated=True), } waybills = filter_choice[filtering](request.user) # 2 variant # if filtering == 'dispatches': # waybills = self.model.dispatches(request.user) # elif filtering == 'receptions': # waybills = self.model.receptions(request.user) # elif filtering == 'user_related': # waybills = waybill_user_related_filter(waybills, request.user) # elif filtering == 'compas_receipt': # waybills = waybill_officer_related_filter(waybills.filter(receipt_sent_compas__isnull=False), request.user) # elif filtering == 'compas_dispatch': # waybills = waybill_officer_related_filter(waybills.filter(sent_compas__isnull=False), request.user) # elif filtering == 'validate_receipt' and officer_required: # waybills = waybills.filter(**get_receipt_compas_filters(request.user)).filter(receipt_validated=False) # elif filtering == 'validate_dispatch' and officer_required: # waybills = waybills.filter(**get_dispatch_compas_filters(request.user)).filter(validated=False) # elif filtering == 'dispatch_validated' and officer_required: # waybills = waybills.filter(**get_dispatch_compas_filters(request.user)).filter(validated=True) # elif filtering == 'receipt_validated' and officer_required: # waybills = waybills.filter(**get_receipt_compas_filters(request.user)).filter(receipt_validated=True) elif not request.user.has_perm("ets.waybill_api_full_access"): waybills = waybills.filter(order__warehouse__persons__pk=request.user.pk) if request.GET.has_key('sSearch'): waybills = get_datatables_filtering(request, waybills) filter_arg = {} if warehouse: filter_arg['order__warehouse__pk'] = warehouse if destination: filter_arg['destination__pk'] = destination if slug: filter_arg['slug'] = slug if filter_arg: waybills = waybills.filter(**filter_arg) return waybills