aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/Dawn/templates/capfloor_blotter.html15
-rw-r--r--python/Dawn/views.py34
2 files changed, 37 insertions, 12 deletions
diff --git a/python/Dawn/templates/capfloor_blotter.html b/python/Dawn/templates/capfloor_blotter.html
index e8cf14cf..66f9a2b4 100644
--- a/python/Dawn/templates/capfloor_blotter.html
+++ b/python/Dawn/templates/capfloor_blotter.html
@@ -5,35 +5,36 @@
<tr>
<td>Deal ID</td>
<td>Trade Date</td>
- <td>Settle Date</td>
<td>Buy/Sell</td>
<td>Notional</td>
<td>Type</td>
<td>Expiry</td>
<td>Strike</td>
<td>Price</td>
- <td>Description</td>
- <td>Red Code</td>
+ <td>FixedRate Index</td>
+ <td>Comments</td>
<td>Counterparty</td>
<td>Strategy</td>
+ <td>Confirm</td>
</tr>
</thead>
{% for trade in trades %}
<tr>
- <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='swaption')}}">{{trade.dealid}}</a></td>
+ <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='capfloor')}}">{{trade.dealid}}</a></td>
<td>{{trade.trade_date}}</td>
- <td>{{trade.settle_date}}</td>
<td>{% if trade.buysell %}Buy{% else %}Sell{% endif %}</td>
<td>{{"{0:,.2f}".format(trade.amount)}}</td>
- <td>{{trade.option_type}}</td>
+ <td>{{trade.swap_type}}</td>
<td>{{trade.expiration_date}}</td>
<td>{{trade.strike}}</td>
<td>{{trade.premium_percent}}</td>
<td>{{trade.floating_rate_index}}</td>
- <td>{{trade.floating_rate_index_desc}}</td>
+ <td>{{trade.comments}}</td>
<td><a href="{{url_for('edit_counterparty',
cpcode=trade.counterparty.code)}}">{{trade.counterparty.name}}</a></td>
<td>{{trade.folder}}</td>
+ <td>{%if trade.trade_confirm %}<a href="{{url_for('download_confirm', tradeid=trade.id)}}">
+ <span class="glyphicon glyphicon-file"></span></a>{% endif %}</td>
</tr>
{% endfor %}
</table>
diff --git a/python/Dawn/views.py b/python/Dawn/views.py
index c427e97c..1be3cb6d 100644
--- a/python/Dawn/views.py
+++ b/python/Dawn/views.py
@@ -99,6 +99,7 @@ class CDSForm(ModelForm):
exclude = ['dealid', 'lastupdate', 'termination_amount',
'termination_cp', 'termination_date']
+
class SwaptionForm(ModelForm):
upload_globeop = BooleanField(label="Upload to globeop?")
@@ -117,6 +118,7 @@ class FutureForm(ModelForm):
include_foreign_keys = True
exclude = ['dealid', 'lastupdate']
+
class CapFloorForm(ModelForm):
upload_globeop = BooleanField(label="Upload to globeop?")
@@ -126,6 +128,7 @@ class CapFloorForm(ModelForm):
exclude = ['dealid', 'lastupdate', 'termination_amount',
'termination_cp', 'termination_date']
+
def get_deal(kind):
if kind == 'cds':
return CDSDeal
@@ -172,7 +175,7 @@ def get_form(trade, kind):
else:
form = Form(trade_date=today.date(),
settle_date=today.date() + 2 * bus_day)
- #add extra empty fields
+ # add extra empty fields
empty_choice = (None, '')
for attr in ['folder', 'buysell', 'asset_class', 'swaption_type']:
try:
@@ -194,8 +197,7 @@ def save_ticket(trade, old_ticket_name):
if old_ticket_name:
new_name = bump_rev(old_ticket_name)
else:
- new_name = "{0} {1}.pdf".format(str(trade.trade_date),
- trade.description)
+ new_name = f"{trade.trade_date} {trade.description}.pdf"
trade.ticket.save(os.path.join(app.config['TICKETS_FOLDER'],
new_name))
trade.ticket = new_name
@@ -203,6 +205,18 @@ def save_ticket(trade, old_ticket_name):
trade.ticket = old_ticket_name
+def save_confirm(trade, old_confirm):
+ d = {'C': 'Cap',
+ 'F': 'Floor'}
+ if trade.trade_confirm:
+ file_name = f"{trade.trade_date} {d[trade.cap_or_floor]}.pdf"
+ trade.trade_confirm.save(os.path.join(app.config['CONFIRMS_FOLDER'],
+ file_name))
+ trade.trade_confirm = file_name
+ else:
+ trade.trade_confirm = old_confirm
+
+
def split_direction(g, direction):
if direction == "outgoing":
return [{"folder": cf.folder, "amount": -cf.amount, "code": cf.code,
@@ -227,7 +241,7 @@ def gen_cashflow_deals(form, session, wire_id=None):
if f"{direction}-code-{count}" not in form:
break
else:
- d .update({field: form.get(f"{direction}-{field}-{count}") for field \
+ d .update({field: form.get(f"{direction}-{field}-{count}") for field
in ["folder", "code", "amount", "currency"]})
count += 1
if direction == "outgoing":
@@ -247,7 +261,7 @@ def gen_cashflow_deals(form, session, wire_id=None):
yield cf
-@app.route('/wires/<int:wire_id>', methods = ['GET', 'POST'])
+@app.route('/wires/<int:wire_id>', methods=['GET', 'POST'])
@app.route('/wires/', defaults={'wire_id': None}, methods=['GET', 'POST'])
def wire_manage(wire_id):
if request.method == 'POST':
@@ -297,6 +311,8 @@ def trade_manage(tradeid, kind):
form.cp_code.choices = form.cp_code.choices + list(cp_choices(kind))
if kind == 'bond':
old_ticket_name = trade.ticket
+ if kind == 'capfloor':
+ old_confirm = trade.trade_confirm
if form.validate_on_submit():
form.populate_obj(trade)
session = form.get_session()
@@ -304,6 +320,8 @@ def trade_manage(tradeid, kind):
session.add(trade)
if kind == 'bond':
save_ticket(trade, old_ticket_name)
+ if kind == 'capfloor':
+ save_confirm(trade, old_confirm)
try:
session.commit()
except IntegrityError as e:
@@ -349,6 +367,12 @@ def download_ticket(tradeid):
fh.seek(0)
return send_file(fh, mimetype='application/pdf')
+@app.route('/confirms/<int:tradeid>')
+def download_confirm(tradeid):
+ trade = CapFloorDeal.query.get(tradeid)
+ return send_file(os.path.join(app.config['CONFIRMS_FOLDER'], trade.trade_confirm),
+ mimetype='application/pdf')
+
@app.route('/counterparties/<path:instr>', methods=['GET'])
@app.route('/counterparties/', defaults={'instr': None}, methods=['GET'])