def setDettaglioLinea(self, line_no, line, body, price_precision,
                       uom_precision):
     if not line.invoice_line_tax_ids:
         raise UserError(
             _("Invoice line %s does not have tax.") % line.name)
     if len(line.invoice_line_tax_ids) > 1:
         raise UserError(
             _("Too many taxes for invoice line %s.") % line.name)
     aliquota = line.invoice_line_tax_ids[0].amount
     AliquotaIVA = '%.2f' % float_round(aliquota, 2)
     line.ftpa_line_number = line_no
     prezzo_unitario = self._get_prezzo_unitario(line)
     DettaglioLinea = DettaglioLineeType(
         NumeroLinea=str(line_no),
         Descrizione=encode_for_export(line.name, 1000),
         PrezzoUnitario='{prezzo:.{precision}f}'.format(
             prezzo=prezzo_unitario, precision=price_precision),
         Quantita='{qta:.{precision}f}'.format(qta=line.quantity,
                                               precision=uom_precision),
         UnitaMisura=line.uom_id and (unidecode(line.uom_id.name)) or None,
         PrezzoTotale='%.2f' % float_round(line.price_subtotal, 2),
         AliquotaIVA=AliquotaIVA)
     DettaglioLinea.ScontoMaggiorazione.extend(
         self.setScontoMaggiorazione(line))
     if aliquota == 0.0:
         if not line.invoice_line_tax_ids[0].kind_id:
             raise UserError(
                 _("No 'nature' field for tax %s.") %
                 line.invoice_line_tax_ids[0].name)
         DettaglioLinea.Natura = line.invoice_line_tax_ids[0].kind_id.code
         if line.invoice_line_tax_ids[0].kind_id.code == 'N2.1' and \
                 line.invoice_id.partner_id.country_id.code in [
             'AT', 'BE', 'BG', 'CY', 'HR', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'IE',
             'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'CZ', 'RO', 'SK', 'SI',
             'ES', 'SE', 'HU'
         ]:
             dati_gestionali = AltriDatiGestionaliType()
             dati_gestionali.TipoDato = 'INVCONT'
             DettaglioLinea.AltriDatiGestionali.append(dati_gestionali)
     if line.admin_ref:
         DettaglioLinea.RiferimentoAmministrazione = line.admin_ref
     if line.product_id:
         product_code = line.product_id.default_code
         if product_code:
             CodiceArticolo = CodiceArticoloType(
                 CodiceTipo=self.env['ir.config_parameter'].sudo().
                 get_param('fatturapa.codicetipo.odoo', 'ODOO'),
                 CodiceValore=product_code[:35],
             )
             DettaglioLinea.CodiceArticolo.append(CodiceArticolo)
         product_barcode = line.product_id.barcode
         if product_barcode:
             CodiceArticolo = CodiceArticoloType(
                 CodiceTipo='EAN',
                 CodiceValore=product_barcode[:35],
             )
             DettaglioLinea.CodiceArticolo.append(CodiceArticolo)
     body.DatiBeniServizi.DettaglioLinee.append(DettaglioLinea)
     return DettaglioLinea
    def setDettaglioLinee(self, invoice, body):
        super().setDettaglioLinee(invoice, body)

        force_dichiarazione_intento_ids = invoice.dichiarazione_intento_ids.browse(
        )
        line_no = 1
        for line in invoice.invoice_line_ids:
            if line.force_dichiarazione_intento_id:
                force_dichiarazione_intento_ids |= line.force_dichiarazione_intento_id
            line_no += 1
        to_add = invoice.dichiarazione_intento_ids - force_dichiarazione_intento_ids
        if not to_add:
            return
        DettaglioLinea = DettaglioLineeType(
            NumeroLinea=str(line_no),
            Descrizione=encode_for_export("Altre lettere d'intento", 1000),
            PrezzoUnitario="0.00",
            PrezzoTotale="0.00",
            AliquotaIVA="0.00",
            Natura="N1",
        )
        for dec in to_add:
            dati_gestionali = AltriDatiGestionaliType(
                TipoDato="INTENTO",
                RiferimentoTesto=encode_for_export(dec.telematic_protocol, 60),
                RiferimentoData=dec.date)
            DettaglioLinea.AltriDatiGestionali.append(dati_gestionali)
        body.DatiBeniServizi.DettaglioLinee.append(DettaglioLinea)
    def setDettaglioLinea(self, line_no, line, body, price_precision,
                          uom_precision):
        DettaglioLinea = super().setDettaglioLinea(line_no, line, body,
                                                   price_precision,
                                                   uom_precision)

        if line.force_dichiarazione_intento_id:
            dati_gestionali = AltriDatiGestionaliType(
                TipoDato="INTENTO",
                RiferimentoTesto=encode_for_export(
                    line.force_dichiarazione_intento_id.telematic_protocol,
                    60),
                RiferimentoData=line.force_dichiarazione_intento_id.date)
            DettaglioLinea.AltriDatiGestionali.append(dati_gestionali)
        return DettaglioLinea
Esempio n. 4
0
 def setDettaglioLinea(self, line_no, line, body, price_precision,
                       uom_precision):
     DettaglioLinea = super(WizardExportFatturapa,
                            self).setDettaglioLinea(line_no, line, body,
                                                    price_precision,
                                                    uom_precision)
     for wt in line.invoice_line_tax_wt_ids:
         if wt.wt_types == 'enasarco':
             amount = wt.compute_tax(line.price_subtotal)['tax']
             DettaglioLinea.AltriDatiGestionali.append(
                 AltriDatiGestionaliType(
                     TipoDato="CASSA-PREV",
                     RiferimentoTesto=('ENASARCO TC07 (%s%%)' % wt.tax),
                     RiferimentoNumero='%.2f' % float_round(amount, 2),
                 ))
         else:
             DettaglioLinea.Ritenuta = 'SI'
     return DettaglioLinea