コード例 #1
0
def view_product(request, pk=None, code=None, group=None):

    product = Product()
    inventory = Inventory.objects.none()

    try:
        product = get_object_or_404(Product, pk=pk)
        inventory = Inventory.objects.filter(product=product)
    except Product.DoesNotExist:
        product = cache.get(code)

    data = prep_list_view(request, group)

    data['product'] = product
    data['inventory'] = inventory
    data['title'] = '%s - %s' % (product.code, product.title)

    # Collect data for Sales/Purchases/Invoices tabs
    results_per_page = 50
    page = request.GET.get('page')

    sales = product.serviceorderitem_set.all().select_related('order')
    sales = sales.order_by('-id')
    data['sales'] = paginate(sales, page, results_per_page)

    purchases = product.purchaseorderitem_set.all().select_related('purchase_order')
    purchases = purchases.order_by('-id')
    data['purchases'] = paginate(purchases, page, results_per_page)

    invoices = product.invoiceitem_set.all().select_related('invoice')
    invoices = invoices.order_by('-id')
    data['invoices'] = paginate(invoices, page, results_per_page)

    return render(request, "products/view.html", data)
コード例 #2
0
def orders(request):
    """
    Searches local service orders
    """
    query = request.GET.get("q")

    if not query or len(query) < 3:
        messages.error(request, _('Search query is too short'))
        return redirect(reverse('orders-index'))

    request.session['search_query'] = query

    # Redirect Order ID:s to the order
    try:
        order = Order.objects.get(code__iexact=query)
        return redirect(order)
    except Order.DoesNotExist:
        pass

    orders = Order.objects.filter(
        Q(code=query) | Q(devices__sn__contains=query)
        | Q(customer__fullname__icontains=query)
        | Q(customer__phone__contains=query) | Q(repair__confirmation=query)
        | Q(repair__reference=query))

    data = {
        'title': _('Orders'),
        'subtitle': _(u'%d results for "%s"') % (orders.count(), query)
    }

    page = request.GET.get('page')
    data['orders'] = paginate(orders.distinct(), page, 100)

    return render(request, "orders/index.html", data)
コード例 #3
0
ファイル: device.py プロジェクト: luetgendorf/Servo
def find(request):
    """
    Searching for device from devices/find
    """
    title = _("Device search")
    form = DeviceSearchForm()
    results = Device.objects.none()

    if request.method == 'POST':
        form = DeviceSearchForm(request.POST)
        if form.is_valid():
            fdata = form.cleaned_data
            results = Device.objects.all()

            if fdata.get("product_line"):
                results = results.filter(
                    product_line__in=fdata['product_line'])
            if fdata.get("warranty_status"):
                results = results.filter(
                    warranty_status__in=fdata['warranty_status'])
            if fdata.get("description"):
                results = results.filter(
                    description__icontains=fdata['description'])
            if fdata.get("sn"):
                results = results.filter(sn__icontains=fdata['sn'])
            if fdata.get("date_start"):
                results = results.filter(
                    created_at__range=[fdata['date_start'], fdata['date_end']])

    page = request.GET.get("page")
    devices = paginate(results, page, 100)

    return render(request, "devices/find.html", locals())
コード例 #4
0
ファイル: device.py プロジェクト: fpsw/Servo
def prep_list_view(request, product_line=None, model=None):
    """
    Prepares the basic device list view
    """
    title = _('Devices')
    search_hint = "devices"
    all_devices = Device.objects.all()
    product_lines = gsxws.products.models()

    if product_line is None:
        product_line = product_lines.keys()[0]

    models = model_from_slug(product_line)

    if model is None:
        model = models.keys()[0]
        title = product_lines[product_line]['name']
    else:
        title = models.get(model)

    if product_line == "OTHER":
        all_devices = all_devices.filter(product_line=product_line)
    else:
        all_devices = all_devices.filter(slug=model)

    page = request.GET.get('page')
    devices = paginate(all_devices, page, 50)
    return locals()
