from rest_framework import serializers
from . import models

# --------------- FINE PREFISSO TEMPLATE ---------------


class FatturaElettronicaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.FatturaElettronica
        fields = ('xml_fattura', 'fattura_principale', 'data', 'numero', 'dati_ritenuta', 'importo_totale_documento', 'arrotondamento',
                  'causale', 'tipo_documento', 'art73', 'divisa', 'dati_cassa_previdenziale', 'sconto_maggiorazione', 'dati_bollo', 'dati_veicoli')


class RegimeFiscaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.RegimeFiscale
        fields = ('codifica', 'descrizione')


class TipoCassaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoCassa
        fields = ('codifica', 'descrizione')


class ModalitaPagamentoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.ModalitaPagamento
        fields = ('codifica', 'descrizione')


class TipoDocumentoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoDocumento
        fields = ('codifica', 'descrizione')


class NaturaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Natura
        fields = ('codifica', 'descrizione')


class TipoRitenutaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoRitenuta
        fields = ('codice', 'descrizione')


class XmlFatturaElettronicaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.XmlFatturaElettronica
        fields = ('soggetti_fattura_elettronica', 'progressivo_invio', 'path')


class SoggettiFatturaElettronicaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.SoggettiFatturaElettronica
        fields = ('formato_trasmissione', 'contatto_cedente_prestatore', 'riferimento_amministrazione', 'trasmittente', 'destinatario',
                  'cedente_prestatore', 'rappresentante_fiscale', 'cessionariocommittente', 'terzo_intermediario_o_soggetto_emittente')


class SoggettoFiscaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.SoggettoFiscale
        fields = ('indirizzo_pec', 'regime_fiscale', 'codice_fiscale', 'partita_iva', 'codice_sdi', 'sede_legale',
                  'stabile_organizzazione', 'cod_eori', 'nazione', 'numero_licenza_guida', 'iscrizione_rea', 'revisione_principale', 'rimosso')


class PartitaIvaCFSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.PartitaIvaCF
        fields = ('codice')


class FormatoTrasmissioneSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.FormatoTrasmissione
        fields = ('codifica', 'descrizione')


class CodiceDestinatarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CodiceDestinatario
        fields = ('codifica', 'descrizione')


class DatoDiContattoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatoDiContatto
        fields = ('soggetto_fiscale')


class TelefonoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Telefono
        fields = ('numero', 'note')


class EmailSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Email
        fields = ('indirizzo', 'note')


class IscrizioneAlboProfessionaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.IscrizioneAlboProfessionale
        fields = ('albo_professionale', 'numero_iscrizione_albo',
                  'data_iscrizione_albo', 'persona_fisica')


class IscrizioneREASerializer(serializers.ModelSerializer):
    class Meta:
        model = models.IscrizioneREA
        fields = ('ufficio', 'numero_r_e_a', 'capitale_sociale',
                  'socio_unico', 'stato_liquidazione')


class SocioUnicoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.SocioUnico
        fields = ('codifica', 'descrizione')


class StatoLiquidazioneSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.StatoLiquidazione
        fields = ('codifica', 'descrizione')


class TerzoIntermediarioOSoggettoEmittenteSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TerzoIntermediarioOSoggettoEmittente
        fields = ('terzo_intermediario_o_soggetto_emittente',
                  'soggetto_emittente')


class SoggettoEmittenteSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.SoggettoEmittente
        fields = ('codifica', 'descrizione')


class PersonaFisicaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.PersonaFisica
        fields = ('titolo', 'nome', 'cognome')


class PersonaGiuridicaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.PersonaGiuridica
        fields = ('denominazione')


class AlboProfessionaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.AlboProfessionale
        fields = ('albo_professionale', 'provincia_albo')


class AllegatoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Allegato
        fields = ('fattura_elettronica_body', 'nome_attachment', 'algoritmo_compressione',
                  'formato_attachment', 'descrizione_attachment', 'attachment')


class DatoPagamentoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatoPagamento
        fields = ('fattura_body', 'dettaglio_bancario', 'data_riferimento_termini_pagamento', 'giorni_termini_pagamento', 'data_scadenza_pagamento', 'importo_pagamento',
                  'sconto_pagamento_anticipato', 'data_limite_pagamento_anticipato', 'penalita_pagamenti_ritardati', 'data_decorrenza_penale', 'codice_pagamento', 'quietanzante', 'condizione_pagamento')


class DatiVeicoliSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiVeicoli
        fields = ('data', 'totale_percorso')


class DatiDocumentaliSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiDocumentali
        fields = ('codici_documentali', 'dati_generali',
                  'id_documento', 'data', 'num_item', 'tipologia_documentale')


class DatiFattureCollegateSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiFattureCollegate
        fields = ('dati_generali', 'codici_documentali')


class DatiSALSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiSAL
        fields = ('dati_generali', 'riferimento_fase')


class DatiDDTSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiDDT
        fields = ('dati_generali', 'numero', 'data')


class DatiTrasportoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiTrasporto
        fields = ('dati_generali', 'indirizzo_resa', 'mezzo_trasporto', 'numero_colli', 'descrizione', 'peso_lordo', 'peso_netto',
                  'data_ora_rititro', 'data_inizio_trasporto', 'tipo_resa', 'data_ora_consegna', 'dati_vettore', 'unita_misura_peso')


class ValutaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Valuta
        fields = ('codifica', 'descrizione')


class DatiRitenutaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiRitenuta
        fields = ('tipo_ritenuta', 'importo_ritenuta',
                  'aliquota_ritenuta', 'causale_pagamento')


class CausalePagamentoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CausalePagamento
        fields = ('codice', 'descrizione')


class DatiBolloSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiBollo
        fields = ('importo_bollo')


class DatiCassaPrevidenzialeSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DatiCassaPrevidenziale
        fields = ('tipo_cassa', 'al_cassa', 'importo_contributo_cassa',
                  'imponibile_cassa', 'ritenuta', 'riferimento_amministrazione', 'aliquota_iva')


class ScontoMaggiorazioneSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.ScontoMaggiorazione
        fields = ('tipo', 'percentuale', 'importo')


class TipoScontoMaggiorazioneSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoScontoMaggiorazione
        fields = ('tipo', 'descrizione')


class AliquotaIvaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.AliquotaIva
        fields = ('aliquota_i_v_a', 'natura', 'descrizione')


class ContoBancarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.ContoBancario
        fields = ('soggetto_fiscale', 'beneficiario',
                  'istituto_finanziario', 'iban')


class IstitutoFinanziarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.IstitutoFinanziario
        fields = ('nome', 'abi', 'cab', 'bic')


class DettaglioBancarioSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DettaglioBancario
        fields = ('conto_bancario', 'modalita_pagamento')


class CondizionePagamentoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CondizionePagamento
        fields = ('codifica', 'descrizione')


class DettaglioLineeSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.DettaglioLinee
        fields = ('fattura_elettronica_body', 'numero_linea', 'sconto_maggiorazione', 'aliquota_iva',
                  'riferimento_amministrazione', 'tipo_cessione_prestazione', 'riferimento_oggetto_fattura')


class altroDatoGestionaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.altroDatoGestionale
        fields = ('linea_fattura', 'tipo_dato', 'riferimento_testo',
                  'riferimento_numero', 'riferimento_data')


class TipoCessionePrestazioneSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoCessionePrestazione
        fields = ('codifica', 'descrizione')


class CodiceArticoloSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CodiceArticolo
        fields = ('codice_tipo', 'codice_valore')


class TipoCodiceArticoloSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoCodiceArticolo
        fields = ('codifica', 'descrizione')


class ArticoloLineaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.ArticoloLinea
        fields = ('codice_articolo', 'dettaglio_linee')


class UnitaMisuraSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UnitaMisura
        fields = ('codifica', 'descrizione')


class TipoResaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipoResa
        fields = ('codifica', 'descrizione')


class RiferimentoDDTNumeroLineaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.RiferimentoDDTNumeroLinea
        fields = ('dati_d_d_t', 'dettaglio_linee')


class RiferimentoOrdineAcquistoNumeroLineaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.RiferimentoOrdineAcquistoNumeroLinea
        fields = ('dati_ordine_acquisto', 'dettaglio_linee')


class CodiciDocumentaliSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CodiciDocumentali
        fields = ('codice_commessa_convenzione',
                  'codice_c_u_p', 'codice_c_i_g')


class TipologiaDocumentaleSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.TipologiaDocumentale
        fields = ('codifica', 'descrizione')


class DatiEstesiDettaglioFatturabileSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.OggettoDaFatturare
        fields = ('unita_misura', 'descrizione', 'quantita',
                  'prezzo_unitario', 'data_inizio', 'data_fine')


class SedeSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Sede
        fields = ('inquilino', 'is_legale')


class FaxSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Fax
        fields = ('numero', 'note')


class PecSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Pec
        fields = ('')


class IndirizzoSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Indirizzo
        fields = ('duf', 'civico', 'altro', 'cap_id', 'comune_id', 'dug_id')


class ProvinciaSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Provincia
        fields = ('nome_esteso', 'regione_id')
