예제 #1
0
파일: views.py 프로젝트: Arpaso/ETS
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 "",
    ])
예제 #2
0
파일: decorators.py 프로젝트: Arpaso/ETS
    """
    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)))

예제 #3
0
파일: handlers.py 프로젝트: Arpaso/ETS
    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
예제 #4
0
파일: handlers.py 프로젝트: rdidaci/ETS
    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