Exemplo n.º 1
0
 def save(self, *args, **kwargs):
     return Order.create_from(client=self.client,
                              config=self.cleaned_data.get("config"),
                              media=self.cleaned_data.get("media"),
                              quantity=self.cleaned_data.get("quantity"),
                              address=self.cleaned_data.get("address"),
                              request_lang=self.request_lang).min_id
Exemplo n.º 2
0
def order_add_shipping(request, order_id):
    order = Order.get_by_scheduler_id(order_id)

    if order.data.status != "pending_shipment":
        raise Http404(
            _("Order %(order_id)s is not pending_shipment") %
            {"order_id": order.min_id})

    context = {"order": order}

    if request.method == "POST":
        form = OrderShippingForm(order=order, data=request.POST)
        if form.is_valid():
            try:
                form.save()
            except Exception as exp:
                logger.error(exp)
                messages.error(
                    request,
                    _("Failed to record shipping informations.. (ref: %(err)s)"
                      ) % {"err": exp},
                )
            else:
                messages.success(request,
                                 _("Order Shipping informations recorded!"))
                return redirect("order_detail", order_min_id=order.min_id)
    else:
        form = OrderShippingForm(order=order)
    context["form"] = form

    return render(request, "add_shipping.html", context)
Exemplo n.º 3
0
def order_detail_scheduler_id(request, order_id):
    order = Order.get_by_scheduler_id(order_id)
    if order is None:
        raise Http404(
            "Order with Scheduler ID `{}` not found".format(order_id))

    return redirect("order_detail", order_min_id=order.min_id)
Exemplo n.º 4
0
def order_detail(request, order_min_id):
    order = Order.get_or_none(order_min_id)
    if order is None:
        raise Http404("Order with ID `{}` not found".format(order_min_id))

    context = {"order": order}
    return render(request, "order.html", context)
Exemplo n.º 5
0
def order_detail_scheduler_id(request, order_id):
    order = Order.get_by_scheduler_id(order_id)
    if order is None:
        raise Http404(
            _("Order with Scheduler ID `%(order_id)s` not found") %
            {"order_id": order_id})

    return redirect("order_detail", order_min_id=order.min_id)
Exemplo n.º 6
0
def order_detail(request, order_min_id):
    order = Order.get_or_none(order_min_id)
    if order is None:
        raise Http404(
            _("Order with ID `%(order_id)s` not found") %
            {"order_id": order_min_id})

    context = {"order": order}
    return render(request, "order.html", context)
Exemplo n.º 7
0
def order_cancel(request, order_min_id):
    order = Order.get_or_none(order_min_id)
    if order is None:
        raise Http404("Order with ID `{}` not found".format(order_min_id))

    if order.cancel():
        messages.success(request,
                         "Successfuly canceled order #{}".format(order_min_id))
    else:
        messages.error(request,
                       "Unable to cancel order #{}".format(order_min_id))

    return redirect("order_detail", order_min_id=order.min_id)
Exemplo n.º 8
0
    def handle(self, *args, **options):
        logger.info("## running periodic tasks...")
        now = timezone.now()

        logger.info("updating scheduler data for in-progress orders...")
        for order in Order.objects.filter(status=Order.IN_PROGRESS):
            o = Order.fetch_and_get(order.id)
            logger.debug(f"..{o.min_id}: {o.status}")

        logger.info("disabling expired user accounts...")
        for profile in Profile.objects.filter(expire_on__lte=now,
                                              user__is_active=True):
            logger.info(f"  disabling {profile.username}: {profile}")
            profile.user.is_active = False
            profile.user.save()
            profile.expire_on = None
            profile.save()

        logger.info(">done")
Exemplo n.º 9
0
def order_cancel(request, order_min_id):
    order = Order.get_or_none(order_min_id)
    if order is None:
        raise Http404(
            _("Order with ID `%(order_id)s` not found") %
            {"order_id": order_min_id})

    if order.cancel():
        messages.success(
            request,
            _("Successfuly canceled order #%(order_id)s") %
            {"order_id": order_min_id},
        )
    else:
        messages.error(
            request,
            _("Unable to cancel order #%(order_id)s") %
            {"order_id": order_min_id},
        )

    return redirect("order_detail", order_min_id=order.min_id)
Exemplo n.º 10
0
def recreate(request, order_id):
    order = Order.get_by_scheduler_id(order_id)
    if order is None:
        raise Http404(
            _("Order `%(order_id)s` does not exists") % {"order_id": order_id}
        )
    try:
        new_order = order.recreate()
    except Exception as exc:
        logger.error(f"Unable to recreate order: {exc}")
        logger.exception(exc)
        messages.error(
            request,
            _("Unable to recreate order %(order_id)s: -- ref: %(err)s")
            % {"order_id": order_id, "err": exc},
        )
    else:
        messages.success(
            request,
            _("Successfuly recreated order: %(new_id)s (NEW)")
            % {"new_id": new_order.scheduler_id},
        )

    return redirect("all-orders")
Exemplo n.º 11
0
def order_new(request, kind=Media.VIRTUAL):
    context = {
        "addresses":
        Address.objects.filter(organization=request.user.profile.organization),
        "configurations":
        Configuration.objects.filter(
            organization=request.user.profile.organization),
        "medias":
        Media.objects.all(),
        "LINK_VALIDITY_DAYS":
        Media.EXPIRATION_DELAY,
    }

    # can't order without a config
    if not context["configurations"].count():
        messages.warning(
            request,
            _("You need a Configuration to place an Order. Add one first!"))
        return redirect("configuration_list")

    # staff and admin are allowed to place multiple orders at once
    if request.user.is_staff or request.user.is_superuser:
        can_order = True
        previous_order_id = None
    else:
        previous_order_id = Order.profile_has_active(request.user.profile)
        can_order = not previous_order_id
    context.update({
        "can_order": can_order,
        "previous_order_id": previous_order_id
    })

    # display an alert informing user he cannot order at the moment
    # if he had just clicked on Order, using an error message and blocking the process
    # otherwise a warning is enough
    if not context["can_order"]:
        func = getattr(messages,
                       "error" if request.method == "POST" else "warning")
        func(
            request,
            _("Your previous Order (#%(order_id)s) must complete "
              "before you're allowed to request a new one.") %
            {"order_id": previous_order_id},
        )

    form = OrderForm(request=request)
    if request.method == "POST" and can_order:

        # which form is being saved?
        form = OrderForm(request.POST, request=request)
        if form.is_valid():
            try:
                res = form.save()
            except Exception as exp:
                logger.error(exp)
                messages.error(request,
                               _("Error while saving… %(err)s") % {"err": exp})
            else:
                messages.success(request, form.success_message(res))
                return redirect("order_list")
    else:
        pass
    context["form"] = form

    return render(request, "order_new.html", context)