diff options
Diffstat (limited to 'python/Dawn/views.py')
| -rw-r--r-- | python/Dawn/views.py | 120 |
1 files changed, 58 insertions, 62 deletions
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()) |
