mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-05 14:10:47 -04:00
Merge branch 'master' into return-service_sms_sender_value
This commit is contained in:
@@ -370,7 +370,7 @@ def create_dvla_file_contents_for_notifications(notifications):
|
||||
notification.template.__dict__,
|
||||
notification.personalisation,
|
||||
notification_reference=notification.reference,
|
||||
contact_block=notification.service.letter_contact_block,
|
||||
contact_block=notification.service.get_default_letter_contact(),
|
||||
org_id=notification.service.dvla_organisation.id,
|
||||
))
|
||||
for notification in notifications
|
||||
|
||||
@@ -285,3 +285,23 @@ class PopulateServiceSmsSender(Command):
|
||||
print("Populated sms sender {} services from services".format(second_result.rowcount))
|
||||
print("{} services in table".format(services_count_query))
|
||||
print("{} service_sms_senders".format(service_sms_sender_count_query))
|
||||
|
||||
|
||||
class PopulateServiceLetterContact(Command):
|
||||
|
||||
def run(self):
|
||||
services_to_update = """
|
||||
INSERT INTO service_letter_contacts(id, service_id, contact_block, is_default, created_at)
|
||||
SELECT uuid_in(md5(random()::text || now()::text)::cstring), id, letter_contact_block, true, '{}'
|
||||
FROM services
|
||||
WHERE letter_contact_block IS NOT NULL
|
||||
AND id NOT IN(
|
||||
SELECT service_id
|
||||
FROM service_letter_contacts
|
||||
)
|
||||
""".format(datetime.utcnow())
|
||||
|
||||
result = db.session.execute(services_to_update)
|
||||
db.session.commit()
|
||||
|
||||
print("Populated letter contacts for {} services".format(result.rowcount))
|
||||
|
||||
@@ -358,15 +358,13 @@ def dao_fetch_monthly_historical_stats_for_service(service_id, year):
|
||||
|
||||
|
||||
@statsd(namespace='dao')
|
||||
def dao_fetch_todays_stats_for_all_services(include_from_test_key=True, trial_mode_services=None):
|
||||
def dao_fetch_todays_stats_for_all_services(include_from_test_key=True):
|
||||
|
||||
query = db.session.query(
|
||||
Notification.notification_type,
|
||||
Notification.status,
|
||||
Notification.service_id,
|
||||
func.count(Notification.id).label('count')
|
||||
).join(
|
||||
Service
|
||||
).filter(
|
||||
func.date(Notification.created_at) == date.today(),
|
||||
).group_by(
|
||||
@@ -380,9 +378,6 @@ def dao_fetch_todays_stats_for_all_services(include_from_test_key=True, trial_mo
|
||||
if not include_from_test_key:
|
||||
query = query.filter(Notification.key_type != KEY_TYPE_TEST)
|
||||
|
||||
if trial_mode_services is not None:
|
||||
query = query.filter(Service.restricted == trial_mode_services)
|
||||
|
||||
return query.all()
|
||||
|
||||
|
||||
|
||||
@@ -208,8 +208,7 @@ class Service(db.Model, Versioned):
|
||||
created_by = db.relationship('User')
|
||||
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), index=True, nullable=False)
|
||||
_reply_to_email_address = db.Column("reply_to_email_address", db.Text, index=False, unique=False, nullable=True)
|
||||
letter_contact_block = db.Column(db.Text, index=False, unique=False, nullable=True)
|
||||
# This column is now deprecated
|
||||
_letter_contact_block = db.Column('letter_contact_block', db.Text, index=False, unique=False, nullable=True)
|
||||
sms_sender = db.Column(db.String(11), nullable=False, default=lambda: current_app.config['FROM_NUMBER'])
|
||||
organisation_id = db.Column(UUID(as_uuid=True), db.ForeignKey('organisation.id'), index=True, nullable=True)
|
||||
organisation = db.relationship('Organisation')
|
||||
@@ -274,8 +273,7 @@ class Service(db.Model, Versioned):
|
||||
if len(default_letter_contact) > 1:
|
||||
raise Exception("There should only ever be one default")
|
||||
else:
|
||||
return default_letter_contact[0].contact_block if default_letter_contact else \
|
||||
self.letter_contact_block # need to update this to None after dropping the letter_contact_block column
|
||||
return default_letter_contact[0].contact_block if default_letter_contact else None
|
||||
|
||||
|
||||
class InboundNumber(db.Model):
|
||||
@@ -549,7 +547,7 @@ class Template(db.Model):
|
||||
return LetterDVLATemplate(
|
||||
{'content': self.content, 'subject': self.subject},
|
||||
notification_reference=1,
|
||||
contact_block=self.service.letter_contact_block,
|
||||
contact_block=self.service.get_default_letter_contact(),
|
||||
)
|
||||
|
||||
def serialize(self):
|
||||
@@ -1450,3 +1448,24 @@ class ServiceLetterContact(db.Model):
|
||||
'created_at': self.created_at.strftime(DATETIME_FORMAT),
|
||||
'updated_at': self.updated_at.strftime(DATETIME_FORMAT) if self.updated_at else None
|
||||
}
|
||||
|
||||
|
||||
class NotificationEmailReplyTo(db.Model):
|
||||
__tablename__ = "notification_to_email_reply_to"
|
||||
|
||||
notification_id = db.Column(
|
||||
UUID(as_uuid=True),
|
||||
db.ForeignKey('notifications.id'),
|
||||
unique=True,
|
||||
index=True,
|
||||
nullable=False,
|
||||
primary_key=True
|
||||
)
|
||||
service_email_reply_to_id = db.Column(
|
||||
UUID(as_uuid=True),
|
||||
db.ForeignKey('service_email_reply_to.id'),
|
||||
unique=False,
|
||||
index=True,
|
||||
nullable=False,
|
||||
primary_key=True
|
||||
)
|
||||
|
||||
@@ -184,6 +184,7 @@ class ServiceSchema(BaseSchema):
|
||||
override_flag = False
|
||||
reply_to_email_address = fields.Method(method_name="get_reply_to_email_address")
|
||||
sms_sender = fields.Method(method_name="get_sms_sender")
|
||||
letter_contact_block = fields.Method(method_name="get_letter_contact")
|
||||
|
||||
def get_free_sms_fragment_limit(selfs, service):
|
||||
return service.free_sms_fragment_limit()
|
||||
@@ -197,9 +198,12 @@ class ServiceSchema(BaseSchema):
|
||||
def get_sms_sender(self, service):
|
||||
return service.get_default_sms_sender()
|
||||
|
||||
def get_letter_contact(self, service):
|
||||
return service.get_default_letter_contact()
|
||||
|
||||
class Meta:
|
||||
model = models.Service
|
||||
dump_only = ['free_sms_fragment_limit', 'reply_to_email_address']
|
||||
dump_only = ['free_sms_fragment_limit', 'reply_to_email_address', 'letter_contact_block']
|
||||
exclude = (
|
||||
'updated_at',
|
||||
'created_at',
|
||||
|
||||
@@ -90,7 +90,6 @@ def get_services():
|
||||
detailed = request.args.get('detailed') == 'True'
|
||||
user_id = request.args.get('user_id', None)
|
||||
include_from_test_key = request.args.get('include_from_test_key', 'True') != 'False'
|
||||
trial_mode_services = request.args.get('trial_mode_services')
|
||||
|
||||
# If start and end date are not set, we are expecting today's stats.
|
||||
today = str(datetime.utcnow().date())
|
||||
@@ -103,8 +102,7 @@ def get_services():
|
||||
elif detailed:
|
||||
result = jsonify(data=get_detailed_services(start_date=start_date, end_date=end_date,
|
||||
only_active=only_active,
|
||||
include_from_test_key=include_from_test_key,
|
||||
trial_mode_services=trial_mode_services
|
||||
include_from_test_key=include_from_test_key
|
||||
))
|
||||
return result
|
||||
else:
|
||||
@@ -149,7 +147,6 @@ def update_service(service_id):
|
||||
fetched_service = dao_fetch_service_by_id(service_id)
|
||||
# Capture the status change here as Marshmallow changes this later
|
||||
service_going_live = fetched_service.restricted and not req_json.get('restricted', True)
|
||||
|
||||
current_data = dict(service_schema.dump(fetched_service).data.items())
|
||||
current_data.update(request.get_json())
|
||||
update_dict = service_schema.load(current_data).data
|
||||
@@ -369,12 +366,10 @@ def get_detailed_service(service_id, today_only=False):
|
||||
return detailed_service_schema.dump(service).data
|
||||
|
||||
|
||||
def get_detailed_services(start_date, end_date, only_active=False, include_from_test_key=True,
|
||||
trial_mode_services=None):
|
||||
def get_detailed_services(start_date, end_date, only_active=False, include_from_test_key=True):
|
||||
services = {service.id: service for service in dao_fetch_all_services(only_active)}
|
||||
if start_date == datetime.utcnow().date():
|
||||
stats = dao_fetch_todays_stats_for_all_services(include_from_test_key=include_from_test_key,
|
||||
trial_mode_services=trial_mode_services)
|
||||
stats = dao_fetch_todays_stats_for_all_services(include_from_test_key=include_from_test_key)
|
||||
else:
|
||||
|
||||
stats = fetch_stats_by_date_range_for_all_services(start_date=start_date,
|
||||
|
||||
Reference in New Issue
Block a user