"""Logic for contract lifecycle schedule detail.""" from abacus_common_logic.connectors.database import db from owsresponse import response import sqlalchemy from abacus_contract import models from abacus_contract.schemas.contract_lifecycle_schedule_detail import \ ContractLifecycleScheduleDetailSchema from abacus_contract.utils.format_response import prepare_dataload_response def find_or_create_contract_lifecycle_schedule_detail( period_interval: int, period_type: str ) -> object: """Create a contract_lifecycle_schedule_detail. A contract_lifecycle_schedule_detail will be created only if there is no record for the given period_interval and period_type. Args: period_interval (int): interval of the period period_type (str): type of the period Returns: a contract_lifecycle_schedule_detail record. """ contract_lifecycle_schedule_detail = \ models.ContractLifecycleScheduleDetail.get_by_period_interval_and_period_type( # noqa: E501 period_interval, period_type ) if contract_lifecycle_schedule_detail is None: try: contract_lifecycle_schedule_detail = models.ContractLifecycleScheduleDetail.create( # noqa: E501 period_interval=period_interval, period_type=period_type ) except sqlalchemy.exc.SQLAlchemyError as e: db.session.rollback() raise e return contract_lifecycle_schedule_detail def get_contract_lifecycle_schedule_details_by_ids( contract_lifecycle_schedule_detail_ids: list) -> response.Response: """Get contract lifecycle schedule details by ids. Args: contract_lifecycle_schedule_detail_ids (list): List of contract lifecycle schedule detail ids. Returns: Response: Response object with a list of contract lifecycle schedule details. """ contract_lifecycle_schedule_details =\ models.ContractLifecycleScheduleDetail.get_by_ids( contract_lifecycle_schedule_detail_ids ) contract_lifecycle_schedule_details_list = \ ContractLifecycleScheduleDetailSchema().dump( contract_lifecycle_schedule_details, many=True ) result = prepare_dataload_response( contract_lifecycle_schedule_detail_ids, contract_lifecycle_schedule_details_list, 'contract_lifecycle_schedule_detail_id', ) return response.Response(message=result, status=200)