Forum

Benvenuto!

Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.

0

[ODOO 12] creazione di una fattura tramite codice python

Avatar
Davide Ercole

Salve,

Scrivo perché non riesco a capire come sia possibile creare una fattura tramite codice.
In pratica vorrei fare così:
nel momento in cui clicco sul bottone "Validate", una fattura passa da stato di "draft" a stato "open". vorrei che questo comando oltre a validare questa fattura, ne cloni una uguale ma in stato di "draft"
Come è possibile farlo tramite codice?

Avatar
Abbandona
4 Risposte
1
Avatar
Alex Comba
Migliore risposta

Buongiorno,

premesso che non mi è molto chiaro il perché vuoi realizzare una funzionalità simile, tramite codice, la potresti realizzare ad esempio come segue:

  • fai l'override del metodo invoice_validate di account.invoice

  • al suo interno, prima di chiamare il super, ti crei una copia con il metodo copy

Avatar
Abbandona
0
Avatar
Davide Ercole
Migliore risposta

Volevo scrivere qua per condividere il codice che ho creato, magari potrebbe servire a qualcuno in futuro.Lo faccio perché noto che questa è una ottima comunità da cui possiamo prendere tutti spunto e darci una mano a vicenda.

questo è il codice che ho fatto:

#creazione invoice se c'è multirata
class AccountInvoice(models.Model):
    _inherit='account.invoice'
    x_plurianno_check_invoicing = fields.Boolean(string="Corso di Laurea pluriennale")

@api.multi
    def invoice_validate(self):
        # Clean context from default_type to avoid making attachment
        # with wrong values in subsequent operations
        cleaned_ctx = dict(self.env.context)
        cleaned_ctx.pop('default_type', None)
        self = self.with_context(cleaned_ctx)
        self.copy({'self.invoice_line_ids.x_numerorata_invoicing': '2'})
            
super(AccountInvoice, self).invoice_validate()
for invoice in self:
if invoice.company_id.country_id != self.env.ref('base.it'):
continue
if invoice.type == 'in_invoice' or invoice.type == 'in_refund':
invoice.l10n_it_send_state = "other"
continue
invoice._check_before_xml_exporting()
invoice.invoice_generate_xml()
if len(invoice.commercial_partner_id.l10n_it_pa_index or '') == 6:
invoice.message_post(
body=(_(
"Invoices for PA are not managed by Odoo, you can download the document and send it on your own."))
)
invoice.l10n_it_send_state = "other"
continue
invoice.l10n_it_send_state = "to_send"
invoice.send_pec_mail()


Grazie a tutti


Avatar
Abbandona
0
Avatar
Davide Ercole
Migliore risposta

Grazie mille, effettivamente così va bene, dopo provo con calma..

in pratica il mio problema è come gestire le fatture su prodotti pluriennali, dove viene creata una fattura per ogni anno.

Il prodotto è un servizio che dura 5 anni, si genera la fattura in stato di open per il primo anno, mentre si creano in stato di draft le altre 4 fatture. Poi se avete altri consigli li accetto volentieri.

Grazie ancora

Avatar
Abbandona
0
Avatar
Alex Comba
Migliore risposta
Avatar
Abbandona