コード例 #5
0
ファイル: device.py プロジェクト: fpsw/Servo
def find(request):
    """
    Searching for device from devices/find
    """
    title = _("Device search")
    form = DeviceSearchForm()
    results = Device.objects.none()

    if request.method == 'POST':
        form = DeviceSearchForm(request.POST)
        if form.is_valid():
            fdata = form.cleaned_data
            results = Device.objects.all()

            if fdata.get("product_line"):
                results = results.filter(product_line__in=fdata['product_line'])
            if fdata.get("warranty_status"):
                results = results.filter(warranty_status__in=fdata['warranty_status'])
            if fdata.get("description"):
                results = results.filter(description__icontains=fdata['description'])
            if fdata.get("sn"):
                results = results.filter(sn__icontains=fdata['sn'])
            if fdata.get("date_start"):
                results = results.filter(created_at__range=[fdata['date_start'],
                                         fdata['date_end']])

    page = request.GET.get("page")
    devices = paginate(results, page, 100)

    return render(request, "devices/find.html", locals())
コード例 #6
0
ファイル: customer.py プロジェクト: LetsUnlockiPhone/Servo
def prepare_view(request, group='all'):

    title = _("Customers")

    customer_list = []
    search_hint = "customers"
    all_customers = Customer.objects.all().order_by('name')
    customer_count = all_customers.count()

    if request.session.get("return_to"):
        del(request.session['return_to'])

    if request.method == 'POST':
        q = request.POST.get('query')
        if q is not None:
            try:
                (key, value) = q.split('=')
                # allow searching customers by arbitrary key/values
                customer_list = Customer.objects.filter(**{key: value.strip()})
            except Exception:
                customer_list = Customer.objects.filter(name__icontains=q)
    else:
        if group == 'all':
            customer_list = all_customers
        else:
            g = CustomerGroup.objects.get(slug=group)
            customer_list = all_customers.filter(groups=g)
            title = g.name

    groups = CustomerGroup.objects.all()

    page = request.GET.get('page')
    customers = paginate(customer_list, page, 40)

    return locals()
コード例 #7
0
def find(request):
    """
    Notes advanced search
    """
    form = NoteSearchForm(request.GET)
    results = Note.objects.none()

    if request.GET and form.is_valid():

        fdata = form.cleaned_data
        results = Note.objects.all()

        if fdata.get('body'):
            results = results.filter(body__icontains=fdata['body'])
        if fdata.get('recipient'):
            results = results.filter(recipient__icontains=fdata['recipient'])
        if fdata.get('sender'):
            results = results.filter(sender__icontains=fdata['sender'])
        if fdata.get('order_code'):
            results = results.filter(
                order__code__icontains=fdata['order_code'])

        results = results.order_by('-created_at')

    title = _('Message search')
    notes = paginate(results, request.GET.get('page'), 10)

    return render(request, "notes/find.html", locals())
コード例 #8
0
ファイル: customer.py プロジェクト: LetsUnlockiPhone/Servo
def find(request):
    """
    Search from customer advanced search
    """
    results = list()
    request.session['customer_list'] = list()

    if request.method == 'POST':
        form = CustomerSearchForm(request.POST)

        if form.is_valid():
            d = form.cleaned_data
            checkin_start = d.pop('checked_in_start')
            checkin_end = d.pop('checked_in_end')

            if checkin_start and checkin_end:
                d['orders__created_at__range'] = [checkin_start.isoformat(), 
                                                  checkin_end.isoformat()]

            results = Customer.objects.filter(**d).distinct()
            request.session['customer_query'] = d
    else:
        form = CustomerSearchForm()

    title = _('Search for customers')

    page = request.GET.get('page')
    customers = paginate(results, page, 50)

    return render(request, "customers/find.html", locals())
