def monthly_chunk_periods(from_date, to_date): # dates should be from_date, to_date and the first and last days of every month included months = list(set(utils.monthrange(from_date, to_date))) dates = [(max(utils.start_of_month(x[1], x[0]), from_date), min(utils.end_of_month(x[1], x[0]), to_date)) for x in months] periods = [{'from': dt[0], 'to': dt[1]} for dt in dates] return periods
def trans_detail(self, trans_list, company_id=utils.get_default_company()): cache = glcache.get_cache(company_id) entries = cache.get_gl_entries_trans(trans_list) entries['date_end'] = entries.apply( lambda row: row['date_end'] if row['date_end'] is not None else row['date'], axis=1) start_date = min(min(entries['date']), min(entries['date_end'])) end_date = max(max(entries['date']), max(entries['date_end'])) start_mth = start_date.month start_yr = start_date.year end_mth = end_date.month end_yr = end_date.year dt = utils.start_of_month(start_date.month, start_date.year) dates = {dt.isoformat(): dt} dt1 = start_date dt2 = end_date start_month = dt1.month end_months = (dt2.year - dt1.year) * 12 + dt2.month + 1 date_list = [ utils.end_of_month(mn, yr) for (yr, mn) in (((m - 1) / 12 + dt1.year, (m - 1) % 12 + 1) for m in range(start_month, end_months)) ] date_list = list(set([start_date, end_date] + date_list)) dates = dict((d.isoformat(), d) for d in date_list) dates[datetime.date(start_yr, start_month, 1).isoformat()] = datetime.date( start_yr, start_month, 1) data = {} for dt in dates: start, end = utils.get_dates(dates[dt]) sub_entries = self.deprec_calcs(start, end, entries) col = sub_entries[['account_id', 'amount']].groupby('account_id').sum()['amount'] data[dt] = col[col != 0.0] return pd.DataFrame(data).fillna(0.0).T
def trans_detail(self, trans_list, company_id=utils.get_default_company()): cache = glcache.get_cache(company_id) entries = cache.get_gl_entries_trans(trans_list) entries['date_end'] = entries.apply(lambda row: row['date_end'] if row['date_end'] is not None else row['date'],axis=1) start_date = min(min(entries['date']), min(entries['date_end'])) end_date = max(max(entries['date']), max(entries['date_end'])) start_mth = start_date.month start_yr = start_date.year end_mth = end_date.month end_yr = end_date.year dt = utils.start_of_month(start_date.month, start_date.year) dates = {dt.isoformat(): dt} dt1 = start_date dt2 = end_date start_month=dt1.month end_months=(dt2.year-dt1.year)*12 + dt2.month+1 date_list = [utils.end_of_month(mn,yr) for (yr, mn) in ( ((m - 1) / 12 + dt1.year, (m - 1) % 12 + 1) for m in range(start_month, end_months) )] date_list = list(set([start_date,end_date] + date_list)) dates = dict((d.isoformat(), d) for d in date_list) dates[datetime.date(start_yr,start_month,1).isoformat()] = datetime.date(start_yr,start_month,1) data = {} for dt in dates: start, end = utils.get_dates(dates[dt]) sub_entries = self.deprec_calcs(start, end, entries) col = sub_entries[['account_id','amount']].groupby('account_id').sum()['amount'] data[dt] = col[col!=0.0] return pd.DataFrame(data).fillna(0.0).T