diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/templates/blotter.html | 2 | ||||
| -rw-r--r-- | python/Dawn/templates/cds_blotter.html | 2 | ||||
| -rw-r--r-- | python/Dawn/templates/cds_trade_entry.html | 45 | ||||
| -rw-r--r-- | python/Dawn/templates/trade_entry.html | 13 | ||||
| -rw-r--r-- | python/Dawn/views.py | 120 |
5 files changed, 71 insertions, 111 deletions
diff --git a/python/Dawn/templates/blotter.html b/python/Dawn/templates/blotter.html index 96d28f79..1016f0ef 100644 --- a/python/Dawn/templates/blotter.html +++ b/python/Dawn/templates/blotter.html @@ -20,7 +20,7 @@ </thead> {% for trade in trades %} <tr> - <td><a href="{{url_for('trade_manage', tradeid=trade.id)}}">{{trade.dealid}}</a></td> + <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='bond')}}">{{trade.dealid}}</a></td> <td>{{trade.trade_date}}</td> <td>{{trade.settle_date}}</td> <td>{% if trade.buysell %}Buy{% else %}Sell{% endif %}</td> diff --git a/python/Dawn/templates/cds_blotter.html b/python/Dawn/templates/cds_blotter.html index f0ce8d44..afa22586 100644 --- a/python/Dawn/templates/cds_blotter.html +++ b/python/Dawn/templates/cds_blotter.html @@ -17,7 +17,7 @@ </thead> {% for trade in trades %} <tr> - <td><a href="{{url_for('cds_trade_manage', tradeid=trade.id)}}">{{trade.dealid}}</a></td> + <td><a href="{{url_for('trade_manage', tradeid=trade.id, kind='cds')}}">{{trade.dealid}}</a></td> <td>{{trade.trade_date}}</td> <td>{{trade.protection}}</td> <td>{{trade.security_desc}}</td> diff --git a/python/Dawn/templates/cds_trade_entry.html b/python/Dawn/templates/cds_trade_entry.html deleted file mode 100644 index 84971a29..00000000 --- a/python/Dawn/templates/cds_trade_entry.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> - </head> - <body style="max-width:1024px; margin:0 auto"> - <datalist id="index_list"></datalist> - <form method="POST" class="form-horizontal" - action="{{url_for('cds_trade_manage', tradeid=trade_id)}}" enctype="multipart/form-data"> - {% for field in form if field.type != 'BooleanField' %} - <div class="form-group {% if field.id in errors %}has-error{% endif %}"> - {% if field.type != 'CSRFTokenField' %} - <label class="control-label col-md-2" for="{{ field.id }}"> - {{ field.label.text }} - </label> - {% endif %} - <div class="col-md-3"> - {{ field(class_="form-control") }} - </div> - {% if field.id in errors %} - <div class="col-md-3"> - {{errors[field.id][0]}} - </div>{% endif %} - </div> - {% endfor %} - <div class="form-group"> - <div class="col-md-offset-2 col-md-3"> - <div class="checkbox"> - <label> - <input id="upload_globeop" name="upload_globeop" type="checkbox" value="y">Upload to globeop? - </label> - </div> - </div> - </div> - <div class="form-group"> - <div class="col-md-offset-2 col-md-3"> - <button type="submit" class="btn btn-default">Submit</button> - </div> - </div> - </form> - <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script> - <script type="text/javascript" src="{{ url_for('static', filename='dawn.js') }}"></script> - </body> -</html> diff --git a/python/Dawn/templates/trade_entry.html b/python/Dawn/templates/trade_entry.html index abc59550..303a7423 100644 --- a/python/Dawn/templates/trade_entry.html +++ b/python/Dawn/templates/trade_entry.html @@ -5,10 +5,11 @@ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"> </head> <body style="max-width:1024px; margin:0 auto"> + <datalist id="index_list"></datalist> <form method="POST" class="form-horizontal" - action="{{url_for('trade_manage', tradeid=trade_id)}}" enctype="multipart/form-data"> + action="{{action_url}}" enctype="multipart/form-data"> {% for field in form if field.type != 'BooleanField' %} - <div class="form-group"> + <div class="form-group {% if field.id in form.errors %}has-error{% endif %}"> {% if field.type != 'CSRFTokenField' %} <label class="control-label col-md-2" for="{{ field.id }}"> {{ field.label.text }} @@ -17,6 +18,10 @@ <div class="col-md-3"> {{ field(class_="form-control") }} </div> + {% if field.id in form.errors %} + <div class="col-md-3"> + {{form.errors[field.id][0]}} + </div>{% endif %} </div> {% endfor %} <div class="form-group"> @@ -34,5 +39,9 @@ </div> </div> </form> + {% if 'cds' in action_url %} + <script type="text/javascript" src="{{ url_for('static', filename='utils.js') }}"></script> + <script type="text/javascript" src="{{ url_for('static', filename='dawn.js') }}"></script> + {% endif %} </body> </html> diff --git a/python/Dawn/views.py b/python/Dawn/views.py index 5f267f1b..c36007be 100644 --- a/python/Dawn/views.py +++ b/python/Dawn/views.py @@ -67,13 +67,15 @@ class CDSForm(ModelForm): include_foreign_keys = True exclude = ['dealid', 'lastupdate'] -@app.route('/trades/<int:tradeid>', methods=['GET', 'POST']) -@app.route('/trades/', defaults={'tradeid': None}, methods=['GET', 'POST']) -def trade_manage(tradeid): - trade = BondDeal.query.get(tradeid) if tradeid else BondDeal() - if tradeid: +def cds_trade(tradeid): + return CDSDeal.query.get(tradeid) if tradeid else CDSDeal() + +def bond_trade(tradeid): + return BondDeal.query.get(tradeid) if tradeid else BondDeal() + +def bond_form(trade): + if trade.id: bond_form = BondForm(obj = trade) - old_ticket_name = trade.ticket else: bond_form = BondForm(trade_date = pd.datetime.today().date(), settle_date = pd.datetime.today().date() + 3 * bus_day) @@ -81,44 +83,10 @@ def trade_manage(tradeid): bond_form.folder.choices = [(None, '')] + bond_form.folder.choices bond_form.buysell.choices = [(None, '')] + bond_form.buysell.choices bond_form.asset_class.choices = [(None, '')] + bond_form.asset_class.choices - bond_form.cp_code.choices = bond_form.cp_code.choices + list(cp_choices()) - if bond_form.is_submitted(): - if bond_form.validate(): - bond_form.populate_obj(trade) - session = bond_form.get_session() - ticket_file = trade.ticket - trade.ticket = None - if not tradeid: - session.add(trade) - if ticket_file.filename == '': - if tradeid: - trade.ticket = old_ticket_name - else: - if tradeid and old_ticket_name: - trade.ticket = bump_rev(old_ticket_name) - else: - trade.ticket = "{0} {1}.pdf".format(str(trade.trade_date), - trade.description) - ticket_file.save(os.path.join(app.config['TICKETS_FOLDER'], - trade.ticket)) - try: - session.commit() - except IntegrityError as e: - app.logger.error(e) - else: - if bond_form.upload_globeop.data: - q = get_queue() - q.rpush('bond_trades', simple_serialize(trade)) - return redirect(url_for('list_trades')) - else: - return str(bond_form.errors) - return render_template('trade_entry.html', form=bond_form, trade_id=tradeid) + return bond_form -@app.route('/cdstrades/<int:tradeid>', methods=['GET', 'POST']) -@app.route('/cdstrades/', defaults={'tradeid': None}, methods=['GET', 'POST']) -def cds_trade_manage(tradeid): - trade = CDSDeal.query.get(tradeid) if tradeid else CDSDeal() - if tradeid: +def cds_form(trade): + if trade.id: cds_form = CDSForm(obj = trade) else: today = pd.datetime.today() @@ -126,29 +94,57 @@ def cds_trade_manage(tradeid): cds_form = CDSForm(trade_date = today.date(), effective_date= tomorrow.date(), upfront_settle_date = today.date() + 3 * bus_day) - cds_form.cp_code.choices = cds_form.cp_code.choices + list(cp_choices()) - if cds_form.is_submitted(): - if cds_form.validate(): - cds_form.populate_obj(trade) - session = cds_form.get_session() - if not tradeid: - session.add(trade) - try: - session.commit() - except IntegrityError as e: - app.logger.error(e) - else: - if cds_form.upload_globeop.data: - q = get_queue() - q.rpush('cds_trades', simple_serialize(trade)) - return redirect(url_for('list_cds_trades')) + return cds_form + +def save_ticket(trade, old_ticket_name): + if trade.ticket.filename: + if old_ticket_name: + new_name = bump_rev(old_ticket_name) + else: + new_name = "{0} {1}.pdf".format(str(trade.trade_date), + trade.description) + trade.ticket.save(os.path.join(app.config['TICKETS_FOLDER'], + new_name)) + trade.ticket = new_name + else: + trade.ticket = old_ticket_name + +@app.route('/trades/<int:tradeid>', defaults={'kind': 'bond'}, methods=['GET', 'POST']) +@app.route('/trades/', defaults={'tradeid': None, 'kind': 'bond'}, methods=['GET', 'POST']) +@app.route('/cdstrades/<int:tradeid>', defaults={'kind': 'cds'}, methods=['GET', 'POST']) +@app.route('/cdstrades/', defaults={'tradeid': None, 'kind': 'cds'}, methods=['GET', 'POST']) +def trade_manage(tradeid, kind): + trade = globals()['{0}_trade'.format(kind)](tradeid) + form = globals()['{0}_form'.format(kind)](trade) + if kind=='bond': + old_ticket_name = trade.ticket + form.cp_code.choices = form.cp_code.choices + list(cp_choices()) + if form.validate_on_submit(): + form.populate_obj(trade) + session = form.get_session() + if not tradeid: + session.add(trade) + if kind == 'bond': + save_ticket(trade, old_ticket_name) + try: + session.commit() + except IntegrityError as e: + app.logger.error(e) + session.rollback() + return render_template('trade_entry.html', form = form, + action_url = + url_for('trade_manage', tradeid = tradeid, kind = kind)) else: - return render_template('cds_trade_entry.html', form=cds_form, trade_id = None, errors = cds_form.errors) - return render_template('cds_trade_entry.html', form=cds_form, trade_id=tradeid) + if form.upload_globeop.data: + q = get_queue() + q.rpush('{0}_trades',format(kind), simple_serialize(trade)) + return redirect(url_for('list_{0}_trades'.format(kind))) + return render_template('trade_entry.html', form=form, + action_url = url_for('trade_manage', tradeid = tradeid, kind = kind)) @app.route('/') @app.route('/blotter/') -def list_trades(): +def list_bond_trades(): trade_list = BondDeal.query.order_by(BondDeal.trade_date.desc(), BondDeal.id.desc()) return render_template('blotter.html', trades=trade_list.all()) |
