from db import db from artists.repositories.artist_repository import ArtistRepository from campaigns.repositories.campaigns_repository import CampaignsRepository from media_plan.repositories.media_plan_repository import MediaPlanRepository from projects.repositories.projects_repository import ProjectsRepository from media_plan.schemas import ( MediaPlanReleaseDetails, MediaPlanReleaseDetailsUpdate, MediaPlanReleaseDetailsUpdateResponse, CampaignNamingConventionResponse ) from campaigns.services.campaigns_name_generator_service import CampaignsNameGeneratorService class MediaPlanReleaseDetailsService: media_plan_repository = MediaPlanRepository() campaigns_repository = CampaignsRepository() campaign_name_service = CampaignsNameGeneratorService() artist_repository = ArtistRepository() projects_repository = ProjectsRepository() def get_release_details(self, media_plan_id: int): media_plan = self.media_plan_repository.get_media_plan_by_id(media_plan_id) return MediaPlanReleaseDetails( media_plan.release_name, media_plan.release_type_id ) def update_release_details(self, project_id: int, media_plan_id: int, params: MediaPlanReleaseDetailsUpdate): media_plan = self.media_plan_repository.update_release_details(media_plan_id, params) campaigns = self.campaigns_repository.get_manual_not_draft_campaigns_by_media_plan_id(media_plan_id) data_for_name = self.projects_repository.get_name_autogeneration_info(media_plan_id) artists = self.artist_repository.get_locked_primary_artists_for_project_id(media_plan.project_id) campaigns_names = [] if data_for_name.country == "UK": for campaign in campaigns: campaign.naming_convention = self.campaign_name_service.build_UK_campaign_name_by_campaign( project_id=media_plan.project_id, project_code=data_for_name.gras_project_code, release_name=data_for_name.release_name, release_type=data_for_name.release_type_name, label_abbreviation=data_for_name.abbreviation, campaign=campaign, artists=artists ) campaigns_names.append( CampaignNamingConventionResponse( campaign_uuid=campaign.uuid, name=campaign.naming_convention ) ) self.projects_repository.touch_project_last_edit(project_id) db.session.commit() return MediaPlanReleaseDetailsUpdateResponse( name=media_plan.release_name, type=media_plan.release_type_id, campaignsNames=campaigns_names )