class DividendPolicyFeedBuilder: def __init__(self): self.date_utils = DateUtils() def build(self, dao): tuple_feed = self.__build_tuple(dao) return DividendPolicyFeed(tuple_feed) def __build_tuple(self, dao): feed = [] stock_symbol = dao.get_stock_symbol() release_date = self.date_utils.now_date() for row in dao.get_row_list(): stmt_date = row[0] cash_dividend = row[1] # 現金股利 stock_dividend_from_retained_earnings = row[2] # 盈餘配股 stock_dividend_from_capital_reserve = row[3] # 公積配股 employee_stock_bonuses_ratio = row[6] # 員工配股率% entry = { "release_date": release_date, "stock_symbol": stock_symbol, "stmt_date": stmt_date, "account": u"現金股利", "account_order": 1, "value": cash_dividend, } feed.append(entry) entry = { "release_date": release_date, "stock_symbol": stock_symbol, "stmt_date": stmt_date, "account": u"盈餘配股", "account_order": 2, "value": stock_dividend_from_retained_earnings, } feed.append(entry) entry = { "release_date": release_date, "stock_symbol": stock_symbol, "stmt_date": stmt_date, "account": u"公積配股", "account_order": 3, "value": stock_dividend_from_capital_reserve, } feed.append(entry) entry = { "release_date": release_date, "stock_symbol": stock_symbol, "stmt_date": stmt_date, "account": u"員工配股率", "account_order": 4, "value": employee_stock_bonuses_ratio, } feed.append(entry) return tuple(feed)
class CapitalIncreaseHistoryFeedBuilder(): def __init__(self): self.date_utils = DateUtils() def build(self, dao): tuple_feed = self.__build_tuple(dao) return CapitalIncreaseHistoryFeed(tuple_feed) def __build_tuple(self, dao): feed = [] stock_symbol = dao.get_stock_symbol() release_date = self.date_utils.now_date() for row in dao.get_row_list(): stmt_date = row[0] capital_increase_by_cash = row[1] capital_increase_by_earnings = row[3] capital_increase_by_surplus = row[5] entry = { 'release_date' : release_date, 'stock_symbol' : stock_symbol, 'stmt_date' : stmt_date, 'account' : u'現金增資', 'account_order' : 1, 'value' : capital_increase_by_cash } feed.append(entry) entry = { 'release_date' : release_date, 'stock_symbol' : stock_symbol, 'stmt_date' : stmt_date, 'account' : u'盈餘轉增資', 'account_order' : 2, 'value' : capital_increase_by_earnings } feed.append(entry) entry = { 'release_date' : release_date, 'stock_symbol' : stock_symbol, 'stmt_date' : stmt_date, 'account' : u'公積及其他', 'account_order' : 3, 'value' : capital_increase_by_surplus } feed.append(entry) return tuple(feed)
class TupleFeedBuilder(): def __init__(self): self.date_utils = DateUtils() def build(self, dao): feed = [] release_date = self.date_utils.now_date() stock_symbol = dao.get_stock_symbol() column_name_list = dao.get_column_name_list() stmt_date_list = column_name_list[1:] # the first column is account stmt_date_list = self.__flatten_stmt_date_list(stmt_date_list) stmt_date_len = len(stmt_date_list) account_order = 1 for row in dao.get_row_list(): account = row[0] number_list = row[1:] number_len = len(number_list) for i in range(stmt_date_len): stmt_date = stmt_date_list[i] value = number_list[i] if i < number_len else None entry = { 'release_date' : release_date, 'stock_symbol' : stock_symbol, 'stmt_date' : stmt_date, 'account' : account, 'account_order' : account_order, 'value' : value } feed.append(entry) account_order += 1 return tuple(feed) # flatten to date if stmt_date_list if date period list def __flatten_stmt_date_list(self, stmt_date_list): # if date period, we flatten to end date because begin date is always # the first date of this year. if len(stmt_date_list) > 0 and isinstance(stmt_date_list[0], tuple): return [stmt_date[1] for stmt_date in stmt_date_list] else: return stmt_date_list