Introduzione
In Odoo, i modelli definiscono come i dati sono strutturati e memorizzati nel database. Ogni pezzo di dati aziendali con cui lavori, dagli ordini di vendita alle fatture fino alle registrazioni contabili, vive in un modello.
Comprendere i modelli Odoo è essenziale sia per gli sviluppatori che per i consulenti funzionali. I modelli sono la base dell'architettura dei dati di Odoo. Definiscono i campi Odoo, le relazioni e la logica aziendale.
Questo articolo si concentra su uno dei modelli più importanti nella contabilità di Odoo: account.move. Che tu stia creando report personalizzati, integrando sistemi esterni o configurando flussi di lavoro per la fatturazione, lavorerai con questo modello.
Cos'è il modello account.move
Il modello account.move rappresenta le registrazioni contabili in Odoo. In Odoo 13 e versioni successive, ha unificato quelli che erano modelli separati: fatture clienti, fatture fornitori, note di credito e registrazioni manuali. Oggi, tutti vivono in account.move.
Questo modello in Odoo è utilizzato dal modulo Contabilità. È il genitore di account.move.line, che contiene le singole righe di addebito e accredito. Ogni fattura, bolletta o registrazione è un record account.move con una o più righe.
Il modello è definito nel modulo account. Altri moduli lo estendono attraverso l'ereditarietà dei modelli Odoo. Il modulo Vendite aggiunge la creazione di fatture dagli ordini. Il modulo Acquisti aggiunge la creazione di fatture. Ogni modulo aggiunge ciò di cui ha bisogno senza duplicare la struttura di base.
Campi chiave nel modello
Ecco i campi Odoo più importanti nel modello account.move. Comprendere questi campi ti aiuterà a lavorare in modo efficace con fatture, bollette e registrazioni.
1. name
Tipo: Char. Questo campo memorizza il numero o il nome della registrazione contabile. È tipicamente generato automaticamente dalla sequenza del giornale. Visualizzato nelle viste elenco e sui documenti stampati.
2. move_type
Tipo: Selezione. Determina il tipo di registrazione: entry (registrazione contabile manuale), out_invoice (fattura cliente), out_refund (nota di credito cliente), in_invoice (fattura fornitore), in_refund (nota di credito fornitore). Questo campo determina quali viste e flussi di lavoro si applicano.
3. state
Tipo: Selezione. Lo stato del flusso di lavoro: bozza, pubblicato o annullato. Le registrazioni in bozza possono essere modificate. Le registrazioni pubblicate sono bloccate e influenzano il libro mastro generale. Annullare inverte l'effetto.
4. date
Tipo: Data. La data del documento. Utilizzata per la reportistica, l'invecchiamento e la chiusura del periodo. Per le fatture, questa è spesso la data della fattura.
5. journal_id
Tipo: Many2one (account.journal). Il giornale a cui appartiene questo movimento. I giornali di Vendita, Acquisto, Banca e Vari hanno ciascuno il proprio. Il giornale determina la sequenza e i conti predefiniti.
6. company_id
Tipo: Many2one (res.company). In configurazioni multi-azienda, questo indica a quale azienda appartiene il movimento. Influisce sulla visibilità dei record e sulla consolidazione.
7. partner_id
Tipo: Many2one (res.partner). Il cliente o fornitore. Richiesto per fatture e bollette. Utilizzato per report di scadenza, abbinamento pagamenti e intestazioni dei documenti.
8. currency_id
Tipo: Many2one (res.currency). La valuta del movimento. Gli importi sono memorizzati in questa valuta. I movimenti in valuta estera utilizzano la valuta dell'azienda per la reportistica.
9. amount_total
Tipo: Monetario. L'importo totale del movimento. Per le fatture, questo è l'importo dovuto. Calcolato dalle righe.
10. amount_residual
Tipo: Monetario. L'importo non pagato. Per le fatture pagate, questo è zero. Utilizzato per flussi di lavoro di scadenza e pagamento.
11. stato_pagamento
Tipo: Selezione. Stato del pagamento: non_pagato, in_pagamento, pagato, parziale, annullato, o fatturazione_legacy. Guida ai promemoria di pagamento e alla reportistica.
12. linee_ids
Tipo: One2many (account.move.line). Le righe della registrazione contabile. Ogni riga ha un conto, un addebito e un accredito. La somma degli addebiti deve essere uguale alla somma degli accrediti.
13. righe_fattura_ids
Tipo: One2many (account.move.line). Per fatture e bollette, queste sono le righe di prodotto o servizio. Ogni riga genera una o più righe di registrazione contabile quando viene registrata.
14. data_fattura
Tipo: Data. La data della fattura. Utilizzata per la fatturazione e i periodi fiscali. Può differire dalla data di registrazione in alcune configurazioni.
15. data_scadenza_fattura
Tipo: Data. La data di scadenza del pagamento. Calcolata in base ai termini di pagamento o impostata manualmente. Utilizzata per l'invecchiamento e il sollecito.
16. rif
Tipo: Char. Riferimento esterno o numero della bolletta del fornitore. Utile per abbinare i pagamenti e riconciliare con documenti esterni.
17. invoice_origin
Tipo: Char. Il documento sorgente. Per le fatture provenienti da ordini di vendita, memorizza il numero dell'ordine di vendita. Consente la tracciabilità dall'ordine alla fattura.
18. create_date
Tipo: Datetime. Memorizza la data e l'ora in cui il record è stato creato. Gestito automaticamente da Odoo.
19. write_date
Tipo: Datetime. Memorizza la data e l'ora dell'ultima modifica. Anche questo gestito automaticamente.
20. narration
Tipo: Testo. Note interne o memo. Visualizzato sulle voci di giornale stampate. Non mostrato ai clienti sulle fatture.
21. fiscal_position_id
Tipo: Many2one (account.fiscal.position). La posizione fiscale per le regole fiscali. Determina quali tasse si applicano in base al partner e al paese.
22. invoice_payment_term_id
Tipo: Many2one (account.payment.term). Termini di pagamento (ad es. Net 30). Utilizzato per calcolare invoice_date_due e suddividere i pagamenti.
23. invoice_user_id
Tipo: Many2one (res.users). L'utente venditore o responsabile per la fattura. Utilizzato per commissioni e reportistica.
24. reversed_entry_id
Tipo: Many2one (account.move). Per le voci annullate, questo si collega al movimento di annullamento. Abilita la tracciabilità delle correzioni.
25. to_check
Tipo: Boolean. Flag per le voci che necessitano di revisione. Utilizzato nella riconciliazione bancaria e nei flussi di lavoro delle eccezioni.
26. active
Tipo: Boolean. Flag di cancellazione soft. Quando è False, il record è archiviato. I movimenti annullati sono tipicamente impostati su active=False.
27. sequence_number
Tipo: Integer. Il numero di sequenza dal giornale. Utilizzato per ordinare e visualizzare. Gestito dal mixin di sequenza.
28. amount_untaxed
Tipo: Monetario. Il subtotale prima delle tasse. Per le fatture, questo è la somma degli importi delle righe prima delle tasse.
29. amount_tax
Tipo: Monetario. L'importo totale delle tasse. Calcolato dalle righe della fattura e dalla configurazione fiscale.
30. invoice_source_email
Tipo: Char. Per le fatture dei fornitori create da email, questo memorizza l'indirizzo email di origine. Utilizzato per l'ingestione automatica delle fatture.
Come questo modello viene utilizzato nei flussi di lavoro aziendali
1. Fatturazione Clienti
Quando un ordine di vendita viene consegnato, Odoo crea un account.move con move_type out_invoice. Gli invoice_line_ids provengono dalle righe dell'ordine. La registrazione del movimento crea le righe di registrazione del giornale e aggiorna i crediti.
2. Fatture Fornitori
Gli ordini di acquisto possono generare fatture, oppure le fatture vengono inserite manualmente. Ogni fattura è un account.move con move_type in_invoice. Il partner_id è il fornitore. La registrazione aggiorna i debiti.
3. Riconciliazione dei Pagamenti
I pagamenti vengono abbinati alle fatture utilizzando i campi amount_residual e payment_state. Il processo di riconciliazione collega i movimenti di pagamento ai movimenti di fattura e cancella il residuo.
4. Registrazioni Manuali nel Giornale
I contabili creano movimenti con move_type entry per aggiustamenti, accantonamenti o correzioni. Aggiungono manualmente line_ids con conti, debiti e crediti. Il movimento deve bilanciarsi prima della registrazione.
5. Note di Credito e Rimborsi
Le note di credito sono movimenti con move_type out_refund o in_refund. Esse annullano l'effetto della fattura o della bolletta originale. L'reversed_entry_id si collega all'originale per audit.
Come gli sviluppatori estendono questo modello
Gli sviluppatori estendono account.move utilizzando diversi modelli. L'ereditarietà dei modelli Odoo è il meccanismo principale.
Ereditarietà dei Modelli
Usa _inherit = 'account.move' per estendere il modello. Aggiungi nuovi campi Odoo, sovrascrivi metodi o aggiungi vincoli. Il modello ereditato in Odoo mantiene le tue modifiche in un modulo separato per aggiornamenti facili.
Aggiunta di Campi
Definisci nuovi campi Odoo nel tuo modello ereditato. Usa il tipo di campo corretto: Char, Many2one, Boolean, Integer, Text, Selection. Considera i campi dipendenti dalla società per multi-società. Per campi specifici della fattura, usa un dominio su move_type.
Estensioni Python
Sovrascrivi create, write, _post o button_draft per aggiungere logica. Usa super() per chiamare l'originale. Fai attenzione ai campi calcolati e alle loro dipendenze. I decoratori del modello API in Odoo (@api.model, @api.depends) controllano quando vengono eseguiti i metodi.
Odoo Studio
Odoo Studio ti consente di aggiungere campi senza codice. Ottimo per personalizzazioni rapide come campi di riferimento aggiuntivi. Per logica complessa, convalida o azioni automatizzate, i moduli personalizzati sono più manutenibili.
Nota: account.move è un modello regolare, non un modello astratto Odoo o un modello transitorio Odoo. I modelli astratti sono utilizzati come modelli e non creano tabelle di database. I modelli transitori sono temporanei e utilizzati per wizard. account.move memorizza dati contabili permanenti.
Migliori pratiche
- Filtra sempre per move_type quando costruisci report o integrazioni. I diversi tipi hanno campi e comportamenti richiesti diversi.
- Utilizza il giornale corretto per ogni tipo di movimento. Mescolare i giornali può interrompere le sequenze e la reportistica.
- Quando crei movimenti tramite API, assicurati che line_ids siano bilanciati (debiti = crediti) prima di pubblicare. I movimenti non bilanciati falliranno la validazione.
- Per la creazione di fatture da sistemi esterni, mappa i tuoi tipi di documento a move_type correttamente. out_invoice per le vendite, in_invoice per gli acquisti.
- Utilizza il prefisso
x_per i campi personalizzati per evitare conflitti con le future versioni di Odoo.
Errori comuni
- Pubblicare movimenti senza righe bilanciate. Odoo rifiuterà la pubblicazione. Verifica sempre che i totali di debito e credito corrispondano.
- Modificare direttamente i movimenti pubblicati. I movimenti pubblicati sono bloccati. Utilizza una rettifica e crea un nuovo movimento invece.
- Dimenticare di impostare partner_id sui movimenti di clienti o fornitori. Molti report e flussi di lavoro dipendono da questo.
- Utilizzare il tipo di movimento sbagliato. Un out_refund non è lo stesso di una negativa out_invoice. Usa il tipo corretto per rimborsi e note di credito.
- Sovrascrivere metodi core senza chiamare super(). Questo può interrompere altri moduli o futuri aggiornamenti.
Conclusione
Il modello account.move è centrale per la contabilità di Odoo. Rappresenta fatture, bollette e registrazioni di giornale in una struttura unificata. Comprendere i suoi campi e come i moduli lo estendono ti aiuterà a configurare, personalizzare e integrare Odoo in modo efficace.
Che tu sia un consulente funzionale che mappa i processi aziendali o uno sviluppatore che costruisce moduli personalizzati, una solida comprensione di account.move ti farà risparmiare tempo e prevenire errori.
Hai bisogno di aiuto con la tua implementazione di Odoo?
Dasolo aiuta le aziende a implementare, personalizzare e ottimizzare Odoo. Siamo specializzati in integrazioni API e sviluppo Odoo. Il nostro team ha una profonda esperienza con l'architettura dei dati di Odoo e modelli come account.move.
Se hai bisogno di aiuto con la tua implementazione di Odoo, moduli personalizzati o integrazioni, siamo qui per aiutarti. Prenota una demo per discutere del tuo progetto.