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 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' % (aliquota) line.ftpa_line_number = line_no prezzo_unitario = self._get_prezzo_unitario(line) DettaglioLinea = DettaglioLineeType( NumeroLinea=str(line_no), # can't insert newline with pyxb # see https://tinyurl.com/ycem923t # and ' ' would not be correctly visualized anyway # (for example firefox replaces ' ' with space) Descrizione=line.name.replace('\n', ' ').replace('\t', ' '). replace('\r', ' ').encode('latin', 'ignore').decode('latin'), 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' % line.price_subtotal, 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.admin_ref: DettaglioLinea.RiferimentoAmministrazione = line.admin_ref if line.product_id: if line.product_id.default_code: CodiceArticolo = CodiceArticoloType( CodiceTipo=self.env['ir.config_parameter'].sudo( ).get_param('fatturapa.codicetipo.odoo', 'ODOO'), CodiceValore=line.product_id.default_code ) DettaglioLinea.CodiceArticolo.append(CodiceArticolo) if line.product_id.barcode: CodiceArticolo = CodiceArticoloType( CodiceTipo='EAN', CodiceValore=line.product_id.barcode ) DettaglioLinea.CodiceArticolo.append(CodiceArticolo) body.DatiBeniServizi.DettaglioLinee.append(DettaglioLinea) return True
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.admin_ref: DettaglioLinea.RiferimentoAmministrazione = line.admin_ref if line.product_id: if line.product_id.default_code: CodiceArticolo = CodiceArticoloType( CodiceTipo=self.env['ir.config_parameter'].sudo( ).get_param('fatturapa.codicetipo.odoo', 'ODOO'), CodiceValore=encode_for_export( line.product_id.default_code, 35, 'ascii')) DettaglioLinea.CodiceArticolo.append(CodiceArticolo) if line.product_id.barcode: CodiceArticolo = CodiceArticoloType( CodiceTipo='EAN', CodiceValore=encode_for_export(line.product_id.barcode, 35, 'ascii')) 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)