mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-16 20:48:37 -04:00
Merge branch 'master' into remove-nasty-query-from-dashboard
Conflicts: app/service/rest.py tests/app/service/test_rest.py
This commit is contained in:
@@ -30,7 +30,7 @@ from app import (
|
||||
)
|
||||
|
||||
from app.history_meta import Versioned
|
||||
from app.utils import get_utc_time_in_bst
|
||||
from app.utils import convert_utc_time_in_bst, convert_bst_to_utc
|
||||
|
||||
SMS_TYPE = 'sms'
|
||||
EMAIL_TYPE = 'email'
|
||||
@@ -146,8 +146,10 @@ class DVLAOrganisation(db.Model):
|
||||
|
||||
INTERNATIONAL_SMS_TYPE = 'international_sms'
|
||||
INBOUND_SMS_TYPE = 'inbound_sms'
|
||||
SCHEDULE_NOTIFICATIONS = 'schedule_notifications'
|
||||
|
||||
SERVICE_PERMISSION_TYPES = [EMAIL_TYPE, SMS_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE, INBOUND_SMS_TYPE]
|
||||
SERVICE_PERMISSION_TYPES = [EMAIL_TYPE, SMS_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE, INBOUND_SMS_TYPE,
|
||||
SCHEDULE_NOTIFICATIONS]
|
||||
|
||||
|
||||
class ServicePermissionTypes(db.Model):
|
||||
@@ -215,6 +217,21 @@ class Service(db.Model, Versioned):
|
||||
self.can_send_letters = LETTER_TYPE in [p.permission for p in self.permissions]
|
||||
self.can_send_international_sms = INTERNATIONAL_SMS_TYPE in [p.permission for p in self.permissions]
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, data):
|
||||
"""
|
||||
Assumption: data has been validated appropriately.
|
||||
|
||||
Returns a Service object based on the provided data. Deserialises created_by to created_by_id as marshmallow
|
||||
would.
|
||||
"""
|
||||
# validate json with marshmallow
|
||||
fields = data.copy()
|
||||
|
||||
fields['created_by_id'] = fields.pop('created_by')
|
||||
|
||||
return cls(**fields)
|
||||
|
||||
|
||||
class ServicePermission(db.Model):
|
||||
__tablename__ = "service_permissions"
|
||||
@@ -226,7 +243,8 @@ class ServicePermission(db.Model):
|
||||
service = db.relationship("Service")
|
||||
created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow, nullable=False)
|
||||
|
||||
service_permission_types = db.relationship(Service, backref=db.backref("permissions"))
|
||||
service_permission_types = db.relationship(
|
||||
Service, backref=db.backref("permissions", cascade="all, delete-orphan"))
|
||||
|
||||
def __repr__(self):
|
||||
return '<{} has service permission: {}>'.format(self.service_id, self.permission)
|
||||
@@ -682,6 +700,7 @@ class Notification(db.Model):
|
||||
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
to = db.Column(db.String, nullable=False)
|
||||
normalised_to = db.Column(db.String, nullable=True)
|
||||
job_id = db.Column(UUID(as_uuid=True), db.ForeignKey('jobs.id'), index=True, unique=False)
|
||||
job = db.relationship('Job', backref=db.backref('notifications', lazy='dynamic'))
|
||||
job_row_number = db.Column(db.Integer, nullable=True)
|
||||
@@ -730,6 +749,8 @@ class Notification(db.Model):
|
||||
foreign(template_version) == remote(TemplateHistory.version)
|
||||
))
|
||||
|
||||
scheduled_notification = db.relationship('ScheduledNotification', uselist=False)
|
||||
|
||||
client_reference = db.Column(db.String, index=True, nullable=True)
|
||||
|
||||
international = db.Column(db.Boolean, nullable=False, default=False)
|
||||
@@ -851,7 +872,7 @@ class Notification(db.Model):
|
||||
}[self.template.template_type].get(self.status, self.status)
|
||||
|
||||
def serialize_for_csv(self):
|
||||
created_at_in_bst = get_utc_time_in_bst(self.created_at)
|
||||
created_at_in_bst = convert_utc_time_in_bst(self.created_at)
|
||||
serialized = {
|
||||
"row_number": '' if self.job_row_number is None else self.job_row_number + 1,
|
||||
"recipient": self.to,
|
||||
@@ -890,7 +911,9 @@ class Notification(db.Model):
|
||||
"subject": self.subject,
|
||||
"created_at": self.created_at.strftime(DATETIME_FORMAT),
|
||||
"sent_at": self.sent_at.strftime(DATETIME_FORMAT) if self.sent_at else None,
|
||||
"completed_at": self.completed_at()
|
||||
"completed_at": self.completed_at(),
|
||||
"scheduled_for": convert_bst_to_utc(self.scheduled_notification.scheduled_for
|
||||
).strftime(DATETIME_FORMAT) if self.scheduled_notification else None
|
||||
}
|
||||
|
||||
return serialized
|
||||
@@ -956,6 +979,16 @@ class NotificationHistory(db.Model, HistoryModel):
|
||||
INVITED_USER_STATUS_TYPES = ['pending', 'accepted', 'cancelled']
|
||||
|
||||
|
||||
class ScheduledNotification(db.Model):
|
||||
__tablename__ = 'scheduled_notifications'
|
||||
|
||||
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
notification_id = db.Column(UUID(as_uuid=True), db.ForeignKey('notifications.id'), index=True, nullable=False)
|
||||
notification = db.relationship('Notification', uselist=False)
|
||||
scheduled_for = db.Column(db.DateTime, index=False, nullable=False)
|
||||
pending = db.Column(db.Boolean, nullable=False, default=True)
|
||||
|
||||
|
||||
class InvitedUser(db.Model):
|
||||
__tablename__ = 'invited_users'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user