2020-12-02 18:34:17 +00:00
|
|
|
import uuid
|
2021-08-05 18:32:06 +01:00
|
|
|
from datetime import datetime
|
2021-08-06 18:06:49 +01:00
|
|
|
|
2021-08-05 18:32:06 +01:00
|
|
|
from sqlalchemy import desc
|
2020-12-02 18:34:17 +00:00
|
|
|
|
2020-11-16 18:48:00 +00:00
|
|
|
from app import db
|
2021-04-14 07:11:01 +01:00
|
|
|
from app.dao.dao_utils import autocommit
|
2020-12-02 18:34:17 +00:00
|
|
|
from app.models import (
|
|
|
|
|
BroadcastEvent,
|
2021-03-10 13:55:06 +00:00
|
|
|
BroadcastMessage,
|
2020-12-04 17:45:23 +00:00
|
|
|
BroadcastProvider,
|
2020-12-02 18:34:17 +00:00
|
|
|
BroadcastProviderMessage,
|
|
|
|
|
BroadcastProviderMessageNumber,
|
2021-03-10 13:55:06 +00:00
|
|
|
BroadcastProviderMessageStatus,
|
2021-08-06 17:37:57 +01:00
|
|
|
BroadcastStatusType,
|
2021-08-06 18:06:49 +01:00
|
|
|
ServiceBroadcastSettings,
|
2020-12-02 18:34:17 +00:00
|
|
|
)
|
2020-07-07 11:42:38 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id):
|
|
|
|
|
return BroadcastMessage.query.filter(
|
|
|
|
|
BroadcastMessage.id == broadcast_message_id,
|
|
|
|
|
BroadcastMessage.service_id == service_id
|
|
|
|
|
).one()
|
|
|
|
|
|
|
|
|
|
|
2022-01-19 15:41:38 +00:00
|
|
|
def dao_get_broadcast_message_by_references(references_to_original_broadcast):
|
|
|
|
|
return BroadcastMessage.query.filter(
|
|
|
|
|
BroadcastMessage.reference.in_(references_to_original_broadcast),
|
|
|
|
|
).one()
|
|
|
|
|
|
|
|
|
|
|
2020-08-04 19:21:22 +01:00
|
|
|
def dao_get_broadcast_event_by_id(broadcast_event_id):
|
2020-12-02 14:10:46 +00:00
|
|
|
return BroadcastEvent.query.filter(BroadcastEvent.id == broadcast_event_id).one()
|
2020-08-04 19:21:22 +01:00
|
|
|
|
|
|
|
|
|
2020-07-07 11:42:38 +01:00
|
|
|
def dao_get_broadcast_messages_for_service(service_id):
|
|
|
|
|
return BroadcastMessage.query.filter(
|
|
|
|
|
BroadcastMessage.service_id == service_id
|
|
|
|
|
).order_by(BroadcastMessage.created_at)
|
2020-07-24 12:46:28 +01:00
|
|
|
|
|
|
|
|
|
2021-08-05 18:32:06 +01:00
|
|
|
def dao_get_all_broadcast_messages():
|
2021-08-06 17:37:57 +01:00
|
|
|
return db.session.query(
|
|
|
|
|
BroadcastMessage.id,
|
|
|
|
|
BroadcastMessage.reference,
|
|
|
|
|
ServiceBroadcastSettings.channel,
|
|
|
|
|
BroadcastMessage.content,
|
|
|
|
|
BroadcastMessage.areas,
|
|
|
|
|
BroadcastMessage.status,
|
|
|
|
|
BroadcastMessage.starts_at,
|
|
|
|
|
BroadcastMessage.finishes_at,
|
|
|
|
|
BroadcastMessage.approved_at,
|
|
|
|
|
BroadcastMessage.cancelled_at,
|
|
|
|
|
).join(
|
|
|
|
|
ServiceBroadcastSettings, ServiceBroadcastSettings.service_id == BroadcastMessage.service_id
|
|
|
|
|
).filter(
|
2021-08-05 18:32:06 +01:00
|
|
|
BroadcastMessage.starts_at >= datetime(2021, 5, 25, 0, 0, 0),
|
|
|
|
|
BroadcastMessage.stubbed == False, # noqa
|
|
|
|
|
BroadcastMessage.status.in_(BroadcastStatusType.LIVE_STATUSES)
|
|
|
|
|
).order_by(desc(BroadcastMessage.starts_at)).all()
|
|
|
|
|
|
|
|
|
|
|
2020-07-27 15:33:29 +01:00
|
|
|
def get_earlier_events_for_broadcast_event(broadcast_event_id):
|
2020-07-24 12:46:28 +01:00
|
|
|
"""
|
|
|
|
|
This is used to build up the references list.
|
|
|
|
|
"""
|
|
|
|
|
this_event = BroadcastEvent.query.get(broadcast_event_id)
|
2020-07-27 15:33:29 +01:00
|
|
|
|
2020-07-24 12:46:28 +01:00
|
|
|
return BroadcastEvent.query.filter(
|
2020-07-27 15:33:29 +01:00
|
|
|
BroadcastEvent.broadcast_message_id == this_event.broadcast_message_id,
|
2020-07-24 12:46:28 +01:00
|
|
|
BroadcastEvent.sent_at < this_event.sent_at
|
|
|
|
|
).order_by(
|
|
|
|
|
BroadcastEvent.sent_at.asc()
|
2020-07-27 15:33:29 +01:00
|
|
|
).all()
|
2020-11-16 18:48:00 +00:00
|
|
|
|
|
|
|
|
|
2021-04-14 07:11:01 +01:00
|
|
|
@autocommit
|
2020-11-16 18:48:00 +00:00
|
|
|
def create_broadcast_provider_message(broadcast_event, provider):
|
2020-12-02 18:34:17 +00:00
|
|
|
broadcast_provider_message_id = uuid.uuid4()
|
2020-11-16 18:48:00 +00:00
|
|
|
provider_message = BroadcastProviderMessage(
|
2020-12-02 18:34:17 +00:00
|
|
|
id=broadcast_provider_message_id,
|
2020-11-16 18:48:00 +00:00
|
|
|
broadcast_event=broadcast_event,
|
|
|
|
|
provider=provider,
|
|
|
|
|
status=BroadcastProviderMessageStatus.SENDING,
|
|
|
|
|
)
|
|
|
|
|
db.session.add(provider_message)
|
2020-12-02 18:34:17 +00:00
|
|
|
db.session.commit()
|
2020-12-04 17:45:23 +00:00
|
|
|
provider_message_number = None
|
|
|
|
|
if provider == BroadcastProvider.VODAFONE:
|
|
|
|
|
provider_message_number = BroadcastProviderMessageNumber(
|
|
|
|
|
broadcast_provider_message_id=broadcast_provider_message_id)
|
|
|
|
|
db.session.add(provider_message_number)
|
|
|
|
|
db.session.commit()
|
2020-12-09 11:41:22 +00:00
|
|
|
return provider_message
|
2021-02-09 17:01:04 +00:00
|
|
|
|
|
|
|
|
|
2021-04-14 07:11:01 +01:00
|
|
|
@autocommit
|
2021-02-09 17:01:04 +00:00
|
|
|
def update_broadcast_provider_message_status(broadcast_provider_message, *, status):
|
|
|
|
|
broadcast_provider_message.status = status
|