diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/templates/capfloor_blotter.html | 15 | ||||
| -rw-r--r-- | python/Dawn/views.py | 34 |
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']) |