コード例 #9
0
ファイル: shipments.py プロジェクト: luetgendorf/Servo
def prep_list_view(request):
    """
    Prepares the list view for incoming parts and products
    """
    from datetime import timedelta
    now = timezone.now()

    data = {'can_receive': True}
    data['counts'] = prep_counts()
    location = request.user.get_location()

    ordered_date_range  = [now - timedelta(days=30), timezone.now()]
    received_date_range = [now - timedelta(days=30), timezone.now()]

    initial = {
        'location': location,
        'ordered_start_date': ordered_date_range[0],
        'ordered_end_date': ordered_date_range[1],
    }

    if request.method == 'POST':
        data['form'] = IncomingSearchForm(request.POST, initial=initial)
    else:
        data['form'] = IncomingSearchForm(initial=initial)

    inventory = PurchaseOrderItem.objects.filter(received_at=None).select_related('purchase_order', 'sales_order')
    inventory = inventory.exclude(purchase_order__submitted_at=None)

    if request.method == 'POST':
        fdata = request.POST

        loc = fdata.get('location')
        if loc:
            inventory = PurchaseOrderItem.objects.filter(purchase_order__location=loc)

        ordered_sd = fdata.get('ordered_start_date')
        if ordered_sd:
            ordered_date_range[0] = ordered_sd
            inventory = inventory.filter(purchase_order__submitted_at__range=ordered_date_range)

        received_sd = fdata.get('received_start_date')
        if received_sd:
            received_date_range[0] = received_sd
            inventory = inventory.filter(received_at__range=received_date_range)

        conf = fdata.get('confirmation')
        if conf:
            inventory = PurchaseOrderItem.objects.filter(purchase_order__confirmation=conf)

        service_order = fdata.get('service_order')
        if service_order:
            inventory = PurchaseOrderItem.objects.filter(purchase_order__sales_order__code=service_order)

    page = request.GET.get("page")
    inventory = inventory.order_by('-id')
    data['count'] = inventory.count()
    data['inventory'] = paginate(inventory, page, 200)
    data['title'] = _(u"%d incoming products") % data['count']

    return data
コード例 #10
0
def prep_list_view(request, kind):
    """Prepare the view for listing notes/messages."""
    data = {'title': _("Messages")}
    all_notes = Note.objects.all().order_by("-created_at")

    if kind == "articles":
        all_notes = Article.objects.all().order_by('-date_created')
    if kind == "inbox":
        all_notes = all_notes.filter(order=None).order_by(
            "is_read", "-created_at")
    if kind == "sent":
        all_notes = all_notes.filter(created_by=request.user)
    if kind == "flagged":
        all_notes = all_notes.filter(is_flagged=True)
    if kind == "escalations":
        all_notes = Note.objects.all().exclude(escalation=None)

    page = request.GET.get("page")
    notes = paginate(all_notes, page, 20)

    data['kind'] = kind
    data['notes'] = notes
    data['search_hint'] = "notes"
    data['inbox_count'] = Note.objects.filter(order=None).count()

    return data
コード例 #11
0
def find(request):
    """
    Search from customer advanced search
    """
    results = list()
    request.session['customer_list'] = list()

    if request.method == 'POST':
        form = CustomerSearchForm(request.POST)

        if form.is_valid():
            d = form.cleaned_data
            checkin_start = d.pop('checked_in_start')
            checkin_end = d.pop('checked_in_end')

            if checkin_start and checkin_end:
                d['orders__created_at__range'] = [
                    checkin_start.isoformat(),
                    checkin_end.isoformat()
                ]

            results = Customer.objects.filter(**d).distinct()
            request.session['customer_query'] = d
    else:
        form = CustomerSearchForm()

    title = _('Search for customers')

    page = request.GET.get('page')
    customers = paginate(results, page, 50)

    return render(request, "customers/find.html", locals())
コード例 #12
0
def prepare_view(request, group='all'):

    title = _("Customers")

    customer_list = []
    search_hint = "customers"
    all_customers = Customer.objects.all().order_by('name')
    customer_count = all_customers.count()

    if request.session.get("return_to"):
        del (request.session['return_to'])

    if request.method == 'POST':
        q = request.POST.get('query')
        if q is not None:
            try:
                (key, value) = q.split('=')
                # allow searching customers by arbitrary key/values
                customer_list = Customer.objects.filter(**{key: value.strip()})
            except Exception:
                customer_list = Customer.objects.filter(name__icontains=q)
    else:
        if group == 'all':
            customer_list = all_customers
        else:
            g = CustomerGroup.objects.get(slug=group)
            customer_list = all_customers.filter(groups=g)
            title = g.name

    groups = CustomerGroup.objects.all()

    page = request.GET.get('page')
    customers = paginate(customer_list, page, 40)

    return locals()
