def delete_agree(sender, instance, **kwargs): """ Undo the updates when the agree was created. """ api.remove_activity( sender_id=instance.giver_id, verb="re-raved", model_name="review", obj_id=instance.review_id ) api.remove_notification( sender_id=instance.giver_id, recipient_id=instance.review.user_id, model_name="agree", obj_id=instance.pk ) api.remove_karma_action( recipient_id=instance.review.user_id, giver_id=instance.giver_id, karma=2, time_range=(instance.created_at, instance.created_at+dt.timedelta(hours=1)) ) api.remove_karma_action( recipient_id=instance.giver_id, giver_id=instance.giver_id, karma=1, time_range=(instance.created_at, instance.created_at+dt.timedelta(hours=1)) ) api.update_statistics( model_name="userstatistics", obj_id=instance.giver_id, agrees_out=-1, karma=-1 ) api.update_statistics( model_name="userstatistics", obj_id=instance.review.user_id, agrees_in=-1, karma=-2 ) api.update_statistics( model_name="review", obj_id=instance.review_id, agrees=-1 ) api.update_statistics( model_name="popularity", obj_id=instance.review.item_id, **utils.decrement_popularities(instance.created_at, instance.review.rating) ) reviews = api.filter_then_count( model_name="review", user=instance.giver_id, item=instance.review.item_id ) if reviews == 0: remaining = api.filter_then_order_by( model_name="agree", order_criteria="-created_at", giver=instance.giver_id, review__item=instance.review.item_id ) if (not remaining or remaining[0].created_at < instance.created_at): old_rating = utils.get_rating_field(instance.review.rating) api.update_statistics( model_name="item", obj_id=instance.review.item_id, **{ old_rating: -1 } ) if remaining: new_rating = utils.get_rating_field( remaining[0].review.rating) api.update_statistics( model_name="item", obj_id=instance.review.item_id, **{ new_rating: 1 } )
def create_agree(sender, instance, created, **kwargs): """ Creates a notification for the writer of the review. Create two karma actions for the agree. Increment the giver's agrees by one and karma by one. Increment the receiver's agrees by one and karma by two. Increment the item's rating count by one. """ if created: api.queue_activity( sender_id=instance.giver_id, verb="re-raved", model_name="review", obj_id=instance.review_id ) api.queue_notification( sender_id=instance.giver_id, recipient_id=instance.review.user_id, model_name="agree", obj_id=instance.pk ) api.add_karma_action( recipient_id=instance.review.user_id, giver_id=instance.giver_id, karma=2 ) api.add_karma_action( recipient_id=instance.giver_id, giver_id=instance.giver_id, karma=1 ) api.update_statistics( model_name="userstatistics", obj_id=instance.giver_id, agrees_out=1, karma=1 ) api.update_statistics( model_name="userstatistics", obj_id=instance.review.user_id, agrees_in=1, karma=2 ) api.update_statistics( model_name="review", obj_id=instance.review_id, agrees=1 ) api.update_statistics( model_name="popularity", obj_id=instance.review.item_id, today=instance.review.rating, week=instance.review.rating, month=instance.review.rating, alltime=instance.review.rating ) reviews = api.filter_then_count( model_name="review", user=instance.giver_id, item=instance.review.item_id ) if reviews == 0: rating = utils.get_rating_field(instance.review.rating) api.update_statistics( model_name="item", obj_id=instance.review.item_id, **{ rating: 1} ) old_agrees = api.filter_excluding_me_then_order_by( model_name="agree", obj_id=instance.pk, order_criteria="-created_at", giver=instance.giver_id, review__item=instance.review.item_id ) if old_agrees: rating = utils.get_rating_field( old_agrees[0].review.rating) api.update_statistics( model_name="item", obj_id=instance.review.item_id, **{ rating: -1 } )