from db import db from workers.base_worker import BaseWorker from workers.ccp.repository import CCPImportRepository from workers.prs.mappers.budget_mapper import BudgetMapper from workers.prs.models import BudgetModel class CCPBudgetWorker(BaseWorker): repository = CCPImportRepository() worker_name = "CCPBudgetWorker" def should_log_exceptions(self): return True def execute(self, *args): budgets = self.repository.get_raw_ccp_budgets() self.logger.info("CCP Budgets import", f"Importing {len(budgets)} budgets...") for result in budgets: project_id = result.project_id mapped_budget = BudgetMapper( raw_budget=BudgetModel( project_id=project_id, group_id=result.group_id, category_id=result.category_id, value=result.total_project_amount, prs_project_code=result.project_budget_code, external_key=self.__external_key(result), currency=result.currency, ) ).build() db.session.add(mapped_budget) db.session.flush() self.logger.success("CCP Budgets import", "Finished!") db.session.commit() db.session.close() def __external_key(self, budget): return f"""{budget.project_id}-{budget.group_id}-{budget.category_id}-{budget.total_project_amount}-{ budget.project_budget_code}-{budget.created_at}"""