def balance_sheet_table(context, ledger_or_entity, end_date): user_model = context['user'] activity = context['request'].GET.get('activity') activity = validate_activity(activity, raise_404=True) return ledger_or_entity.digest(activity=activity, user_model=user_model, equity_only=False, to_date=end_date, process_groups=True)
def income_statement_table(context, ledger_or_entity, start_date, end_date): user_model = context['user'] activity = context['request'].GET.get('activity') activity = validate_activity(activity, raise_404=True) return ledger_or_entity.digest(activity=activity, user_model=user_model, from_date=start_date, to_date=end_date, equity_only=True, process_groups=True)
def balance_sheet_table(context, io_model, end_date): user_model = context['user'] activity = context['request'].GET.get('activity') activity = validate_activity(activity, raise_404=True) entity_slug = context['view'].kwargs.get('entity_slug') unit_slug = context['view'].kwargs.get('unit') if not unit_slug: unit_slug = context['request'].GET.get('unit') return io_model.digest(activity=activity, user_model=user_model, equity_only=False, entity_slug=entity_slug, unit_slug=unit_slug, to_date=end_date, process_groups=True)
def balance_sheet_table(context, io_model, to_date): user_model = context['user'] activity = context['request'].GET.get('activity') activity = validate_activity(activity, raise_404=True) entity_slug = context['view'].kwargs.get('entity_slug') prepare_context_by_unit(context) digest = io_model.digest(activity=activity, user_model=user_model, equity_only=False, entity_slug=entity_slug, unit_slug=context['unit_slug'], by_unit=context['by_unit'], to_date=to_date, process_groups=True) digest['by_unit'] = context['by_unit'] digest['unit_model'] = context['unit_model'] digest['unit_slug'] = context['unit_slug'] return digest
def get_txs_queryset(self, user_model: UserModel, to_date: str or datetime = None, from_date: str or datetime = None, activity: str = None, role: str = None, entity_slug: str = None, unit_slug: str = None, accounts: str or List[str] or Set[str] = None, posted: bool = True, exclude_zero_bal: bool = True, by_period: bool = False): activity = validate_activity(activity) role = roles.validate_roles(role) from_date, to_date = validate_dates(from_date, to_date) TransactionModel = lazy_importer.get_txs_model() # If IO is on entity model.... if isinstance(self, lazy_importer.get_entity_model()): if unit_slug: txs_qs = TransactionModel.objects.for_unit( user_model=user_model, entity_slug=entity_slug or self.slug, unit_slug=unit_slug) else: txs_qs = TransactionModel.objects.for_entity( user_model=user_model, entity_model=self) # If IO is on ledger model.... elif isinstance(self, lazy_importer.get_ledger_model()): txs_qs = TransactionModel.objects.for_ledger(user_model=user_model, ledger_model=self) elif isinstance(self, lazy_importer.get_unit_model()): if not entity_slug: raise ValidationError( 'Calling digest from Entity Unit requires entity_slug') txs_qs = TransactionModel.objects.for_unit(user_model=user_model, entity_slug=entity_slug, unit_model=self) else: txs_qs = TransactionModel.objects.none() if exclude_zero_bal: txs_qs = txs_qs.filter(amount__gt=0) if posted: txs_qs = txs_qs.posted() if from_date: txs_qs = txs_qs.from_date(from_date=from_date) if to_date: txs_qs = txs_qs.to_date(to_date=to_date) if accounts: if not isinstance(accounts, str): accounts = [accounts] txs_qs = txs_qs.for_accounts(account_list=accounts) if activity: if isinstance(activity, str): activity = [activity] txs_qs = txs_qs.for_activity(activity_list=activity) if role: if isinstance(role, str): role = [role] txs_qs = txs_qs.for_roles(role_list=role) txs_qs = txs_qs.values( 'account__uuid', 'account__balance_type', 'tx_type', 'account__code', 'account__name', 'account__role', ) if by_period: txs_qs = txs_qs.annotate( balance=Sum('amount'), dt_idx=TruncMonth('journal_entry__date'), ).order_by('journal_entry__date', 'account__uuid') else: txs_qs = txs_qs.annotate( balance=Sum('amount'), ).order_by('account__uuid') return txs_qs
def commit_txs(self, je_date: str or datetime, je_txs: list, je_activity: str, je_posted: bool = False, je_ledger=None, je_desc=None, je_origin=None, je_parent=None): """ Creates JE from TXS list using provided account_id. TXS = List[{ 'account_id': Account Database UUID 'tx_type': credit/debit, 'amount': Decimal/Float/Integer, 'description': string, 'staged_tx_model': StagedTransactionModel or None }] :param je_date: :param je_txs: :param je_activity: :param je_posted: :param je_ledger: :param je_desc: :param je_origin: :param je_parent: :return: """ # Validates that credits/debits balance. validate_tx_data(je_txs) # Validates that the activity is valid. je_activity = validate_activity(je_activity) if all([ isinstance(self, lazy_importer.get_entity_model()), not je_ledger ]): raise ValidationError('Must pass an instance of LedgerModel') if not je_ledger: je_ledger = self je_model = JournalEntryModel.objects.create(ledger=je_ledger, description=je_desc, date=je_date, origin=je_origin, activity=je_activity, posted=je_posted, parent=je_parent) TransactionModel = lazy_importer.get_txs_model() txs_models = [ TransactionModel(account_id=tx['account_id'], tx_type=tx['tx_type'], amount=tx['amount'], description=tx['description'], journal_entry=je_model, stagedtransactionmodel=tx.get('staged_tx_model')) for tx in je_txs ] txs_models = TransactionModel.objects.bulk_create(txs_models) return je_model, txs_models