diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/__init__.py | 2 | ||||
| -rw-r--r-- | python/Dawn/models.py | 53 | ||||
| -rw-r--r-- | python/Dawn/views.py | 27 |
3 files changed, 41 insertions, 41 deletions
diff --git a/python/Dawn/__init__.py b/python/Dawn/__init__.py index 498ef6a5..b57c1f33 100644 --- a/python/Dawn/__init__.py +++ b/python/Dawn/__init__.py @@ -21,4 +21,4 @@ if not app.debug: import Dawn.views -app.jinja_env.globals.update(bus_day=Dawn.views.bus_day) +app.jinja_env.globals.update(bus_day=Dawn.models.bus_day) diff --git a/python/Dawn/models.py b/python/Dawn/models.py index b9eca2e6..3e472d7a 100644 --- a/python/Dawn/models.py +++ b/python/Dawn/models.py @@ -1,5 +1,10 @@ from flask_wtf import FlaskForm from flask_wtf.file import FileField + +from pandas.tseries.offsets import CustomBusinessDay +from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday +from pyisda.date import previous_twentieth + from sqlalchemy.dialects.postgresql import ENUM from wtforms.validators import Length from wtforms_alchemy import model_form_factory @@ -7,6 +12,12 @@ from sqlalchemy_utils import EmailType, PhoneNumberType from . import db +import datetime + +fed_cal = get_calendar("USFederalHolidayCalendar") +bond_cal = HolidayCalendarFactory("BondCalendar", fed_cal, GoodFriday) +bus_day = CustomBusinessDay(calendar=bond_cal()) + class Counterparties(db.Model): __tablename__ = "counterparties" @@ -261,8 +272,10 @@ class BondDeal(db.Model): info={"choices": [(None, "")], "label": "counterparty"}, nullable=False, ) - trade_date = db.Column(db.Date, nullable=False) - settle_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) + settle_date = db.Column( + db.Date, nullable=False, default=lambda: datetime.date.today() + 2 * bus_day + ) cusip = db.Column( db.String(9), info={ @@ -327,8 +340,12 @@ class CDSDeal(db.Model): info={"choices": [(None, "")], "label": "counterparty"}, nullable=False, ) - trade_date = db.Column(db.Date, nullable=False) - effective_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) + effective_date = db.Column( + db.Date, + nullable=False, + default=lambda: previous_twentieth(datetime.date.today()), + ) maturity = db.Column(db.Date, nullable=False) currency = db.Column(CCY, nullable=False) payment_rolldate = db.Column(BUS_DAY_CONVENTION, nullable=False) @@ -340,7 +357,9 @@ class CDSDeal(db.Model): security_id = db.Column(db.String(12), nullable=False) security_desc = db.Column(db.String(32), nullable=False) upfront = db.Column(db.Float) - upfront_settle_date = db.Column(db.Date, nullable=False) + upfront_settle_date = db.Column( + db.Date, nullable=False, default=lambda: datetime.date.today() + bus_day + ) initial_margin_percentage = db.Column(db.Float) swap_type = db.Column(SWAP_TYPE, nullable=False) orig_attach = db.Column(db.SmallInteger, info={"min": 0, "max": 100}) @@ -450,8 +469,10 @@ class SwaptionDeal(db.Model): nullable=False, ) swap_type = db.Column(SWAPTION_TYPE, nullable=False) - trade_date = db.Column(db.Date, nullable=False) - settle_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) + settle_date = db.Column( + db.Date, nullable=False, default=lambda: default.date.today() + 3 * bus_day + ) buysell = db.Column( db.Boolean, nullable=False, @@ -494,8 +515,10 @@ class FutureDeal(db.Model): info={"choices": [("IBKRNY", "Interactive Brokers")], "label": "counterparty"}, nullable=False, ) - trade_date = db.Column(db.Date, nullable=False) - settle_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) + settle_date = db.Column( + db.Date, nullable=False, default=lambda: datetime.date.today() + 2 * bus_day + ) buysell = db.Column( db.Boolean, nullable=False, @@ -528,7 +551,7 @@ class CashFlowDeal(db.Model): code = db.Column(db.String(5), db.ForeignKey("accounts.code"), nullable=False) amount = db.Column(db.Float, nullable=False) currency = db.Column(CCY, nullable=False) - trade_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) account = db.relationship(Accounts) @@ -550,8 +573,10 @@ class SpotDeal(db.Model): info={"choices": [("IBKRNY", "Interactive Brokers")], "label": "counterparty"}, nullable=False, ) - trade_date = db.Column(db.Date, nullable=False) - settle_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) + settle_date = db.Column( + db.Date, nullable=False, default=lambda: datetime.date.today() + 2 * bus_day + ) spot_rate = db.Column(db.Float, nullable=False) buy_currency = db.Column(CCY, nullable=False) buy_amount = db.Column(db.Float, nullable=False) @@ -620,7 +645,7 @@ class CapFloorDeal(db.Model): initial_margin_percentage = db.Column(db.Float) initial_margin_currency = db.Column(CCY) amount = db.Column(db.Float, nullable=False, info={"label": "notional"}) - trade_date = db.Column(db.Date, nullable=False) + trade_date = db.Column(db.Date, nullable=False, default=datetime.date.today) swap_type = db.Column(CAPFLOOR_TYPE, nullable=False) reset_lag = db.Column(db.Integer, default=2) trade_confirm = db.Column(db.String, info={"form_field_class": FileField}) @@ -632,7 +657,7 @@ class Termination(db.Model): __tablename__ = "terminations" id = db.Column("id", db.Integer, primary_key=True) dealid = db.Column(db.String(28), nullable=False) - termination_date = db.Column(db.Date, nullable=False) + termination_date = db.Column(db.Date, nullable=False, default=datetime.date.today) termination_cp = db.Column( db.String(12), db.ForeignKey("counterparties.code"), diff --git a/python/Dawn/views.py b/python/Dawn/views.py index 77f90acc..1149b078 100644 --- a/python/Dawn/views.py +++ b/python/Dawn/views.py @@ -36,20 +36,12 @@ from .models import ( from sqlalchemy.exc import IntegrityError from wtforms.fields import BooleanField -from pandas.tseries.offsets import CustomBusinessDay -from pandas.tseries.holiday import get_calendar, HolidayCalendarFactory, GoodFriday -from pyisda.date import previous_twentieth - from .utils import bump_rev, simple_serialize from PyPDF2 import PdfFileMerger from io import BytesIO from . import app from . import db -fed_cal = get_calendar("USFederalHolidayCalendar") -bond_cal = HolidayCalendarFactory("BondCalendar", fed_cal, GoodFriday) -bus_day = CustomBusinessDay(calendar=bond_cal()) - def cp_choices(kind="bond"): if kind == "bond": @@ -226,24 +218,7 @@ def get_form(trade, kind): if trade.id: form = Form(obj=trade) else: - today = pd.datetime.today() - tomorrow = today + pd.DateOffset(1) - if kind == "cds": - form = Form( - trade_date=today.date(), - effective_date=previous_twentieth(today.date()), - upfront_settle_date=today.date() + 1 * bus_day, - ) - - elif kind == "swaption": - form = Form( - trade_date=today.date(), - effective_date=tomorrow.date(), - settle_date=today.date() + 3 * bus_day, - ) - - else: - form = Form(trade_date=today.date(), settle_date=today.date() + 2 * bus_day) + form = Form() # add extra empty fields empty_choice = (None, "") for attr in ["folder", "buysell", "asset_class", "swaption_type"]: |
