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)
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) )
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) )