Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami

ARGOMENTO: Questa la devo raccontare ....

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29564

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Se non la scrivo qui non saprei dove :D

Oggi pomeriggio dopo i test di accettazione del nuovo (rompiballe e definito da incompetenti) spesometro decido che è il caso di implementare l'ultima funzione che manca, l'update delle fatture.

Preso da un'embolo di pazzia decido che il codice precedente è troppo prolisso ed astruso, ne son sicuro fra qualche giorno avrò dimenticato diverse cose e poi la manutenzione sarà un casino cosi' (me idiota) ottimizzo il tutto per passare a questo:
    def _create_dati_fattura(self,update=False):

        if update:
            filter_func_dtr = lambda \
                    r: r.trasmission_count > 0 and r.company_id.id == company.id and type in self.IN_INVOICE
            filter_func_dte = lambda \
                    r: r.trasmission_count > 0 and r.company_id.id == company.id and type in self.OUT_INVOICE
        else:
            filter_func_dtr = lambda \
                    r: r.company_id.id == company.id and type in self.IN_INVOICE
            filter_func_dte = lambda \
                    r: r.company_id.id == company.id and type in self.OUT_INVOICE

        companies = self.env['account.invoice'].browse(
            self.env.context['active_ids']
        ).mapped('company_id')

        def _make_trasmission(company,type):

            partners = self.env['account.invoice'].browse(
                self.env.context['active_ids']
            ).filtered(filter_func_dtr if type == 'DTR' else filter_func_dte).mapped('partner_id')
            position = 1
            need_recursion = False
            if partners and len(partners) > 0:
                dati_fattura = self._make_header(company,type=type)
                filename = '{}_DF_{}'.format(
                    company.vat,
                    dati_fattura.DatiFatturaHeader.ProgressivoInvio
                )
                if type == 'DRT':
                    t_type =  'drt' if not update else 'mdtr'
                else:
                    t_type = 'dre' if not update else 'mdte'
                trasmission = self.env['l10n_it_vat.datifattura_trasmission'].create(
                    {'name': filename,
                     'type': t_type}
                )
                if update and type == 'DTR':
                    dati_fattura.DTR.Rettifica = RettificaType()
                elif update and type == 'DTE':
                    dati_fattura.DTE.Rettifica = RettificaType()
            else:
                return
            for partner in partners:
                if type == 'DTR':
                    prestatore = self._cedenteprestatoredtr_fromodoo(partner)
                else:
                    prestatore = self._cessionariocommittentedte_fromodoo(partner)
                invoices = self.env['account.invoice'].browse(
                    self.env.context['active_ids']
                ).filtered(filter_func_dtr if type == 'DTR' else filter_func_dte
                           ).filtered(lambda r: r.partner_id.id == partner.id)
                number_invoice = len(invoices)
                for invoice in invoices:
                    if type == 'DTR':
                        prestatore.DatiFatturaBodyDTR.append(self._make_invoice_body(invoice))
                    else:
                        prestatore.DatiFatturaBodyDTE.append(self._make_invoice_body(invoice))
                    self.env['l10n_it_vat.account_invoice_datifatture_line'].create(
                        {'invoice_id': invoice.id,
                         'position': position,
                         'company_id': company.id,
                         'trasmission_id': trasmission.id,
                         'type': 'new' if not update else 'upd'
                         }
                    )
                    number_invoice -= 1
                    if number_invoice < 0:
                        need_recursion = True
                        break
                if type == 'DTR':
                    dati_fattura.DTR.CedentePrestatoreDTR.append(prestatore)
                else:
                    dati_fattura.DTE.CessionarioCommittenteDTE.append(prestatore)

            try:
                datas = base64.b64encode(dati_fattura.toprettyxml(encoding="UTF-8"))
                self.env['ir.attachment'].create(
                    {'name': filename,
                     'datas_fname': '{}.xml'.format(filename),
                     'datas': datas,
                     'res_model': 'l10n_it_vat.datifattura_trasmission',
                     'res_id': trasmission.id
                     }
                )
            except pyxb.ValidationError as ve:
                print ve.details()
                raise UserError(ve.details())
            if need_recursion:
                _make_trasmission(company,type)

        for company in companies:
            _make_trasmission(company,'DTR')
            _make_trasmission(company, 'DTE')

Mi direte, e bhe? .....

Mi accorgo solo ora che la rettifica si puo' fare solo per un file alla volta :( :( :( .... in altre parole codice da buttare ....

Ma chi azzo ha scritto queste specifiche prive di logica ....
Vabbuo ben mi sta cosi' la prossima volta controllo meglio ed evito di supporre che AdE abbiano un cervello.

Scusate lo sfogo.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29568

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
La mattina porta consiglio :D risolto senza stravolgere il modello di base, integrata la modifica nella fase di cancellazione e tolta dalla fase principale :D ... salvato buona parte del codice per fortuna.

Resto pero' perplesso su alcune "patch" provvisorie quali ad esempio la gestione delle bollette doganali per l'anno 2017 .... dovrebbe essere AdE a far ste cose non demandare agli altri.

Analogo discorso si potrebbe fare per la fantomatica natura "N1" da applicare in caso di fatture a zero seppur l'aliquota non rientra in tale natura ... ma poi vogliam parlare della natura N1 quando in fattura elettronica è N01 ... magari parlarsi prima si eviterebbero sti casini, almeno odoo di viene incontro con tanti tag :D
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29570

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Grazie per lo sfogo del programmatore
:throw:
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29576

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Magari è utile a qualcuno .... in allegato trovate il file xsl per visualizzare DTR e DTE dello spesometro ... utile per le prime verifiche prima di inviare.

Giusto per facilitare qualcuno, se serve, in questa bolgia che è diventato lo spesometro, e pensare che tutto doveva essere semplice :( :( :(

E' molto semplice sia nella grafica e non supporta rappresentanti fiscali e roba simile ma puo' essere utile.

Bha non mi fa allegare il file ... lo butto su git :D

github.com/gigidn/odoo_install/blob/master/DatiFattura.xsl
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29577

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
@Gigidn,
scusami ma non ho capito come possa esere usato
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Questa la devo raccontare .... 1 Anno 4 Mesi fa #29579

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Prendi questo file e lo metti in una cartella insieme al file XML della comunicazione.
Inserisci la riga di sotto subito dopo la definizione dell'xml (prima riga):
<?xml-stylesheet type="text/xsl" href="DatiFattura.xsl"?>

Apri il file xml con un browser qualunque ad eccezione di chrome che ha un'implementazione "fantasiosa" della sicurezza.

Se vuoi comunque usare chrome nella cartella di cui sopra lanci:

python -m SimpleHTTPServer

e poi ti colleghi a localhost:8000 e selezioni il file xml che vuoi.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.139 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam