An open API service indexing awesome lists of open source software.

https://github.com/leobitto/django-transactions

Django app to track transactions
https://github.com/leobitto/django-transactions

django django-app

Last synced: about 1 month ago
JSON representation

Django app to track transactions

Awesome Lists containing this project

README

        

# Transactions App - Applicazione di Gestione Finanziaria

Benvenuti nell'applicazione Transactions! Questa applicazione Django è progettata per aiutarti a gestire le tue finanze personali. Con Transactions, puoi tenere traccia delle tue entrate, spese, asset e debiti, tutto in un'unica piattaforma facile da usare.

## Panoramica delle Funzionalità

- **Gestione Conti**: Crea e gestisci conti bancari e denaro contante.
- **Registrazione Transazioni**: Registra entrate e spese con categorie personalizzabili.
- **Tracciamento Saldi**: Visualizza l'andamento dei saldi nel tempo con un sistema di log dettagliato.
- **Supporto per Entrate e Spese Ricorrenti**: Configura entrate e spese ricorrenti per una gestione automatizzata.

## Come Utilizzare l'App

### Requisiti

- Python 3.7 o versioni successive
- Django 3.1 o versioni successive
- Pacchetti Python aggiuntivi elencati in `requirements.txt`

### Installazione

1. Clona il repository dell'app:
```bash
git clone https://github.com/leoBitto/transactions.git
```

Naviga nella directory del progetto:
```bash
cd transactions
```

Crea un ambiente virtuale (consigliato) e attivalo:
```bash
python3 -m venv venv
source venv/bin/activate
```

Installa i requisiti:
```bash
pip install -r requirements.txt
```

Applica le migrazioni:
```python
manage.py migrate
```

Avvia il server di sviluppo:
```python
manage.py runserver
```

Accedi all'app nel tuo browser all'indirizzo http://localhost:8000.

Contributi
Se vuoi contribuire all'applicazione Transactions, sentiti libero di aprire un problema o inviare una richiesta pull nel repository GitHub: https://github.com/leoBitto/transactions

Licenza
L'applicazione è distribuita con licenza MIT. Consulta il file LICENSE per ulteriori dettagli.

# Financial Management Application

## Introduzione

Questa applicazione è progettata per gestire i conti correnti e il contante, tenendo traccia delle transazioni finanziarie e mantenendo un registro dello storico dei saldi. L'app consente di registrare entrate, spese e altre transazioni in modo flessibile, supportando diversi tipi di fondi come conti bancari e denaro contante.

### Funzionalità Principali
- Creazione e gestione di conti bancari e contanti.
- Registrazione di transazioni finanziarie (entrate e spese).
- Tracciamento delle modifiche dei saldi nel tempo attraverso un sistema di log.
- Supporto per categorie di entrate e spese personalizzate.

## Modelli

### FundBase
`FundBase` è un modello astratto che fornisce una struttura comune per rappresentare un fondo finanziario, come un conto bancario o denaro contante. Include campi per il saldo (`balance`), la data di apertura (`start_date`) e la data di chiusura (`end_date`).

### BankAccount
`BankAccount` eredita da `FundBase` ed è utilizzato per rappresentare conti bancari specifici. Oltre ai campi base, include il tipo di conto (`account_type`), il nome dell'istituto bancario (`institution`) e il tasso d'interesse (`interest_rate`).

### Cash
`Cash` eredita da `FundBase` ed è utilizzato per rappresentare denaro contante. Include un campo aggiuntivo per la descrizione (`description`).

### FundLog
`FundLog` tiene traccia delle modifiche del saldo per qualsiasi tipo di fondo (`BankAccount` o `Cash`). Utilizza un `GenericForeignKey` per collegarsi dinamicamente al modello specifico di fondo.

### Transaction
`Transaction` rappresenta una transazione finanziaria generica. Può essere collegata a qualsiasi tipo di fondo (`BankAccount` o `Cash`) tramite una `GenericForeignKey`.

### Income
`Income` è un'estensione di `Transaction` per rappresentare entrate finanziarie. Ogni entrata è associata a una categoria (`IncomeCategory`).

