from django.db import models

# --------------- FINE PREFISSO TEMPLATE --------------- 
class DestinatarioOfferta(models.Model):
    class Meta:
        verbose_name = 'destinatarioofferta'
        verbose_name_plural = 'destinatarioofferta'

    def __str__(self):
        return f"DestinatarioOfferta (id: {self.id})"

    destinazione = models.ForeignKey('contatti_app.Sede', on_delete=models.CASCADE, null=True,
                                     blank=True, related_name="DestinatarioOfferta_da_Sede_destinazione")
    intestatario = models.ForeignKey('contatti_app.ContattoAziendale', on_delete=models.CASCADE, null=True,
                                     blank=True, related_name="DestinatarioOfferta_da_contatti_appContattoAziendale_intestatario")


class GruppoOfferte(models.Model):
    class Meta:
        verbose_name = 'gruppoofferte'
        verbose_name_plural = 'gruppoofferte'

    def __str__(self):
        return f"GruppoOfferte (id: {self.id})"

    destinatario = models.ForeignKey('DestinatarioOfferta', on_delete=models.CASCADE, null=True,
                                     blank=True, related_name="GruppoOfferte_da_DestinatarioOfferta_destinatario")
    agente = models.ForeignKey('AgenteOfferta', on_delete=models.CASCADE, null=True,
                               blank=True, related_name="GruppoOfferte_da_AgenteOfferta_agente")
    tipo = models.ForeignKey('TipologiaOfferta', on_delete=models.CASCADE, null=True,
                             blank=True, related_name="GruppoOfferte_da_TipologiaOfferta_tipo")
    anno_1a_rev = models.IntegerField(null=True, blank=True)
    numero = models.IntegerField(null=True, blank=True)
    descrizione = models.CharField(null=True, max_length=4096)


class Offerta(models.Model):
    class Meta:
        verbose_name = 'offerta'
        verbose_name_plural = 'offerta'

    def __str__(self):
        return f"Offerta (id: {self.id})"

    gruppo = models.ForeignKey('GruppoOfferte', on_delete=models.CASCADE,
                               null=True, blank=True, related_name="Offerta_da_GruppoOfferte_gruppo")
    data = models.DateField(null=True, blank=True)
    revisione = models.IntegerField(null=True, blank=True)
    documento = models.CharField(null=True, max_length=128)
    codice_offerta = models.IntegerField(null=True, blank=True)
    accettazione = models.DateField(null=True, blank=True)


class AgenteOfferta(models.Model):
    class Meta:
        verbose_name = 'agenteofferta'
        verbose_name_plural = 'agenteofferta'

    def __str__(self):
        return f"AgenteOfferta (id: {self.id})"

    codice = models.IntegerField(null=True, blank=True)


class ModalitaLavoro(models.Model):
    class Meta:
        verbose_name = 'modalitalavoro'
        verbose_name_plural = 'modalitalavoro'

    def __str__(self):
        return f"ModalitaLavoro (id: {self.id})"

    unita_misura_std = models.ForeignKey('fattura_elettronica_app.UnitaMisura', on_delete=models.CASCADE, null=True,
                                         blank=True, related_name="ModalitaLavoro_da_UnitaMisura_unita_misura_std")
    descrizione = models.IntegerField(null=True, blank=True)


class AtomoFatturabile(models.Model):
    class Meta:
        verbose_name = 'AtomoFatturabile'
        verbose_name_plural = 'AtomoFatturabile'

    def __str__(self):
        return f"AtomoFatturabile (id: {self.id})"

    offerta_riferimento = models.ForeignKey('Offerta', on_delete=models.CASCADE, null=True,
                                            blank=True, related_name="DettaglioFatturabile_da_Offerta_offerta_riferimento")
    modalita_lavoro = models.ForeignKey('ModalitaLavoro', on_delete=models.CASCADE, null=True,
                                        blank=True, related_name="DettaglioFatturabile_da_ModalitaLavoro_modalita_lavoro")
    riferimento_oggetto_fattura = models.ForeignKey('fattura_elettronica_app.OggettoDaFatturare', on_delete=models.CASCADE, null=True,
                                    blank=True, related_name="DettaglioFatturabile_da_DatiEstesiDettaglioFatturabile_riferimento_oggetto_fattura")
    # flusso_di_ricavi = models.ForeignKey('FlussoDiRicavi', on_delete=models.CASCADE, null=True,
    #                                      blank=True, related_name="DettaglioFatturabile_da_FlussoDiRicavi_flusso_di_ricavi")

class ParteEconomicaOfferta(models.Model):
    class Meta:
        verbose_name = 'parteeconomicaofferta'
        verbose_name_plural = 'parteeconomicaofferta'

    def __str__(self):
        return f"ParteEconomicaOfferta (id: {self.id})"

    revisione = models.ForeignKey('Offerta', on_delete=models.CASCADE, null=True,
                                  blank=True, related_name="ParteEconomicaOfferta_da_Offerta_revisione")
    dettaglio_economico_offerto = models.ForeignKey('AtomoFatturabile', on_delete=models.CASCADE, null=True,
                                                    blank=True, related_name="ParteEconomicaOfferta_da_DettaglioFatturabile_dettaglio_economico_offerto")


class TipologiaOfferta(models.Model):
    class Meta:
        verbose_name = 'tipologiaofferta'
        verbose_name_plural = 'tipologiaofferta'

    def __str__(self):
        return f"TipologiaOfferta (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=1024)


