def calcs(self): bals = self.query_manager.pd_acct_balances(self.company_id, {'balance': self.date}) accts = api_func('gl', 'account') accts_map = dict((a['id'], a) for a in accts) # dataframe.apply won't work until v0.17 for lambda returning dict... so have to do in roundabout way till then debits_map = lambda x: x['balance'] if accts_map[x.name]['role'] in ['asset', 'expense'] else 0 credits_map = lambda x: -x['balance'] if accts_map[x.name]['role'] in ['liability', 'income', 'capital'] else 0 bals['Debits'] = bals.apply(debits_map, axis=1) bals['Credits'] = bals.apply(credits_map, axis=1) del bals['balance'] bals['fmt_tag'] = 'item' label_map = lambda x: x + ': ' + accts_map[x]['display_name'] bals['label'] = bals.index.map(label_map) totals = bals[self.column_order].sum(axis=0) totals['fmt_tag'] = 'major_total' totals['label'] = 'Totals' bals.loc['Total'] = totals bals['index'] = bals.index data = bals.to_dict(orient='records') credits_link_map = lambda x: utils.acct_history_link(x['index']) if x['index'] != 'Total' and x['Credits'] != '' else '' debits_link_map = lambda x: utils.acct_history_link(x['index']) if x['index'] != 'Total' and x['Debits'] != '' else '' for row in data: row['Credits'] = {'text': row['Credits'], 'link':credits_link_map(row)} row['Debits'] = {'text': row['Debits'], 'link': debits_link_map(row)} return data
def __init__(self, company_id, date=None): self.date = date self.description = 'Trial Balance' self.title = "Trial Balance" self.company_id = company_id self.columns = {'Debits':'Debits', 'Credits': 'Credits'} self.calc_type = 'as_of' self.set_company() self.works_for = [cmpny['id'] for cmpny in api_func('gl', 'company')] self.column_order = ['Debits', 'Credits'] self.label_map = None self.link_map = lambda x: utils.acct_history_link(x.name)
def __init__(self, company_id, date=None): self.date = date self.description = 'Account Activity' self.title = None self.company_id = company_id self.columns = None self.column_order = None self.calc_type = 'as_of' self.set_company() self.label_map = None self.link_map = lambda x: utils.acct_history_link(x.name) self.equity_sign = False self.path = None self.acct_list = None self.works_for = [cmpny['id'] for cmpny in api_func('gl', 'company')]
def calcs(self): if self.path: bals = self.query_manager.pd_acct_balances(self.company_id, self.columns, paths=[self.path ]).fillna(0.0) elif self.acct_list: bals = self.query_manager.pd_acct_balances( self.company_id, self.columns, acct_list=self.acct_list, excl_contra=['4150']).fillna(0.0) else: bals = self.query_manager.pd_acct_balances( self.company_id, self.columns).fillna(0.0) if self.equity_sign: bals = bals * (-1.0) bals.loc['Total'] = bals.apply(sum, axis=0) accts = gl.Account.objects.all() acct_map = dict((a.id, a.display_name) for a in accts) label_map = lambda x: x + ': ' + acct_map[x] if x in acct_map else x link_map = lambda x: utils.acct_history_link(x['index']) if x[ 'index'] != 'Total' else '' bals['fmt_tag'] = 'item' bals['label'] = bals.index.map(label_map) bals['index'] = bals.index if 'Change' in bals.columns: is_small = lambda row: (abs(row['Change']) < 0.5 and row['index'] != 'Total') bals = bals[~bals.apply(is_small, axis=1)] bals.loc['Total', 'fmt_tag'] = 'major_total' data = bals.to_dict(orient='records') for row in data: for col in self.column_order: row[col] = {'text': row[col], 'link': link_map(row)} return data
def calcs(self): if self.path: bals = self.query_manager.pd_acct_balances(self.company_id,self.columns, paths=[self.path]).fillna(0.0) elif self.acct_list: bals = self.query_manager.pd_acct_balances(self.company_id,self.columns, acct_list=self.acct_list, excl_contra=['4150']).fillna(0.0) else: bals = self.query_manager.pd_acct_balances(self.company_id,self.columns).fillna(0.0) if self.equity_sign: bals = bals * (-1.0) bals.loc['Total'] = bals.apply(sum, axis=0) accts = gl.Account.objects.all() acct_map = dict((a.id, a.display_name) for a in accts) label_map = lambda x: x + ': ' + acct_map[x] if x in acct_map else x link_map = lambda x: utils.acct_history_link(x['index']) if x['index'] != 'Total' else '' bals['fmt_tag'] = 'item' bals['label'] = bals.index.map(label_map) bals['index'] = bals.index if 'Change' in bals.columns: is_small = lambda row: (abs(row['Change']) < 0.5 and row['index'] != 'Total') bals = bals[~bals.apply(is_small, axis=1)] bals.loc['Total', 'fmt_tag'] = 'major_total' data = bals.to_dict(orient='records') for row in data: for col in self.column_order: row[col] = {'text': row[col], 'link': link_map(row)} return data