コード例 #13
0
ファイル: note.py プロジェクト: LetsUnlockiPhone/Servo
def prep_list_view(request, kind):
    """
    Prepares the view for listing notes/messages
    """
    data = {'title': _("Messages")}
    all_notes = Note.objects.all().order_by("-created_at")

    if kind == "articles":
        all_notes = Article.objects.all().order_by('-date_created')
    if kind == "inbox":
        all_notes = all_notes.filter(order=None).order_by("is_read", "-created_at")
    if kind == "sent":
        all_notes = all_notes.filter(created_by=request.user)
    if kind == "flagged":
        all_notes = all_notes.filter(is_flagged=True)
    if kind == "escalations":
        all_notes = Note.objects.all().exclude(escalation=None)

    page = request.GET.get("page")
    notes = paginate(all_notes, page, 20)

    data['kind'] = kind
    data['notes'] = notes
    data['search_hint'] = "notes"
    data['inbox_count'] = Note.objects.filter(order=None).count()

    return data
コード例 #14
0
ファイル: note.py プロジェクト: LetsUnlockiPhone/Servo
def find(request):
    """
    Notes advanced search
    """
    form = NoteSearchForm(request.GET)
    results = Note.objects.none()

    if request.GET and form.is_valid():

        fdata = form.cleaned_data
        results = Note.objects.all()

        if fdata.get('body'):
            results = results.filter(body__icontains=fdata['body'])
        if fdata.get('recipient'):
            results = results.filter(recipient__icontains=fdata['recipient'])
        if fdata.get('sender'):
            results = results.filter(sender__icontains=fdata['sender'])
        if fdata.get('order_code'):
            results = results.filter(order__code__icontains=fdata['order_code'])

        results = results.order_by('-created_at')

    title = _('Message search')
    notes = paginate(results, request.GET.get('page'), 10)

    return render(request, "notes/find.html", locals())
コード例 #15
0
ファイル: device.py プロジェクト: luetgendorf/Servo
def prep_list_view(request, product_line=None, model=None):
    """
    Prepares the basic device list view
    """
    title = _('Devices')
    search_hint = "devices"
    all_devices = Device.objects.all()
    product_lines = gsxws.products.models()

    if product_line is None:
        product_line = product_lines.keys()[0]

    models = model_from_slug(product_line)

    if model is None:
        model = models.keys()[0]
        title = product_lines[product_line]['name']
    else:
        title = models.get(model)

    if product_line == "OTHER":
        all_devices = all_devices.filter(product_line=product_line)
    else:
        all_devices = all_devices.filter(slug=model)

    page = request.GET.get('page')
    devices = paginate(all_devices, page, 50)
    return locals()
コード例 #16
0
ファイル: account.py プロジェクト: fpsw/Servo
def updates(request):
    title = _("Updates")
    kind = request.GET.get("kind", "note_added")
    events = request.user.notifications.filter(action=kind)
    page = request.GET.get("page")
    events = paginate(events, page, 100)

    return render(request, "accounts/updates.html", locals())
コード例 #17
0
ファイル: account.py プロジェクト: earlbalai/Servo
def updates(request):
    title = _('Updates')
    kind = request.GET.get('kind', 'note_added')
    events = request.user.notifications.filter(action=kind)
    page = request.GET.get("page")
    events = paginate(events, page, 100)

    return render(request, "accounts/updates.html", locals())
コード例 #18
0
ファイル: shipments.py プロジェクト: luetgendorf/Servo
def list_bulk_returns(request):
    from django.db.models import Count
    title = _("Browse Bulk Returns")
    returns = Shipment.objects.exclude(dispatched_at=None).annotate(num_parts=Count('servicepart'))

    page = request.GET.get("page")
    returns = paginate(returns, page, 50)
    counts = prep_counts()

    return render(request, "shipments/list_bulk_returns.html", locals())