### Expenditure
`Expenditure` è un'estensione di `Transaction` per rappresentare spese finanziarie. Ogni spesa è associata a una categoria (`ExpenseCategory`).

### Relazioni tra Modelli
I modelli `Income` e `Expenditure` ereditano da `Transaction` e sono collegati a categorie specifiche tramite relazioni `ForeignKey`. I modelli `BankAccount` e `Cash` sono collegati al log tramite `GenericForeignKey`.

### Esempi di Utilizzo
Di seguito un esempio di come creare e collegare un conto bancario e registrare una transazione:

```python
# Creare un nuovo conto bancario
bank_account = BankAccount.objects.create(
balance=1000.00,
start_date=date.today(),
account_type='savings',
institution='Bank XYZ',
interest_rate=1.5
)

# Creare una nuova transazione di entrata
income_category = IncomeCategory.objects.create(name='Salary', description='Monthly salary')
income = Income.objects.create(
date=date.today(),
amount=500.00,
related_fund=ContentType.objects.get_for_model(bank_account),
object_id=bank_account.id,
type=income_category
)
```

## Signal e Logging

### Signal `log_fund_change`
Il signal `log_fund_change` è collegato ai modelli `BankAccount` e `Cash`. Viene attivato ogni volta che un fondo viene aggiornato (non creato) e crea un nuovo record in `FundLog` per registrare il cambiamento del saldo.

### Gestione del Logging
Il modello `FundLog` utilizza un `GenericForeignKey` per collegarsi dinamicamente a qualsiasi tipo di fondo (`BankAccount` o `Cash`). Questo sistema di logging consente di tracciare l'andamento del saldo nel tempo, offrendo uno storico dettagliato delle operazioni sui fondi.

---

## Form

Questa sezione descrive i moduli di form utilizzati nell'applicazione per gestire conti bancari, denaro contante, entrate e spese, e per la gestione di trasferimenti e spese ricorrenti.

### BankAccountForm

Il `BankAccountForm` è utilizzato per creare e aggiornare i record di conti bancari. I campi del modulo includono:

- **balance**: Il saldo attuale del conto bancario.
- **start_date**: La data di apertura del conto.
- **end_date**: La data di chiusura del conto (opzionale).
- **account_type**: Il tipo di conto (es. risparmio, corrente).
- **institution**: Il nome dell'istituto bancario.
- **interest_rate**: Il tasso d'interesse del conto (opzionale).

#### Validazione
Il modulo verifica che la data di chiusura sia successiva alla data di apertura. Se non è così, viene aggiunto un errore al campo `end_date`.

### CashForm

Il `CashForm` è utilizzato per creare e aggiornare i record di denaro contante. I campi del modulo includono:

- **balance**: Il saldo attuale del denaro contante.
- **start_date**: La data di inizio del registro del contante.
- **end_date**: La data di fine del registro del contante (opzionale).
- **description**: Una descrizione opzionale del contante.

#### Validazione
Il modulo verifica che la data di fine sia successiva alla data di inizio. Se non è così, viene aggiunto un errore al campo `end_date`.

### IncomeForm

Il `IncomeForm` è utilizzato per registrare entrate finanziarie. I campi del modulo includono:

- **date**: La data dell'entrata.
- **time**: L'ora dell'entrata (opzionale).
- **amount**: L'importo dell'entrata.
- **description**: Una descrizione opzionale dell'entrata.
- **type**: La categoria dell'entrata.
- **related_fund**: Il fondo a cui è associata l'entrata.

#### Validazione
Il modulo verifica che l'importo sia positivo. Inoltre, verifica che il fondo associato sia valido e che l'ID dell'oggetto esista.

### ExpenditureForm

Il `ExpenditureForm` è utilizzato per registrare spese finanziarie. I campi del modulo includono:

- **date**: La data della spesa.
- **time**: L'ora della spesa (opzionale).
- **amount**: L'importo della spesa.
- **description**: Una descrizione opzionale della spesa.
- **type**: La categoria della spesa.
- **related_fund**: Il fondo a cui è associata la spesa.

