Пример #1
0
    def handle(self, *args, **options):
        now = datetime.utcnow().replace(tzinfo=utc)
        # Limit to double the rating period so we don't get really old records that might have other issues
        start_date = now - timedelta(days=(DEFAULT_RATING_PERIOD * 2))
        end_date = now - timedelta(days=DEFAULT_RATING_PERIOD)

        # set default buyer_rating for unrated orders
        orders = Order.objects.filter(
            state=COMPLETED,
            buyer_rating=RATING_TYPE_UNRATED,
            date_confirmed__range=[start_date, end_date]
        )[:MAX_RATINGS_UPDATE_BATCH]
        if orders.count() > 0:
            self.stdout.write("Applying default buyer rating to %s order%s ...\n" % (
                orders.count(),
                "s" if orders.count() != 1 else ""
            ))
        for order in orders:

            # Update the buyer's ratings of the order/entries
            order.buyer_rating = DEFAULT_RATING_VALUE
            order.buyer_rating_default = True
            order.save()

            # The entry.buyer_rating has not been specifically set by the buyer, assign it frmo the order
            entries = order.entry_set.all()
            for entry in entries:
                if entry.buyer_rating_type != RATING_TYPE_USER:
                    entry.buyer_rating_type = RATING_TYPE_DEFAULT
                    entry.buyer_rating = DEFAULT_RATING_VALUE
                    entry.buyer_rating_default = True
                    entry.save()

            recalculate_order_rating(order)
            if SEND_AUTO_RATING_EMAILS:
                send_mail_after_buyer_rates_order(order)

        # Set default vendor_rating for unrated orders
        orders = Order.objects.filter(
            state=COMPLETED,
            vendor_rating=RATING_TYPE_UNRATED,
            date_confirmed__range=[start_date, end_date]
        )[:MAX_RATINGS_UPDATE_BATCH]
        if orders.count() > 0:
            self.stdout.write("Applying default vendor rating to %s order%s ...\n" % (
                orders.count(),
                "s" if orders.count() != 1 else ""
            ))
        for order in orders:
            # Update the vendor's rating of the order
            order.vendor_rating = DEFAULT_RATING_VALUE
            order.vendor_rating_default = True
            order.save()

            recalculate_order_rating(order)
            if SEND_AUTO_RATING_EMAILS:
                send_mail_after_vendor_rates_order(order)
Пример #2
0
def ql_order_rating(request, parts, ql_object):

    from order.views import send_mail_after_buyer_rates_order
    from order.views import send_mail_after_vendor_rates_order
    from order.views import recalculate_order_rating
    from order.models import RATING_TYPE_USER, RATING_TYPE_ORDER

    o = Order.objects.get(uniqueId = parts[1])
    error_message = ""

    # Buyer rating
    if parts[0] == 'order_buyer_rating':
        is_different = bool(o.buyer_rating != int(parts[2]))
        Order.objects.filter(pk=o.pk).update(buyer_rating=int(parts[2]))
        for entry in o.entry_set.all(): # Set entry ratings if not specifically set
            if entry.buyer_rating_type == RATING_TYPE_USER:
                continue
            entry.buyer_rating_type = RATING_TYPE_ORDER  # rating applied to the whole order
            entry.buyer_rating = int(parts[2])
            entry.buyer_rating_default = False
            entry.save()
        if is_different:
            send_mail_after_buyer_rates_order(Order.objects.get(pk=o.pk))

    # Vendor rating
    elif parts[0] == 'order_vendor_rating':
        is_different = bool(o.vendor_rating != int(parts[2]))
        Order.objects.filter(pk=o.pk).update(vendor_rating=int(parts[2]))
        if is_different:
            send_mail_after_vendor_rates_order(Order.objects.get(pk=o.pk))

    recalculate_order_rating(o)
    ql_object.delete()

    return render_to_response(
        "quick/rating_confirm.html",
        { "order" : o,
          'rating' : int(parts[2]),
          "error_message" : ("%s" % error_message).strip(),
        },
        context_instance=RequestContext(request)
    )
Пример #3
0
def ql_entry_rating(request, parts, ql_object):

    from order.views import recalculate_order_rating

    e = Entry.objects.get(id = parts[1])
    error_message = ""

    if parts[1] == "entry_buyer_rating":
        Entry.objects.filter(pk=e.pk).update(buyer_rating=int(parts[2]))
    elif parts[1] == "entry_buyer_reply_rating":
        Entry.objects.filter(pk=e.pk).update(buyer_reply_rating=int(parts[2]))

    recalculate_order_rating(e.order)
    ql_object.delete()

    return render_to_response(
        "quick/rating_confirm.html",
        {
            "order" : e.order,
            "rating" : int(parts[2]),
            "error_message" : ("%s" % error_message).strip(),
        },
        context_instance=RequestContext(request)
    )