コード例 #19
0
ファイル: invoices.py プロジェクト: LetsUnlockiPhone/Servo
def invoices(request):
    """
    Lists invoices, optionally with a search filter
    """
    from datetime import timedelta
    from django.db.models import Sum

    data = {'title': _("Invoices")}
    now = timezone.now()

    start_date, end_date = now - timedelta(days=30), now
    initial = {'start_date': start_date, 'end_date': end_date}

    invoices = Invoice.objects.filter(created_at__range=(start_date, end_date))
    form = InvoiceSearchForm(initial=initial)

    if request.method == 'POST':
        invoices = Invoice.objects.all()
        form = InvoiceSearchForm(request.POST, initial=initial)

        if form.is_valid():
            fdata = form.cleaned_data
            if fdata.get('state') == 'OPEN':
                invoices = invoices.filter(paid_at=None)
            if fdata.get('state') == 'PAID':
                invoices = invoices.exclude(paid_at=None)

            payment_method = fdata.get('payment_method')
            if len(payment_method):
                invoices = invoices.filter(payment__method=payment_method)

            start_date = fdata.get('start_date', start_date)
            end_date = fdata.get('end_date', end_date)
            invoices = invoices.filter(created_at__range=(start_date, end_date))

            if fdata.get('status_isnot'):
                invoices = invoices.exclude(order__status__status=fdata['status_isnot'])

            if fdata.get('customer_name'):
                invoices = invoices.filter(customer_name__icontains=fdata['customer_name'])

            if fdata.get('service_order'):
                invoices = invoices.filter(order__code__exact=fdata['service_order'])

    data['total'] = invoices.aggregate(Sum('total_net'))
    data['total_paid'] = invoices.exclude(paid_at=None).aggregate(Sum('total_net'))
    pos = PurchaseOrder.objects.filter(created_at__range=[start_date, end_date])
    data['total_purchases'] = pos.aggregate(Sum('total'))

    page = request.GET.get('page')
    data['form'] = form
    data['invoices'] = invoices
    data['invoices'] = paginate(invoices, page, 50)
    
    return render(request, "invoices/index.html", data)
コード例 #20
0
ファイル: search.py プロジェクト: LetsUnlockiPhone/Servo
def notes(request):
    """
    Searches for local notes
    """
    query = request.GET.get("q")
    request.session['search_query'] = query

    results = Note.objects.filter(body__icontains=query).order_by('-created_at')
    title = _(u'%d search results for "%s"') % (results.count(), query,)
    notes = paginate(results, request.GET.get('page'), 10)

    return render(request, "notes/search.html", locals())
コード例 #21
0
def prep_list_view(request, group='all'):
    """
    Prepares the product list view
    """
    title = _("Products")
    search_hint = "products"
    all_products = Product.objects.all()
    categories = ProductCategory.objects.all()

    if group == 'all':
        group = ProductCategory(title=_('All'), slug='all')
    elif group == 'None':
        group = ProductCategory(title=_('None'), slug='none')
        all_products = all_products.filter(categories=None)
    else:
        group = categories.get(slug=group)
        all_products = group.get_products()

    if request.method == 'POST':
        form = ProductSearchForm(request.POST)
        if form.is_valid():
            fdata = form.cleaned_data

            description = fdata.get('description')
            if description:
                all_products = all_products.filter(description__icontains=description)

            title = fdata.get('title')
            if title:
                all_products = all_products.filter(title__icontains=title)

            code = fdata.get('code')
            if code:
                all_products = all_products.filter(code__icontains=code)

            tag = fdata.get('tag')
            if tag:
                tag = tag.tag
                title += u" / %s" % tag
                all_products = all_products.filter(tags__tag=tag)

            location = fdata.get('location')
            if location:
                all_products = all_products.filter(inventory__location=location)
    else:
        form = ProductSearchForm()

    title += u" / %s" % group.title
    page = request.GET.get("page")
    products = paginate(all_products.distinct(), page, 25)

    return locals()
コード例 #22
0
def notes(request):
    """
    Searches for local notes
    """
    query = request.GET.get("q")
    request.session['search_query'] = query

    results = Note.objects.filter(
        body__icontains=query).order_by('-created_at')
    title = _(u'%d search results for "%s"') % (
        results.count(),
        query,
    )
    notes = paginate(results, request.GET.get('page'), 10)

    return render(request, "notes/search.html", locals())
コード例 #23
0
ファイル: search.py プロジェクト: LetsUnlockiPhone/Servo
def products(request):
    """
    Searches our local inventory
    """
    query = request.GET.get("q")
    request.session['search_query'] = query

    results = Product.objects.filter(
        Q(code__icontains=query) | Q(title__icontains=query) | Q(eee_code__icontains=query)
    )

    page = request.GET.get("page")
    products = paginate(results, page, 50)

    title = _(u'Search results for "%s"') % query
    group = ProductCategory(title=_('All'), slug='all')

    return render(request, 'products/search.html', locals())
コード例 #24
0
def products(request):
    """
    Searches our local inventory
    """
    query = request.GET.get("q")
    request.session['search_query'] = query

    results = Product.objects.filter(
        Q(code__icontains=query) | Q(title__icontains=query)
        | Q(eee_code__icontains=query))

    page = request.GET.get("page")
    products = paginate(results, page, 50)

    title = _(u'Search results for "%s"') % query
    group = ProductCategory(title=_('All'), slug='all')

    return render(request, 'products/search.html', locals())
コード例 #25
0
ファイル: purchases.py プロジェクト: LetsUnlockiPhone/Servo
def list_pos(request):
    from datetime import timedelta
    from django.utils import timezone
    from django.db.models import Sum

    now = timezone.now()
    data = {'title': _("Purchase Orders")}

    initial = {'start_date': now - timedelta(days=30), 'end_date': now}
    all_orders = PurchaseOrder.objects.filter(
        created_at__range=(initial['start_date'], initial['end_date'])
    )

    form = PurchaseOrderSearchForm(initial=initial)

    if request.method == 'POST':
        all_orders = PurchaseOrder.objects.all()
        form = PurchaseOrderSearchForm(request.POST, initial=initial)

        if form.is_valid():
            fdata = form.cleaned_data
            reference = fdata.get('reference')
            if reference:
                all_orders = all_orders.filter(reference__contains=reference)
            if fdata.get('state') == 'open':
                all_orders = all_orders.filter(submitted_at=None)
            if fdata.get('state') == 'submitted':
                all_orders = all_orders.exclude(submitted_at=None)
            if fdata.get('state') == 'received':
                all_orders = all_orders.exclude(has_arrived=True)
            s, e = (fdata.get('start_date'), fdata.get('end_date'))
            if s and e:
                all_orders = all_orders.filter(created_at__range=(s, e))
            created_by = fdata.get('created_by')
            if created_by:
                all_orders = all_orders.filter(created_by=created_by)

    page = request.GET.get("page")
    orders = paginate(all_orders, page, 50)

    data['orders'] = orders
    data['form']   = form
    data['total']  = all_orders.aggregate(Sum('total'))
    return render(request, "purchases/list_pos.html", data)
コード例 #26
0
def list_pos(request):
    from datetime import timedelta
    from django.utils import timezone
    from django.db.models import Sum

    now = timezone.now()
    data = {'title': _("Purchase Orders")}

    initial = {'start_date': now - timedelta(days=30), 'end_date': now}
    all_orders = PurchaseOrder.objects.filter(
        created_at__range=(initial['start_date'], initial['end_date']))

    form = PurchaseOrderSearchForm(initial=initial)

    if request.method == 'POST':
        all_orders = PurchaseOrder.objects.all()
        form = PurchaseOrderSearchForm(request.POST, initial=initial)

        if form.is_valid():
            fdata = form.cleaned_data
            reference = fdata.get('reference')
            if reference:
                all_orders = all_orders.filter(reference__contains=reference)
            if fdata.get('state') == 'open':
                all_orders = all_orders.filter(submitted_at=None)
            if fdata.get('state') == 'submitted':
                all_orders = all_orders.exclude(submitted_at=None)
            if fdata.get('state') == 'received':
                all_orders = all_orders.exclude(has_arrived=True)
            s, e = (fdata.get('start_date'), fdata.get('end_date'))
            if s and e:
                all_orders = all_orders.filter(created_at__range=(s, e))
            created_by = fdata.get('created_by')
            if created_by:
                all_orders = all_orders.filter(created_by=created_by)

    page = request.GET.get("page")
    orders = paginate(all_orders, page, 50)

    data['orders'] = orders
    data['form'] = form
    data['total'] = all_orders.aggregate(Sum('total'))
    return render(request, "purchases/list_pos.html", data)
コード例 #27
0
ファイル: search.py プロジェクト: LetsUnlockiPhone/Servo
def orders(request):
    """
    Searches local service orders
    """
    query = request.GET.get("q")

    if not query or len(query) < 3:
        messages.error(request, _('Search query is too short'))
        return redirect(reverse('orders-index'))

    request.session['search_query'] = query

    # Redirect Order ID:s to the order
    try:
        order = Order.objects.get(code__iexact=query)
        return redirect(order)
    except Order.DoesNotExist:
        pass

    orders = Order.objects.filter(
        Q(code=query) | Q(devices__sn__contains=query) |
        Q(customer__fullname__icontains=query) |
        Q(customer__phone__contains=query) |
        Q(repair__confirmation=query) |
        Q(repair__reference=query)
    )

    data = {
        'title': _('Orders'),
        'subtitle': _(u'%d results for "%s"') % (orders.count(), query)
    }

    page = request.GET.get('page')
    data['orders'] = paginate(orders.distinct(), page, 100)

    return render(request, "orders/index.html", data)
コード例 #28
0
ファイル: order.py プロジェクト: LetsUnlockiPhone/Servo
def prepare_list_view(request, args):
    """
    Lists service orders matching specified criteria
    """
    data = {'title': _("Orders")}

    form = OrderSearchForm(request, args)

    if request.session.get("current_queue"):
        del(request.session['current_queue'])

    if request.session.get("return_to"):
        del(request.session['return_to'])

    if request.user.customer:
        orders = Order.objects.filter(customer=request.user.customer)
    else:
        orders = Order.objects.filter(location__in=request.user.locations.all())

    if args.get("state"):
        orders = orders.filter(state__in=args.getlist("state"))

    start_date = args.get("start_date")
    if start_date:
        end_date = args.get('end_date') or timezone.now()
        orders = orders.filter(created_at__range=[start_date, end_date])

    if args.get("status_older_than"):
        days = int(args.get("status_older_than"))
        limit = datetime.now() - timedelta(days=days)
        orders = orders.filter(status_started_at__lt=limit)

    if args.get("assigned_to"):
        users = args.getlist("assigned_to")
        orders = orders.filter(user__in=users)

    if args.get("followed_by"):
        users = args.getlist("followed_by")
        orders = orders.filter(followed_by__in=users)

    if args.get("created_by"):
        users = args.getlist("created_by")
        orders = orders.filter(created_by__in=users)

    if args.get("customer"):
        customer = int(args['customer'][0])
        if customer == 0:
            orders = orders.filter(customer__pk=None)
        else:
            orders = orders.filter(customer__tree_id=customer)

    if args.get("spec"):
        spec = args['spec'][0]
        if spec is "None":
            orders = orders.filter(devices=None)
        else:
            orders = orders.filter(devices__slug=spec)

    if args.get("device"):
        orders = orders.filter(devices__pk=args['device'])

    if args.get("queue"):
        queue = args.getlist("queue")
        orders = orders.filter(queue__in=queue)

    if args.get("checkin_location"):
        ci_location = args.getlist("checkin_location")
        orders = orders.filter(checkin_location__in=ci_location)

    if args.get("location"):
        location = args.getlist("location")
        orders = orders.filter(location__in=location)

    if args.get("label"):
        orders = orders.filter(tags__in=args.getlist("label"))

    if args.get("status"):
        status = args.getlist("status")

        if args['status'][0] == 'None':
            orders = orders.filter(status__pk=None)
        else:
            orders = orders.filter(status__status__in=status)

    if args.get("color"):
        color = args.getlist("color")
        now = timezone.now()

        if "grey" in color:
            orders = orders.filter(status=None)
        if "green" in color:
            orders = orders.filter(status_limit_green__gte=now)
        if "yellow" in color:
            orders = orders.filter(status_limit_yellow__gte=now,
                                   status_limit_green__lte=now)
        if "red" in color:
            orders = orders.filter(status_limit_yellow__lte=now)

    page = request.GET.get("page")

    data['form'] = form
    data['queryset'] = orders
    data['orders'] = paginate(orders.distinct(), page, 100)
    data['subtitle'] = _("%d search results") % orders.count()

    return data
コード例 #29
0
def prepare_list_view(request, args):
    """
    Lists service orders matching specified criteria
    """
    data = {'title': _("Orders")}

    form = OrderSearchForm(request, args)

    if request.session.get("current_queue"):
        del(request.session['current_queue'])

    if request.session.get("return_to"):
        del(request.session['return_to'])

    if request.user.customer:
        orders = Order.objects.filter(customer=request.user.customer)
    else:
        orders = Order.objects.filter(location__in=request.user.locations.all())

    if args.get("state"):
        orders = orders.filter(state__in=args.getlist("state"))

    start_date = args.get("start_date")
    if start_date:
        end_date = args.get('end_date') or timezone.now()
        orders = orders.filter(created_at__range=[start_date, end_date])

    if args.get("status_older_than"):
        days = int(args.get("status_older_than"))
        limit = datetime.now() - timedelta(days=days)
        orders = orders.filter(status_started_at__lt=limit)

    if args.get("assigned_to"):
        users = args.getlist("assigned_to")
        orders = orders.filter(user__in=users)

    if args.get("followed_by"):
        users = args.getlist("followed_by")
        orders = orders.filter(followed_by__in=users)

    if args.get("created_by"):
        users = args.getlist("created_by")
        orders = orders.filter(created_by__in=users)

    if args.get("customer"):
        customer = int(args['customer'][0])
        if customer == 0:
            orders = orders.filter(customer__pk=None)
        else:
            orders = orders.filter(customer__tree_id=customer)

    if args.get("spec"):
        spec = args['spec'][0]
        if spec is "None":
            orders = orders.filter(devices=None)
        else:
            orders = orders.filter(devices__slug=spec)

    if args.get("device"):
        orders = orders.filter(devices__pk=args['device'])

    if args.get("queue"):
        queue = args.getlist("queue")
        orders = orders.filter(queue__in=queue)

    if args.get("checkin_location"):
        ci_location = args.getlist("checkin_location")
        orders = orders.filter(checkin_location__in=ci_location)

    if args.get("location"):
        location = args.getlist("location")
        orders = orders.filter(location__in=location)

    if args.get("label"):
        orders = orders.filter(tags__in=args.getlist("label"))

    if args.get("status"):
        status = args.getlist("status")

        if args['status'][0] == 'None':
            orders = orders.filter(status__pk=None)
        else:
            orders = orders.filter(status__status__in=status)

    if args.get("color"):
        color = args.getlist("color")
        now = timezone.now()

        if "grey" in color:
            orders = orders.filter(status=None)
        if "green" in color:
            orders = orders.filter(status_limit_green__gte=now)
        if "yellow" in color:
            orders = orders.filter(status_limit_yellow__gte=now,
                                   status_limit_green__lte=now)
        if "red" in color:
            orders = orders.filter(status_limit_yellow__lte=now)

    page = request.GET.get("page")

    data['form'] = form
    data['queryset'] = orders
    data['orders'] = paginate(orders.distinct(), page, 100)
    data['subtitle'] = _("%d search results") % orders.count()

    return data
コード例 #30
0
def invoices(request):
    """
    Lists invoices, optionally with a search filter
    """
    from datetime import timedelta
    from django.db.models import Sum

    data = {'title': _("Invoices")}
    now = timezone.now()

    start_date, end_date = now - timedelta(days=30), now
    initial = {'start_date': start_date, 'end_date': end_date}

    invoices = Invoice.objects.filter(created_at__range=(start_date, end_date))
    form = InvoiceSearchForm(initial=initial)

    if request.method == 'POST':
        invoices = Invoice.objects.all()
        form = InvoiceSearchForm(request.POST, initial=initial)

        if form.is_valid():
            fdata = form.cleaned_data
            if fdata.get('state') == 'OPEN':
                invoices = invoices.filter(paid_at=None)
            if fdata.get('state') == 'PAID':
                invoices = invoices.exclude(paid_at=None)

            payment_method = fdata.get('payment_method')
            if len(payment_method):
                invoices = invoices.filter(payment__method=payment_method)

            start_date = fdata.get('start_date', start_date)
            end_date = fdata.get('end_date', end_date)
            invoices = invoices.filter(created_at__range=(start_date,
                                                          end_date))

            if fdata.get('status_isnot'):
                invoices = invoices.exclude(
                    order__status__status=fdata['status_isnot'])

            if fdata.get('customer_name'):
                invoices = invoices.filter(
                    customer_name__icontains=fdata['customer_name'])

            if fdata.get('service_order'):
                invoices = invoices.filter(
                    order__code__exact=fdata['service_order'])

    data['total'] = invoices.aggregate(Sum('total_net'))
    data['total_paid'] = invoices.exclude(paid_at=None).aggregate(
        Sum('total_net'))
    pos = PurchaseOrder.objects.filter(
        created_at__range=[start_date, end_date])
    data['total_purchases'] = pos.aggregate(Sum('total'))

    page = request.GET.get('page')
    data['form'] = form
    data['invoices'] = invoices
    data['invoices'] = paginate(invoices, page, 50)

    return render(request, "invoices/index.html", data)