def get(self, path, *args): model, pk = path.split("/") pk, format = pk.split(".") limit = self.get_argument("limit", None) custom_report = self.get_argument("report", None) criteria = self.get_argument("criteria", None) if criteria: logging.info("raw criteria:{}".format(criteria)) #criteria supplied as a list like url.dot?criteria="key1=val1|key2=val2" criteria = dict([c.split('=') for c in criteria.strip('"').split('|')]) if limit: try: limit = int(self.get_argument("limit", 100)) except: limit = 100 else: limit = -1 logging.debug("model=%s, pk=%s, format=%s, limit=%s, criteria=%s, custom_report=%s" % (model, pk, format, limit, criteria, custom_report)) if format == 'json': if pk != 'index': #model, pk, collections=[],surrogates=[] result = self.application.control.genoa_item(model,pk) else: #model, criteria=None, offset=None, limit=None, summary=None, order_by=None result = self.application.control.genoa_list(model, limit=limit, criteria=criteria) self.write(json_safe.dumps({"result": result})) else: fields = [] items = [] if custom_report == 'entity': # Accessed through url http://ims/report/Entity/index.html?report=entity fields, items = self.entity_report(model, limit) elif custom_report == 'directorships': # Accessed through url http://ims/report/E2C/index.html?report=directorships fields, items = self.kew_directors_report(model, limit) elif pk != 'index': result = self.application.control.genoa_item(model,pk) fields = ["field","value"] items = result.items() else: result = self.application.control.genoa_list(model, limit=limit, criteria=criteria) if result['items']: fields = [c for c in result['items'][0].keys() if c[0] != '_'] for item in result['items']: items.append([filter_surrogates(item[key]) for key in fields]) self.render('report_table.html', fields=fields, items=items, title=model)
def get(self, path, *args): model = 'Deal' pk, output_format = path.split(".") logging.debug("model=%s, pk=%s, output_format=%s".format(model, pk, output_format)) #Return the whiteclif investor report information for the deal in json format if output_format == 'json': collections = ['milestones', 'ic_proposals', 'progress_reports'] item = self.application.control.genoa_item(model,pk, collections=collections) result = item result.update({"historical_cashflows": self.application.control.historical_cashflows(item)}) result.update({"future_cashflows": self.application.control.future_cashflows(item)}) result.update({"financials_query": self.application.control.query_financials(item)}) result.update({"deal_irr": self.application.control.deal_irr(item)}) result.update({"return_projections": self.application.control.query_return_projections(item)}) result.update({"deal_files": self.application.control.deal_files(item)}) #Get the sum of the cashflows for the specified period end_date = self.get_argument("end_date", "20171231") end_date = datetime.datetime.strptime(end_date, "%Y%m%d").date() start_date = self.get_argument("start_date", "20080101") start_date = datetime.datetime.strptime(start_date, "%Y%m%d").date() all_cashflows = self.application.control.all_cashflows(item, criteria={'currency':'USD', 'exclude_from_irr':False}) net_cashflow = sum([row['amount'] for row in all_cashflows['items'] if start_date < row['settlement_date'] < end_date]) result.update({"period_net_cashflow": net_cashflow}) self.write(json_safe.dumps({"result": result})) #Return the .xlsx sheet containing the historical and projected cashflows for the deal elif output_format == 'xlsx': item = self.application.control.genoa_item(model, pk) cashflows = self.application.control.all_cashflows(item, criteria={'currency':'USD', 'exclude_from_irr':False}) if cashflows['items']: self.add_header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') self.add_header('Content-Disposition','attachment; filename=%s.xlsx' % item['name']) workbook = render_irr_xlsx(cashflows['items']) self.write(workbook) self.finish()