"""Rejection logic.""" from owsresponse import response from product_review.models import ( canned_response_history as canned_response_history_model, ) from product_review.models import ows_product_digital from product_review.models import rejection as rejection_model from product_review.models import review_queue as review_queue_model from product_review.util import sfn from product_review.util.db import db_transaction from product_review.util.review_queue_item import get_review_queue_item_for_update from product_review.util.validation import create_review_validation_history @db_transaction def reject_review_queue_item( review_queue_id, note, user_id, created_datetime=None, will_not_deliver=False ): """Update state to rejected.""" review_queue_item = review_queue_model.validate_for_completion(review_queue_id) review_queue_model.reject(review_queue_item) rejection_model.reject( review_queue_id, note, will_not_deliver, user_id, created_datetime ) def save_rejection(review_queue_item, note, will_not_deliver=False): """Save rejection.""" # Save records for this service review_queue_model.reject(review_queue_item) rejection_model.reject(review_queue_item.review_queue_id, note, will_not_deliver) def get_rejection(product_id): """Get rejections for a given product from the database.""" item = review_queue_model.ReviewQueue.latest_review_by_product(product_id) if not item: return response.create_not_found_response( f"Product {product_id} doesn't exist in queue" ) rejection = rejection_model.get_for_workstation(item.review_queue_id) return rejection def reject_via_workflow( review_queue_id, user_uuid, note, canned_response_ids, will_not_deliver=False ): """Save an item as applying and trigger the workflow to save the rejection.""" with db_transaction: item = get_review_queue_item_for_update(review_queue_id) product_validation_result = ows_product_digital.validate_product( item.product_id ) create_review_validation_history( item.review_queue_id, item.product_id, product_validation_result ) canned_response_history_model.create_bulk(review_queue_id, canned_response_ids) review_queue_model.change_status(item, review_queue_model.STATUS.APPLYING) sfn.create_complete_review_sfn_execution( item, "reject", user_uuid, note, will_not_deliver )