#### Validazione
Il modulo verifica che l'importo sia positivo. Inoltre, verifica che il fondo associato sia valido e che l'ID dell'oggetto esista.

### TransferFundsForm

Il `TransferFundsForm` è utilizzato per trasferire fondi tra conti o tra denaro contante. I campi del modulo includono:

- **amount**: L'importo del trasferimento.
- **source_fund**: Il fondo di origine del trasferimento.
- **destination_fund**: Il fondo di destinazione del trasferimento.
- **commission**: Una commissione opzionale associata al trasferimento.

#### Validazione
Il modulo verifica che il fondo di origine e quello di destinazione non siano lo stesso. Inoltre, controlla che l'importo sia maggiore di zero e che ci siano fondi sufficienti nel fondo di origine per coprire l'importo e la commissione.

### RecurringIncomeForm

Il `RecurringIncomeForm` è utilizzato per impostare entrate ricorrenti. I campi del modulo includono:

- **amount**: L'importo dell'entrata ricorrente.
- **frequency**: La frequenza dell'entrata (giornaliera, settimanale, mensile, annuale).
- **start_date**: La data di inizio dell'entrata ricorrente.
- **end_date**: La data di fine dell'entrata ricorrente (opzionale).
- **description**: Una descrizione opzionale dell'entrata.
- **income_type**: La categoria dell'entrata.
- **related_fund**: Il fondo a cui è associata l'entrata ricorrente.

#### Validazione
Il modulo verifica che la data di fine sia successiva alla data di inizio.

### RecurringExpenseForm

Il `RecurringExpenseForm` è utilizzato per impostare spese ricorrenti. I campi del modulo includono:

- **amount**: L'importo della spesa ricorrente.
- **frequency**: La frequenza della spesa (giornaliera, settimanale, mensile, annuale).
- **start_date**: La data di inizio della spesa ricorrente.
- **end_date**: La data di fine della spesa ricorrente (opzionale).
- **description**: Una descrizione opzionale della spesa.
- **expenditure_type**: La categoria della spesa.
- **related_fund**: Il fondo a cui è associata la spesa ricorrente.

#### Validazione
Il modulo verifica che la data di fine sia successiva alla data di inizio.

ciao, vorrei che tu mi aiutassi a sriver euna applicazione con django. il nostro iter di sviluppo sarà così:
1. definizione dei modelli, già fatti ma vorrei sentire una tua opinione
2. definizione del file admin.py
3. definizione dei form
4. definizione degli urls
5. definzione delle views

ognuno di questi è già stato creato ma necessita di una revisione basata su come sono stati ristrutturati i modelli. la mia applicazione serve a gestire le finanze personali ed è necessario che faccia le seguenti cose di base:
a. tenere traccia dei conti e dei loro bilanci
b. tenere traccia del andamento del bilancio per ogni conto
c. tenere traccia delle categorie di spesa e di reddito, che possono essere definite come gerarchie di categorie
d. tenere traccia delle spese e dei redditi.
e. possibilità di trasferire soldi da un conto all'altro
f. possibilità di eliminare una transazione ma avere un corretto calcolo del bilancio.
g. modificare una transazione e avere un corretto calcolo del bilancio.

il progetto django si chiama Arnia e la app si chiama transactions. il tree dell'app:
src/transactions/
├── admin.py
├── apps.py
├── docs
│ ├── assets
│ │ └── img
│ │ ├── transaction_icon.png
│ │ └── transaction_logo.png
│ ├── _config.yml
│ └── README.md
├── forms.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models
│ └── base.py
├── templates
│ └── transactions
│ ├── accordion.html
│ ├── account_detail.html
│ ├── account.html
│ ├── category_detail.html
│ ├── category.html
│ ├── expense.html
│ ├── income.html
│ └── transaction_detail.html
├── tests.py
├── urls.py
└── views
└── base.py

9 directories, 21 files

dimmi se hai domande su queste informazioni basilari, poi ti farò vedere i miei modelli