mirror of
https://github.com/GSA/notifications-api.git
synced 2026-07-28 11:49:42 -04:00
Adding new data models for letter branding.
This commit is contained in:
18
app/dao/letter_branding_dao.py
Normal file
18
app/dao/letter_branding_dao.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from app.models import LetterBranding
|
||||
|
||||
|
||||
def get_letter_branding_or_platform_default(domain=None):
|
||||
letter_branding = None
|
||||
if domain:
|
||||
letter_branding = LetterBranding.query.filter(
|
||||
LetterBranding.domain == domain
|
||||
).first()
|
||||
if not letter_branding:
|
||||
letter_branding = LetterBranding.query.filter(
|
||||
LetterBranding.platform_default == True # noqa
|
||||
).first()
|
||||
return letter_branding
|
||||
|
||||
|
||||
def get_all_letter_branding():
|
||||
return LetterBranding.query.order_by(LetterBranding.name).all()
|
||||
@@ -150,7 +150,7 @@ def dao_fetch_service_by_id_and_user(service_id, user_id):
|
||||
|
||||
@transactional
|
||||
@version_class(Service)
|
||||
def dao_create_service(service, user, service_id=None, service_permissions=None):
|
||||
def dao_create_service(service, user, service_id=None, service_permissions=None, letter_branding=None):
|
||||
# the default property does not appear to work when there is a difference between the sqlalchemy schema and the
|
||||
# db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVUK sms_sender
|
||||
# migration is completed, this code should be able to be removed.
|
||||
@@ -172,6 +172,8 @@ def dao_create_service(service, user, service_id=None, service_permissions=None)
|
||||
|
||||
# do we just add the default - or will we get a value from FE?
|
||||
insert_service_sms_sender(service, current_app.config['FROM_NUMBER'])
|
||||
if letter_branding:
|
||||
service.letter_branding = letter_branding
|
||||
db.session.add(service)
|
||||
|
||||
|
||||
|
||||
@@ -251,10 +251,11 @@ class DVLAOrganisation(db.Model):
|
||||
|
||||
class LetterBranding(db.Model):
|
||||
__tablename__ = 'letter_branding'
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True)
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
name = db.Column(db.String(255), unique=True, nullable=False)
|
||||
filename = db.Column(db.String(255), unique=True, nullable=False)
|
||||
domain = db.Column(db.Text, unique=True, nullable=True)
|
||||
platform_default = db.Column(db.Boolean, nullable=False, default=False)
|
||||
|
||||
|
||||
service_letter_branding = db.Table(
|
||||
@@ -389,6 +390,11 @@ class Service(db.Model, Versioned):
|
||||
secondary=service_email_branding,
|
||||
uselist=False,
|
||||
backref=db.backref('services', lazy='dynamic'))
|
||||
letter_branding = db.relationship(
|
||||
'LetterBranding',
|
||||
secondary=service_letter_branding,
|
||||
uselist=False,
|
||||
backref=db.backref('services', lazy='dynamic'))
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, data):
|
||||
|
||||
@@ -213,7 +213,8 @@ class ServiceSchema(BaseSchema):
|
||||
letter_contact_block = fields.Method(serialize="get_letter_contact")
|
||||
|
||||
def get_letter_logo_filename(self, service):
|
||||
return service.dvla_organisation.filename
|
||||
return service.letter_branding.filename if service.letter_branding\
|
||||
else service.dvla_organisation.filename
|
||||
|
||||
def service_permissions(self, service):
|
||||
return [p.permission for p in service.permissions]
|
||||
|
||||
@@ -27,6 +27,7 @@ from app.dao.fact_notification_status_dao import (
|
||||
fetch_stats_for_all_services_by_date_range, fetch_monthly_template_usage_for_service
|
||||
)
|
||||
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
||||
from app.dao.letter_branding_dao import get_letter_branding_or_platform_default
|
||||
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
||||
from app.dao.service_data_retention_dao import (
|
||||
fetch_service_data_retention,
|
||||
@@ -82,7 +83,7 @@ from app.errors import (
|
||||
register_errors
|
||||
)
|
||||
from app.letters.utils import letter_print_day
|
||||
from app.models import LETTER_TYPE, NOTIFICATION_CANCELLED, Service, EmailBranding
|
||||
from app.models import LETTER_TYPE, NOTIFICATION_CANCELLED, Service, EmailBranding, LetterBranding
|
||||
from app.schema_validation import validate
|
||||
from app.service import statistics
|
||||
from app.service.service_data_retention_schema import (
|
||||
@@ -182,7 +183,7 @@ def create_service():
|
||||
if not data.get('user_id'):
|
||||
errors = {'user_id': ['Missing data for required field.']}
|
||||
raise InvalidRequest(errors, status_code=400)
|
||||
|
||||
domain = data.pop('service_domain', None)
|
||||
# validate json with marshmallow
|
||||
service_schema.load(data)
|
||||
|
||||
@@ -191,7 +192,9 @@ def create_service():
|
||||
# unpack valid json into service object
|
||||
valid_service = Service.from_json(data)
|
||||
|
||||
dao_create_service(valid_service, user)
|
||||
letter_branding = get_letter_branding_or_platform_default(domain)
|
||||
dao_create_service(valid_service, user, letter_branding=letter_branding)
|
||||
|
||||
return jsonify(data=service_schema.dump(valid_service).data), 201
|
||||
|
||||
|
||||
@@ -212,7 +215,9 @@ def update_service(service_id):
|
||||
if 'email_branding' in req_json:
|
||||
email_branding_id = req_json['email_branding']
|
||||
service.email_branding = None if not email_branding_id else EmailBranding.query.get(email_branding_id)
|
||||
|
||||
if 'letter_branding' in req_json:
|
||||
letter_branding_id = req_json['letter_branding']
|
||||
service.letter_branding = None if not letter_branding_id else LetterBranding.query.get(letter_branding_id)
|
||||
dao_update_service(service)
|
||||
|
||||
if service_going_live:
|
||||
|
||||
Reference in New Issue
Block a user