parecchia roba da aggiustare
parent
80a4b62b40
commit
6858c52042
|
|
@ -0,0 +1,137 @@
|
|||
from import_export.admin import ImportExportModelAdmin
|
||||
from django.contrib import admin
|
||||
# from django.core.cache import cache
|
||||
# from django.core.paginator import Paginator
|
||||
from . import models
|
||||
from . import resources
|
||||
|
||||
|
||||
# # Modified version of a GIST I found in a SO thread
|
||||
# # cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/
|
||||
# class CachingPaginator(Paginator):
|
||||
# def _get_count(self):
|
||||
# if not hasattr(self, "_count"):
|
||||
# self._count = None
|
||||
# if self._count is None:
|
||||
# try:
|
||||
# key = "adm:{0}:count".format(hash(self.object_list.query.__str__()))
|
||||
# self._count = cache.get(key, -1)
|
||||
# if self._count == -1:
|
||||
# self._count = super().count
|
||||
# cache.set(key, self._count, 60)
|
||||
# except:
|
||||
# self._count = len(self.object_list)
|
||||
# return self._count
|
||||
# count = property(_get_count)
|
||||
|
||||
# # Main reusable Admin class for only viewing
|
||||
# class ViewAdminMixin(admin.ModelAdmin):
|
||||
# def has_add_permission(self, request):
|
||||
# return False
|
||||
#
|
||||
# def has_change_permission(self, request, obj=None):
|
||||
# return False
|
||||
#
|
||||
# def has_delete_permission(self, request, obj=None):
|
||||
# return False
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
@admin.register(models.PersonaContattoAzienda)
|
||||
class PersonaContattoAziendaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaContattoAziendaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SoggettoFiscale)
|
||||
class SoggettoFiscaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SoggettoFiscaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Nazione)
|
||||
class NazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.NazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatoDiContatto)
|
||||
class DatoDiContattoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatoDiContattoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Telefono)
|
||||
class TelefonoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TelefonoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Email)
|
||||
class EmailAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.EmailResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaFisica)
|
||||
class PersonaFisicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaFisicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaGiuridica)
|
||||
class PersonaGiuridicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaGiuridicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Sede)
|
||||
class SedeAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SedeResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Fax)
|
||||
class FaxAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.FaxResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Pec)
|
||||
class PecAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PecResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import pathlib
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ContattiAppConfig(AppConfig):
|
||||
name = 'contatti_app'
|
||||
verbose_name = 'Contatti'
|
||||
path = pathlib.Path(__file__).parent
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
|
||||
import json
|
||||
from channels.generic.websocket import WebsocketConsumer
|
||||
from asgiref.sync import async_to_sync
|
||||
|
||||
|
||||
class WsConsumer(WebsocketConsumer):
|
||||
def connect(self):
|
||||
self.accept()
|
||||
print("accept ws connection")
|
||||
|
||||
def disconnect(self, close_code):
|
||||
print("ws disconnection")
|
||||
|
||||
def receive(self, text_data):
|
||||
text_data_json = json.loads(text_data)
|
||||
print("ws receive", text_data_json)
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- SQL XML created by WWW SQL Designer, https://github.com/ondras/wwwsqldesigner/ -->
|
||||
<!-- Active URL: http://127.0.0.1:8080/ -->
|
||||
<sql>
|
||||
<datatypes db="mysql">
|
||||
<group label="Numeric" color="rgb(238,238,170)">
|
||||
<type label="Integer" length="0" sql="INTEGER" quote=""/>
|
||||
<type label="TINYINT" length="0" sql="TINYINT" quote=""/>
|
||||
<type label="SMALLINT" length="0" sql="SMALLINT" quote=""/>
|
||||
<type label="MEDIUMINT" length="0" sql="MEDIUMINT" quote=""/>
|
||||
<type label="INT" length="0" sql="INT" quote=""/>
|
||||
<type label="BIGINT" length="0" sql="BIGINT" quote=""/>
|
||||
<type label="Decimal" length="1" sql="DECIMAL" re="DEC" quote=""/>
|
||||
<type label="Single precision" length="0" sql="FLOAT" quote=""/>
|
||||
<type label="Double precision" length="0" sql="DOUBLE" re="DOUBLE" quote=""/>
|
||||
</group>
|
||||
|
||||
<group label="Character" color="rgb(255,200,200)">
|
||||
<type label="Char" length="1" sql="CHAR" quote="'"/>
|
||||
<type label="Varchar" length="1" sql="VARCHAR" quote="'"/>
|
||||
<type label="Text" length="0" sql="MEDIUMTEXT" re="TEXT" quote="'"/>
|
||||
<type label="Binary" length="1" sql="BINARY" quote="'"/>
|
||||
<type label="Varbinary" length="1" sql="VARBINARY" quote="'"/>
|
||||
<type label="BLOB" length="0" sql="BLOB" re="BLOB" quote="'"/>
|
||||
</group>
|
||||
|
||||
<group label="Date & Time" color="rgb(200,255,200)">
|
||||
<type label="Date" length="0" sql="DATE" quote="'"/>
|
||||
<type label="Time" length="0" sql="TIME" quote="'"/>
|
||||
<type label="Datetime" length="0" sql="DATETIME" quote="'"/>
|
||||
<type label="Year" length="0" sql="YEAR" quote=""/>
|
||||
<type label="Timestamp" length="0" sql="TIMESTAMP" quote="'"/>
|
||||
</group>
|
||||
|
||||
<group label="Miscellaneous" color="rgb(200,200,255)">
|
||||
<type label="ENUM" length="1" sql="ENUM" quote=""/>
|
||||
<type label="SET" length="1" sql="SET" quote=""/>
|
||||
<type label="Bit" length="0" sql="bit" quote=""/>
|
||||
</group>
|
||||
</datatypes><table x="1899" y="1298" name="PersonaContattoAzienda">
|
||||
<row name="azienda" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<row name="persona_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>persona_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1924" y="823" name="SoggettoFiscale">
|
||||
<row name="indirizzo_pec" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="Pec" row="email_ptr" />
|
||||
</row>
|
||||
<row name="sede_legale" null="0" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="stabile_organizzazione" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="nazione" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="Nazione" row="id" />
|
||||
</row>
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="revisione_principale" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<row name="rimosso" null="1" autoincrement="0">
|
||||
<datatype>bit</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="539" y="521" name="Nazione">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="codifica" null="0" autoincrement="0">
|
||||
<datatype>CHAR(2)</datatype>
|
||||
<default>'NULL'</default></row>
|
||||
<row name="descrizione" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(250)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2178" y="822" name="DatoDiContatto">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="soggetto_fiscale" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2468" y="411" name="Telefono">
|
||||
<row name="datodicontatto_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="DatoDiContatto" row="id" />
|
||||
</row>
|
||||
<row name="numero" null="0" autoincrement="0">
|
||||
<datatype>VARCHAR(20)</datatype>
|
||||
<default>'NULL'</default></row>
|
||||
<row name="note" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(64)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>datodicontatto_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2160" y="657" name="Email">
|
||||
<row name="datodicontatto_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="DatoDiContatto" row="id" />
|
||||
</row>
|
||||
<row name="indirizzo" null="0" autoincrement="0">
|
||||
<datatype>VARCHAR(30)</datatype>
|
||||
<default>'NULL'</default></row>
|
||||
<row name="note" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(64)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>datodicontatto_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2235" y="1322" name="PersonaFisica">
|
||||
<row name="soggetto_fiscale_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<row name="titolo" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(10)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="nome" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(60)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="cognome" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(60)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>soggetto_fiscale_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1956" y="1193" name="PersonaGiuridica">
|
||||
<row name="soggetto_fiscale_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<row name="denominazione" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(80)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>soggetto_fiscale_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1681" y="1155" name="Sede">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="inquilino" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="SoggettoFiscale" row="id" />
|
||||
</row>
|
||||
<row name="is_legale" null="1" autoincrement="0">
|
||||
<datatype>bit</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2235" y="493" name="Fax">
|
||||
<row name="datodicontatto_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="DatoDiContatto" row="id" />
|
||||
</row>
|
||||
<row name="numero" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(20)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="note" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(64)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>datodicontatto_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="2017" y="516" name="Pec">
|
||||
<row name="email_ptr" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="Email" row="datodicontatto_ptr" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>email_ptr</part>
|
||||
</key>
|
||||
</table>
|
||||
</sql>
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
from django.db import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class PersonaContattoAzienda(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personacontattoazienda'
|
||||
verbose_name_plural = 'personacontattoazienda'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaContattoAzienda (id: {self.id})"
|
||||
|
||||
azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="PersonaContattoAzienda_da_SoggettoFiscale_azienda")
|
||||
|
||||
|
||||
class SoggettoFiscale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'soggettofiscale'
|
||||
verbose_name_plural = 'soggettofiscale'
|
||||
|
||||
def __str__(self):
|
||||
return f"SoggettoFiscale (id: {self.id})"
|
||||
|
||||
indirizzo_pec = models.ForeignKey('Pec', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_Pec_indirizzo_pec")
|
||||
sede_legale = models.IntegerField()
|
||||
stabile_organizzazione = models.IntegerField(null=True, blank=True)
|
||||
nazione = models.ForeignKey('Nazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_Nazione_nazione")
|
||||
revisione_principale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_SoggettoFiscale_revisione_principale")
|
||||
rimosso = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class DatoDiContatto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datodicontatto'
|
||||
verbose_name_plural = 'datodicontatto'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatoDiContatto (id: {self.id})"
|
||||
|
||||
soggetto_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatoDiContatto_da_SoggettoFiscale_soggetto_fiscale")
|
||||
|
||||
|
||||
class Telefono(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'telefono'
|
||||
verbose_name_plural = 'telefono'
|
||||
|
||||
def __str__(self):
|
||||
return f"Telefono (id: {self.id})"
|
||||
|
||||
numero = models.CharField(max_length=20)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class Email(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'email'
|
||||
verbose_name_plural = 'email'
|
||||
|
||||
def __str__(self):
|
||||
return f"Email (id: {self.id})"
|
||||
|
||||
indirizzo = models.CharField(max_length=30)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class PersonaFisica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personafisica'
|
||||
verbose_name_plural = 'personafisica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaFisica (id: {self.id})"
|
||||
|
||||
titolo = models.CharField(null=True, max_length=10)
|
||||
nome = models.CharField(null=True, max_length=60)
|
||||
cognome = models.CharField(null=True, max_length=60)
|
||||
|
||||
|
||||
class PersonaGiuridica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personagiuridica'
|
||||
verbose_name_plural = 'personagiuridica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaGiuridica (id: {self.id})"
|
||||
|
||||
denominazione = models.CharField(null=True, max_length=80)
|
||||
|
||||
|
||||
class Sede(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'sede'
|
||||
verbose_name_plural = 'sede'
|
||||
|
||||
def __str__(self):
|
||||
return f"Sede (id: {self.id})"
|
||||
|
||||
inquilino = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Sede_da_SoggettoFiscale_inquilino")
|
||||
is_legale = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class Fax(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'fax'
|
||||
verbose_name_plural = 'fax'
|
||||
|
||||
def __str__(self):
|
||||
return f"Fax (id: {self.id})"
|
||||
|
||||
numero = models.CharField(null=True, max_length=20)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class Pec(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'pec'
|
||||
verbose_name_plural = 'pec'
|
||||
|
||||
def __str__(self):
|
||||
return f"Pec (id: {self.id})"
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
from import_export import resources
|
||||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class PersonaContattoAziendaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaContattoAzienda
|
||||
|
||||
|
||||
class SoggettoFiscaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SoggettoFiscale
|
||||
|
||||
|
||||
class NazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Nazione
|
||||
|
||||
|
||||
class DatoDiContattoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatoDiContatto
|
||||
|
||||
|
||||
class TelefonoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Telefono
|
||||
|
||||
|
||||
class EmailResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Email
|
||||
|
||||
|
||||
class PersonaFisicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaFisica
|
||||
|
||||
|
||||
class PersonaGiuridicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaGiuridica
|
||||
|
||||
|
||||
class SedeResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Sede
|
||||
|
||||
|
||||
class FaxResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Fax
|
||||
|
||||
|
||||
class PecResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Pec
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
from rest_framework import serializers
|
||||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class PersonaContattoAziendaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.PersonaContattoAzienda
|
||||
fields = ('azienda')
|
||||
|
||||
|
||||
class SoggettoFiscaleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.SoggettoFiscale
|
||||
fields = ('indirizzo_pec', 'sede_legale', 'stabile_organizzazione',
|
||||
'nazione', 'revisione_principale', 'rimosso')
|
||||
|
||||
|
||||
class NazioneSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Nazione
|
||||
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 PersonaFisicaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.PersonaFisica
|
||||
fields = ('titolo', 'nome', 'cognome')
|
||||
|
||||
|
||||
class PersonaGiuridicaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.PersonaGiuridica
|
||||
fields = ('denominazione')
|
||||
|
||||
|
||||
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 = ('')
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete
|
||||
from django.dispatch import receiver
|
||||
from . import models
|
||||
|
||||
# @receiver(pre_save, sender=models.ExampleModel)
|
||||
# def example_callback(sender, instance, created=False, **kwargs):
|
||||
# if kwargs['raw'] or created:
|
||||
# return
|
||||
|
|
@ -0,0 +1,480 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
sqldes2django.
|
||||
|
||||
Usage:
|
||||
sqldes2django.py write [--tgt-dir=<tgt-dir>] [--unmanaged=<unmanaged-name>] [--models-file=<models-file>] [--serializers-file=<serializers-file>] [--views-file=<views-file>] [--urls-file=<urls-file>] [--admin-file=<admin-file>] [--resources-file=<resources-file>] [--no-format] [--xml=<xml-path>]
|
||||
sqldes2django.py (-h | --help)
|
||||
sqldes2django.py (--version)
|
||||
|
||||
|
||||
Options:
|
||||
--tgt-dir=<tgt-dir> Directory di output [default: .].
|
||||
--xml=<xml-path> Directory di output [default: modello_database.xml].
|
||||
--models-file=<models-file> Nome del file dei modelli [default: <tgt-dir>/models.py].
|
||||
--serializers-file=<serializers-file> Nome del file dei serializers [default: <tgt-dir>/serializers.py].
|
||||
--views-file=<views-file> Nome del file delle views [default: <tgt-dir>/views.py].
|
||||
--urls-file=<urls-file> Nome del file degli url [default: <tgt-dir>/urls.py].
|
||||
--admin-file=<admin-file> Nome del file dell'admin [default: <tgt-dir>/admin.py].
|
||||
--resources-file=<resources-file> Nome del file delle resources [default: <tgt-dir>/resources.py].
|
||||
--no-format Non formattare l'output con autopep8.
|
||||
--unmanaged=<unmanaged-name> Crea modelli unmanaged (senza migrazioni): supporta pk e fk multiple, setta database=<unmanaged-name>
|
||||
--version Show version.
|
||||
-h --help Show this screen.
|
||||
"""
|
||||
import xml.etree.ElementTree as ET
|
||||
from collections import defaultdict
|
||||
import lark
|
||||
import os
|
||||
import sys
|
||||
import autopep8
|
||||
import re
|
||||
from docopt import docopt
|
||||
"""
|
||||
Created on Thu Feb 28 15:28:17 2019
|
||||
|
||||
@author: guido
|
||||
"""
|
||||
# TODO: Validare nomi per uso con Django
|
||||
# TODO: Trattare le chiavi primarie manuali e le chiavi primarie composite
|
||||
# TODO: Aggiungere tipi mancanti alla mappa
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
arguments = docopt(__doc__, version='Sqldes2django 0.1')
|
||||
for arg in arguments:
|
||||
if isinstance(arguments[arg], str):
|
||||
arguments[arg] = arguments[arg].replace("<tgt-dir>",
|
||||
arguments['--tgt-dir'])
|
||||
|
||||
tgtdir = arguments['--tgt-dir']
|
||||
|
||||
unmanaged = False
|
||||
if arguments['--unmanaged']:
|
||||
unmanaged = True
|
||||
nome_db = arguments['--unmanaged']
|
||||
print(arguments)
|
||||
|
||||
tgtfil = {x: arguments["--" + x + "-file"]
|
||||
for x in ('models', 'admin', 'serializers', 'views', 'urls', 'resources',)}
|
||||
|
||||
sql_type_grammar = lark.Lark(r"""
|
||||
%import common.ESCAPED_STRING
|
||||
%import common.SIGNED_NUMBER
|
||||
%import common.WS
|
||||
%import common.CNAME
|
||||
%ignore WS
|
||||
|
||||
tipo: costruttore | costruttore "(" [arg ("," arg)* ] ")"
|
||||
?costruttore: CNAME
|
||||
?arg: val | keyword_argument
|
||||
val: SIGNED_NUMBER | ESCAPED_STRING
|
||||
keyword_argument: CNAME "=" val""",
|
||||
parser="lalr",
|
||||
start="tipo") # TODO: leggere lo standard vero sql
|
||||
|
||||
def tutti_parametri(stringa_orig):
|
||||
params = sql_type_grammar.parse(stringa_orig)
|
||||
parametri = params.children[1:]
|
||||
posizionali = []
|
||||
keyword_args = {}
|
||||
trovato_kw = False
|
||||
for x in parametri:
|
||||
if x.data == "val":
|
||||
assert not trovato_kw, f"Argomento posizionale non può seguire keyword argument in '{stringa_orig}'"
|
||||
posizionali.append(x.children[0].value)
|
||||
if x.data == "keyword_argument":
|
||||
trovato_kw = True
|
||||
keyword_args[x.children[0].value] = x.children[1].children[0].value
|
||||
return {"costruttore": params.children[0].value, "posizionali": posizionali, "keyword_args": keyword_args, "stringa": stringa_orig}
|
||||
|
||||
def get_tipo_mappato(parsato):
|
||||
tipodato = parsato['costruttore'].upper()
|
||||
return mappa_tipi[tipodato]
|
||||
|
||||
def is_parametrico(parsato):
|
||||
return len(parsato["posizionali"]) > 0 or len(parsato["keyword_args"]) > 0
|
||||
|
||||
def get_parametro(parametri, positional=None, keyword=None):
|
||||
if keyword is not None and keyword in parametri['keyword_args']:
|
||||
val = parametri['keyword_args'][keyword]
|
||||
del parametri['keyword_args'][keyword]
|
||||
return val
|
||||
if positional is not None:
|
||||
try:
|
||||
return parametri['posizionali'][positional]
|
||||
except IndexError as e:
|
||||
raise Exception(
|
||||
f"Richiesti almeno {positional + 1} argomenti posizionali, trovati {len(parametri['posizionali'])} in {parametri['stringa']}") from e
|
||||
raise Exception("Occorre specificare positional o keyword")
|
||||
|
||||
fine_prefisso_RE = re.compile(r'# +-+ +FINE PREFISSO TEMPLATE +-+')
|
||||
def leggi_prefisso(nome_modulo):
|
||||
tmpl_prefisso = []
|
||||
with open(tgtfil[nome_modulo]) as fp:
|
||||
for l in fp.readlines():
|
||||
tmpl_prefisso.append(l)
|
||||
if fine_prefisso_RE.search(l):
|
||||
break
|
||||
return ''.join(tmpl_prefisso)
|
||||
|
||||
|
||||
multifkimport = "from compositefk.fields import CompositeForeignKey # Installa django-composite-foreignkey"
|
||||
multipkmodel = """
|
||||
class MultiPkModel(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
def save(self, *args, **kwargs):
|
||||
raise NotImplementedError("È un MultiPkModel")
|
||||
# TODO
|
||||
def __hash__(self):
|
||||
attributi_chiave_multipla = self._meta.unique_together[0]
|
||||
parti = []
|
||||
for x in attributi_chiave_multipla:
|
||||
try:
|
||||
parte = getattr(self, x + '_id') # se oltre che parte di primary è foreign, non vogliamo fetchare tutto l'oggetto
|
||||
except AttributeError:
|
||||
parte = getattr(self, x)
|
||||
parti.append(parte)
|
||||
return hash(tuple(parti))
|
||||
|
||||
|
||||
|
||||
class MultiPkQuerySet(models.QuerySet):
|
||||
def get(self, *args, **kwargs):
|
||||
attributi_chiave_multipla = self.model._meta.unique_together[0]
|
||||
if any(key not in kwargs for key in attributi_chiave_multipla):
|
||||
raise Exception("È un MultiPkModel. Fornire anche i seguenti keywoard arguments: " + str(set(attributi_chiave_multipla) - set(kwargs.keys())))
|
||||
filtro = {k : kwargs[k] for k in attributi_chiave_multipla}
|
||||
risultati = list(self.filter(**filtro).all())
|
||||
if len(risultati) == 1:
|
||||
return risultati[0]
|
||||
elif len(risultati) == 0:
|
||||
raise self.model.DoesNotExist(self.model._meta.object_name + " with " + str(filtro))
|
||||
else:
|
||||
raise Exception("MultiPkQuerySet.get: righe multiple con " + str(filtro))
|
||||
|
||||
|
||||
class MultiPkManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return MultiPkQuerySet(self.model, using=self._db)
|
||||
"""
|
||||
|
||||
tmpl_models_prefisso = leggi_prefisso('models')
|
||||
tmpl_models = '''
|
||||
{multifkimport}
|
||||
{multipkmodel}
|
||||
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_model_class = '''
|
||||
class {nometab}({classe_model}):{db_name}
|
||||
class Meta:
|
||||
verbose_name = '{nometab_lower}'
|
||||
verbose_name_plural = '{nometab_lower}'
|
||||
{is_managed}{unique_together}
|
||||
def __str__(self):
|
||||
return f"{nometab} ({chiavi})"
|
||||
|
||||
{righetxt}
|
||||
'''
|
||||
tmpl_riga = '''{nomeriga} = models.{tiporiga}({opzioniriga})'''
|
||||
tmpl_chiave_fk = '''{nomeriga} = models.ForeignKey('{altratab}', {opzioniriga})'''
|
||||
|
||||
tmpl_admin_prefisso = leggi_prefisso('admin')
|
||||
tmpl_admin = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_admin_class = '''
|
||||
@admin.register(models.{nometab})
|
||||
class {nometab}Admin(ImportExportModelAdmin):
|
||||
# resource = resources.{nometab}Resource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
'''
|
||||
|
||||
|
||||
tmpl_serializers_prefisso = leggi_prefisso('serializers')
|
||||
tmpl_serializers = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_serializer_class = '''
|
||||
class {nometab}Serializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.{nometab}
|
||||
fields = ('{campi}')
|
||||
'''
|
||||
|
||||
tmpl_views_prefisso = leggi_prefisso('views')
|
||||
tmpl_views = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_view_class = '''
|
||||
class {nometab}_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.{nometab}.objects.all()
|
||||
serializer_class = serializers.{nometab}Serializer
|
||||
'''
|
||||
|
||||
tmpl_urls_prefisso = leggi_prefisso('urls')
|
||||
tmpl_urls = '''
|
||||
{urls}
|
||||
|
||||
urlpatterns += router.urls
|
||||
'''
|
||||
|
||||
tmpl_url_route = '''router.register(r'{nometaburl}', views.{nometab}_View)'''
|
||||
tmpl_resources_prefisso = leggi_prefisso('resources')
|
||||
tmpl_resources = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_resource_class = '''
|
||||
class {nometab}Resource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.{nometab}
|
||||
'''
|
||||
|
||||
mappa_tipi = {
|
||||
'INTEGER': 'IntegerField',
|
||||
'INT': 'IntegerField',
|
||||
'NUMERIC': 'DecimalField',
|
||||
'DECIMAL': 'DecimalField',
|
||||
'SMALLINT': 'SmallIntegerField',
|
||||
'FLOAT': 'FloatField',
|
||||
'TEXT': 'TextField',
|
||||
'VARCHAR': 'CharField',
|
||||
'CHAR': 'CharField',
|
||||
'MEDIUMTEXT': 'TextField',
|
||||
'DATE': 'DateField',
|
||||
'TIME': 'TimeField',
|
||||
'DATETIME': 'DateTimeField',
|
||||
'TIMESTAMP': 'DateTimeField',
|
||||
'DECIMAL': 'DecimalField',
|
||||
'BIT': 'BooleanField',
|
||||
'BINARY': 'BooleanField',
|
||||
'JSONB': 'JSONField'
|
||||
}
|
||||
|
||||
tabelle = list(ET.ElementTree(file=arguments['--xml'])
|
||||
.findall('.//table'))
|
||||
tabelle2 = (ET.ElementTree(file=arguments['--xml'])
|
||||
.findall('.//table'))
|
||||
|
||||
models = []
|
||||
admin = []
|
||||
serializers = []
|
||||
views = []
|
||||
urls = []
|
||||
resources = []
|
||||
nomi_tabelle = []
|
||||
any_multiple_fk = False
|
||||
any_multiple_pk = False
|
||||
|
||||
tabelle_multi_pk = set()
|
||||
for t in tabelle2:
|
||||
nome = t.get('name')
|
||||
chiave = t.findall('.//key/part')
|
||||
if len(chiave) > 1:
|
||||
tabelle_multi_pk.add(nome)
|
||||
any_multiple_pk = True
|
||||
|
||||
renames = {}
|
||||
is_fk_and_pk = set()
|
||||
for t in tabelle:
|
||||
righe = t.findall('.//row')
|
||||
n_tab = t.get('name')
|
||||
chiave = t.findall('.//key/part')
|
||||
|
||||
# prima decido i rename
|
||||
for r in righe:
|
||||
fk = r.find('relation')
|
||||
n = r.get('name')
|
||||
is_simple_fk = fk is not None and fk.get(
|
||||
'table') not in tabelle_multi_pk
|
||||
if is_simple_fk and unmanaged:
|
||||
# renames[(n_tab, n)] = 'fk_' + n # poi ci pensiamo
|
||||
renames[(n_tab, n)] = n
|
||||
else:
|
||||
renames[(n_tab, n)] = n
|
||||
if is_simple_fk and n in [x.text for x in chiave]:
|
||||
is_fk_and_pk.add((n_tab, n))
|
||||
|
||||
for t in tabelle:
|
||||
rec_tabella = dict()
|
||||
rec_serializers = dict()
|
||||
rec_tabella['nometab'] = t.get('name')
|
||||
rec_tabella['nometab_lower'] = rec_tabella['nometab'].lower()
|
||||
n_tab = t.get('name')
|
||||
rec_tabella['classe_model'] = 'models.Model'
|
||||
nomi_tabelle.append(rec_tabella['nometab'])
|
||||
rec_serializers['nometab'] = t.get('name')
|
||||
rec_tabella['is_managed'] = ''
|
||||
rec_tabella['db_name'] = ''
|
||||
rec_tabella['unique_together'] = ''
|
||||
if unmanaged:
|
||||
rec_tabella['is_managed'] = f'managed = False\n db_table = "{rec_tabella["nometab"]}"\n '
|
||||
rec_tabella['db_name'] = f'\n database = "{nome_db}"'
|
||||
righe = t.findall('.//row')
|
||||
chiave = t.findall('.//key/part')
|
||||
pk_singola = None
|
||||
righetxt = []
|
||||
if len(chiave) == 1:
|
||||
if not unmanaged:
|
||||
righe = [r for r in righe if r.get('name') != chiave[0].text]
|
||||
pk_singola = chiave[0].text
|
||||
if unmanaged:
|
||||
rec_tabella['chiavi'] = renames[(n_tab, pk_singola)] + ': {self.' + (renames[(n_tab, pk_singola)]+'_id' if (
|
||||
n_tab, pk_singola) in is_fk_and_pk else renames[(n_tab, pk_singola)]) + '}'
|
||||
else:
|
||||
rec_tabella['chiavi'] = "id: {self.id}"
|
||||
elif len(chiave) > 1:
|
||||
multi_pk = True
|
||||
rec_tabella['classe_model'] = "MultiPkModel"
|
||||
nomi = ", ".join(f"'{renames[(n_tab, x.text)]}'" for x in chiave)
|
||||
rec_tabella['unique_together'] = f"unique_together=[({nomi})]"
|
||||
if unmanaged:
|
||||
rec_tabella['chiavi'] = ", ".join(renames[(n_tab, x.text)] + ': {self.' + (renames[(n_tab, x.text)]+'_id' if (
|
||||
n_tab, x.text) in is_fk_and_pk else renames[(n_tab, x.text)]) + '}' for x in chiave)
|
||||
else:
|
||||
rec_tabella['chiavi'] = "non puoi fare una pk multipla in django"
|
||||
righetxt.append('objects = MultiPkManager()')
|
||||
righeserializerstxt = []
|
||||
# TODO: implementare eventuali tipi multiparametro e con spazi
|
||||
|
||||
datoparametricoRE = re.compile(
|
||||
r'(?P<tipo>[^(]*)\((?P<lunghezza>[^)]*)\)')
|
||||
fk_composite = defaultdict(list)
|
||||
is_first = True
|
||||
for r in righe:
|
||||
rec_riga = dict()
|
||||
rec_chiave_fk = dict()
|
||||
rec_chiave_fk['opzioniriga'] = dict()
|
||||
rec_riga['opzioniriga'] = dict()
|
||||
comm = r.find('comment')
|
||||
if comm is not None and 'django_ignore' in comm.text:
|
||||
continue
|
||||
riga_nullable = r.get('null', "1") == "1"
|
||||
if is_first and unmanaged and rec_tabella['nometab'] in tabelle_multi_pk:
|
||||
if not riga_nullable:
|
||||
# il primo field diventa chiave primaria fittizia. Attenzione a non usarlo davvero!
|
||||
righetxt.append("")
|
||||
righetxt.append(
|
||||
"# chiave primaria fittizia. Attenzione a non usarla! Fa fede unique_together.")
|
||||
rec_riga['opzioniriga']['primary_key'] = True
|
||||
rec_chiave_fk['opzioniriga']['primary_key'] = True
|
||||
is_first = False
|
||||
fk = r.find('relation')
|
||||
is_simple_fk = fk is not None and fk.get(
|
||||
'table') not in tabelle_multi_pk
|
||||
if is_simple_fk:
|
||||
rec_chiave_fk['nomeriga'] = renames[(n_tab, r.get('name'))]
|
||||
n_altra_tab = rec_chiave_fk['altratab'] = fk.get('table')
|
||||
rec_chiave_fk['altracol'] = renames[(
|
||||
n_altra_tab, fk.get('row'))]
|
||||
rec_chiave_fk['opzioniriga']['on_delete'] = 'models.CASCADE'
|
||||
rec_chiave_fk['opzioniriga']['null'] = riga_nullable
|
||||
rec_chiave_fk['opzioniriga']['blank'] = riga_nullable
|
||||
if unmanaged:
|
||||
rec_chiave_fk['opzioniriga']['to_field'] = f"'{rec_chiave_fk['altracol']}'"
|
||||
rec_chiave_fk['opzioniriga']['db_column'] = f"'{r.get('name')}'"
|
||||
rec_chiave_fk['opzioniriga']['related_name'] = (
|
||||
f""""{rec_tabella['nometab']}_da_{rec_chiave_fk['altratab']}_{rec_chiave_fk['nomeriga']}" """.strip())
|
||||
if not rec_chiave_fk['opzioniriga']['null']:
|
||||
del rec_chiave_fk['opzioniriga']['null']
|
||||
del rec_chiave_fk['opzioniriga']['blank']
|
||||
rec_chiave_fk['opzioniriga'] = ', '.join(
|
||||
f'{k}={v}' for k, v in rec_chiave_fk['opzioniriga'].items())
|
||||
righetxt.append(tmpl_chiave_fk.format(**rec_chiave_fk))
|
||||
else:
|
||||
rec_riga['opzioniriga']['null'] = riga_nullable
|
||||
rec_riga['opzioniriga']['blank'] = riga_nullable
|
||||
if fk is not None: # è composita
|
||||
tab_target = fk.get('table')
|
||||
fk_composite[tab_target].append({"campo": r.get('name'),
|
||||
"campo_tgt": renames[(tab_target, fk.get("row"))],
|
||||
"nullabile": rec_riga['opzioniriga']['null']})
|
||||
rec_riga['nomeriga'] = r.get('name')
|
||||
orig = tipodato = str(r.find('datatype').text)
|
||||
parsato = tutti_parametri(tipodato)
|
||||
#parametrico = datoparametricoRE.match(tipodato)
|
||||
parametrico = is_parametrico(parsato)
|
||||
# parametrico = tipo
|
||||
rec_riga['tiporiga'] = get_tipo_mappato(parsato)
|
||||
if parametrico:
|
||||
if rec_riga['tiporiga'] in ('CharField',):
|
||||
lunghezza = get_parametro(
|
||||
parsato, positional=0, keyword="max_length")
|
||||
rec_riga['opzioniriga']['max_length'] = int(lunghezza)
|
||||
elif rec_riga['tiporiga'] == "DecimalField":
|
||||
max_digits = get_parametro(
|
||||
parsato, positional=0, keyword="max_digits")
|
||||
decimal_places = get_parametro(
|
||||
parsato, positional=1, keyword="decimal_places")
|
||||
rec_riga['opzioniriga']['max_digits'] = int(max_digits)
|
||||
rec_riga['opzioniriga']['decimal_places'] = int(
|
||||
decimal_places)
|
||||
arg_avanzati = parsato["keyword_args"]
|
||||
for x in arg_avanzati:
|
||||
rec_riga['opzioniriga'][x] = arg_avanzati[x]
|
||||
elif unmanaged:
|
||||
if tipodato in ('CHAR', 'VARCHAR'):
|
||||
rec_riga['opzioniriga']['max_length'] = 1000000
|
||||
if r.get('name') == pk_singola:
|
||||
# chiave singola
|
||||
rec_riga['opzioniriga']['primary_key'] = True
|
||||
if not rec_riga['opzioniriga']['null']:
|
||||
del rec_riga['opzioniriga']['null']
|
||||
del rec_riga['opzioniriga']['blank']
|
||||
if rec_riga['tiporiga'] in ('CharField', 'TextField') and 'blank' in rec_riga['opzioniriga']:
|
||||
del rec_riga['opzioniriga']['blank']
|
||||
rec_riga['opzioniriga'] = ','.join(
|
||||
f'{k}={v}' for k, v in rec_riga['opzioniriga'].items())
|
||||
righetxt.append(tmpl_riga.format(**rec_riga))
|
||||
rec_riga_serializers = dict()
|
||||
rec_riga_serializers['nomecampo'] = r.get('name')
|
||||
righeserializerstxt.append(rec_riga_serializers['nomecampo'])
|
||||
for tgt in fk_composite:
|
||||
nullabile = any(x['nullabile'] for x in fk_composite[tgt])
|
||||
fk_fields = ",\n ".join(
|
||||
f"'{x['campo_tgt']}': '{x['campo']}'" for x in fk_composite[tgt])
|
||||
asd = f"fk_{tgt} = CompositeForeignKey('{tgt}', on_delete=models.CASCADE, null={nullabile}, to_fields=" + "{\n " + fk_fields + "\n })"
|
||||
righetxt.append(asd)
|
||||
any_multiple_fk = True
|
||||
rec_tabella['righetxt'] = '\n '.join(righetxt)
|
||||
rec_serializers['campi'] = "','".join(righeserializerstxt)
|
||||
models.append(tmpl_model_class.format(**rec_tabella))
|
||||
admin.append(tmpl_admin_class.format(**rec_tabella))
|
||||
serializers.append(tmpl_serializer_class.format(**rec_serializers))
|
||||
views.append(tmpl_view_class.format(nometab=rec_tabella['nometab']))
|
||||
urls.append(tmpl_url_route.format(
|
||||
nometaburl=rec_tabella['nometab'].lower(), nometab=rec_tabella['nometab']))
|
||||
resources.append(tmpl_resource_class.format(
|
||||
nometab=rec_tabella['nometab']))
|
||||
|
||||
models = tmpl_models_prefisso + tmpl_models.format(corpo='\n'.join(models),
|
||||
multipkmodel=multipkmodel if any_multiple_pk else "",
|
||||
multifkimport=multifkimport if any_multiple_fk else "")
|
||||
admin = tmpl_admin_prefisso + tmpl_admin.format(corpo='\n'.join(admin))
|
||||
serializers = tmpl_serializers_prefisso + tmpl_serializers.format(corpo='\n'.join(serializers))
|
||||
views = tmpl_views_prefisso + tmpl_views.format(corpo='\n'.join(views))
|
||||
urls = tmpl_urls_prefisso + tmpl_urls.format(urls='\n'.join(urls))
|
||||
resources = tmpl_resources_prefisso + tmpl_resources.format(corpo='\n'.join(resources))
|
||||
|
||||
for tgt_name, tgt_path in tgtfil.items():
|
||||
with open(tgt_path, 'w') as f:
|
||||
print(
|
||||
f"Writing {tgt_name} to {tgt_path}, autopep8: {not arguments['--no-format']}...")
|
||||
if arguments['--no-format']:
|
||||
f.write(globals()[tgt_name])
|
||||
else:
|
||||
f.write(autopep8.fix_code(globals()[tgt_name]))
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from rest_framework import routers
|
||||
from django.urls import include, path
|
||||
from . import views
|
||||
|
||||
app_name = "contatti_app"
|
||||
|
||||
urlpatterns = [
|
||||
# path('', views.index, name='index'),
|
||||
]
|
||||
router = routers.DefaultRouter()
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
router.register(r'personacontattoazienda', views.PersonaContattoAzienda_View)
|
||||
router.register(r'soggettofiscale', views.SoggettoFiscale_View)
|
||||
router.register(r'nazione', views.Nazione_View)
|
||||
router.register(r'datodicontatto', views.DatoDiContatto_View)
|
||||
router.register(r'telefono', views.Telefono_View)
|
||||
router.register(r'email', views.Email_View)
|
||||
router.register(r'personafisica', views.PersonaFisica_View)
|
||||
router.register(r'personagiuridica', views.PersonaGiuridica_View)
|
||||
router.register(r'sede', views.Sede_View)
|
||||
router.register(r'fax', views.Fax_View)
|
||||
router.register(r'pec', views.Pec_View)
|
||||
|
||||
urlpatterns += router.urls
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
from copy import deepcopy
|
||||
|
||||
from django.shortcuts import render, redirect
|
||||
from django.http import JsonResponse, HttpResponse
|
||||
from django.utils.http import url_has_allowed_host_and_scheme
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
|
||||
from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated
|
||||
|
||||
from django_auto_prefetching import AutoPrefetchViewSetMixin
|
||||
from . import models
|
||||
from . import serializers
|
||||
|
||||
# def index(request):
|
||||
# return HttpResponse("Hello, %s!" % (request.user.username if request.user.is_authenticated else 'World'))
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class PersonaContattoAzienda_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaContattoAzienda.objects.all()
|
||||
serializer_class = serializers.PersonaContattoAziendaSerializer
|
||||
|
||||
|
||||
class SoggettoFiscale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SoggettoFiscale.objects.all()
|
||||
serializer_class = serializers.SoggettoFiscaleSerializer
|
||||
|
||||
|
||||
class Nazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Nazione.objects.all()
|
||||
serializer_class = serializers.NazioneSerializer
|
||||
|
||||
|
||||
class DatoDiContatto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatoDiContatto.objects.all()
|
||||
serializer_class = serializers.DatoDiContattoSerializer
|
||||
|
||||
|
||||
class Telefono_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Telefono.objects.all()
|
||||
serializer_class = serializers.TelefonoSerializer
|
||||
|
||||
|
||||
class Email_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Email.objects.all()
|
||||
serializer_class = serializers.EmailSerializer
|
||||
|
||||
|
||||
class PersonaFisica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaFisica.objects.all()
|
||||
serializer_class = serializers.PersonaFisicaSerializer
|
||||
|
||||
|
||||
class PersonaGiuridica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaGiuridica.objects.all()
|
||||
serializer_class = serializers.PersonaGiuridicaSerializer
|
||||
|
||||
|
||||
class Sede_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Sede.objects.all()
|
||||
serializer_class = serializers.SedeSerializer
|
||||
|
||||
|
||||
class Fax_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Fax.objects.all()
|
||||
serializer_class = serializers.FaxSerializer
|
||||
|
||||
|
||||
class Pec_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Pec.objects.all()
|
||||
serializer_class = serializers.PecSerializer
|
||||
|
|
@ -0,0 +1,324 @@
|
|||
from django.contrib import admin
|
||||
from django import forms
|
||||
from django.core.cache import cache
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Count, Value, Case, When, Value
|
||||
from django.db.models.functions import Concat
|
||||
from . import models
|
||||
from . import autocomplete_extras
|
||||
from djaa_list_filter.admin import AjaxAutocompleteListFilterModelAdmin
|
||||
from django.contrib.admin.views.main import ChangeList
|
||||
|
||||
# Modified version of a GIST I found in a SO thread
|
||||
# cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/
|
||||
class CachingPaginator(Paginator):
|
||||
def _get_count(self):
|
||||
if not hasattr(self, "_count"):
|
||||
self._count = None
|
||||
if self._count is None:
|
||||
try:
|
||||
key = "adm:{0}:count".format(
|
||||
hash(self.object_list.query.__str__()))
|
||||
self._count = cache.get(key, -1)
|
||||
if self._count == -1:
|
||||
self._count = super().count
|
||||
cache.set(key, self._count, 60)
|
||||
except:
|
||||
self._count = len(self.object_list)
|
||||
return self._count
|
||||
count = property(_get_count)
|
||||
|
||||
def prefix_match_len(str1, str2):
|
||||
tot = 0
|
||||
for char1, char2 in zip(str1, str2):
|
||||
if char1 == char2:
|
||||
tot += 1
|
||||
else:
|
||||
break
|
||||
return tot
|
||||
|
||||
class RicercaOrdinataChangeList(ChangeList):
|
||||
# super() è django.contrib.admin.views.main.ChangeList
|
||||
def get_queryset(self, request):
|
||||
qs = super().get_queryset(request)
|
||||
if not(hasattr(request, 'search_term') and hasattr(request, 'disable_default_ordering') and request.disable_default_ordering):
|
||||
return qs
|
||||
|
||||
search_term_cf = request.search_term.casefold()
|
||||
tok_q = set(x.strip()
|
||||
for x in search_term_cf.split(' ') if x.strip())
|
||||
search_cache = {x.pk: str(x) for x in qs}
|
||||
scores = []
|
||||
l_s_t = len(search_term_cf) or 1
|
||||
for obj_pk, obj_str in search_cache.items():
|
||||
m_l = prefix_match_len(
|
||||
obj_str.casefold(), search_term_cf)
|
||||
score_non_tok = m_l / max(l_s_t, len(obj_str))
|
||||
tok = set(x.strip().casefold()
|
||||
for x in obj_str.split(' ') if x.strip())
|
||||
if tok and tok_q:
|
||||
score_tok = sum(prefix_match_len(token1, token2) / len(token1)
|
||||
for token1 in tok_q
|
||||
for token2 in tok) / (len(tok_q) + len(tok))
|
||||
else:
|
||||
score_tok = 0
|
||||
scores.append((-score_non_tok, -score_tok, obj_pk))
|
||||
scores.sort()
|
||||
rank_by_pk = {obj_pk: rank for rank,
|
||||
(_, _, obj_pk) in enumerate(scores)}
|
||||
whens = [When(pk=-1, then=None)]
|
||||
for obj_pk, rank in rank_by_pk.items():
|
||||
whens.append(When(pk=obj_pk, then=Value(rank)))
|
||||
qs = qs.annotate(briq_search_results_rank=Case(*whens, default=None))
|
||||
ordering = self.get_ordering(request,qs)
|
||||
qs = qs.order_by('briq_search_results_rank',*ordering)
|
||||
return qs
|
||||
|
||||
|
||||
class RicercaOrdinataMixin(admin.ModelAdmin):
|
||||
def get_changelist(self, *args, **kwargs):
|
||||
return RicercaOrdinataChangeList
|
||||
|
||||
def get_search_results(self, request, qs, search_term):
|
||||
qs, may_have_duplicates = super().get_search_results(
|
||||
request, qs, search_term,
|
||||
)
|
||||
if search_term and qs:
|
||||
request.disable_default_ordering = True
|
||||
request.search_term = search_term
|
||||
if not request.resolver_match._func_path.split('.')[-1].lower().startswith('changelist'):
|
||||
search_term_cf = request.search_term.casefold()
|
||||
tok_q = set(x.strip()
|
||||
for x in search_term_cf.split(' ') if x.strip())
|
||||
search_cache = {x.pk: str(x) for x in qs}
|
||||
scores = []
|
||||
l_s_t = len(search_term_cf) or 1
|
||||
for obj_pk, obj_str in search_cache.items():
|
||||
m_l = prefix_match_len(
|
||||
obj_str.casefold(), search_term_cf)
|
||||
score_non_tok = m_l / max(l_s_t, len(obj_str))
|
||||
tok = set(x.strip().casefold()
|
||||
for x in obj_str.split(' ') if x.strip())
|
||||
if tok and tok_q:
|
||||
score_tok = sum(prefix_match_len(token1, token2) / len(token1)
|
||||
for token1 in tok_q
|
||||
for token2 in tok) / (len(tok_q) + len(tok))
|
||||
else:
|
||||
score_tok = 0
|
||||
scores.append((-score_non_tok, -score_tok, obj_pk))
|
||||
scores.sort()
|
||||
rank_by_pk = {obj_pk: rank for rank,
|
||||
(_, _, obj_pk) in enumerate(scores)}
|
||||
whens = [When(pk=-1, then=None)]
|
||||
for obj_pk, rank in rank_by_pk.items():
|
||||
whens.append(When(pk=obj_pk, then=Value(rank)))
|
||||
qs = qs.annotate(briq_search_results_rank=Case(*whens, default=None))
|
||||
qs = qs.order_by('briq_search_results_rank')
|
||||
return qs, may_have_duplicates
|
||||
|
||||
|
||||
# # Main reusable Admin class for only viewing
|
||||
# class ViewAdminMixin(admin.ModelAdmin):
|
||||
# def has_add_permission(self, request):
|
||||
# return False
|
||||
#
|
||||
# def has_change_permission(self, request, obj=None):
|
||||
# return False
|
||||
#
|
||||
# def has_delete_permission(self, request, obj=None):
|
||||
# return False
|
||||
|
||||
|
||||
@admin.register(models.Comune)
|
||||
class ComuneAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin):
|
||||
list_per_page = 15
|
||||
paginator = CachingPaginator
|
||||
show_full_result_count = False
|
||||
fields=('nome','provincia','cap','codice_istat','codice_nazionale',)
|
||||
search_fields = ('nome','cap__codice__exact','codice_istat__exact','codice_nazionale__iexact',)
|
||||
autocomplete_fields = ('provincia','cap',)
|
||||
list_display = ('nome', 'provincia','regione_key','lista_cap',)
|
||||
ordering = ('nome','provincia_id',)
|
||||
autocomplete_list_filter = ('provincia',)
|
||||
list_filter = ('provincia__regione_id',)
|
||||
|
||||
def regione_key(self, obj):
|
||||
return obj.provincia.regione_id
|
||||
regione_key.short_description = 'Regione'
|
||||
regione_key.admin_order_field = 'regione_id'
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super().get_queryset(request).prefetch_related('provincia').prefetch_related('cap')
|
||||
return queryset
|
||||
|
||||
def lista_cap(self,obj):
|
||||
lista = sorted((c.codice for c in obj.cap.all()),key=int)
|
||||
aggr_cap=''
|
||||
if len(lista) > 0:
|
||||
gruppi = [[lista[0]]*2]
|
||||
for i in lista[1:]:
|
||||
if int(i)-1 == int(gruppi[-1][1]):
|
||||
gruppi[-1][1] = i
|
||||
else:
|
||||
gruppi.append([i]*2)
|
||||
aggr_cap=', '.join(f'{str(g[0])}-{str(g[1])}' if g[1]!=g[0] else str(g[0]) for g in gruppi)
|
||||
return aggr_cap
|
||||
|
||||
# from django.db.models.fields.related import ManyToManyRel
|
||||
# import django.db.models as dj_models
|
||||
|
||||
# asd = dj_models.ManyToManyField(models.Comune, through=models.Comune.cap.through)
|
||||
# asd.model = models.CAP
|
||||
# asd.name = "comuni2"
|
||||
# asd.remote_field = models.Comune.cap.through._meta.get_field('comune')
|
||||
# models.CAP._meta.add_field(asd)
|
||||
|
||||
class CAPAdminForm(forms.ModelForm):
|
||||
#asd = ManyToManyRel(models.Comune.cap, to=models.Comune, related_name="asd",through=models.Comune.cap.through, related_query_name="comuni")
|
||||
comuni = forms.ModelMultipleChoiceField(
|
||||
models.Comune.objects.all(),
|
||||
#widget=admin.widgets.AutocompleteSelectMultiple(models.CAP._meta.get_field("comuni2"), admin_site= None),
|
||||
widget=admin.widgets.FilteredSelectMultiple('Comune', False),
|
||||
required=False,
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
#print(self.base_fields)
|
||||
if self.instance.pk:
|
||||
self.initial['comuni'] = self.instance.comuni.values_list('pk', flat=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
instance = super().save(*args, **kwargs)
|
||||
if instance.pk:
|
||||
instance.comuni.clear()
|
||||
instance.comuni.add(*self.cleaned_data['comuni'])
|
||||
return instance
|
||||
|
||||
class Meta:
|
||||
model = models.CAP
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
|
||||
@admin.register(models.CAP)
|
||||
class CAPAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin):
|
||||
list_per_page = 15
|
||||
paginator = CachingPaginator
|
||||
show_full_result_count = False
|
||||
fields=('codice', 'comuni')
|
||||
search_fields=('codice','comuni__nome__iexact')
|
||||
ordering = ('codice',)
|
||||
list_display = ('codice','numero_comuni','lista_comuni',)
|
||||
list_filter = ('comuni__provincia__regione_id',)
|
||||
|
||||
form = CAPAdminForm
|
||||
# def get_form(self, request, obj=None, change=False, **kwargs):
|
||||
# form = super().get_form(request, obj, change, **kwargs)
|
||||
# form.base_fields['comuni'].widget.admin_site = self.admin_site
|
||||
# return form
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super().get_queryset(request).prefetch_related('comuni')
|
||||
queryset = queryset.annotate(
|
||||
conteggio_comuni=Count('comuni')
|
||||
)
|
||||
return queryset
|
||||
|
||||
def numero_comuni(self, obj):
|
||||
return obj.conteggio_comuni
|
||||
numero_comuni.admin_order_field = 'conteggio_comuni'
|
||||
|
||||
def lista_comuni(self,obj):
|
||||
return ', '.join(str(c) for c in obj.comuni.all())
|
||||
|
||||
|
||||
@admin.register(models.Provincia)
|
||||
class ProvinciaAdmin(RicercaOrdinataMixin, admin.ModelAdmin):
|
||||
list_per_page = 15
|
||||
paginator = CachingPaginator
|
||||
show_full_result_count = False
|
||||
search_fields = ('sigla', 'nome_esteso',)
|
||||
list_display = ('nome_esteso', 'sigla', 'numero_comuni', 'regione_key',)
|
||||
list_filter = ('regione_id',)
|
||||
#ordering = ('regione_id', 'nome_esteso',)
|
||||
|
||||
def regione_key(self, obj):
|
||||
return obj.regione_id
|
||||
regione_key.short_description = 'Regione'
|
||||
regione_key.admin_order_field = 'regione_id'
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super().get_queryset(request)
|
||||
queryset = queryset.annotate(
|
||||
conteggio_comuni=Count('comuni')
|
||||
)
|
||||
return queryset
|
||||
|
||||
def numero_comuni(self, obj):
|
||||
return obj.conteggio_comuni
|
||||
numero_comuni.admin_order_field = 'conteggio_comuni'
|
||||
|
||||
|
||||
@admin.register(models.Regione)
|
||||
class RegioneAdmin(RicercaOrdinataMixin, admin.ModelAdmin):
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
search_fields = ('nome',)
|
||||
list_display = ('nome', 'numero_province',)
|
||||
ordering = ('nome',)
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super().get_queryset(request)
|
||||
queryset = queryset.annotate(
|
||||
conteggio_province=Count('province')
|
||||
)
|
||||
return queryset
|
||||
|
||||
def numero_province(self, obj):
|
||||
return obj.conteggio_province
|
||||
numero_province.admin_order_field = 'conteggio_province'
|
||||
|
||||
|
||||
@admin.register(models.DUG)
|
||||
class DUGAdmin(RicercaOrdinataMixin, admin.ModelAdmin):
|
||||
list_per_page = 15
|
||||
paginator = CachingPaginator
|
||||
show_full_result_count = False
|
||||
fields=('nome',)
|
||||
search_fields=('nome',)
|
||||
ordering = ('nome',)
|
||||
list_display = ('nome',)
|
||||
|
||||
@admin.register(models.Indirizzo)
|
||||
class IndirizzoAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin):
|
||||
list_per_page = 15
|
||||
paginator = CachingPaginator
|
||||
show_full_result_count = False
|
||||
fields=('dug','duf','civico','cap','comune','altro',)
|
||||
search_fields = ('indirizzo','cap_id__exact',)
|
||||
autocomplete_fields = ('dug','cap','comune',)
|
||||
list_display = ('indirizzo', 'cap','comune','provincia','regione',)
|
||||
ordering = ('comune_id','duf','civico',)
|
||||
autocomplete_list_filter = ('comune',)
|
||||
list_filter = ('comune__provincia__regione_id',)
|
||||
|
||||
def get_queryset(self, request):
|
||||
queryset = super().get_queryset(request).select_related('comune__provincia__regione').annotate(indirizzo=Concat('dug_id',Value(' '),'duf',Value(' '),'civico'))
|
||||
return queryset
|
||||
|
||||
def provincia(self, obj):
|
||||
return obj.comune.provincia
|
||||
provincia.short_description = 'Provincia'
|
||||
provincia.admin_order_field = 'comune__provincia_id'
|
||||
|
||||
def regione(self, obj):
|
||||
return obj.comune.provincia.regione_id
|
||||
regione.short_description = 'Regione'
|
||||
regione.admin_order_field = 'comune__provincia__regione_id'
|
||||
|
||||
def indirizzo(self, obj):
|
||||
return obj.indirizzo
|
||||
indirizzo.short_description = 'Indirizzo'
|
||||
indirizzo.admin_order_field = ('comune_id','duf','civico',)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class DatiGeograficiAppConfig(AppConfig):
|
||||
name = 'dati_geo_app'
|
||||
verbose_name = 'Dati geografici'
|
||||
default_auto_field = 'django.db.models.AutoField'
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
from djaa_list_filter.admin import AjaxAutocompleteListFilter
|
||||
from django import forms
|
||||
|
||||
class MyAjaxAutocompleteListFilter(AjaxAutocompleteListFilter):
|
||||
title = 'list filter'
|
||||
template = 'djaa_list_filter/admin/filter/autocomplete_list_filter.html'
|
||||
|
||||
def __init__(self, field, request, params, model, model_admin, field_path):
|
||||
model = field.remote_field.model
|
||||
super().__init__(field, request, params, model, model_admin, field_path)
|
||||
qs_target_value = f'{field_path}__{model._meta.pk.name}__exact'
|
||||
queryset = model.objects.get_queryset()
|
||||
widget = AjaxAutocompleteSelectWidget(
|
||||
model_admin=model_admin, model=model, field=field, field_name=field.remote_field.model._meta.verbose_name, qs_target_value=qs_target_value
|
||||
)
|
||||
|
||||
class AutocompleteForm(forms.Form):
|
||||
autocomplete_field = forms.ModelChoiceField(queryset=queryset, widget=widget, required=False)
|
||||
querystring_value = forms.CharField(widget=forms.HiddenInput())
|
||||
|
||||
autocomplete_field_initial_value = request.GET.get(qs_target_value, None)
|
||||
initial_values = dict(querystring_value=request.GET.urlencode())
|
||||
if autocomplete_field_initial_value:
|
||||
initial_values.update(autocomplete_field=autocomplete_field_initial_value)
|
||||
self.autocomplete_form = AutocompleteForm(initial=initial_values, prefix=field.remote_field.model._meta.verbose_name)
|
||||
self.title = field.remote_field.model._meta.verbose_name
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,66 @@
|
|||
# Generated by Django 3.2.5 on 2021-07-21 11:29
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CAP',
|
||||
fields=[
|
||||
('codice', models.CharField(max_length=5, primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'CAP',
|
||||
'verbose_name_plural': 'CAP',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Regione',
|
||||
fields=[
|
||||
('nome', models.CharField(blank=True, default='', max_length=32, primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Regione',
|
||||
'verbose_name_plural': 'Regioni',
|
||||
'ordering': ('nome',),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Provincia',
|
||||
fields=[
|
||||
('sigla', models.CharField(max_length=2, primary_key=True, serialize=False)),
|
||||
('nome_esteso', models.CharField(max_length=50)),
|
||||
('regione', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='province', to='dati_geo_app.regione')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Provincia',
|
||||
'verbose_name_plural': 'Province',
|
||||
'ordering': ('nome_esteso',),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Comune',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nome', models.CharField(max_length=60)),
|
||||
('codice_istat', models.CharField(max_length=6)),
|
||||
('codice_nazionale', models.CharField(max_length=4)),
|
||||
('cap', models.ManyToManyField(related_name='comuni', to='dati_geo_app.CAP')),
|
||||
('provincia', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='comuni', to='dati_geo_app.provincia')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Comune',
|
||||
'verbose_name_plural': 'Comuni',
|
||||
'ordering': ('nome', 'provincia_id'),
|
||||
'unique_together': {('nome', 'provincia')},
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 3.2.5 on 2021-07-21 12:02
|
||||
|
||||
import os
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def carica_dati(apps, schema_editor):
|
||||
fixture_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))),"dati_geo_app","fixtures","dati_geo_0002.json")
|
||||
call_command("loaddata", fixture_path)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dati_geo_app', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(code=carica_dati,reverse_code=migrations.RunPython.noop)
|
||||
]
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
# Generated by Django 3.2.5 on 2022-07-07 08:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dati_geo_app', '0002_caricamento_dati'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DUG',
|
||||
fields=[
|
||||
('nome', models.CharField(max_length=40, primary_key=True, serialize=False)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'denominazione urbanistica generica',
|
||||
'verbose_name_plural': 'denominazioni urbanistiche generiche',
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='comune',
|
||||
options={'ordering': ('nome', 'provincia_id'), 'verbose_name': 'comune', 'verbose_name_plural': 'comuni'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='provincia',
|
||||
options={'ordering': ('nome_esteso',), 'verbose_name': 'provincia', 'verbose_name_plural': 'province'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='regione',
|
||||
options={'ordering': ('nome',), 'verbose_name': 'regione', 'verbose_name_plural': 'regioni'},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Indirizzo',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('duf', models.CharField(help_text='Il nome della via/piazza/ecc...', max_length=256, verbose_name='denominazione urbanistica ufficiale')),
|
||||
('civico', models.CharField(max_length=256)),
|
||||
('altro', models.CharField(blank=True, default='', help_text='Es.: interno, scala, appartamento...', max_length=2048)),
|
||||
('cap', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='dati_geo_app.cap')),
|
||||
('comune', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='dati_geo_app.comune')),
|
||||
('dug', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='dati_geo_app.dug', verbose_name='denominazione urbanistica generica')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'indirizzo',
|
||||
'verbose_name_plural': 'indirizzi',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 3.2.5 on 2022-07-21 10:34
|
||||
|
||||
import os
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def carica_dati(apps, schema_editor):
|
||||
fixture_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))),"dati_geo_app","fixtures","dati_geo_0004.json")
|
||||
call_command("loaddata", fixture_path)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dati_geo_app', '0003_auto_20220707_1031'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(code=carica_dati,reverse_code=migrations.RunPython.noop)
|
||||
]
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.2.5 on 2022-07-07 09:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dati_geo_app', '0004_caricamento_dati'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='provincia',
|
||||
name='regione',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='province', to='dati_geo_app.regione'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
from django.db import models
|
||||
|
||||
class Nazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'nazione'
|
||||
verbose_name_plural = 'nazione'
|
||||
|
||||
def __str__(self):
|
||||
return str(self.descrizione)
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class Regione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'regione'
|
||||
verbose_name_plural = 'regioni'
|
||||
ordering = ('nome',)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.nome)
|
||||
nome = models.CharField(primary_key=True, max_length=32,
|
||||
blank=True, null=False, default='')
|
||||
|
||||
|
||||
class Provincia(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'provincia'
|
||||
verbose_name_plural = 'province'
|
||||
ordering = ('nome_esteso',)
|
||||
|
||||
def __str__(self):
|
||||
return f'[{self.sigla}] {self.nome_esteso}'
|
||||
sigla = models.CharField(primary_key=True,
|
||||
max_length=2, null=False, blank=False)
|
||||
nome_esteso = models.CharField(max_length=50, null=False, blank=False)
|
||||
regione = models.ForeignKey(
|
||||
Regione, related_name='province', on_delete=models.PROTECT, null=False, blank=False)
|
||||
|
||||
|
||||
class ComuneManager(models.Manager):
|
||||
def get_by_natural_key(self, nome, provincia):
|
||||
return self.get(nome__iexact=nome.strip(), provincia__sigla__iexact=provincia.strip())
|
||||
|
||||
|
||||
class Comune(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'comune'
|
||||
verbose_name_plural = 'comuni'
|
||||
unique_together = ('nome', 'provincia',)
|
||||
ordering = ('nome','provincia_id',)
|
||||
|
||||
objects = ComuneManager()
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.nome} ({self.provincia_id})'
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.nome = self.nome.strip()
|
||||
self.provincia_id = self.provincia_id.strip().upper()
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def natural_key(self):
|
||||
return (self.nome.strip(), self.provincia_id.strip().upper())
|
||||
|
||||
nome = models.CharField(max_length=60)
|
||||
provincia = models.ForeignKey(
|
||||
Provincia, related_name='comuni', on_delete=models.PROTECT, null=False, blank=False)
|
||||
cap = models.ManyToManyField(to='CAP',related_name='comuni')
|
||||
codice_istat = models.CharField(max_length=6)
|
||||
codice_nazionale = models.CharField(max_length=4)
|
||||
|
||||
|
||||
class CAP(models.Model):
|
||||
class Meta:
|
||||
verbose_name_plural = verbose_name = 'CAP'
|
||||
|
||||
def __str__(self):
|
||||
return str(self.codice)
|
||||
codice = models.CharField(primary_key=True, max_length=5)
|
||||
|
||||
|
||||
class DUG(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'denominazione urbanistica generica'
|
||||
verbose_name_plural = 'denominazioni urbanistiche generiche'
|
||||
|
||||
def __str__(self):
|
||||
return self.nome.capitalize()
|
||||
|
||||
nome = models.CharField(primary_key=True, max_length=40)
|
||||
|
||||
|
||||
class Indirizzo(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'indirizzo'
|
||||
verbose_name_plural = 'indirizzi'
|
||||
def __str__(self):
|
||||
return f"{self.dug} {self.duf} {self.civico}, {self.comune}"
|
||||
dug = models.ForeignKey(DUG, blank=False, null=False, verbose_name='denominazione urbanistica generica', on_delete=models.PROTECT)
|
||||
duf = models.CharField(max_length=256, blank=False, null=False, verbose_name="denominazione urbanistica ufficiale", help_text="Il nome della via/piazza/ecc...")
|
||||
civico = models.CharField(max_length=256, blank=False, null=False)
|
||||
comune = models.ForeignKey(Comune, on_delete=models.PROTECT)
|
||||
cap = models.ForeignKey(CAP, on_delete=models.PROTECT)
|
||||
altro = models.CharField(max_length=2048, blank=True, null=False, default='', help_text='Es.: interno, scala, appartamento...')
|
||||
nazione = models.ForeignKey(Nazione, on_delete=models.PROTECT)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{% extends "admin/base.html" %}
|
||||
{% load static %}
|
||||
{% block extrastyle %}{{ block.super }}
|
||||
<script src="{% static 'admin/js/autocomplete_auto_focus.js' %}" defer></script>
|
||||
{% endblock %}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,614 @@
|
|||
from import_export.admin import ImportExportModelAdmin
|
||||
from django.contrib import admin
|
||||
# from django.core.cache import cache
|
||||
# from django.core.paginator import Paginator
|
||||
from . import models
|
||||
from . import resources
|
||||
|
||||
|
||||
# # Modified version of a GIST I found in a SO thread
|
||||
# # cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/
|
||||
# class CachingPaginator(Paginator):
|
||||
# def _get_count(self):
|
||||
# if not hasattr(self, "_count"):
|
||||
# self._count = None
|
||||
# if self._count is None:
|
||||
# try:
|
||||
# key = "adm:{0}:count".format(hash(self.object_list.query.__str__()))
|
||||
# self._count = cache.get(key, -1)
|
||||
# if self._count == -1:
|
||||
# self._count = super().count
|
||||
# cache.set(key, self._count, 60)
|
||||
# except:
|
||||
# self._count = len(self.object_list)
|
||||
# return self._count
|
||||
# count = property(_get_count)
|
||||
|
||||
# # Main reusable Admin class for only viewing
|
||||
# class ViewAdminMixin(admin.ModelAdmin):
|
||||
# def has_add_permission(self, request):
|
||||
# return False
|
||||
#
|
||||
# def has_change_permission(self, request, obj=None):
|
||||
# return False
|
||||
#
|
||||
# def has_delete_permission(self, request, obj=None):
|
||||
# return False
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
@admin.register(models.ModalitaLavoro)
|
||||
class ModalitaLavoroAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ModalitaLavoroResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DettaglioFatturabile)
|
||||
class DettaglioFatturabileAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DettaglioFatturabileResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.FatturaElettronica)
|
||||
class FatturaElettronicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.FatturaElettronicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RegimeFiscale)
|
||||
class RegimeFiscaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RegimeFiscaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoCassa)
|
||||
class TipoCassaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoCassaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ModalitaPagamento)
|
||||
class ModalitaPagamentoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ModalitaPagamentoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoDocumento)
|
||||
class TipoDocumentoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoDocumentoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Natura)
|
||||
class NaturaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.NaturaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoRitenuta)
|
||||
class TipoRitenutaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoRitenutaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.XmlFatturaElettronica)
|
||||
class XmlFatturaElettronicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.XmlFatturaElettronicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SoggettiFatturaElettronica)
|
||||
class SoggettiFatturaElettronicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SoggettiFatturaElettronicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SoggettoFiscale)
|
||||
class SoggettoFiscaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SoggettoFiscaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PartitaIvaCF)
|
||||
class PartitaIvaCFAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PartitaIvaCFResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Nazione)
|
||||
class NazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.NazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.FormatoTrasmissione)
|
||||
class FormatoTrasmissioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.FormatoTrasmissioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CodiceDestinatario)
|
||||
class CodiceDestinatarioAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CodiceDestinatarioResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatoDiContatto)
|
||||
class DatoDiContattoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatoDiContattoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Telefono)
|
||||
class TelefonoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TelefonoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Email)
|
||||
class EmailAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.EmailResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.IscrizioneAlboProfessionale)
|
||||
class IscrizioneAlboProfessionaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.IscrizioneAlboProfessionaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.IscrizioneREA)
|
||||
class IscrizioneREAAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.IscrizioneREAResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SocioUnico)
|
||||
class SocioUnicoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SocioUnicoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.StatoLiquidazione)
|
||||
class StatoLiquidazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.StatoLiquidazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TerzoIntermediarioOSoggettoEmittente)
|
||||
class TerzoIntermediarioOSoggettoEmittenteAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TerzoIntermediarioOSoggettoEmittenteResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SoggettoEmittente)
|
||||
class SoggettoEmittenteAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SoggettoEmittenteResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaFisica)
|
||||
class PersonaFisicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaFisicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaGiuridica)
|
||||
class PersonaGiuridicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaGiuridicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AlboProfessionale)
|
||||
class AlboProfessionaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AlboProfessionaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Allegato)
|
||||
class AllegatoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AllegatoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatoPagamento)
|
||||
class DatoPagamentoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatoPagamentoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiVeicoli)
|
||||
class DatiVeicoliAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiVeicoliResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiDocumentali)
|
||||
class DatiDocumentaliAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiDocumentaliResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiFattureCollegate)
|
||||
class DatiFattureCollegateAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiFattureCollegateResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiSAL)
|
||||
class DatiSALAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiSALResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiDDT)
|
||||
class DatiDDTAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiDDTResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiTrasporto)
|
||||
class DatiTrasportoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiTrasportoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Valuta)
|
||||
class ValutaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ValutaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiRitenuta)
|
||||
class DatiRitenutaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiRitenutaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CausalePagamento)
|
||||
class CausalePagamentoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CausalePagamentoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiBollo)
|
||||
class DatiBolloAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiBolloResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiCassaPrevidenziale)
|
||||
class DatiCassaPrevidenzialeAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiCassaPrevidenzialeResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ScontoMaggiorazione)
|
||||
class ScontoMaggiorazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ScontoMaggiorazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoScontoMaggiorazione)
|
||||
class TipoScontoMaggiorazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoScontoMaggiorazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AliquotaIva)
|
||||
class AliquotaIvaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AliquotaIvaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ContoBancario)
|
||||
class ContoBancarioAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ContoBancarioResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.IstitutoFinanziario)
|
||||
class IstitutoFinanziarioAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.IstitutoFinanziarioResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DettaglioBancario)
|
||||
class DettaglioBancarioAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DettaglioBancarioResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CondizionePagamento)
|
||||
class CondizionePagamentoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CondizionePagamentoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DettaglioLinee)
|
||||
class DettaglioLineeAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DettaglioLineeResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.altroDatoGestionale)
|
||||
class altroDatoGestionaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.altroDatoGestionaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoCessionePrestazione)
|
||||
class TipoCessionePrestazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoCessionePrestazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CodiceArticolo)
|
||||
class CodiceArticoloAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CodiceArticoloResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoCodiceArticolo)
|
||||
class TipoCodiceArticoloAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoCodiceArticoloResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ArticoloLinea)
|
||||
class ArticoloLineaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ArticoloLineaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.UnitaMisura)
|
||||
class UnitaMisuraAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.UnitaMisuraResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoResa)
|
||||
class TipoResaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoResaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RiferimentoDDTNumeroLinea)
|
||||
class RiferimentoDDTNumeroLineaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RiferimentoDDTNumeroLineaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RiferimentoOrdineAcquistoNumeroLinea)
|
||||
class RiferimentoOrdineAcquistoNumeroLineaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RiferimentoOrdineAcquistoNumeroLineaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CodiciDocumentali)
|
||||
class CodiciDocumentaliAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CodiciDocumentaliResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipologiaDocumentale)
|
||||
class TipologiaDocumentaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipologiaDocumentaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.DatiEstesiDettaglioFatturabile)
|
||||
class DatiEstesiDettaglioFatturabileAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DatiEstesiDettaglioFatturabileResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Sede)
|
||||
class SedeAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SedeResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Fax)
|
||||
class FaxAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.FaxResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Pec)
|
||||
class PecAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PecResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import pathlib
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class FatturaElettronicaAppConfig(AppConfig):
|
||||
name = 'fattura_elettronica_app'
|
||||
verbose_name = 'Fattura Elettronica'
|
||||
path = pathlib.Path(__file__).parent
|
||||
|
||||
def ready(self):
|
||||
from . import signals
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
|
||||
import json
|
||||
from channels.generic.websocket import WebsocketConsumer
|
||||
from asgiref.sync import async_to_sync
|
||||
|
||||
|
||||
class WsConsumer(WebsocketConsumer):
|
||||
def connect(self):
|
||||
self.accept()
|
||||
print("accept ws connection")
|
||||
|
||||
def disconnect(self, close_code):
|
||||
print("ws disconnection")
|
||||
|
||||
def receive(self, text_data):
|
||||
text_data_json = json.loads(text_data)
|
||||
print("ws receive", text_data_json)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,975 @@
|
|||
from django.db import models
|
||||
from polymorphic.models import PolymorphicModel
|
||||
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
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('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 DettaglioFatturabile(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'dettagliofatturabile'
|
||||
verbose_name_plural = 'dettagliofatturabile'
|
||||
|
||||
def __str__(self):
|
||||
return f"DettaglioFatturabile (id: {self.id})"
|
||||
|
||||
offerta_riferimento = models.ForeignKey('sangue_app.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")
|
||||
dati_estesi = models.ForeignKey('DatiEstesiDettaglioFatturabile', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioFatturabile_da_DatiEstesiDettaglioFatturabile_dati_estesi")
|
||||
flusso_di_ricavi = models.ForeignKey('sangue_app.FlussoDiRicavi', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioFatturabile_da_FlussoDiRicavi_flusso_di_ricavi")
|
||||
|
||||
|
||||
class FatturaElettronica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'fatturaelettronica'
|
||||
verbose_name_plural = 'fatturaelettronica'
|
||||
|
||||
def __str__(self):
|
||||
return f"FatturaElettronica (id: {self.id})"
|
||||
|
||||
xml_fattura = models.ForeignKey('XmlFatturaElettronica', on_delete=models.CASCADE,
|
||||
related_name="FatturaElettronica_da_XmlFatturaElettronica_xml_fattura")
|
||||
fattura_principale = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_FatturaElettronica_fattura_principale")
|
||||
data = models.DateField()
|
||||
numero = models.CharField(max_length=20)
|
||||
dati_ritenuta = models.ForeignKey('DatiRitenuta', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_DatiRitenuta_dati_ritenuta")
|
||||
importo_totale_documento = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
arrotondamento = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
causale = models.CharField(null=True, max_length=200)
|
||||
tipo_documento = models.ForeignKey('TipoDocumento', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_TipoDocumento_tipo_documento")
|
||||
art73 = models.BooleanField(null=True, blank=True)
|
||||
divisa = models.ForeignKey('Valuta', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_Valuta_divisa")
|
||||
dati_cassa_previdenziale = models.ForeignKey('DatiCassaPrevidenziale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_DatiCassaPrevidenziale_dati_cassa_previdenziale")
|
||||
sconto_maggiorazione = models.ForeignKey('ScontoMaggiorazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_ScontoMaggiorazione_sconto_maggiorazione")
|
||||
dati_bollo = models.ForeignKey('DatiBollo', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_DatiBollo_dati_bollo")
|
||||
dati_veicoli = models.ForeignKey('DatiVeicoli', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FatturaElettronica_da_DatiVeicoli_dati_veicoli")
|
||||
|
||||
|
||||
class RegimeFiscale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'regimefiscale'
|
||||
verbose_name_plural = 'regimefiscale'
|
||||
|
||||
def __str__(self):
|
||||
return f"RegimeFiscale (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class TipoCassa(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipocassa'
|
||||
verbose_name_plural = 'tipocassa'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoCassa (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class ModalitaPagamento(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'modalitapagamento'
|
||||
verbose_name_plural = 'modalitapagamento'
|
||||
|
||||
def __str__(self):
|
||||
return f"ModalitaPagamento (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class TipoDocumento(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipodocumento'
|
||||
verbose_name_plural = 'tipodocumento'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoDocumento (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class Natura(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'natura'
|
||||
verbose_name_plural = 'natura'
|
||||
|
||||
def __str__(self):
|
||||
return f"Natura (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class TipoRitenuta(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tiporitenuta'
|
||||
verbose_name_plural = 'tiporitenuta'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoRitenuta (id: {self.id})"
|
||||
|
||||
codice = models.CharField(null=True, max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class XmlFatturaElettronica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'xmlfatturaelettronica'
|
||||
verbose_name_plural = 'xmlfatturaelettronica'
|
||||
|
||||
def __str__(self):
|
||||
return f"XmlFatturaElettronica (id: {self.id})"
|
||||
|
||||
soggetti_fattura_elettronica = models.ForeignKey('SoggettiFatturaElettronica', on_delete=models.CASCADE,
|
||||
related_name="XmlFatturaElettronica_da_SoggettiFatturaElettronica_soggetti_fattura_elettronica")
|
||||
progressivo_invio = models.CharField(max_length=10)
|
||||
path = models.CharField(null=True, max_length=128)
|
||||
|
||||
|
||||
class SoggettiFatturaElettronica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'soggettifatturaelettronica'
|
||||
verbose_name_plural = 'soggettifatturaelettronica'
|
||||
|
||||
def __str__(self):
|
||||
return f"SoggettiFatturaElettronica (id: {self.id})"
|
||||
|
||||
formato_trasmissione = models.ForeignKey('FormatoTrasmissione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettiFatturaElettronica_da_FormatoTrasmissione_formato_trasmissione")
|
||||
contatto_cedente_prestatore = models.ForeignKey('DatoDiContatto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettiFatturaElettronica_da_DatoDiContatto_contatto_cedente_prestatore")
|
||||
riferimento_amministrazione = models.CharField(null=True, max_length=20)
|
||||
trasmittente = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
related_name="SoggettiFatturaElettronica_da_SoggettoFiscale_trasmittente")
|
||||
destinatario = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
related_name="SoggettiFatturaElettronica_da_SoggettoFiscale_destinatario")
|
||||
cedente_prestatore = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
related_name="SoggettiFatturaElettronica_da_SoggettoFiscale_cedente_prestatore")
|
||||
rappresentante_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettiFatturaElettronica_da_SoggettoFiscale_rappresentante_fiscale")
|
||||
cessionariocommittente = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
related_name="SoggettiFatturaElettronica_da_SoggettoFiscale_cessionariocommittente")
|
||||
terzo_intermediario_o_soggetto_emittente = models.ForeignKey('TerzoIntermediarioOSoggettoEmittente', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettiFatturaElettronica_da_TerzoIntermediarioOSoggettoEmittente_terzo_intermediario_o_soggetto_emittente")
|
||||
|
||||
|
||||
class SoggettoFiscale(PolymorphicModel):
|
||||
class Meta:
|
||||
verbose_name = 'soggettofiscale'
|
||||
verbose_name_plural = 'soggettofiscale'
|
||||
|
||||
def __str__(self):
|
||||
return f"SoggettoFiscale (id: {self.id})"
|
||||
|
||||
indirizzo_pec = models.ForeignKey('Pec', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_Pec_indirizzo_pec")
|
||||
regime_fiscale = models.ForeignKey('RegimeFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_RegimeFiscale_regime_fiscale")
|
||||
codice_fiscale = models.ForeignKey('PartitaIvaCF', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_PartitaIvaCF_codice_fiscale")
|
||||
partita_iva = models.ForeignKey('PartitaIvaCF', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_PartitaIvaCF_partita_iva")
|
||||
codice_sdi = models.ForeignKey('CodiceDestinatario', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_CodiceDestinatario_codice_sdi")
|
||||
sede_legale = models.IntegerField()
|
||||
stabile_organizzazione = models.IntegerField(null=True, blank=True)
|
||||
cod_eori = models.CharField(null=True, max_length=17)
|
||||
nazione = models.ForeignKey('Nazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_Nazione_nazione")
|
||||
numero_licenza_guida = models.CharField(null=True, max_length=20)
|
||||
iscrizione_rea = models.ForeignKey('IscrizioneREA', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_IscrizioneREA_iscrizione_rea")
|
||||
revisione_principale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_SoggettoFiscale_revisione_principale")
|
||||
rimosso = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class PersonaFisica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personafisica'
|
||||
verbose_name_plural = 'personafisica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaFisica (id: {self.id})"
|
||||
|
||||
titolo = models.CharField(null=True, max_length=10)
|
||||
nome = models.CharField(null=True, max_length=60)
|
||||
cognome = models.CharField(null=True, max_length=60)
|
||||
|
||||
|
||||
class PersonaGiuridica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personagiuridica'
|
||||
verbose_name_plural = 'personagiuridica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaGiuridica (id: {self.id})"
|
||||
|
||||
denominazione = models.CharField(null=True, max_length=80)
|
||||
|
||||
|
||||
class PersonaContattoAzienda(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personacontattoazienda'
|
||||
verbose_name_plural = 'personacontattoazienda'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaContattoAzienda (id: {self.id})"
|
||||
|
||||
azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="PersonaContattoAzienda_da_SoggettoFiscale")
|
||||
|
||||
|
||||
class PartitaIvaCF(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'partitaivacf'
|
||||
verbose_name_plural = 'partitaivacf'
|
||||
|
||||
def __str__(self):
|
||||
return f"PartitaIvaCF (id: {self.id})"
|
||||
|
||||
codice = models.CharField(max_length=28)
|
||||
|
||||
|
||||
class Nazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'nazione'
|
||||
verbose_name_plural = 'nazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.descrizione}"
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class FormatoTrasmissione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'formatotrasmissione'
|
||||
verbose_name_plural = 'formatotrasmissione'
|
||||
|
||||
def __str__(self):
|
||||
return f"FormatoTrasmissione (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=5)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class CodiceDestinatario(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'codicedestinatario'
|
||||
verbose_name_plural = 'codicedestinatario'
|
||||
|
||||
def __str__(self):
|
||||
return f"CodiceDestinatario (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=7)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class DatoDiContatto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datodicontatto'
|
||||
verbose_name_plural = 'datodicontatto'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatoDiContatto (id: {self.id})"
|
||||
|
||||
soggetto_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatoDiContatto_da_SoggettoFiscale_soggetto_fiscale")
|
||||
|
||||
|
||||
class Telefono(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'telefono'
|
||||
verbose_name_plural = 'telefono'
|
||||
|
||||
def __str__(self):
|
||||
return f"Telefono (id: {self.id})"
|
||||
|
||||
numero = models.CharField(max_length=20)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class Email(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'email'
|
||||
verbose_name_plural = 'email'
|
||||
|
||||
def __str__(self):
|
||||
return f"Email (id: {self.id})"
|
||||
|
||||
indirizzo = models.CharField(max_length=30)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'iscrizionealboprofessionale'
|
||||
verbose_name_plural = 'iscrizionealboprofessionale'
|
||||
|
||||
def __str__(self):
|
||||
return f"IscrizioneAlboProfessionale (id: {self.id})"
|
||||
|
||||
albo_professionale = models.ForeignKey('AlboProfessionale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="IscrizioneAlboProfessionale_da_AlboProfessionale_albo_professionale")
|
||||
numero_iscrizione_albo = models.CharField(null=True, max_length=60)
|
||||
data_iscrizione_albo = models.DateField(null=True, blank=True)
|
||||
persona_fisica = models.ForeignKey('PersonaFisica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="IscrizioneAlboProfessionale_da_PersonaFisica_persona_fisica")
|
||||
|
||||
|
||||
class IscrizioneREA(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'iscrizionerea'
|
||||
verbose_name_plural = 'iscrizionerea'
|
||||
|
||||
def __str__(self):
|
||||
return f"IscrizioneREA (id: {self.id})"
|
||||
|
||||
ufficio = models.ForeignKey(
|
||||
'dati_geo_app.Provincia', on_delete=models.PROTECT, related_name="IscrizioneREA_da_Provincia_ufficio")
|
||||
numero_r_e_a = models.CharField(max_length=20)
|
||||
capitale_sociale = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
socio_unico = models.ForeignKey('SocioUnico', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="IscrizioneREA_da_SocioUnico_socio_unico")
|
||||
stato_liquidazione = models.ForeignKey(
|
||||
'StatoLiquidazione', on_delete=models.CASCADE, related_name="IscrizioneREA_da_StatoLiquidazione_stato_liquidazione")
|
||||
|
||||
|
||||
class SocioUnico(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'sociounico'
|
||||
verbose_name_plural = 'sociounico'
|
||||
|
||||
def __str__(self):
|
||||
return f"SocioUnico (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=30)
|
||||
|
||||
|
||||
class StatoLiquidazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'statoliquidazione'
|
||||
verbose_name_plural = 'statoliquidazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"StatoLiquidazione (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=30)
|
||||
|
||||
|
||||
class TerzoIntermediarioOSoggettoEmittente(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'terzointermediarioosoggettoemittente'
|
||||
verbose_name_plural = 'terzointermediarioosoggettoemittente'
|
||||
|
||||
def __str__(self):
|
||||
return f"TerzoIntermediarioOSoggettoEmittente (id: {self.id})"
|
||||
|
||||
terzo_intermediario_o_soggetto_emittente = models.ForeignKey(
|
||||
'SoggettoFiscale', on_delete=models.CASCADE, related_name="TerzoIntermediarioOSoggettoEmittente_da_SoggettoFiscale_terzo_intermediario_o_soggetto_emittente")
|
||||
soggetto_emittente = models.ForeignKey('SoggettoEmittente', on_delete=models.CASCADE, null=True, blank=True,
|
||||
related_name="TerzoIntermediarioOSoggettoEmittente_da_SoggettoEmittente_soggetto_emittente")
|
||||
|
||||
|
||||
class SoggettoEmittente(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'soggettoemittente'
|
||||
verbose_name_plural = 'soggettoemittente'
|
||||
|
||||
def __str__(self):
|
||||
return f"SoggettoEmittente (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=30)
|
||||
|
||||
|
||||
class AlboProfessionale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'alboprofessionale'
|
||||
verbose_name_plural = 'alboprofessionale'
|
||||
|
||||
def __str__(self):
|
||||
return f"AlboProfessionale (id: {self.id})"
|
||||
|
||||
albo_professionale = models.CharField(null=True, max_length=60)
|
||||
provincia_albo = models.ForeignKey('dati_geo_app.Provincia', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AlboProfessionale_da_Provincia_provincia_albo")
|
||||
|
||||
|
||||
class Allegato(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'allegato'
|
||||
verbose_name_plural = 'allegato'
|
||||
|
||||
def __str__(self):
|
||||
return f"Allegato (id: {self.id})"
|
||||
|
||||
fattura_elettronica_body = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Allegato_da_FatturaElettronica_fattura_elettronica_body")
|
||||
nome_attachment = models.CharField(max_length=60)
|
||||
algoritmo_compressione = models.CharField(null=True, max_length=10)
|
||||
formato_attachment = models.CharField(null=True, max_length=10)
|
||||
descrizione_attachment = models.CharField(max_length=100)
|
||||
attachment = models.TextField()
|
||||
|
||||
|
||||
class DatoPagamento(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datopagamento'
|
||||
verbose_name_plural = 'datopagamento'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatoPagamento (id: {self.id})"
|
||||
|
||||
fattura_body = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatoPagamento_da_FatturaElettronica_fattura_body")
|
||||
dettaglio_bancario = models.ForeignKey('DettaglioBancario', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatoPagamento_da_DettaglioBancario_dettaglio_bancario")
|
||||
data_riferimento_termini_pagamento = models.DateField(
|
||||
null=True, blank=True)
|
||||
giorni_termini_pagamento = models.IntegerField(null=True, blank=True)
|
||||
data_scadenza_pagamento = models.DateField(null=True, blank=True)
|
||||
importo_pagamento = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
sconto_pagamento_anticipato = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
data_limite_pagamento_anticipato = models.DateField(null=True, blank=True)
|
||||
penalita_pagamenti_ritardati = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
data_decorrenza_penale = models.DateField(null=True, blank=True)
|
||||
codice_pagamento = models.CharField(null=True, max_length=60)
|
||||
quietanzante = models.IntegerField(null=True, blank=True)
|
||||
condizione_pagamento = models.ForeignKey('CondizionePagamento', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatoPagamento_da_CondizionePagamento_condizione_pagamento")
|
||||
|
||||
|
||||
class DatiVeicoli(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'dativeicoli'
|
||||
verbose_name_plural = 'dativeicoli'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiVeicoli (id: {self.id})"
|
||||
|
||||
data = models.DateField()
|
||||
totale_percorso = models.CharField(max_length=15)
|
||||
|
||||
|
||||
class DatiDocumentali(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datidocumentali'
|
||||
verbose_name_plural = 'datidocumentali'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiDocumentali (id: {self.id})"
|
||||
|
||||
codici_documentali = models.ForeignKey('CodiciDocumentali', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiDocumentali_da_CodiciDocumentali_codici_documentali")
|
||||
dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiDocumentali_da_FatturaElettronica_dati_generali")
|
||||
id_documento = models.CharField(max_length=20)
|
||||
data = models.DateField(null=True, blank=True)
|
||||
num_item = models.CharField(null=True, max_length=20)
|
||||
tipologia_documentale = models.ForeignKey('TipologiaDocumentale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiDocumentali_da_TipologiaDocumentale_tipologia_documentale")
|
||||
|
||||
|
||||
class DatiFattureCollegate(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datifatturecollegate'
|
||||
verbose_name_plural = 'datifatturecollegate'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiFattureCollegate (id: {self.id})"
|
||||
|
||||
dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiFattureCollegate_da_FatturaElettronica_dati_generali")
|
||||
codici_documentali = models.ForeignKey('CodiciDocumentali', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiFattureCollegate_da_CodiciDocumentali_codici_documentali")
|
||||
|
||||
|
||||
class DatiSAL(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datisal'
|
||||
verbose_name_plural = 'datisal'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiSAL (id: {self.id})"
|
||||
|
||||
dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="DatiSAL_da_FatturaElettronica_dati_generali")
|
||||
riferimento_fase = models.IntegerField()
|
||||
|
||||
|
||||
class DatiDDT(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datiddt'
|
||||
verbose_name_plural = 'datiddt'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiDDT (id: {self.id})"
|
||||
|
||||
dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="DatiDDT_da_FatturaElettronica_dati_generali")
|
||||
numero = models.CharField(max_length=20)
|
||||
data = models.DateField()
|
||||
|
||||
|
||||
class DatiTrasporto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datitrasporto'
|
||||
verbose_name_plural = 'datitrasporto'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiTrasporto (id: {self.id})"
|
||||
|
||||
dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiTrasporto_da_FatturaElettronica_dati_generali")
|
||||
indirizzo_resa = models.ForeignKey('dati_geo_app.Indirizzo', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiTrasporto_da_Indirizzo_indirizzo_resa")
|
||||
mezzo_trasporto = models.CharField(null=True, max_length=80)
|
||||
numero_colli = models.IntegerField(null=True, blank=True)
|
||||
descrizione = models.CharField(null=True, max_length=100)
|
||||
peso_lordo = models.DecimalField(
|
||||
null=True, blank=True, max_digits=7, decimal_places=3)
|
||||
peso_netto = models.DecimalField(
|
||||
null=True, blank=True, max_digits=7, decimal_places=3)
|
||||
data_ora_rititro = models.DateTimeField(null=True, blank=True)
|
||||
data_inizio_trasporto = models.DateField(null=True, blank=True)
|
||||
tipo_resa = models.ForeignKey('TipoResa', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiTrasporto_da_TipoResa_tipo_resa")
|
||||
data_ora_consegna = models.DateTimeField(null=True, blank=True)
|
||||
dati_vettore = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiTrasporto_da_SoggettoFiscale_dati_vettore")
|
||||
unita_misura_peso = models.ForeignKey('UnitaMisura', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiTrasporto_da_UnitaMisura_unita_misura_peso")
|
||||
|
||||
|
||||
class Valuta(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'valuta'
|
||||
verbose_name_plural = 'valuta'
|
||||
|
||||
def __str__(self):
|
||||
return f"Valuta (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=3)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class DatiRitenuta(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datiritenuta'
|
||||
verbose_name_plural = 'datiritenuta'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiRitenuta (id: {self.id})"
|
||||
|
||||
tipo_ritenuta = models.ForeignKey('TipoRitenuta', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiRitenuta_da_TipoRitenuta_tipo_ritenuta")
|
||||
importo_ritenuta = models.DecimalField(max_digits=15, decimal_places=2)
|
||||
aliquota_ritenuta = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
causale_pagamento = models.ForeignKey('CausalePagamento', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiRitenuta_da_CausalePagamento_causale_pagamento")
|
||||
|
||||
|
||||
class CausalePagamento(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'causalepagamento'
|
||||
verbose_name_plural = 'causalepagamento'
|
||||
|
||||
def __str__(self):
|
||||
return f"CausalePagamento (id: {self.id})"
|
||||
|
||||
codice = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=20)
|
||||
|
||||
|
||||
class DatiBollo(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datibollo'
|
||||
verbose_name_plural = 'datibollo'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiBollo (id: {self.id})"
|
||||
|
||||
importo_bollo = models.DecimalField(max_digits=15, decimal_places=2)
|
||||
|
||||
|
||||
class DatiCassaPrevidenziale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'daticassaprevidenziale'
|
||||
verbose_name_plural = 'daticassaprevidenziale'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiCassaPrevidenziale (id: {self.id})"
|
||||
|
||||
tipo_cassa = models.ForeignKey('TipoCassa', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiCassaPrevidenziale_da_TipoCassa_tipo_cassa")
|
||||
al_cassa = models.DecimalField(
|
||||
null=True, blank=True, max_digits=6, decimal_places=2)
|
||||
importo_contributo_cassa = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
imponibile_cassa = models.DecimalField(
|
||||
null=True, blank=True, max_digits=15, decimal_places=2)
|
||||
ritenuta = models.BooleanField()
|
||||
riferimento_amministrazione = models.CharField(null=True, max_length=20)
|
||||
aliquota_iva = models.ForeignKey('AliquotaIva', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiCassaPrevidenziale_da_AliquotaIva_aliquota_iva")
|
||||
|
||||
|
||||
class ScontoMaggiorazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'scontomaggiorazione'
|
||||
verbose_name_plural = 'scontomaggiorazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"ScontoMaggiorazione (id: {self.id})"
|
||||
|
||||
tipo = models.ForeignKey('TipoScontoMaggiorazione', on_delete=models.CASCADE,
|
||||
related_name="ScontoMaggiorazione_da_TipoScontoMaggiorazione_tipo")
|
||||
percentuale = models.DecimalField(
|
||||
null=True, blank=True, max_digits=6, decimal_places=2)
|
||||
importo = models.DecimalField(
|
||||
null=True, blank=True, max_digits=6, decimal_places=2)
|
||||
|
||||
|
||||
class TipoScontoMaggiorazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tiposcontomaggiorazione'
|
||||
verbose_name_plural = 'tiposcontomaggiorazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoScontoMaggiorazione (id: {self.id})"
|
||||
|
||||
tipo = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=20)
|
||||
|
||||
|
||||
class AliquotaIva(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'aliquotaiva'
|
||||
verbose_name_plural = 'aliquotaiva'
|
||||
|
||||
def __str__(self):
|
||||
return f"AliquotaIva (id: {self.id})"
|
||||
|
||||
aliquota_i_v_a = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
natura = models.ForeignKey('Natura', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="AliquotaIva_da_Natura_natura")
|
||||
descrizione = models.CharField(null=True, max_length=50)
|
||||
|
||||
|
||||
class ContoBancario(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'contobancario'
|
||||
verbose_name_plural = 'contobancario'
|
||||
|
||||
def __str__(self):
|
||||
return f"ContoBancario (id: {self.id})"
|
||||
|
||||
soggetto_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ContoBancario_da_SoggettoFiscale_soggetto_fiscale")
|
||||
beneficiario = models.CharField(null=True, max_length=200)
|
||||
istituto_finanziario = models.ForeignKey('IstitutoFinanziario', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ContoBancario_da_IstitutoFinanziario_istituto_finanziario")
|
||||
iban = models.CharField(null=True, max_length=34)
|
||||
|
||||
|
||||
class IstitutoFinanziario(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'istitutofinanziario'
|
||||
verbose_name_plural = 'istitutofinanziario'
|
||||
|
||||
def __str__(self):
|
||||
return f"IstitutoFinanziario (id: {self.id})"
|
||||
|
||||
nome = models.CharField(max_length=50)
|
||||
abi = models.CharField(null=True, max_length=5)
|
||||
cab = models.CharField(null=True, max_length=5)
|
||||
bic = models.CharField(null=True, max_length=11)
|
||||
|
||||
|
||||
class DettaglioBancario(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'dettagliobancario'
|
||||
verbose_name_plural = 'dettagliobancario'
|
||||
|
||||
def __str__(self):
|
||||
return f"DettaglioBancario (id: {self.id})"
|
||||
|
||||
conto_bancario = models.ForeignKey('ContoBancario', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioBancario_da_ContoBancario_conto_bancario")
|
||||
modalita_pagamento = models.ForeignKey('ModalitaPagamento', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioBancario_da_ModalitaPagamento_modalita_pagamento")
|
||||
|
||||
|
||||
class CondizionePagamento(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'condizionepagamento'
|
||||
verbose_name_plural = 'condizionepagamento'
|
||||
|
||||
def __str__(self):
|
||||
return f"CondizionePagamento (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=4)
|
||||
descrizione = models.CharField(null=True, max_length=50)
|
||||
|
||||
|
||||
class DettaglioLinee(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'dettagliolinee'
|
||||
verbose_name_plural = 'dettagliolinee'
|
||||
|
||||
def __str__(self):
|
||||
return f"DettaglioLinee (id: {self.id})"
|
||||
|
||||
fattura_elettronica_body = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioLinee_da_FatturaElettronica_fattura_elettronica_body")
|
||||
numero_linea = models.IntegerField(null=True, blank=True)
|
||||
sconto_maggiorazione = models.ForeignKey('ScontoMaggiorazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioLinee_da_ScontoMaggiorazione_sconto_maggiorazione")
|
||||
aliquota_iva = models.ForeignKey('AliquotaIva', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioLinee_da_AliquotaIva_aliquota_iva")
|
||||
riferimento_amministrazione = models.CharField(null=True, max_length=20)
|
||||
tipo_cessione_prestazione = models.ForeignKey('TipoCessionePrestazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioLinee_da_TipoCessionePrestazione_tipo_cessione_prestazione")
|
||||
dati_estesi = models.ForeignKey('DatiEstesiDettaglioFatturabile', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DettaglioLinee_da_DatiEstesiDettaglioFatturabile_dati_estesi")
|
||||
|
||||
|
||||
class altroDatoGestionale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'altrodatogestionale'
|
||||
verbose_name_plural = 'altrodatogestionale'
|
||||
|
||||
def __str__(self):
|
||||
return f"altroDatoGestionale (id: {self.id})"
|
||||
|
||||
linea_fattura = models.ForeignKey('DettaglioLinee', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="altroDatoGestionale_da_DettaglioLinee_linea_fattura")
|
||||
tipo_dato = models.CharField(max_length=10)
|
||||
riferimento_testo = models.CharField(null=True, max_length=60)
|
||||
riferimento_numero = models.DecimalField(
|
||||
null=True, blank=True, max_digits=21, decimal_places=4)
|
||||
riferimento_data = models.DateField(null=True, blank=True)
|
||||
|
||||
|
||||
class TipoCessionePrestazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipocessioneprestazione'
|
||||
verbose_name_plural = 'tipocessioneprestazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoCessionePrestazione (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=2)
|
||||
descrizione = models.CharField(null=True, max_length=50)
|
||||
|
||||
|
||||
class CodiceArticolo(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'codicearticolo'
|
||||
verbose_name_plural = 'codicearticolo'
|
||||
|
||||
def __str__(self):
|
||||
return f"CodiceArticolo (id: {self.id})"
|
||||
|
||||
codice_tipo = models.ForeignKey('TipoCodiceArticolo', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="CodiceArticolo_da_TipoCodiceArticolo_codice_tipo")
|
||||
codice_valore = models.CharField(null=True, max_length=35)
|
||||
|
||||
|
||||
class TipoCodiceArticolo(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipocodicearticolo'
|
||||
verbose_name_plural = 'tipocodicearticolo'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoCodiceArticolo (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=35)
|
||||
descrizione = models.CharField(null=True, max_length=250)
|
||||
|
||||
|
||||
class ArticoloLinea(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'articololinea'
|
||||
verbose_name_plural = 'articololinea'
|
||||
|
||||
def __str__(self):
|
||||
return f"ArticoloLinea (id: {self.id})"
|
||||
|
||||
codice_articolo = models.ForeignKey('CodiceArticolo', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ArticoloLinea_da_CodiceArticolo_codice_articolo")
|
||||
dettaglio_linee = models.ForeignKey('DettaglioLinee', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ArticoloLinea_da_DettaglioLinee_dettaglio_linee")
|
||||
|
||||
|
||||
class UnitaMisura(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'unitamisura'
|
||||
verbose_name_plural = 'unitamisura'
|
||||
|
||||
def __str__(self):
|
||||
return f"UnitaMisura (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=10)
|
||||
descrizione = models.CharField(null=True, max_length=40)
|
||||
|
||||
|
||||
class TipoResa(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tiporesa'
|
||||
verbose_name_plural = 'tiporesa'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoResa (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=3)
|
||||
descrizione = models.CharField(null=True, max_length=50)
|
||||
|
||||
|
||||
class RiferimentoDDTNumeroLinea(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'riferimentoddtnumerolinea'
|
||||
verbose_name_plural = 'riferimentoddtnumerolinea'
|
||||
|
||||
def __str__(self):
|
||||
return f"RiferimentoDDTNumeroLinea (id: {self.id})"
|
||||
|
||||
dati_d_d_t = models.ForeignKey('DatiDDT', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RiferimentoDDTNumeroLinea_da_DatiDDT_dati_d_d_t")
|
||||
dettaglio_linee = models.ForeignKey('DettaglioLinee', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RiferimentoDDTNumeroLinea_da_DettaglioLinee_dettaglio_linee")
|
||||
|
||||
|
||||
class RiferimentoOrdineAcquistoNumeroLinea(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'riferimentoordineacquistonumerolinea'
|
||||
verbose_name_plural = 'riferimentoordineacquistonumerolinea'
|
||||
|
||||
def __str__(self):
|
||||
return f"RiferimentoOrdineAcquistoNumeroLinea (id: {self.id})"
|
||||
|
||||
dati_ordine_acquisto = models.ForeignKey('DatiDocumentali', on_delete=models.CASCADE, null=True, blank=True,
|
||||
related_name="RiferimentoOrdineAcquistoNumeroLinea_da_DatiDocumentali_dati_ordine_acquisto")
|
||||
dettaglio_linee = models.ForeignKey('DettaglioLinee', on_delete=models.CASCADE, null=True, blank=True,
|
||||
related_name="RiferimentoOrdineAcquistoNumeroLinea_da_DettaglioLinee_dettaglio_linee")
|
||||
|
||||
|
||||
class CodiciDocumentali(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'codicidocumentali'
|
||||
verbose_name_plural = 'codicidocumentali'
|
||||
|
||||
def __str__(self):
|
||||
return f"CodiciDocumentali (id: {self.id})"
|
||||
|
||||
codice_commessa_convenzione = models.CharField(null=True, max_length=100)
|
||||
codice_c_u_p = models.CharField(null=True, max_length=15)
|
||||
codice_c_i_g = models.CharField(null=True, max_length=15)
|
||||
|
||||
|
||||
class TipologiaDocumentale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipologiadocumentale'
|
||||
verbose_name_plural = 'tipologiadocumentale'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipologiaDocumentale (id: {self.id})"
|
||||
|
||||
codifica = models.CharField(max_length=50)
|
||||
descrizione = models.CharField(null=True, max_length=100)
|
||||
|
||||
|
||||
class DatiEstesiDettaglioFatturabile(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'datiestesidettagliofatturabile'
|
||||
verbose_name_plural = 'datiestesidettagliofatturabile'
|
||||
|
||||
def __str__(self):
|
||||
return f"DatiEstesiDettaglioFatturabile (id: {self.id})"
|
||||
|
||||
unita_misura = models.ForeignKey('UnitaMisura', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DatiEstesiDettaglioFatturabile_da_UnitaMisura_unita_misura")
|
||||
descrizione = models.CharField(null=True, max_length=1000)
|
||||
quantita = models.DecimalField(
|
||||
null=True, blank=True, max_digits=21, decimal_places=4)
|
||||
prezzo_unitario = models.DecimalField(
|
||||
null=True, blank=True, max_digits=21, decimal_places=2)
|
||||
data_inizio = models.DateField(null=True, blank=True)
|
||||
data_fine = models.DateField(null=True, blank=True)
|
||||
|
||||
|
||||
class Sede(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'sede'
|
||||
verbose_name_plural = 'sede'
|
||||
|
||||
def __str__(self):
|
||||
return f"Sede (id: {self.id})"
|
||||
|
||||
indirizzo = models.ForeignKey(
|
||||
'dati_geo_app.Indirizzo', on_delete=models.CASCADE, null=True, blank=True)
|
||||
inquilino = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Sede_da_SoggettoFiscale_inquilino")
|
||||
is_legale = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class Fax(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'fax'
|
||||
verbose_name_plural = 'fax'
|
||||
|
||||
def __str__(self):
|
||||
return f"Fax (id: {self.id})"
|
||||
|
||||
numero = models.CharField(null=True, max_length=20)
|
||||
note = models.CharField(null=True, max_length=64)
|
||||
|
||||
|
||||
class Pec(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'pec'
|
||||
verbose_name_plural = 'pec'
|
||||
|
||||
def __str__(self):
|
||||
return f"Pec (id: {self.id})"
|
||||
|
|
@ -0,0 +1,324 @@
|
|||
from import_export import resources
|
||||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class ModalitaLavoroResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ModalitaLavoro
|
||||
|
||||
|
||||
class DettaglioFatturabileResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DettaglioFatturabile
|
||||
|
||||
|
||||
class FatturaElettronicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.FatturaElettronica
|
||||
|
||||
|
||||
class RegimeFiscaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RegimeFiscale
|
||||
|
||||
|
||||
class TipoCassaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoCassa
|
||||
|
||||
|
||||
class ModalitaPagamentoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ModalitaPagamento
|
||||
|
||||
|
||||
class TipoDocumentoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoDocumento
|
||||
|
||||
|
||||
class NaturaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Natura
|
||||
|
||||
|
||||
class TipoRitenutaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoRitenuta
|
||||
|
||||
|
||||
class XmlFatturaElettronicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.XmlFatturaElettronica
|
||||
|
||||
|
||||
class SoggettiFatturaElettronicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SoggettiFatturaElettronica
|
||||
|
||||
|
||||
class SoggettoFiscaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SoggettoFiscale
|
||||
|
||||
|
||||
class PartitaIvaCFResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PartitaIvaCF
|
||||
|
||||
|
||||
class NazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Nazione
|
||||
|
||||
|
||||
class FormatoTrasmissioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.FormatoTrasmissione
|
||||
|
||||
|
||||
class CodiceDestinatarioResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CodiceDestinatario
|
||||
|
||||
|
||||
class DatoDiContattoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatoDiContatto
|
||||
|
||||
|
||||
class TelefonoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Telefono
|
||||
|
||||
|
||||
class EmailResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Email
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.IscrizioneAlboProfessionale
|
||||
|
||||
|
||||
class IscrizioneREAResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.IscrizioneREA
|
||||
|
||||
|
||||
class SocioUnicoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SocioUnico
|
||||
|
||||
|
||||
class StatoLiquidazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.StatoLiquidazione
|
||||
|
||||
|
||||
class TerzoIntermediarioOSoggettoEmittenteResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TerzoIntermediarioOSoggettoEmittente
|
||||
|
||||
|
||||
class SoggettoEmittenteResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SoggettoEmittente
|
||||
|
||||
|
||||
class PersonaFisicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaFisica
|
||||
|
||||
|
||||
class PersonaGiuridicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaGiuridica
|
||||
|
||||
|
||||
class AlboProfessionaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AlboProfessionale
|
||||
|
||||
|
||||
class AllegatoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Allegato
|
||||
|
||||
|
||||
class DatoPagamentoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatoPagamento
|
||||
|
||||
|
||||
class DatiVeicoliResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiVeicoli
|
||||
|
||||
|
||||
class DatiDocumentaliResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiDocumentali
|
||||
|
||||
|
||||
class DatiFattureCollegateResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiFattureCollegate
|
||||
|
||||
|
||||
class DatiSALResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiSAL
|
||||
|
||||
|
||||
class DatiDDTResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiDDT
|
||||
|
||||
|
||||
class DatiTrasportoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiTrasporto
|
||||
|
||||
|
||||
class ValutaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Valuta
|
||||
|
||||
|
||||
class DatiRitenutaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiRitenuta
|
||||
|
||||
|
||||
class CausalePagamentoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CausalePagamento
|
||||
|
||||
|
||||
class DatiBolloResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiBollo
|
||||
|
||||
|
||||
class DatiCassaPrevidenzialeResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiCassaPrevidenziale
|
||||
|
||||
|
||||
class ScontoMaggiorazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ScontoMaggiorazione
|
||||
|
||||
|
||||
class TipoScontoMaggiorazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoScontoMaggiorazione
|
||||
|
||||
|
||||
class AliquotaIvaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AliquotaIva
|
||||
|
||||
|
||||
class ContoBancarioResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ContoBancario
|
||||
|
||||
|
||||
class IstitutoFinanziarioResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.IstitutoFinanziario
|
||||
|
||||
|
||||
class DettaglioBancarioResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DettaglioBancario
|
||||
|
||||
|
||||
class CondizionePagamentoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CondizionePagamento
|
||||
|
||||
|
||||
class DettaglioLineeResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DettaglioLinee
|
||||
|
||||
|
||||
class altroDatoGestionaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.altroDatoGestionale
|
||||
|
||||
|
||||
class TipoCessionePrestazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoCessionePrestazione
|
||||
|
||||
|
||||
class CodiceArticoloResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CodiceArticolo
|
||||
|
||||
|
||||
class TipoCodiceArticoloResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoCodiceArticolo
|
||||
|
||||
|
||||
class ArticoloLineaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ArticoloLinea
|
||||
|
||||
|
||||
class UnitaMisuraResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.UnitaMisura
|
||||
|
||||
|
||||
class TipoResaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoResa
|
||||
|
||||
|
||||
class RiferimentoDDTNumeroLineaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RiferimentoDDTNumeroLinea
|
||||
|
||||
|
||||
class RiferimentoOrdineAcquistoNumeroLineaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RiferimentoOrdineAcquistoNumeroLinea
|
||||
|
||||
|
||||
class CodiciDocumentaliResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CodiciDocumentali
|
||||
|
||||
|
||||
class TipologiaDocumentaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipologiaDocumentale
|
||||
|
||||
|
||||
class DatiEstesiDettaglioFatturabileResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DatiEstesiDettaglioFatturabile
|
||||
|
||||
|
||||
class SedeResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Sede
|
||||
|
||||
|
||||
class FaxResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Fax
|
||||
|
||||
|
||||
class PecResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Pec
|
||||
|
|
@ -0,0 +1,418 @@
|
|||
from rest_framework import serializers
|
||||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class ModalitaLavoroSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ModalitaLavoro
|
||||
fields = ('unita_misura_std', 'descrizione')
|
||||
|
||||
|
||||
class DettaglioFatturabileSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.DettaglioFatturabile
|
||||
fields = ('offerta_riferimento', 'modalita_lavoro',
|
||||
'dati_estesi', 'flusso_di_ricavi')
|
||||
|
||||
|
||||
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 NazioneSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Nazione
|
||||
fields = ('codifica', 'descrizione')
|
||||
|
||||
|
||||
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', 'dati_estesi')
|
||||
|
||||
|
||||
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.DatiEstesiDettaglioFatturabile
|
||||
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')
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
from django.db.models.signals import pre_save, post_save, pre_delete, post_delete
|
||||
from django.dispatch import receiver
|
||||
from . import models
|
||||
|
||||
# @receiver(pre_save, sender=models.ExampleModel)
|
||||
# def example_callback(sender, instance, created=False, **kwargs):
|
||||
# if kwargs['raw'] or created:
|
||||
# return
|
||||
|
|
@ -0,0 +1,480 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
sqldes2django.
|
||||
|
||||
Usage:
|
||||
sqldes2django.py write [--tgt-dir=<tgt-dir>] [--unmanaged=<unmanaged-name>] [--models-file=<models-file>] [--serializers-file=<serializers-file>] [--views-file=<views-file>] [--urls-file=<urls-file>] [--admin-file=<admin-file>] [--resources-file=<resources-file>] [--no-format] [--xml=<xml-path>]
|
||||
sqldes2django.py (-h | --help)
|
||||
sqldes2django.py (--version)
|
||||
|
||||
|
||||
Options:
|
||||
--tgt-dir=<tgt-dir> Directory di output [default: .].
|
||||
--xml=<xml-path> Directory di output [default: modello_database.xml].
|
||||
--models-file=<models-file> Nome del file dei modelli [default: <tgt-dir>/models.py].
|
||||
--serializers-file=<serializers-file> Nome del file dei serializers [default: <tgt-dir>/serializers.py].
|
||||
--views-file=<views-file> Nome del file delle views [default: <tgt-dir>/views.py].
|
||||
--urls-file=<urls-file> Nome del file degli url [default: <tgt-dir>/urls.py].
|
||||
--admin-file=<admin-file> Nome del file dell'admin [default: <tgt-dir>/admin.py].
|
||||
--resources-file=<resources-file> Nome del file delle resources [default: <tgt-dir>/resources.py].
|
||||
--no-format Non formattare l'output con autopep8.
|
||||
--unmanaged=<unmanaged-name> Crea modelli unmanaged (senza migrazioni): supporta pk e fk multiple, setta database=<unmanaged-name>
|
||||
--version Show version.
|
||||
-h --help Show this screen.
|
||||
"""
|
||||
import xml.etree.ElementTree as ET
|
||||
from collections import defaultdict
|
||||
import lark
|
||||
import os
|
||||
import sys
|
||||
import autopep8
|
||||
import re
|
||||
from docopt import docopt
|
||||
"""
|
||||
Created on Thu Feb 28 15:28:17 2019
|
||||
|
||||
@author: guido
|
||||
"""
|
||||
# TODO: Validare nomi per uso con Django
|
||||
# TODO: Trattare le chiavi primarie manuali e le chiavi primarie composite
|
||||
# TODO: Aggiungere tipi mancanti alla mappa
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
arguments = docopt(__doc__, version='Sqldes2django 0.1')
|
||||
for arg in arguments:
|
||||
if isinstance(arguments[arg], str):
|
||||
arguments[arg] = arguments[arg].replace("<tgt-dir>",
|
||||
arguments['--tgt-dir'])
|
||||
|
||||
tgtdir = arguments['--tgt-dir']
|
||||
|
||||
unmanaged = False
|
||||
if arguments['--unmanaged']:
|
||||
unmanaged = True
|
||||
nome_db = arguments['--unmanaged']
|
||||
print(arguments)
|
||||
|
||||
tgtfil = {x: arguments["--" + x + "-file"]
|
||||
for x in ('models', 'admin', 'serializers', 'views', 'urls', 'resources',)}
|
||||
|
||||
sql_type_grammar = lark.Lark(r"""
|
||||
%import common.ESCAPED_STRING
|
||||
%import common.SIGNED_NUMBER
|
||||
%import common.WS
|
||||
%import common.CNAME
|
||||
%ignore WS
|
||||
|
||||
tipo: costruttore | costruttore "(" [arg ("," arg)* ] ")"
|
||||
?costruttore: CNAME
|
||||
?arg: val | keyword_argument
|
||||
val: SIGNED_NUMBER | ESCAPED_STRING
|
||||
keyword_argument: CNAME "=" val""",
|
||||
parser="lalr",
|
||||
start="tipo") # TODO: leggere lo standard vero sql
|
||||
|
||||
def tutti_parametri(stringa_orig):
|
||||
params = sql_type_grammar.parse(stringa_orig)
|
||||
parametri = params.children[1:]
|
||||
posizionali = []
|
||||
keyword_args = {}
|
||||
trovato_kw = False
|
||||
for x in parametri:
|
||||
if x.data == "val":
|
||||
assert not trovato_kw, f"Argomento posizionale non può seguire keyword argument in '{stringa_orig}'"
|
||||
posizionali.append(x.children[0].value)
|
||||
if x.data == "keyword_argument":
|
||||
trovato_kw = True
|
||||
keyword_args[x.children[0].value] = x.children[1].children[0].value
|
||||
return {"costruttore": params.children[0].value, "posizionali": posizionali, "keyword_args": keyword_args, "stringa": stringa_orig}
|
||||
|
||||
def get_tipo_mappato(parsato):
|
||||
tipodato = parsato['costruttore'].upper()
|
||||
return mappa_tipi[tipodato]
|
||||
|
||||
def is_parametrico(parsato):
|
||||
return len(parsato["posizionali"]) > 0 or len(parsato["keyword_args"]) > 0
|
||||
|
||||
def get_parametro(parametri, positional=None, keyword=None):
|
||||
if keyword is not None and keyword in parametri['keyword_args']:
|
||||
val = parametri['keyword_args'][keyword]
|
||||
del parametri['keyword_args'][keyword]
|
||||
return val
|
||||
if positional is not None:
|
||||
try:
|
||||
return parametri['posizionali'][positional]
|
||||
except IndexError as e:
|
||||
raise Exception(
|
||||
f"Richiesti almeno {positional + 1} argomenti posizionali, trovati {len(parametri['posizionali'])} in {parametri['stringa']}") from e
|
||||
raise Exception("Occorre specificare positional o keyword")
|
||||
|
||||
fine_prefisso_RE = re.compile(r'# +-+ +FINE PREFISSO TEMPLATE +-+')
|
||||
def leggi_prefisso(nome_modulo):
|
||||
tmpl_prefisso = []
|
||||
with open(tgtfil[nome_modulo]) as fp:
|
||||
for l in fp.readlines():
|
||||
tmpl_prefisso.append(l)
|
||||
if fine_prefisso_RE.search(l):
|
||||
break
|
||||
return ''.join(tmpl_prefisso)
|
||||
|
||||
|
||||
multifkimport = "from compositefk.fields import CompositeForeignKey # Installa django-composite-foreignkey"
|
||||
multipkmodel = """
|
||||
class MultiPkModel(models.Model):
|
||||
class Meta:
|
||||
abstract = True
|
||||
def save(self, *args, **kwargs):
|
||||
raise NotImplementedError("È un MultiPkModel")
|
||||
# TODO
|
||||
def __hash__(self):
|
||||
attributi_chiave_multipla = self._meta.unique_together[0]
|
||||
parti = []
|
||||
for x in attributi_chiave_multipla:
|
||||
try:
|
||||
parte = getattr(self, x + '_id') # se oltre che parte di primary è foreign, non vogliamo fetchare tutto l'oggetto
|
||||
except AttributeError:
|
||||
parte = getattr(self, x)
|
||||
parti.append(parte)
|
||||
return hash(tuple(parti))
|
||||
|
||||
|
||||
|
||||
class MultiPkQuerySet(models.QuerySet):
|
||||
def get(self, *args, **kwargs):
|
||||
attributi_chiave_multipla = self.model._meta.unique_together[0]
|
||||
if any(key not in kwargs for key in attributi_chiave_multipla):
|
||||
raise Exception("È un MultiPkModel. Fornire anche i seguenti keywoard arguments: " + str(set(attributi_chiave_multipla) - set(kwargs.keys())))
|
||||
filtro = {k : kwargs[k] for k in attributi_chiave_multipla}
|
||||
risultati = list(self.filter(**filtro).all())
|
||||
if len(risultati) == 1:
|
||||
return risultati[0]
|
||||
elif len(risultati) == 0:
|
||||
raise self.model.DoesNotExist(self.model._meta.object_name + " with " + str(filtro))
|
||||
else:
|
||||
raise Exception("MultiPkQuerySet.get: righe multiple con " + str(filtro))
|
||||
|
||||
|
||||
class MultiPkManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return MultiPkQuerySet(self.model, using=self._db)
|
||||
"""
|
||||
|
||||
tmpl_models_prefisso = leggi_prefisso('models')
|
||||
tmpl_models = '''
|
||||
{multifkimport}
|
||||
{multipkmodel}
|
||||
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_model_class = '''
|
||||
class {nometab}({classe_model}):{db_name}
|
||||
class Meta:
|
||||
verbose_name = '{nometab_lower}'
|
||||
verbose_name_plural = '{nometab_lower}'
|
||||
{is_managed}{unique_together}
|
||||
def __str__(self):
|
||||
return f"{nometab} ({chiavi})"
|
||||
|
||||
{righetxt}
|
||||
'''
|
||||
tmpl_riga = '''{nomeriga} = models.{tiporiga}({opzioniriga})'''
|
||||
tmpl_chiave_fk = '''{nomeriga} = models.ForeignKey('{altratab}', {opzioniriga})'''
|
||||
|
||||
tmpl_admin_prefisso = leggi_prefisso('admin')
|
||||
tmpl_admin = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_admin_class = '''
|
||||
@admin.register(models.{nometab})
|
||||
class {nometab}Admin(ImportExportModelAdmin):
|
||||
# resource = resources.{nometab}Resource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
'''
|
||||
|
||||
|
||||
tmpl_serializers_prefisso = leggi_prefisso('serializers')
|
||||
tmpl_serializers = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_serializer_class = '''
|
||||
class {nometab}Serializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.{nometab}
|
||||
fields = ('{campi}')
|
||||
'''
|
||||
|
||||
tmpl_views_prefisso = leggi_prefisso('views')
|
||||
tmpl_views = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_view_class = '''
|
||||
class {nometab}_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.{nometab}.objects.all()
|
||||
serializer_class = serializers.{nometab}Serializer
|
||||
'''
|
||||
|
||||
tmpl_urls_prefisso = leggi_prefisso('urls')
|
||||
tmpl_urls = '''
|
||||
{urls}
|
||||
|
||||
urlpatterns += router.urls
|
||||
'''
|
||||
|
||||
tmpl_url_route = '''router.register(r'{nometaburl}', views.{nometab}_View)'''
|
||||
tmpl_resources_prefisso = leggi_prefisso('resources')
|
||||
tmpl_resources = '''
|
||||
{corpo}
|
||||
'''
|
||||
|
||||
tmpl_resource_class = '''
|
||||
class {nometab}Resource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.{nometab}
|
||||
'''
|
||||
|
||||
mappa_tipi = {
|
||||
'INTEGER': 'IntegerField',
|
||||
'INT': 'IntegerField',
|
||||
'NUMERIC': 'DecimalField',
|
||||
'DECIMAL': 'DecimalField',
|
||||
'SMALLINT': 'SmallIntegerField',
|
||||
'FLOAT': 'FloatField',
|
||||
'TEXT': 'TextField',
|
||||
'VARCHAR': 'CharField',
|
||||
'CHAR': 'CharField',
|
||||
'MEDIUMTEXT': 'TextField',
|
||||
'DATE': 'DateField',
|
||||
'TIME': 'TimeField',
|
||||
'DATETIME': 'DateTimeField',
|
||||
'TIMESTAMP': 'DateTimeField',
|
||||
'DECIMAL': 'DecimalField',
|
||||
'BIT': 'BooleanField',
|
||||
'BINARY': 'BooleanField',
|
||||
'JSONB': 'JSONField'
|
||||
}
|
||||
|
||||
tabelle = list(ET.ElementTree(file=arguments['--xml'])
|
||||
.findall('.//table'))
|
||||
tabelle2 = (ET.ElementTree(file=arguments['--xml'])
|
||||
.findall('.//table'))
|
||||
|
||||
models = []
|
||||
admin = []
|
||||
serializers = []
|
||||
views = []
|
||||
urls = []
|
||||
resources = []
|
||||
nomi_tabelle = []
|
||||
any_multiple_fk = False
|
||||
any_multiple_pk = False
|
||||
|
||||
tabelle_multi_pk = set()
|
||||
for t in tabelle2:
|
||||
nome = t.get('name')
|
||||
chiave = t.findall('.//key/part')
|
||||
if len(chiave) > 1:
|
||||
tabelle_multi_pk.add(nome)
|
||||
any_multiple_pk = True
|
||||
|
||||
renames = {}
|
||||
is_fk_and_pk = set()
|
||||
for t in tabelle:
|
||||
righe = t.findall('.//row')
|
||||
n_tab = t.get('name')
|
||||
chiave = t.findall('.//key/part')
|
||||
|
||||
# prima decido i rename
|
||||
for r in righe:
|
||||
fk = r.find('relation')
|
||||
n = r.get('name')
|
||||
is_simple_fk = fk is not None and fk.get(
|
||||
'table') not in tabelle_multi_pk
|
||||
if is_simple_fk and unmanaged:
|
||||
# renames[(n_tab, n)] = 'fk_' + n # poi ci pensiamo
|
||||
renames[(n_tab, n)] = n
|
||||
else:
|
||||
renames[(n_tab, n)] = n
|
||||
if is_simple_fk and n in [x.text for x in chiave]:
|
||||
is_fk_and_pk.add((n_tab, n))
|
||||
|
||||
for t in tabelle:
|
||||
rec_tabella = dict()
|
||||
rec_serializers = dict()
|
||||
rec_tabella['nometab'] = t.get('name')
|
||||
rec_tabella['nometab_lower'] = rec_tabella['nometab'].lower()
|
||||
n_tab = t.get('name')
|
||||
rec_tabella['classe_model'] = 'models.Model'
|
||||
nomi_tabelle.append(rec_tabella['nometab'])
|
||||
rec_serializers['nometab'] = t.get('name')
|
||||
rec_tabella['is_managed'] = ''
|
||||
rec_tabella['db_name'] = ''
|
||||
rec_tabella['unique_together'] = ''
|
||||
if unmanaged:
|
||||
rec_tabella['is_managed'] = f'managed = False\n db_table = "{rec_tabella["nometab"]}"\n '
|
||||
rec_tabella['db_name'] = f'\n database = "{nome_db}"'
|
||||
righe = t.findall('.//row')
|
||||
chiave = t.findall('.//key/part')
|
||||
pk_singola = None
|
||||
righetxt = []
|
||||
if len(chiave) == 1:
|
||||
if not unmanaged:
|
||||
righe = [r for r in righe if r.get('name') != chiave[0].text]
|
||||
pk_singola = chiave[0].text
|
||||
if unmanaged:
|
||||
rec_tabella['chiavi'] = renames[(n_tab, pk_singola)] + ': {self.' + (renames[(n_tab, pk_singola)]+'_id' if (
|
||||
n_tab, pk_singola) in is_fk_and_pk else renames[(n_tab, pk_singola)]) + '}'
|
||||
else:
|
||||
rec_tabella['chiavi'] = "id: {self.id}"
|
||||
elif len(chiave) > 1:
|
||||
multi_pk = True
|
||||
rec_tabella['classe_model'] = "MultiPkModel"
|
||||
nomi = ", ".join(f"'{renames[(n_tab, x.text)]}'" for x in chiave)
|
||||
rec_tabella['unique_together'] = f"unique_together=[({nomi})]"
|
||||
if unmanaged:
|
||||
rec_tabella['chiavi'] = ", ".join(renames[(n_tab, x.text)] + ': {self.' + (renames[(n_tab, x.text)]+'_id' if (
|
||||
n_tab, x.text) in is_fk_and_pk else renames[(n_tab, x.text)]) + '}' for x in chiave)
|
||||
else:
|
||||
rec_tabella['chiavi'] = "non puoi fare una pk multipla in django"
|
||||
righetxt.append('objects = MultiPkManager()')
|
||||
righeserializerstxt = []
|
||||
# TODO: implementare eventuali tipi multiparametro e con spazi
|
||||
|
||||
datoparametricoRE = re.compile(
|
||||
r'(?P<tipo>[^(]*)\((?P<lunghezza>[^)]*)\)')
|
||||
fk_composite = defaultdict(list)
|
||||
is_first = True
|
||||
for r in righe:
|
||||
rec_riga = dict()
|
||||
rec_chiave_fk = dict()
|
||||
rec_chiave_fk['opzioniriga'] = dict()
|
||||
rec_riga['opzioniriga'] = dict()
|
||||
comm = r.find('comment')
|
||||
if comm is not None and 'django_ignore' in comm.text:
|
||||
continue
|
||||
riga_nullable = r.get('null', "1") == "1"
|
||||
if is_first and unmanaged and rec_tabella['nometab'] in tabelle_multi_pk:
|
||||
if not riga_nullable:
|
||||
# il primo field diventa chiave primaria fittizia. Attenzione a non usarlo davvero!
|
||||
righetxt.append("")
|
||||
righetxt.append(
|
||||
"# chiave primaria fittizia. Attenzione a non usarla! Fa fede unique_together.")
|
||||
rec_riga['opzioniriga']['primary_key'] = True
|
||||
rec_chiave_fk['opzioniriga']['primary_key'] = True
|
||||
is_first = False
|
||||
fk = r.find('relation')
|
||||
is_simple_fk = fk is not None and fk.get(
|
||||
'table') not in tabelle_multi_pk
|
||||
if is_simple_fk:
|
||||
rec_chiave_fk['nomeriga'] = renames[(n_tab, r.get('name'))]
|
||||
n_altra_tab = rec_chiave_fk['altratab'] = fk.get('table')
|
||||
rec_chiave_fk['altracol'] = renames[(
|
||||
n_altra_tab, fk.get('row'))]
|
||||
rec_chiave_fk['opzioniriga']['on_delete'] = 'models.CASCADE'
|
||||
rec_chiave_fk['opzioniriga']['null'] = riga_nullable
|
||||
rec_chiave_fk['opzioniriga']['blank'] = riga_nullable
|
||||
if unmanaged:
|
||||
rec_chiave_fk['opzioniriga']['to_field'] = f"'{rec_chiave_fk['altracol']}'"
|
||||
rec_chiave_fk['opzioniriga']['db_column'] = f"'{r.get('name')}'"
|
||||
rec_chiave_fk['opzioniriga']['related_name'] = (
|
||||
f""""{rec_tabella['nometab']}_da_{rec_chiave_fk['altratab']}_{rec_chiave_fk['nomeriga']}" """.strip())
|
||||
if not rec_chiave_fk['opzioniriga']['null']:
|
||||
del rec_chiave_fk['opzioniriga']['null']
|
||||
del rec_chiave_fk['opzioniriga']['blank']
|
||||
rec_chiave_fk['opzioniriga'] = ', '.join(
|
||||
f'{k}={v}' for k, v in rec_chiave_fk['opzioniriga'].items())
|
||||
righetxt.append(tmpl_chiave_fk.format(**rec_chiave_fk))
|
||||
else:
|
||||
rec_riga['opzioniriga']['null'] = riga_nullable
|
||||
rec_riga['opzioniriga']['blank'] = riga_nullable
|
||||
if fk is not None: # è composita
|
||||
tab_target = fk.get('table')
|
||||
fk_composite[tab_target].append({"campo": r.get('name'),
|
||||
"campo_tgt": renames[(tab_target, fk.get("row"))],
|
||||
"nullabile": rec_riga['opzioniriga']['null']})
|
||||
rec_riga['nomeriga'] = r.get('name')
|
||||
orig = tipodato = str(r.find('datatype').text)
|
||||
parsato = tutti_parametri(tipodato)
|
||||
#parametrico = datoparametricoRE.match(tipodato)
|
||||
parametrico = is_parametrico(parsato)
|
||||
# parametrico = tipo
|
||||
rec_riga['tiporiga'] = get_tipo_mappato(parsato)
|
||||
if parametrico:
|
||||
if rec_riga['tiporiga'] in ('CharField',):
|
||||
lunghezza = get_parametro(
|
||||
parsato, positional=0, keyword="max_length")
|
||||
rec_riga['opzioniriga']['max_length'] = int(lunghezza)
|
||||
elif rec_riga['tiporiga'] == "DecimalField":
|
||||
max_digits = get_parametro(
|
||||
parsato, positional=0, keyword="max_digits")
|
||||
decimal_places = get_parametro(
|
||||
parsato, positional=1, keyword="decimal_places")
|
||||
rec_riga['opzioniriga']['max_digits'] = int(max_digits)
|
||||
rec_riga['opzioniriga']['decimal_places'] = int(
|
||||
decimal_places)
|
||||
arg_avanzati = parsato["keyword_args"]
|
||||
for x in arg_avanzati:
|
||||
rec_riga['opzioniriga'][x] = arg_avanzati[x]
|
||||
elif unmanaged:
|
||||
if tipodato in ('CHAR', 'VARCHAR'):
|
||||
rec_riga['opzioniriga']['max_length'] = 1000000
|
||||
if r.get('name') == pk_singola:
|
||||
# chiave singola
|
||||
rec_riga['opzioniriga']['primary_key'] = True
|
||||
if not rec_riga['opzioniriga']['null']:
|
||||
del rec_riga['opzioniriga']['null']
|
||||
del rec_riga['opzioniriga']['blank']
|
||||
if rec_riga['tiporiga'] in ('CharField', 'TextField') and 'blank' in rec_riga['opzioniriga']:
|
||||
del rec_riga['opzioniriga']['blank']
|
||||
rec_riga['opzioniriga'] = ','.join(
|
||||
f'{k}={v}' for k, v in rec_riga['opzioniriga'].items())
|
||||
righetxt.append(tmpl_riga.format(**rec_riga))
|
||||
rec_riga_serializers = dict()
|
||||
rec_riga_serializers['nomecampo'] = r.get('name')
|
||||
righeserializerstxt.append(rec_riga_serializers['nomecampo'])
|
||||
for tgt in fk_composite:
|
||||
nullabile = any(x['nullabile'] for x in fk_composite[tgt])
|
||||
fk_fields = ",\n ".join(
|
||||
f"'{x['campo_tgt']}': '{x['campo']}'" for x in fk_composite[tgt])
|
||||
asd = f"fk_{tgt} = CompositeForeignKey('{tgt}', on_delete=models.CASCADE, null={nullabile}, to_fields=" + "{\n " + fk_fields + "\n })"
|
||||
righetxt.append(asd)
|
||||
any_multiple_fk = True
|
||||
rec_tabella['righetxt'] = '\n '.join(righetxt)
|
||||
rec_serializers['campi'] = "','".join(righeserializerstxt)
|
||||
models.append(tmpl_model_class.format(**rec_tabella))
|
||||
admin.append(tmpl_admin_class.format(**rec_tabella))
|
||||
serializers.append(tmpl_serializer_class.format(**rec_serializers))
|
||||
views.append(tmpl_view_class.format(nometab=rec_tabella['nometab']))
|
||||
urls.append(tmpl_url_route.format(
|
||||
nometaburl=rec_tabella['nometab'].lower(), nometab=rec_tabella['nometab']))
|
||||
resources.append(tmpl_resource_class.format(
|
||||
nometab=rec_tabella['nometab']))
|
||||
|
||||
models = tmpl_models_prefisso + tmpl_models.format(corpo='\n'.join(models),
|
||||
multipkmodel=multipkmodel if any_multiple_pk else "",
|
||||
multifkimport=multifkimport if any_multiple_fk else "")
|
||||
admin = tmpl_admin_prefisso + tmpl_admin.format(corpo='\n'.join(admin))
|
||||
serializers = tmpl_serializers_prefisso + tmpl_serializers.format(corpo='\n'.join(serializers))
|
||||
views = tmpl_views_prefisso + tmpl_views.format(corpo='\n'.join(views))
|
||||
urls = tmpl_urls_prefisso + tmpl_urls.format(urls='\n'.join(urls))
|
||||
resources = tmpl_resources_prefisso + tmpl_resources.format(corpo='\n'.join(resources))
|
||||
|
||||
for tgt_name, tgt_path in tgtfil.items():
|
||||
with open(tgt_path, 'w') as f:
|
||||
print(
|
||||
f"Writing {tgt_name} to {tgt_path}, autopep8: {not arguments['--no-format']}...")
|
||||
if arguments['--no-format']:
|
||||
f.write(globals()[tgt_name])
|
||||
else:
|
||||
f.write(autopep8.fix_code(globals()[tgt_name]))
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
from rest_framework import routers
|
||||
from django.urls import include, path
|
||||
from . import views
|
||||
|
||||
app_name = "fattura_elettronica_app"
|
||||
|
||||
urlpatterns = [
|
||||
# path('', views.index, name='index'),
|
||||
]
|
||||
router = routers.DefaultRouter()
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
router.register(r'modalitalavoro', views.ModalitaLavoro_View)
|
||||
router.register(r'dettagliofatturabile', views.DettaglioFatturabile_View)
|
||||
router.register(r'fatturaelettronica', views.FatturaElettronica_View)
|
||||
router.register(r'regimefiscale', views.RegimeFiscale_View)
|
||||
router.register(r'tipocassa', views.TipoCassa_View)
|
||||
router.register(r'modalitapagamento', views.ModalitaPagamento_View)
|
||||
router.register(r'tipodocumento', views.TipoDocumento_View)
|
||||
router.register(r'natura', views.Natura_View)
|
||||
router.register(r'tiporitenuta', views.TipoRitenuta_View)
|
||||
router.register(r'xmlfatturaelettronica', views.XmlFatturaElettronica_View)
|
||||
router.register(r'soggettifatturaelettronica',
|
||||
views.SoggettiFatturaElettronica_View)
|
||||
router.register(r'soggettofiscale', views.SoggettoFiscale_View)
|
||||
router.register(r'partitaivacf', views.PartitaIvaCF_View)
|
||||
router.register(r'nazione', views.Nazione_View)
|
||||
router.register(r'formatotrasmissione', views.FormatoTrasmissione_View)
|
||||
router.register(r'codicedestinatario', views.CodiceDestinatario_View)
|
||||
router.register(r'datodicontatto', views.DatoDiContatto_View)
|
||||
router.register(r'telefono', views.Telefono_View)
|
||||
router.register(r'email', views.Email_View)
|
||||
router.register(r'iscrizionealboprofessionale',
|
||||
views.IscrizioneAlboProfessionale_View)
|
||||
router.register(r'iscrizionerea', views.IscrizioneREA_View)
|
||||
router.register(r'sociounico', views.SocioUnico_View)
|
||||
router.register(r'statoliquidazione', views.StatoLiquidazione_View)
|
||||
router.register(r'terzointermediarioosoggettoemittente',
|
||||
views.TerzoIntermediarioOSoggettoEmittente_View)
|
||||
router.register(r'soggettoemittente', views.SoggettoEmittente_View)
|
||||
router.register(r'personafisica', views.PersonaFisica_View)
|
||||
router.register(r'personagiuridica', views.PersonaGiuridica_View)
|
||||
router.register(r'alboprofessionale', views.AlboProfessionale_View)
|
||||
router.register(r'allegato', views.Allegato_View)
|
||||
router.register(r'datopagamento', views.DatoPagamento_View)
|
||||
router.register(r'dativeicoli', views.DatiVeicoli_View)
|
||||
router.register(r'datidocumentali', views.DatiDocumentali_View)
|
||||
router.register(r'datifatturecollegate', views.DatiFattureCollegate_View)
|
||||
router.register(r'datisal', views.DatiSAL_View)
|
||||
router.register(r'datiddt', views.DatiDDT_View)
|
||||
router.register(r'datitrasporto', views.DatiTrasporto_View)
|
||||
router.register(r'valuta', views.Valuta_View)
|
||||
router.register(r'datiritenuta', views.DatiRitenuta_View)
|
||||
router.register(r'causalepagamento', views.CausalePagamento_View)
|
||||
router.register(r'datibollo', views.DatiBollo_View)
|
||||
router.register(r'daticassaprevidenziale', views.DatiCassaPrevidenziale_View)
|
||||
router.register(r'scontomaggiorazione', views.ScontoMaggiorazione_View)
|
||||
router.register(r'tiposcontomaggiorazione', views.TipoScontoMaggiorazione_View)
|
||||
router.register(r'aliquotaiva', views.AliquotaIva_View)
|
||||
router.register(r'contobancario', views.ContoBancario_View)
|
||||
router.register(r'istitutofinanziario', views.IstitutoFinanziario_View)
|
||||
router.register(r'dettagliobancario', views.DettaglioBancario_View)
|
||||
router.register(r'condizionepagamento', views.CondizionePagamento_View)
|
||||
router.register(r'dettagliolinee', views.DettaglioLinee_View)
|
||||
router.register(r'altrodatogestionale', views.altroDatoGestionale_View)
|
||||
router.register(r'tipocessioneprestazione', views.TipoCessionePrestazione_View)
|
||||
router.register(r'codicearticolo', views.CodiceArticolo_View)
|
||||
router.register(r'tipocodicearticolo', views.TipoCodiceArticolo_View)
|
||||
router.register(r'articololinea', views.ArticoloLinea_View)
|
||||
router.register(r'unitamisura', views.UnitaMisura_View)
|
||||
router.register(r'tiporesa', views.TipoResa_View)
|
||||
router.register(r'riferimentoddtnumerolinea',
|
||||
views.RiferimentoDDTNumeroLinea_View)
|
||||
router.register(r'riferimentoordineacquistonumerolinea',
|
||||
views.RiferimentoOrdineAcquistoNumeroLinea_View)
|
||||
router.register(r'codicidocumentali', views.CodiciDocumentali_View)
|
||||
router.register(r'tipologiadocumentale', views.TipologiaDocumentale_View)
|
||||
router.register(r'datiestesidettagliofatturabile',
|
||||
views.DatiEstesiDettaglioFatturabile_View)
|
||||
router.register(r'sede', views.Sede_View)
|
||||
router.register(r'fax', views.Fax_View)
|
||||
router.register(r'pec', views.Pec_View)
|
||||
router.register(r'indirizzo', views.Indirizzo_View)
|
||||
router.register(r'provincia', views.Provincia_View)
|
||||
|
||||
urlpatterns += router.urls
|
||||
|
|
@ -0,0 +1,547 @@
|
|||
from copy import deepcopy
|
||||
|
||||
from django.shortcuts import render, redirect
|
||||
from django.http import JsonResponse, HttpResponse
|
||||
from django.utils.http import url_has_allowed_host_and_scheme
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
|
||||
from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated
|
||||
|
||||
from django_auto_prefetching import AutoPrefetchViewSetMixin
|
||||
from . import models
|
||||
from . import serializers
|
||||
|
||||
# def index(request):
|
||||
# return HttpResponse("Hello, %s!" % (request.user.username if request.user.is_authenticated else 'World'))
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class ModalitaLavoro_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ModalitaLavoro.objects.all()
|
||||
serializer_class = serializers.ModalitaLavoroSerializer
|
||||
|
||||
|
||||
class DettaglioFatturabile_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DettaglioFatturabile.objects.all()
|
||||
serializer_class = serializers.DettaglioFatturabileSerializer
|
||||
|
||||
|
||||
class FatturaElettronica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.FatturaElettronica.objects.all()
|
||||
serializer_class = serializers.FatturaElettronicaSerializer
|
||||
|
||||
|
||||
class RegimeFiscale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RegimeFiscale.objects.all()
|
||||
serializer_class = serializers.RegimeFiscaleSerializer
|
||||
|
||||
|
||||
class TipoCassa_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoCassa.objects.all()
|
||||
serializer_class = serializers.TipoCassaSerializer
|
||||
|
||||
|
||||
class ModalitaPagamento_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ModalitaPagamento.objects.all()
|
||||
serializer_class = serializers.ModalitaPagamentoSerializer
|
||||
|
||||
|
||||
class TipoDocumento_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoDocumento.objects.all()
|
||||
serializer_class = serializers.TipoDocumentoSerializer
|
||||
|
||||
|
||||
class Natura_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Natura.objects.all()
|
||||
serializer_class = serializers.NaturaSerializer
|
||||
|
||||
|
||||
class TipoRitenuta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoRitenuta.objects.all()
|
||||
serializer_class = serializers.TipoRitenutaSerializer
|
||||
|
||||
|
||||
class XmlFatturaElettronica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.XmlFatturaElettronica.objects.all()
|
||||
serializer_class = serializers.XmlFatturaElettronicaSerializer
|
||||
|
||||
|
||||
class SoggettiFatturaElettronica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SoggettiFatturaElettronica.objects.all()
|
||||
serializer_class = serializers.SoggettiFatturaElettronicaSerializer
|
||||
|
||||
|
||||
class SoggettoFiscale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SoggettoFiscale.objects.all()
|
||||
serializer_class = serializers.SoggettoFiscaleSerializer
|
||||
|
||||
|
||||
class PartitaIvaCF_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PartitaIvaCF.objects.all()
|
||||
serializer_class = serializers.PartitaIvaCFSerializer
|
||||
|
||||
|
||||
class Nazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Nazione.objects.all()
|
||||
serializer_class = serializers.NazioneSerializer
|
||||
|
||||
|
||||
class FormatoTrasmissione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.FormatoTrasmissione.objects.all()
|
||||
serializer_class = serializers.FormatoTrasmissioneSerializer
|
||||
|
||||
|
||||
class CodiceDestinatario_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CodiceDestinatario.objects.all()
|
||||
serializer_class = serializers.CodiceDestinatarioSerializer
|
||||
|
||||
|
||||
class DatoDiContatto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatoDiContatto.objects.all()
|
||||
serializer_class = serializers.DatoDiContattoSerializer
|
||||
|
||||
|
||||
class Telefono_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Telefono.objects.all()
|
||||
serializer_class = serializers.TelefonoSerializer
|
||||
|
||||
|
||||
class Email_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Email.objects.all()
|
||||
serializer_class = serializers.EmailSerializer
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.IscrizioneAlboProfessionale.objects.all()
|
||||
serializer_class = serializers.IscrizioneAlboProfessionaleSerializer
|
||||
|
||||
|
||||
class IscrizioneREA_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.IscrizioneREA.objects.all()
|
||||
serializer_class = serializers.IscrizioneREASerializer
|
||||
|
||||
|
||||
class SocioUnico_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SocioUnico.objects.all()
|
||||
serializer_class = serializers.SocioUnicoSerializer
|
||||
|
||||
|
||||
class StatoLiquidazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.StatoLiquidazione.objects.all()
|
||||
serializer_class = serializers.StatoLiquidazioneSerializer
|
||||
|
||||
|
||||
class TerzoIntermediarioOSoggettoEmittente_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TerzoIntermediarioOSoggettoEmittente.objects.all()
|
||||
serializer_class = serializers.TerzoIntermediarioOSoggettoEmittenteSerializer
|
||||
|
||||
|
||||
class SoggettoEmittente_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SoggettoEmittente.objects.all()
|
||||
serializer_class = serializers.SoggettoEmittenteSerializer
|
||||
|
||||
|
||||
class PersonaFisica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaFisica.objects.all()
|
||||
serializer_class = serializers.PersonaFisicaSerializer
|
||||
|
||||
|
||||
class PersonaGiuridica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaGiuridica.objects.all()
|
||||
serializer_class = serializers.PersonaGiuridicaSerializer
|
||||
|
||||
|
||||
class AlboProfessionale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AlboProfessionale.objects.all()
|
||||
serializer_class = serializers.AlboProfessionaleSerializer
|
||||
|
||||
|
||||
class Allegato_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Allegato.objects.all()
|
||||
serializer_class = serializers.AllegatoSerializer
|
||||
|
||||
|
||||
class DatoPagamento_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatoPagamento.objects.all()
|
||||
serializer_class = serializers.DatoPagamentoSerializer
|
||||
|
||||
|
||||
class DatiVeicoli_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiVeicoli.objects.all()
|
||||
serializer_class = serializers.DatiVeicoliSerializer
|
||||
|
||||
|
||||
class DatiDocumentali_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiDocumentali.objects.all()
|
||||
serializer_class = serializers.DatiDocumentaliSerializer
|
||||
|
||||
|
||||
class DatiFattureCollegate_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiFattureCollegate.objects.all()
|
||||
serializer_class = serializers.DatiFattureCollegateSerializer
|
||||
|
||||
|
||||
class DatiSAL_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiSAL.objects.all()
|
||||
serializer_class = serializers.DatiSALSerializer
|
||||
|
||||
|
||||
class DatiDDT_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiDDT.objects.all()
|
||||
serializer_class = serializers.DatiDDTSerializer
|
||||
|
||||
|
||||
class DatiTrasporto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiTrasporto.objects.all()
|
||||
serializer_class = serializers.DatiTrasportoSerializer
|
||||
|
||||
|
||||
class Valuta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Valuta.objects.all()
|
||||
serializer_class = serializers.ValutaSerializer
|
||||
|
||||
|
||||
class DatiRitenuta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiRitenuta.objects.all()
|
||||
serializer_class = serializers.DatiRitenutaSerializer
|
||||
|
||||
|
||||
class CausalePagamento_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CausalePagamento.objects.all()
|
||||
serializer_class = serializers.CausalePagamentoSerializer
|
||||
|
||||
|
||||
class DatiBollo_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiBollo.objects.all()
|
||||
serializer_class = serializers.DatiBolloSerializer
|
||||
|
||||
|
||||
class DatiCassaPrevidenziale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiCassaPrevidenziale.objects.all()
|
||||
serializer_class = serializers.DatiCassaPrevidenzialeSerializer
|
||||
|
||||
|
||||
class ScontoMaggiorazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ScontoMaggiorazione.objects.all()
|
||||
serializer_class = serializers.ScontoMaggiorazioneSerializer
|
||||
|
||||
|
||||
class TipoScontoMaggiorazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoScontoMaggiorazione.objects.all()
|
||||
serializer_class = serializers.TipoScontoMaggiorazioneSerializer
|
||||
|
||||
|
||||
class AliquotaIva_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AliquotaIva.objects.all()
|
||||
serializer_class = serializers.AliquotaIvaSerializer
|
||||
|
||||
|
||||
class ContoBancario_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ContoBancario.objects.all()
|
||||
serializer_class = serializers.ContoBancarioSerializer
|
||||
|
||||
|
||||
class IstitutoFinanziario_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.IstitutoFinanziario.objects.all()
|
||||
serializer_class = serializers.IstitutoFinanziarioSerializer
|
||||
|
||||
|
||||
class DettaglioBancario_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DettaglioBancario.objects.all()
|
||||
serializer_class = serializers.DettaglioBancarioSerializer
|
||||
|
||||
|
||||
class CondizionePagamento_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CondizionePagamento.objects.all()
|
||||
serializer_class = serializers.CondizionePagamentoSerializer
|
||||
|
||||
|
||||
class DettaglioLinee_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DettaglioLinee.objects.all()
|
||||
serializer_class = serializers.DettaglioLineeSerializer
|
||||
|
||||
|
||||
class altroDatoGestionale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.altroDatoGestionale.objects.all()
|
||||
serializer_class = serializers.altroDatoGestionaleSerializer
|
||||
|
||||
|
||||
class TipoCessionePrestazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoCessionePrestazione.objects.all()
|
||||
serializer_class = serializers.TipoCessionePrestazioneSerializer
|
||||
|
||||
|
||||
class CodiceArticolo_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CodiceArticolo.objects.all()
|
||||
serializer_class = serializers.CodiceArticoloSerializer
|
||||
|
||||
|
||||
class TipoCodiceArticolo_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoCodiceArticolo.objects.all()
|
||||
serializer_class = serializers.TipoCodiceArticoloSerializer
|
||||
|
||||
|
||||
class ArticoloLinea_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ArticoloLinea.objects.all()
|
||||
serializer_class = serializers.ArticoloLineaSerializer
|
||||
|
||||
|
||||
class UnitaMisura_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.UnitaMisura.objects.all()
|
||||
serializer_class = serializers.UnitaMisuraSerializer
|
||||
|
||||
|
||||
class TipoResa_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoResa.objects.all()
|
||||
serializer_class = serializers.TipoResaSerializer
|
||||
|
||||
|
||||
class RiferimentoDDTNumeroLinea_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RiferimentoDDTNumeroLinea.objects.all()
|
||||
serializer_class = serializers.RiferimentoDDTNumeroLineaSerializer
|
||||
|
||||
|
||||
class RiferimentoOrdineAcquistoNumeroLinea_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RiferimentoOrdineAcquistoNumeroLinea.objects.all()
|
||||
serializer_class = serializers.RiferimentoOrdineAcquistoNumeroLineaSerializer
|
||||
|
||||
|
||||
class CodiciDocumentali_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CodiciDocumentali.objects.all()
|
||||
serializer_class = serializers.CodiciDocumentaliSerializer
|
||||
|
||||
|
||||
class TipologiaDocumentale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipologiaDocumentale.objects.all()
|
||||
serializer_class = serializers.TipologiaDocumentaleSerializer
|
||||
|
||||
|
||||
class DatiEstesiDettaglioFatturabile_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DatiEstesiDettaglioFatturabile.objects.all()
|
||||
serializer_class = serializers.DatiEstesiDettaglioFatturabileSerializer
|
||||
|
||||
|
||||
class Sede_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Sede.objects.all()
|
||||
serializer_class = serializers.SedeSerializer
|
||||
|
||||
|
||||
class Fax_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Fax.objects.all()
|
||||
serializer_class = serializers.FaxSerializer
|
||||
|
||||
|
||||
class Pec_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Pec.objects.all()
|
||||
serializer_class = serializers.PecSerializer
|
||||
|
||||
|
||||
class Indirizzo_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Indirizzo.objects.all()
|
||||
serializer_class = serializers.IndirizzoSerializer
|
||||
|
||||
|
||||
class Provincia_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Provincia.objects.all()
|
||||
serializer_class = serializers.ProvinciaSerializer
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# This file is automatically @generated by Poetry and should not be changed by hand.
|
||||
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
|
|
@ -38,14 +38,14 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"]
|
|||
|
||||
[[package]]
|
||||
name = "astroid"
|
||||
version = "2.14.1"
|
||||
version = "2.14.2"
|
||||
description = "An abstract syntax tree for Python with inference support."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7.2"
|
||||
files = [
|
||||
{file = "astroid-2.14.1-py3-none-any.whl", hash = "sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2"},
|
||||
{file = "astroid-2.14.1.tar.gz", hash = "sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f"},
|
||||
{file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"},
|
||||
{file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -337,14 +337,14 @@ graph = ["objgraph (>=1.7.2)"]
|
|||
|
||||
[[package]]
|
||||
name = "django"
|
||||
version = "4.1.6"
|
||||
version = "4.1.7"
|
||||
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "Django-4.1.6-py3-none-any.whl", hash = "sha256:c6fe7ebe7c017fe59f1029821dae0acb5a2ddcd6c9a0138fd20a8bfefac914bc"},
|
||||
{file = "Django-4.1.6.tar.gz", hash = "sha256:bceb0fe1a386781af0788cae4108622756cd05e7775448deec04a71ddf87685d"},
|
||||
{file = "Django-4.1.7-py3-none-any.whl", hash = "sha256:f2f431e75adc40039ace496ad3b9f17227022e8b11566f4b363da44c7e44761e"},
|
||||
{file = "Django-4.1.7.tar.gz", hash = "sha256:44f714b81c5f190d9d2ddad01a532fe502fa01c4cb8faf1d081f4264ed15dcd8"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -356,6 +356,22 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""}
|
|||
argon2 = ["argon2-cffi (>=19.1.0)"]
|
||||
bcrypt = ["bcrypt"]
|
||||
|
||||
[[package]]
|
||||
name = "django-admin-autocomplete-list-filter"
|
||||
version = "0.2.3+briq1"
|
||||
description = "Ajax autocomplete list filter for Django admin"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.0"
|
||||
files = []
|
||||
develop = false
|
||||
|
||||
[package.source]
|
||||
type = "git"
|
||||
url = "https://git.briq.it/Briq/django-admin-autocomplete-list-filter.git"
|
||||
reference = "HEAD"
|
||||
resolved_reference = "2ff66842c267a7350e4688562f21109cfdb1d93f"
|
||||
|
||||
[[package]]
|
||||
name = "django-auto-prefetching"
|
||||
version = "0.2.12"
|
||||
|
|
@ -449,6 +465,21 @@ files = [
|
|||
{file = "django_ordered_model-3.6-py3-none-any.whl", hash = "sha256:0006b111f472a2348f75554a4e77bee2b1f379a0f96726af6b1a3ebf3a950789"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "django-polymorphic"
|
||||
version = "3.1.0"
|
||||
description = "Seamless polymorphic inheritance for Django models"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "django-polymorphic-3.1.0.tar.gz", hash = "sha256:d6955b5308bf6e41dcb22ba7c96f00b51dfa497a8a5ab1e9c06c7951bf417bf8"},
|
||||
{file = "django_polymorphic-3.1.0-py3-none-any.whl", hash = "sha256:08bc4f4f4a773a19b2deced5a56deddd1ef56ebd15207bf4052e2901c25ef57e"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
Django = ">=2.1"
|
||||
|
||||
[[package]]
|
||||
name = "djangorestframework"
|
||||
version = "3.14.0"
|
||||
|
|
@ -478,14 +509,14 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "drf-yasg"
|
||||
version = "1.21.4"
|
||||
version = "1.21.5"
|
||||
description = "Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "drf-yasg-1.21.4.tar.gz", hash = "sha256:887c9f79e64f46aa48974234e61029b1bea6b12ea628a8fc8a3697589add1d3e"},
|
||||
{file = "drf_yasg-1.21.4-py3-none-any.whl", hash = "sha256:4a156d195fdccc51b40a227955588d982ca43c2e327927c7713bf967f5589913"},
|
||||
{file = "drf-yasg-1.21.5.tar.gz", hash = "sha256:ceef0c3b5dc4389781afd786e6dc3697af2a2fe0d8724ee1f637c23d75bbc5b2"},
|
||||
{file = "drf_yasg-1.21.5-py3-none-any.whl", hash = "sha256:ba9cf4bf79f259290daee9b400fa4fcdb0e78d2f043fa5e9f6589c939fd06d05"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -862,13 +893,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "nuitka"
|
||||
version = "1.4.4"
|
||||
version = "1.4.7"
|
||||
description = "Python compiler with full language support and CPython compatibility"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "Nuitka-1.4.4.tar.gz", hash = "sha256:3bd4269e920e1415e30d7edf637ca9a88161a09e299627b749583077dd5e288a"},
|
||||
{file = "Nuitka-1.4.7.tar.gz", hash = "sha256:ea7ef24c088afe15fd1daa96c455bb4d4b34183c310ea33f7916a0e616169467"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -887,14 +918,14 @@ defusedxml = "*"
|
|||
|
||||
[[package]]
|
||||
name = "openpyxl"
|
||||
version = "3.1.0"
|
||||
version = "3.1.1"
|
||||
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "openpyxl-3.1.0-py2.py3-none-any.whl", hash = "sha256:24d7d361025d186ba91eff58135d50855cf035a84371b891e58fb6eb5125660f"},
|
||||
{file = "openpyxl-3.1.0.tar.gz", hash = "sha256:eccedbe1cdd8b2494057e73959b496821141038dbb7eb9266ea59e3f34208231"},
|
||||
{file = "openpyxl-3.1.1-py2.py3-none-any.whl", hash = "sha256:a0266e033e65f33ee697254b66116a5793c15fc92daf64711080000df4cfe0a8"},
|
||||
{file = "openpyxl-3.1.1.tar.gz", hash = "sha256:f06d44e2c973781068bce5ecf860a09bcdb1c7f5ce1facd5e9aa82c92c93ae72"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
|
@ -980,18 +1011,18 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "pylint"
|
||||
version = "2.16.1"
|
||||
version = "2.16.2"
|
||||
description = "python code static checker"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7.2"
|
||||
files = [
|
||||
{file = "pylint-2.16.1-py3-none-any.whl", hash = "sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37"},
|
||||
{file = "pylint-2.16.1.tar.gz", hash = "sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30"},
|
||||
{file = "pylint-2.16.2-py3-none-any.whl", hash = "sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4"},
|
||||
{file = "pylint-2.16.2.tar.gz", hash = "sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
astroid = ">=2.14.1,<=2.16.0-dev0"
|
||||
astroid = ">=2.14.2,<=2.16.0-dev0"
|
||||
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
|
||||
dill = [
|
||||
{version = ">=0.2", markers = "python_version < \"3.11\""},
|
||||
|
|
@ -1203,6 +1234,8 @@ files = [
|
|||
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"},
|
||||
{file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"},
|
||||
|
|
@ -1310,14 +1343,14 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.4.0"
|
||||
version = "4.5.0"
|
||||
description = "Backported and Experimental Type Hints for Python 3.7+"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
|
||||
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
|
||||
{file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
|
||||
{file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1648,4 +1681,4 @@ files = [
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "dd865019c2390ca08505a8db6ee4aad72af61476c3635d3e3ca0941ab5025f54"
|
||||
content-hash = "b754e0c02ae123034a92910f2b8e4bf3c269a3f342347b3062ed24c3c478c4c1"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ uvicorn = {extras = ["standard"], version = "^0.20.0"}
|
|||
channels-redis = "^4.0.0"
|
||||
django-ordered-model = "^3.6"
|
||||
django-auto-prefetching = "^0.2.12"
|
||||
django-polymorphic = "^3.1.0"
|
||||
django-admin-autocomplete-list-filter = {git = "https://git.briq.it/Briq/django-admin-autocomplete-list-filter.git"}
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
nuitka = "^1.4.4"
|
||||
|
|
@ -31,6 +33,11 @@ docopt = "^0.6.2"
|
|||
lark = "^1.1.5"
|
||||
django-debug-toolbar = "^3.8.1"
|
||||
|
||||
[[tool.poetry.source]]
|
||||
name = "briq"
|
||||
url = "https://py.briq.it/simple/"
|
||||
secondary = true
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
|
|
|
|||
|
|
@ -36,4 +36,417 @@ from . import resources
|
|||
# return False
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
|
||||
|
||||
|
||||
@admin.register(models.DestinatarioOfferta)
|
||||
class DestinatarioOffertaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.DestinatarioOffertaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.GruppoOfferte)
|
||||
class GruppoOfferteAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.GruppoOfferteResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Offerta)
|
||||
class OffertaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.OffertaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AgenteOfferta)
|
||||
class AgenteOffertaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AgenteOffertaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ParteEconomicaOfferta)
|
||||
class ParteEconomicaOffertaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ParteEconomicaOffertaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Progetto)
|
||||
class ProgettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ProgettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ValorizzazioneEconomicaProgetto)
|
||||
class ValorizzazioneEconomicaProgettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ValorizzazioneEconomicaProgettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipologiaOfferta)
|
||||
class TipologiaOffertaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipologiaOffertaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Repository)
|
||||
class RepositoryAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RepositoryResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoRelazione)
|
||||
class TipoRelazioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoRelazioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Attivita)
|
||||
class AttivitaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AttivitaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RisorsaChiave)
|
||||
class RisorsaChiaveAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RisorsaChiaveResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PropostaDiValore)
|
||||
class PropostaDiValoreAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PropostaDiValoreResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CanaleDiDistribuzione)
|
||||
class CanaleDiDistribuzioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CanaleDiDistribuzioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SettoreDiMercato)
|
||||
class SettoreDiMercatoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SettoreDiMercatoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.FlussoDiRicavi)
|
||||
class FlussoDiRicaviAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.FlussoDiRicaviResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.StrutturaDeiCosti)
|
||||
class StrutturaDeiCostiAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.StrutturaDeiCostiResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SettoreAzienda)
|
||||
class SettoreAziendaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SettoreAziendaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCModelloDiBusiness)
|
||||
class BMCModelloDiBusinessAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCModelloDiBusinessResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCPartnerChiave)
|
||||
class BMCPartnerChiaveAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCPartnerChiaveResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RelazioneConAzienda)
|
||||
class RelazioneConAziendaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RelazioneConAziendaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCSegmentiDiClientela)
|
||||
class BMCSegmentiDiClientelaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCSegmentiDiClientelaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCRelazioneConCliente)
|
||||
class BMCRelazioneConClienteAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCRelazioneConClienteResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.TipoAttivita)
|
||||
class TipoAttivitaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.TipoAttivitaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCAttivitaChiave)
|
||||
class BMCAttivitaChiaveAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCAttivitaChiaveResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ValoreDelProgetto)
|
||||
class ValoreDelProgettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ValoreDelProgettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCPropostaDiValore)
|
||||
class BMCPropostaDiValoreAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCPropostaDiValoreResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AttivitaDelProgetto)
|
||||
class AttivitaDelProgettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AttivitaDelProgettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AssetDelProgetto)
|
||||
class AssetDelProgettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AssetDelProgettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RisorsaPersonale)
|
||||
class RisorsaPersonaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RisorsaPersonaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RisorsaFisica)
|
||||
class RisorsaFisicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RisorsaFisicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.RisorsaFinanziaria)
|
||||
class RisorsaFinanziariaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.RisorsaFinanziariaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCRisorsaChiave)
|
||||
class BMCRisorsaChiaveAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCRisorsaChiaveResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ValoreDellAttivita)
|
||||
class ValoreDellAttivitaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ValoreDellAttivitaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ValorizzazioneEconomicaAttivita)
|
||||
class ValorizzazioneEconomicaAttivitaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ValorizzazioneEconomicaAttivitaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.AssetDaAttivita)
|
||||
class AssetDaAttivitaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.AssetDaAttivitaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.ArchivioFiles)
|
||||
class ArchivioFilesAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.ArchivioFilesResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCFlussoDiRicavi)
|
||||
class BMCFlussoDiRicaviAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCFlussoDiRicaviResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.BMCCanaleDiDistribuzione)
|
||||
class BMCCanaleDiDistribuzioneAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.BMCCanaleDiDistribuzioneResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.CanaleDistribuzioneIndiretto)
|
||||
class CanaleDistribuzioneIndirettoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.CanaleDistribuzioneIndirettoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.SoggettoFiscale)
|
||||
class SoggettoFiscaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SoggettoFiscaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.IscrizioneAlboProfessionale)
|
||||
class IscrizioneAlboProfessionaleAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.IscrizioneAlboProfessionaleResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaFisica)
|
||||
class PersonaFisicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaFisicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.PersonaGiuridica)
|
||||
class PersonaGiuridicaAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.PersonaGiuridicaResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Sede)
|
||||
class SedeAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.SedeResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(models.Indirizzo)
|
||||
class IndirizzoAdmin(ImportExportModelAdmin):
|
||||
# resource = resources.IndirizzoResource
|
||||
# list_per_page = 15
|
||||
# paginator = CachingPaginator
|
||||
# show_full_result_count = False
|
||||
pass
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,627 @@
|
|||
from django.db import models
|
||||
from polymorphic.models import PolymorphicModel
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
|
||||
|
||||
|
||||
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('Sede', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DestinatarioOfferta_da_Sede_destinazione")
|
||||
intestatario = models.ForeignKey('fattura_elettronica_app.PersonaContattoAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="DestinatarioOfferta_da_PersonaContattoAzienda_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 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('fattura_elettronica_app.DettaglioFatturabile', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ParteEconomicaOfferta_da_DettaglioFatturabile_dettaglio_economico_offerto")
|
||||
|
||||
|
||||
class Progetto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'progetto'
|
||||
verbose_name_plural = 'progetto'
|
||||
|
||||
def __str__(self):
|
||||
return f"Progetto (id: {self.id})"
|
||||
|
||||
progetto_padre = models.ForeignKey('Progetto', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Progetto_da_Progetto_progetto_padre")
|
||||
stato = models.IntegerField(null=True, blank=True)
|
||||
nome = models.CharField(null=True, max_length=4096)
|
||||
descrizione = models.TextField(null=True)
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaProgetto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'valorizzazioneeconomicaprogetto'
|
||||
verbose_name_plural = 'valorizzazioneeconomicaprogetto'
|
||||
|
||||
def __str__(self):
|
||||
return f"ValorizzazioneEconomicaProgetto (id: {self.id})"
|
||||
|
||||
progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValorizzazioneEconomicaProgetto_da_Progetto_progetto")
|
||||
dato_economico = models.ForeignKey('fattura_elettronica_app.DettaglioFatturabile', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValorizzazioneEconomicaProgetto_da_DettaglioFatturabile_dato_economico")
|
||||
fase_target = models.IntegerField(null=True, blank=True)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
|
||||
class Repository(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'repository'
|
||||
verbose_name_plural = 'repository'
|
||||
|
||||
def __str__(self):
|
||||
return f"Repository (id: {self.id})"
|
||||
|
||||
url = models.CharField(null=True, max_length=1024)
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class TipoRelazione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tiporelazione'
|
||||
verbose_name_plural = 'tiporelazione'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoRelazione (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class Attivita(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'attivita'
|
||||
verbose_name_plural = 'attivita'
|
||||
|
||||
def __str__(self):
|
||||
return f"Attivita (id: {self.id})"
|
||||
|
||||
attivita_generica = models.ForeignKey('Attivita', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Attivita_da_Attivita_attivita_generica")
|
||||
tipo = models.ForeignKey('TipoAttivita', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Attivita_da_TipoAttivita_tipo")
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class RisorsaChiave(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'risorsachiave'
|
||||
verbose_name_plural = 'risorsachiave'
|
||||
|
||||
def __str__(self):
|
||||
return f"RisorsaChiave (id: {self.id})"
|
||||
|
||||
risorsa_generica = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RisorsaChiave_da_RisorsaChiave_risorsa_generica")
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class PropostaDiValore(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'propostadivalore'
|
||||
verbose_name_plural = 'propostadivalore'
|
||||
|
||||
def __str__(self):
|
||||
return f"PropostaDiValore (id: {self.id})"
|
||||
|
||||
proposta_valore_generica = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="PropostaDiValore_da_PropostaDiValore_proposta_valore_generica")
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class CanaleDiDistribuzione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'canaledidistribuzione'
|
||||
verbose_name_plural = 'canaledidistribuzione'
|
||||
|
||||
def __str__(self):
|
||||
return f"CanaleDiDistribuzione (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class SettoreDiMercato(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'settoredimercato'
|
||||
verbose_name_plural = 'settoredimercato'
|
||||
|
||||
def __str__(self):
|
||||
return f"SettoreDiMercato (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class FlussoDiRicavi(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'flussodiricavi'
|
||||
verbose_name_plural = 'flussodiricavi'
|
||||
|
||||
def __str__(self):
|
||||
return f"FlussoDiRicavi (id: {self.id})"
|
||||
|
||||
flusso_ricavi_generico = models.ForeignKey('FlussoDiRicavi', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="FlussoDiRicavi_da_FlussoDiRicavi_flusso_ricavi_generico")
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class StrutturaDeiCosti(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'strutturadeicosti'
|
||||
verbose_name_plural = 'strutturadeicosti'
|
||||
|
||||
def __str__(self):
|
||||
return f"StrutturaDeiCosti (id: {self.id})"
|
||||
|
||||
|
||||
class SettoreAzienda(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'settoreazienda'
|
||||
verbose_name_plural = 'settoreazienda'
|
||||
|
||||
def __str__(self):
|
||||
return f"SettoreAzienda (id: {self.id})"
|
||||
|
||||
settore_generico = models.ForeignKey('SettoreAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SettoreAzienda_da_SettoreAzienda_settore_generico")
|
||||
azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SettoreAzienda_da_SoggettoFiscale_azienda")
|
||||
settore_di_mercato = models.ForeignKey('SettoreDiMercato', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SettoreAzienda_da_SettoreDiMercato_settore_di_mercato")
|
||||
|
||||
|
||||
class BMCModelloDiBusiness(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcmodellodibusiness'
|
||||
verbose_name_plural = 'bmcmodellodibusiness'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCModelloDiBusiness (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class BMCPartnerChiave(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcpartnerchiave'
|
||||
verbose_name_plural = 'bmcpartnerchiave'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCPartnerChiave (id: {self.id})"
|
||||
|
||||
partnership_azienda = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCPartnerChiave_da_RelazioneConAzienda_partnership_azienda")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCPartnerChiave_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class RelazioneConAzienda(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'relazioneconazienda'
|
||||
verbose_name_plural = 'relazioneconazienda'
|
||||
|
||||
def __str__(self):
|
||||
return f"RelazioneConAzienda (id: {self.id})"
|
||||
|
||||
relazione_generica = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RelazioneConAzienda_da_RelazioneConAzienda_relazione_generica")
|
||||
azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RelazioneConAzienda_da_SoggettoFiscale_azienda")
|
||||
tipo_relazione = models.ForeignKey('TipoRelazione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="RelazioneConAzienda_da_TipoRelazione_tipo_relazione")
|
||||
|
||||
|
||||
class BMCSegmentiDiClientela(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcsegmentidiclientela'
|
||||
verbose_name_plural = 'bmcsegmentidiclientela'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCSegmentiDiClientela (id: {self.id})"
|
||||
|
||||
settore_cliente = models.ForeignKey('SettoreAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCSegmentiDiClientela_da_SettoreAzienda_settore_cliente")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCSegmentiDiClientela_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class BMCRelazioneConCliente(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcrelazioneconcliente'
|
||||
verbose_name_plural = 'bmcrelazioneconcliente'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCRelazioneConCliente (id: {self.id})"
|
||||
|
||||
relazione_cliente = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCRelazioneConCliente_da_RelazioneConAzienda_relazione_cliente")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCRelazioneConCliente_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class TipoAttivita(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'tipoattivita'
|
||||
verbose_name_plural = 'tipoattivita'
|
||||
|
||||
def __str__(self):
|
||||
return f"TipoAttivita (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class BMCAttivitaChiave(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcattivitachiave'
|
||||
verbose_name_plural = 'bmcattivitachiave'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCAttivitaChiave (id: {self.id})"
|
||||
|
||||
attivita_chiave = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCAttivitaChiave_da_Attivita_attivita_chiave")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCAttivitaChiave_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class ValoreDelProgetto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'valoredelprogetto'
|
||||
verbose_name_plural = 'valoredelprogetto'
|
||||
|
||||
def __str__(self):
|
||||
return f"ValoreDelProgetto (id: {self.id})"
|
||||
|
||||
progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValoreDelProgetto_da_Progetto_progetto")
|
||||
proposta_di_valore = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValoreDelProgetto_da_PropostaDiValore_proposta_di_valore")
|
||||
|
||||
|
||||
class BMCPropostaDiValore(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcpropostadivalore'
|
||||
verbose_name_plural = 'bmcpropostadivalore'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCPropostaDiValore (id: {self.id})"
|
||||
|
||||
proposta_di_valore = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCPropostaDiValore_da_PropostaDiValore_proposta_di_valore")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCPropostaDiValore_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class AttivitaDelProgetto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'attivitadelprogetto'
|
||||
verbose_name_plural = 'attivitadelprogetto'
|
||||
|
||||
def __str__(self):
|
||||
return f"AttivitaDelProgetto (id: {self.id})"
|
||||
|
||||
progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AttivitaDelProgetto_da_Progetto_progetto")
|
||||
attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AttivitaDelProgetto_da_Attivita_attivita")
|
||||
|
||||
|
||||
class AssetDelProgetto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'assetdelprogetto'
|
||||
verbose_name_plural = 'assetdelprogetto'
|
||||
|
||||
def __str__(self):
|
||||
return f"AssetDelProgetto (id: {self.id})"
|
||||
|
||||
progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AssetDelProgetto_da_Progetto_progetto")
|
||||
asset = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AssetDelProgetto_da_RisorsaChiave_asset")
|
||||
|
||||
|
||||
class RisorsaPersonale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'risorsapersonale'
|
||||
verbose_name_plural = 'risorsapersonale'
|
||||
|
||||
def __str__(self):
|
||||
return f"RisorsaPersonale (id: {self.id})"
|
||||
|
||||
persona = models.IntegerField(null=True, blank=True)
|
||||
|
||||
|
||||
class RisorsaFisica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'risorsafisica'
|
||||
verbose_name_plural = 'risorsafisica'
|
||||
|
||||
def __str__(self):
|
||||
return f"RisorsaFisica (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class RisorsaFinanziaria(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'risorsafinanziaria'
|
||||
verbose_name_plural = 'risorsafinanziaria'
|
||||
|
||||
def __str__(self):
|
||||
return f"RisorsaFinanziaria (id: {self.id})"
|
||||
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class BMCRisorsaChiave(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcrisorsachiave'
|
||||
verbose_name_plural = 'bmcrisorsachiave'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCRisorsaChiave (id: {self.id})"
|
||||
|
||||
risorsa_chiave = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCRisorsaChiave_da_RisorsaChiave_risorsa_chiave")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCRisorsaChiave_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class ValoreDellAttivita(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'valoredellattivita'
|
||||
verbose_name_plural = 'valoredellattivita'
|
||||
|
||||
def __str__(self):
|
||||
return f"ValoreDellAttivita (id: {self.id})"
|
||||
|
||||
attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValoreDellAttivita_da_Attivita_attivita")
|
||||
proposta_di_valore = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValoreDellAttivita_da_PropostaDiValore_proposta_di_valore")
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaAttivita(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'valorizzazioneeconomicaattivita'
|
||||
verbose_name_plural = 'valorizzazioneeconomicaattivita'
|
||||
|
||||
def __str__(self):
|
||||
return f"ValorizzazioneEconomicaAttivita (id: {self.id})"
|
||||
|
||||
attivita_del_progetto = models.ForeignKey('AttivitaDelProgetto', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValorizzazioneEconomicaAttivita_da_AttivitaDelProgetto_attivita_del_progetto")
|
||||
dato_economico = models.ForeignKey('fattura_elettronica_app.DettaglioFatturabile', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="ValorizzazioneEconomicaAttivita_da_DettaglioFatturabile_dato_economico")
|
||||
|
||||
|
||||
class AssetDaAttivita(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'assetdaattivita'
|
||||
verbose_name_plural = 'assetdaattivita'
|
||||
|
||||
def __str__(self):
|
||||
return f"AssetDaAttivita (id: {self.id})"
|
||||
|
||||
attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AssetDaAttivita_da_Attivita_attivita")
|
||||
asset = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="AssetDaAttivita_da_RisorsaChiave_asset")
|
||||
|
||||
|
||||
class ArchivioFiles(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'archiviofiles'
|
||||
verbose_name_plural = 'archiviofiles'
|
||||
|
||||
def __str__(self):
|
||||
return f"ArchivioFiles (id: {self.id})"
|
||||
|
||||
url = models.CharField(null=True, max_length=1024)
|
||||
descrizione = models.CharField(null=True, max_length=4096)
|
||||
|
||||
|
||||
class BMCFlussoDiRicavi(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmcflussodiricavi'
|
||||
verbose_name_plural = 'bmcflussodiricavi'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCFlussoDiRicavi (id: {self.id})"
|
||||
|
||||
flusso_di_ricavi = models.ForeignKey('FlussoDiRicavi', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCFlussoDiRicavi_da_FlussoDiRicavi_flusso_di_ricavi")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCFlussoDiRicavi_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class BMCCanaleDiDistribuzione(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'bmccanaledidistribuzione'
|
||||
verbose_name_plural = 'bmccanaledidistribuzione'
|
||||
|
||||
def __str__(self):
|
||||
return f"BMCCanaleDiDistribuzione (id: {self.id})"
|
||||
|
||||
canale = models.ForeignKey('CanaleDiDistribuzione', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCCanaleDiDistribuzione_da_CanaleDiDistribuzione_canale")
|
||||
modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="BMCCanaleDiDistribuzione_da_BMCModelloDiBusiness_modello_di_business")
|
||||
|
||||
|
||||
class CanaleDistribuzioneIndiretto(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'canaledistribuzioneindiretto'
|
||||
verbose_name_plural = 'canaledistribuzioneindiretto'
|
||||
|
||||
def __str__(self):
|
||||
return f"CanaleDistribuzioneIndiretto (id: {self.id})"
|
||||
|
||||
partnership_distribuzione = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="CanaleDistribuzioneIndiretto_da_RelazioneConAzienda_partnership_distribuzione")
|
||||
|
||||
|
||||
class SoggettoFiscale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'soggettofiscale'
|
||||
verbose_name_plural = 'soggettofiscale'
|
||||
|
||||
def __str__(self):
|
||||
return f"SoggettoFiscale (id: {self.id})"
|
||||
|
||||
indirizzo_pec = models.IntegerField(null=True, blank=True)
|
||||
regime_fiscale = models.IntegerField(null=True, blank=True)
|
||||
codice_fiscale = models.IntegerField(null=True, blank=True)
|
||||
partita_iva = models.IntegerField(null=True, blank=True)
|
||||
codice_sdi = models.IntegerField(null=True, blank=True)
|
||||
sede_legale = models.IntegerField()
|
||||
stabile_organizzazione = models.IntegerField(null=True, blank=True)
|
||||
cod_eori = models.CharField(null=True, max_length=17)
|
||||
nazione = models.IntegerField(null=True, blank=True)
|
||||
numero_licenza_guida = models.CharField(null=True, max_length=20)
|
||||
iscrizione_rea = models.IntegerField(null=True, blank=True)
|
||||
revisione_principale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="SoggettoFiscale_da_SoggettoFiscale_revisione_principale")
|
||||
rimosso = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionale(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'iscrizionealboprofessionale'
|
||||
verbose_name_plural = 'iscrizionealboprofessionale'
|
||||
|
||||
def __str__(self):
|
||||
return f"IscrizioneAlboProfessionale (id: {self.id})"
|
||||
|
||||
albo_professionale = models.IntegerField(null=True, blank=True)
|
||||
numero_iscrizione_albo = models.CharField(null=True, max_length=60)
|
||||
data_iscrizione_albo = models.DateField(null=True, blank=True)
|
||||
persona_fisica = models.ForeignKey('PersonaFisica', on_delete=models.CASCADE, null=True,
|
||||
blank=True, related_name="IscrizioneAlboProfessionale_da_PersonaFisica_persona_fisica")
|
||||
|
||||
|
||||
class PersonaFisica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personafisica'
|
||||
verbose_name_plural = 'personafisica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaFisica (id: {self.id})"
|
||||
|
||||
titolo = models.CharField(null=True, max_length=10)
|
||||
nome = models.CharField(null=True, max_length=60)
|
||||
cognome = models.CharField(null=True, max_length=60)
|
||||
|
||||
|
||||
class PersonaGiuridica(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'personagiuridica'
|
||||
verbose_name_plural = 'personagiuridica'
|
||||
|
||||
def __str__(self):
|
||||
return f"PersonaGiuridica (id: {self.id})"
|
||||
|
||||
denominazione = models.CharField(null=True, max_length=80)
|
||||
|
||||
|
||||
class Sede(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'sede'
|
||||
verbose_name_plural = 'sede'
|
||||
|
||||
def __str__(self):
|
||||
return f"Sede (id: {self.id})"
|
||||
|
||||
inquilino = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE,
|
||||
null=True, blank=True, related_name="Sede_da_SoggettoFiscale_inquilino")
|
||||
is_legale = models.BooleanField(null=True, blank=True)
|
||||
|
||||
|
||||
class Indirizzo(models.Model):
|
||||
class Meta:
|
||||
verbose_name = 'indirizzo'
|
||||
verbose_name_plural = 'indirizzo'
|
||||
|
||||
def __str__(self):
|
||||
return f"Indirizzo (id: {self.id})"
|
||||
|
||||
duf = models.CharField(null=True, max_length=256)
|
||||
civico = models.CharField(null=True, max_length=256)
|
||||
altro = models.CharField(null=True, max_length=2048)
|
||||
cap_id = models.CharField(null=True, max_length=5)
|
||||
comune_id = models.IntegerField(null=True, blank=True)
|
||||
dug_id = models.CharField(null=True, max_length=40)
|
||||
|
|
|
|||
|
|
@ -2,4 +2,233 @@ from import_export import resources
|
|||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
|
||||
|
||||
|
||||
class DestinatarioOffertaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.DestinatarioOfferta
|
||||
|
||||
|
||||
class GruppoOfferteResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.GruppoOfferte
|
||||
|
||||
|
||||
class OffertaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Offerta
|
||||
|
||||
|
||||
class AgenteOffertaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AgenteOfferta
|
||||
|
||||
|
||||
class ParteEconomicaOffertaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ParteEconomicaOfferta
|
||||
|
||||
|
||||
class ProgettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Progetto
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaProgettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ValorizzazioneEconomicaProgetto
|
||||
|
||||
|
||||
class TipologiaOffertaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipologiaOfferta
|
||||
|
||||
|
||||
class RepositoryResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Repository
|
||||
|
||||
|
||||
class TipoRelazioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoRelazione
|
||||
|
||||
|
||||
class AttivitaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Attivita
|
||||
|
||||
|
||||
class RisorsaChiaveResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RisorsaChiave
|
||||
|
||||
|
||||
class PropostaDiValoreResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PropostaDiValore
|
||||
|
||||
|
||||
class CanaleDiDistribuzioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CanaleDiDistribuzione
|
||||
|
||||
|
||||
class SettoreDiMercatoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SettoreDiMercato
|
||||
|
||||
|
||||
class FlussoDiRicaviResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.FlussoDiRicavi
|
||||
|
||||
|
||||
class StrutturaDeiCostiResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.StrutturaDeiCosti
|
||||
|
||||
|
||||
class SettoreAziendaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SettoreAzienda
|
||||
|
||||
|
||||
class BMCModelloDiBusinessResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCModelloDiBusiness
|
||||
|
||||
|
||||
class BMCPartnerChiaveResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCPartnerChiave
|
||||
|
||||
|
||||
class RelazioneConAziendaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RelazioneConAzienda
|
||||
|
||||
|
||||
class BMCSegmentiDiClientelaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCSegmentiDiClientela
|
||||
|
||||
|
||||
class BMCRelazioneConClienteResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCRelazioneConCliente
|
||||
|
||||
|
||||
class TipoAttivitaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.TipoAttivita
|
||||
|
||||
|
||||
class BMCAttivitaChiaveResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCAttivitaChiave
|
||||
|
||||
|
||||
class ValoreDelProgettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ValoreDelProgetto
|
||||
|
||||
|
||||
class BMCPropostaDiValoreResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCPropostaDiValore
|
||||
|
||||
|
||||
class AttivitaDelProgettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AttivitaDelProgetto
|
||||
|
||||
|
||||
class AssetDelProgettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AssetDelProgetto
|
||||
|
||||
|
||||
class RisorsaPersonaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RisorsaPersonale
|
||||
|
||||
|
||||
class RisorsaFisicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RisorsaFisica
|
||||
|
||||
|
||||
class RisorsaFinanziariaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.RisorsaFinanziaria
|
||||
|
||||
|
||||
class BMCRisorsaChiaveResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCRisorsaChiave
|
||||
|
||||
|
||||
class ValoreDellAttivitaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ValoreDellAttivita
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaAttivitaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ValorizzazioneEconomicaAttivita
|
||||
|
||||
|
||||
class AssetDaAttivitaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.AssetDaAttivita
|
||||
|
||||
|
||||
class ArchivioFilesResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.ArchivioFiles
|
||||
|
||||
|
||||
class BMCFlussoDiRicaviResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCFlussoDiRicavi
|
||||
|
||||
|
||||
class BMCCanaleDiDistribuzioneResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.BMCCanaleDiDistribuzione
|
||||
|
||||
|
||||
class CanaleDistribuzioneIndirettoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.CanaleDistribuzioneIndiretto
|
||||
|
||||
|
||||
class SoggettoFiscaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.SoggettoFiscale
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionaleResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.IscrizioneAlboProfessionale
|
||||
|
||||
|
||||
class PersonaFisicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaFisica
|
||||
|
||||
|
||||
class PersonaGiuridicaResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.PersonaGiuridica
|
||||
|
||||
|
||||
class SedeResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Sede
|
||||
|
||||
|
||||
class IndirizzoResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = models.Indirizzo
|
||||
|
|
|
|||
|
|
@ -2,4 +2,283 @@ from rest_framework import serializers
|
|||
from . import models
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
|
||||
|
||||
|
||||
class DestinatarioOffertaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.DestinatarioOfferta
|
||||
fields = ('destinazione', 'intestatario')
|
||||
|
||||
|
||||
class GruppoOfferteSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.GruppoOfferte
|
||||
fields = ('destinatario', 'agente', 'tipo',
|
||||
'anno_1a_rev', 'numero', 'descrizione')
|
||||
|
||||
|
||||
class OffertaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Offerta
|
||||
fields = ('gruppo', 'data', 'revisione', 'documento',
|
||||
'codice_offerta', 'accettazione')
|
||||
|
||||
|
||||
class AgenteOffertaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.AgenteOfferta
|
||||
fields = ('codice')
|
||||
|
||||
|
||||
class ParteEconomicaOffertaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ParteEconomicaOfferta
|
||||
fields = ('revisione', 'dettaglio_economico_offerto')
|
||||
|
||||
|
||||
class ProgettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Progetto
|
||||
fields = ('progetto_padre', 'stato', 'nome', 'descrizione')
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaProgettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ValorizzazioneEconomicaProgetto
|
||||
fields = ('progetto', 'dato_economico', 'fase_target')
|
||||
|
||||
|
||||
class TipologiaOffertaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.TipologiaOfferta
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class RepositorySerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Repository
|
||||
fields = ('url', 'descrizione')
|
||||
|
||||
|
||||
class TipoRelazioneSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.TipoRelazione
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class AttivitaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Attivita
|
||||
fields = ('attivita_generica', 'tipo', 'descrizione')
|
||||
|
||||
|
||||
class RisorsaChiaveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RisorsaChiave
|
||||
fields = ('risorsa_generica', 'descrizione')
|
||||
|
||||
|
||||
class PropostaDiValoreSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.PropostaDiValore
|
||||
fields = ('proposta_valore_generica', 'descrizione')
|
||||
|
||||
|
||||
class CanaleDiDistribuzioneSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.CanaleDiDistribuzione
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class SettoreDiMercatoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.SettoreDiMercato
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class FlussoDiRicaviSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.FlussoDiRicavi
|
||||
fields = ('flusso_ricavi_generico', 'descrizione')
|
||||
|
||||
|
||||
class StrutturaDeiCostiSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.StrutturaDeiCosti
|
||||
fields = ('')
|
||||
|
||||
|
||||
class SettoreAziendaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.SettoreAzienda
|
||||
fields = ('settore_generico', 'azienda', 'settore_di_mercato')
|
||||
|
||||
|
||||
class BMCModelloDiBusinessSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCModelloDiBusiness
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class BMCPartnerChiaveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCPartnerChiave
|
||||
fields = ('partnership_azienda', 'modello_di_business')
|
||||
|
||||
|
||||
class RelazioneConAziendaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RelazioneConAzienda
|
||||
fields = ('relazione_generica', 'azienda', 'tipo_relazione')
|
||||
|
||||
|
||||
class BMCSegmentiDiClientelaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCSegmentiDiClientela
|
||||
fields = ('settore_cliente', 'modello_di_business')
|
||||
|
||||
|
||||
class BMCRelazioneConClienteSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCRelazioneConCliente
|
||||
fields = ('relazione_cliente', 'modello_di_business')
|
||||
|
||||
|
||||
class TipoAttivitaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.TipoAttivita
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class BMCAttivitaChiaveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCAttivitaChiave
|
||||
fields = ('attivita_chiave', 'modello_di_business')
|
||||
|
||||
|
||||
class ValoreDelProgettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ValoreDelProgetto
|
||||
fields = ('progetto', 'proposta_di_valore')
|
||||
|
||||
|
||||
class BMCPropostaDiValoreSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCPropostaDiValore
|
||||
fields = ('proposta_di_valore', 'modello_di_business')
|
||||
|
||||
|
||||
class AttivitaDelProgettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.AttivitaDelProgetto
|
||||
fields = ('progetto', 'attivita')
|
||||
|
||||
|
||||
class AssetDelProgettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.AssetDelProgetto
|
||||
fields = ('progetto', 'asset')
|
||||
|
||||
|
||||
class RisorsaPersonaleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RisorsaPersonale
|
||||
fields = ('persona')
|
||||
|
||||
|
||||
class RisorsaFisicaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RisorsaFisica
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class RisorsaFinanziariaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RisorsaFinanziaria
|
||||
fields = ('descrizione')
|
||||
|
||||
|
||||
class BMCRisorsaChiaveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCRisorsaChiave
|
||||
fields = ('risorsa_chiave', 'modello_di_business')
|
||||
|
||||
|
||||
class ValoreDellAttivitaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ValoreDellAttivita
|
||||
fields = ('attivita', 'proposta_di_valore')
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaAttivitaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ValorizzazioneEconomicaAttivita
|
||||
fields = ('attivita_del_progetto', 'dato_economico')
|
||||
|
||||
|
||||
class AssetDaAttivitaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.AssetDaAttivita
|
||||
fields = ('attivita', 'asset')
|
||||
|
||||
|
||||
class ArchivioFilesSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.ArchivioFiles
|
||||
fields = ('url', 'descrizione')
|
||||
|
||||
|
||||
class BMCFlussoDiRicaviSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCFlussoDiRicavi
|
||||
fields = ('flusso_di_ricavi', 'modello_di_business')
|
||||
|
||||
|
||||
class BMCCanaleDiDistribuzioneSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.BMCCanaleDiDistribuzione
|
||||
fields = ('canale', 'modello_di_business')
|
||||
|
||||
|
||||
class CanaleDistribuzioneIndirettoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.CanaleDistribuzioneIndiretto
|
||||
fields = ('partnership_distribuzione')
|
||||
|
||||
|
||||
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 IscrizioneAlboProfessionaleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.IscrizioneAlboProfessionale
|
||||
fields = ('albo_professionale', 'numero_iscrizione_albo',
|
||||
'data_iscrizione_albo', 'persona_fisica')
|
||||
|
||||
|
||||
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 SedeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Sede
|
||||
fields = ('inquilino', 'is_legale')
|
||||
|
||||
|
||||
class IndirizzoSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Indirizzo
|
||||
fields = ('duf', 'civico', 'altro', 'cap_id', 'comune_id', 'dug_id')
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ if __name__ == '__main__':
|
|||
return parametri['posizionali'][positional]
|
||||
except IndexError as e:
|
||||
raise Exception(
|
||||
f"Richiesti almeno {positional + 1} argomenti posizionali, trovati {len(parametri['posizionali'])} in {paremtri['stringa']}") from e
|
||||
f"Richiesti almeno {positional + 1} argomenti posizionali, trovati {len(parametri['posizionali'])} in {parametri['stringa']}") from e
|
||||
raise Exception("Occorre specificare positional o keyword")
|
||||
|
||||
fine_prefisso_RE = re.compile(r'# +-+ +FINE PREFISSO TEMPLATE +-+')
|
||||
|
|
|
|||
|
|
@ -10,4 +10,57 @@ urlpatterns = [
|
|||
router = routers.DefaultRouter()
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
|
||||
|
||||
router.register(r'destinatarioofferta', views.DestinatarioOfferta_View)
|
||||
router.register(r'gruppoofferte', views.GruppoOfferte_View)
|
||||
router.register(r'offerta', views.Offerta_View)
|
||||
router.register(r'agenteofferta', views.AgenteOfferta_View)
|
||||
router.register(r'parteeconomicaofferta', views.ParteEconomicaOfferta_View)
|
||||
router.register(r'progetto', views.Progetto_View)
|
||||
router.register(r'valorizzazioneeconomicaprogetto',
|
||||
views.ValorizzazioneEconomicaProgetto_View)
|
||||
router.register(r'tipologiaofferta', views.TipologiaOfferta_View)
|
||||
router.register(r'repository', views.Repository_View)
|
||||
router.register(r'tiporelazione', views.TipoRelazione_View)
|
||||
router.register(r'attivita', views.Attivita_View)
|
||||
router.register(r'risorsachiave', views.RisorsaChiave_View)
|
||||
router.register(r'propostadivalore', views.PropostaDiValore_View)
|
||||
router.register(r'canaledidistribuzione', views.CanaleDiDistribuzione_View)
|
||||
router.register(r'settoredimercato', views.SettoreDiMercato_View)
|
||||
router.register(r'flussodiricavi', views.FlussoDiRicavi_View)
|
||||
router.register(r'strutturadeicosti', views.StrutturaDeiCosti_View)
|
||||
router.register(r'settoreazienda', views.SettoreAzienda_View)
|
||||
router.register(r'bmcmodellodibusiness', views.BMCModelloDiBusiness_View)
|
||||
router.register(r'bmcpartnerchiave', views.BMCPartnerChiave_View)
|
||||
router.register(r'relazioneconazienda', views.RelazioneConAzienda_View)
|
||||
router.register(r'bmcsegmentidiclientela', views.BMCSegmentiDiClientela_View)
|
||||
router.register(r'bmcrelazioneconcliente', views.BMCRelazioneConCliente_View)
|
||||
router.register(r'tipoattivita', views.TipoAttivita_View)
|
||||
router.register(r'bmcattivitachiave', views.BMCAttivitaChiave_View)
|
||||
router.register(r'valoredelprogetto', views.ValoreDelProgetto_View)
|
||||
router.register(r'bmcpropostadivalore', views.BMCPropostaDiValore_View)
|
||||
router.register(r'attivitadelprogetto', views.AttivitaDelProgetto_View)
|
||||
router.register(r'assetdelprogetto', views.AssetDelProgetto_View)
|
||||
router.register(r'risorsapersonale', views.RisorsaPersonale_View)
|
||||
router.register(r'risorsafisica', views.RisorsaFisica_View)
|
||||
router.register(r'risorsafinanziaria', views.RisorsaFinanziaria_View)
|
||||
router.register(r'bmcrisorsachiave', views.BMCRisorsaChiave_View)
|
||||
router.register(r'valoredellattivita', views.ValoreDellAttivita_View)
|
||||
router.register(r'valorizzazioneeconomicaattivita',
|
||||
views.ValorizzazioneEconomicaAttivita_View)
|
||||
router.register(r'assetdaattivita', views.AssetDaAttivita_View)
|
||||
router.register(r'archiviofiles', views.ArchivioFiles_View)
|
||||
router.register(r'bmcflussodiricavi', views.BMCFlussoDiRicavi_View)
|
||||
router.register(r'bmccanaledidistribuzione',
|
||||
views.BMCCanaleDiDistribuzione_View)
|
||||
router.register(r'canaledistribuzioneindiretto',
|
||||
views.CanaleDistribuzioneIndiretto_View)
|
||||
router.register(r'soggettofiscale', views.SoggettoFiscale_View)
|
||||
router.register(r'iscrizionealboprofessionale',
|
||||
views.IscrizioneAlboProfessionale_View)
|
||||
router.register(r'personafisica', views.PersonaFisica_View)
|
||||
router.register(r'personagiuridica', views.PersonaGiuridica_View)
|
||||
router.register(r'sede', views.Sede_View)
|
||||
router.register(r'indirizzo', views.Indirizzo_View)
|
||||
|
||||
urlpatterns += router.urls
|
||||
|
|
|
|||
|
|
@ -17,3 +17,371 @@ from . import serializers
|
|||
# return HttpResponse("Hello, %s!" % (request.user.username if request.user.is_authenticated else 'World'))
|
||||
|
||||
# --------------- FINE PREFISSO TEMPLATE ---------------
|
||||
|
||||
|
||||
class DestinatarioOfferta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.DestinatarioOfferta.objects.all()
|
||||
serializer_class = serializers.DestinatarioOffertaSerializer
|
||||
|
||||
|
||||
class GruppoOfferte_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.GruppoOfferte.objects.all()
|
||||
serializer_class = serializers.GruppoOfferteSerializer
|
||||
|
||||
|
||||
class Offerta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Offerta.objects.all()
|
||||
serializer_class = serializers.OffertaSerializer
|
||||
|
||||
|
||||
class AgenteOfferta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AgenteOfferta.objects.all()
|
||||
serializer_class = serializers.AgenteOffertaSerializer
|
||||
|
||||
|
||||
class ParteEconomicaOfferta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ParteEconomicaOfferta.objects.all()
|
||||
serializer_class = serializers.ParteEconomicaOffertaSerializer
|
||||
|
||||
|
||||
class Progetto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Progetto.objects.all()
|
||||
serializer_class = serializers.ProgettoSerializer
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaProgetto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ValorizzazioneEconomicaProgetto.objects.all()
|
||||
serializer_class = serializers.ValorizzazioneEconomicaProgettoSerializer
|
||||
|
||||
|
||||
class TipologiaOfferta_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipologiaOfferta.objects.all()
|
||||
serializer_class = serializers.TipologiaOffertaSerializer
|
||||
|
||||
|
||||
class Repository_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Repository.objects.all()
|
||||
serializer_class = serializers.RepositorySerializer
|
||||
|
||||
|
||||
class TipoRelazione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoRelazione.objects.all()
|
||||
serializer_class = serializers.TipoRelazioneSerializer
|
||||
|
||||
|
||||
class Attivita_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Attivita.objects.all()
|
||||
serializer_class = serializers.AttivitaSerializer
|
||||
|
||||
|
||||
class RisorsaChiave_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RisorsaChiave.objects.all()
|
||||
serializer_class = serializers.RisorsaChiaveSerializer
|
||||
|
||||
|
||||
class PropostaDiValore_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PropostaDiValore.objects.all()
|
||||
serializer_class = serializers.PropostaDiValoreSerializer
|
||||
|
||||
|
||||
class CanaleDiDistribuzione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CanaleDiDistribuzione.objects.all()
|
||||
serializer_class = serializers.CanaleDiDistribuzioneSerializer
|
||||
|
||||
|
||||
class SettoreDiMercato_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SettoreDiMercato.objects.all()
|
||||
serializer_class = serializers.SettoreDiMercatoSerializer
|
||||
|
||||
|
||||
class FlussoDiRicavi_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.FlussoDiRicavi.objects.all()
|
||||
serializer_class = serializers.FlussoDiRicaviSerializer
|
||||
|
||||
|
||||
class StrutturaDeiCosti_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.StrutturaDeiCosti.objects.all()
|
||||
serializer_class = serializers.StrutturaDeiCostiSerializer
|
||||
|
||||
|
||||
class SettoreAzienda_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SettoreAzienda.objects.all()
|
||||
serializer_class = serializers.SettoreAziendaSerializer
|
||||
|
||||
|
||||
class BMCModelloDiBusiness_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCModelloDiBusiness.objects.all()
|
||||
serializer_class = serializers.BMCModelloDiBusinessSerializer
|
||||
|
||||
|
||||
class BMCPartnerChiave_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCPartnerChiave.objects.all()
|
||||
serializer_class = serializers.BMCPartnerChiaveSerializer
|
||||
|
||||
|
||||
class RelazioneConAzienda_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RelazioneConAzienda.objects.all()
|
||||
serializer_class = serializers.RelazioneConAziendaSerializer
|
||||
|
||||
|
||||
class BMCSegmentiDiClientela_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCSegmentiDiClientela.objects.all()
|
||||
serializer_class = serializers.BMCSegmentiDiClientelaSerializer
|
||||
|
||||
|
||||
class BMCRelazioneConCliente_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCRelazioneConCliente.objects.all()
|
||||
serializer_class = serializers.BMCRelazioneConClienteSerializer
|
||||
|
||||
|
||||
class TipoAttivita_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.TipoAttivita.objects.all()
|
||||
serializer_class = serializers.TipoAttivitaSerializer
|
||||
|
||||
|
||||
class BMCAttivitaChiave_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCAttivitaChiave.objects.all()
|
||||
serializer_class = serializers.BMCAttivitaChiaveSerializer
|
||||
|
||||
|
||||
class ValoreDelProgetto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ValoreDelProgetto.objects.all()
|
||||
serializer_class = serializers.ValoreDelProgettoSerializer
|
||||
|
||||
|
||||
class BMCPropostaDiValore_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCPropostaDiValore.objects.all()
|
||||
serializer_class = serializers.BMCPropostaDiValoreSerializer
|
||||
|
||||
|
||||
class AttivitaDelProgetto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AttivitaDelProgetto.objects.all()
|
||||
serializer_class = serializers.AttivitaDelProgettoSerializer
|
||||
|
||||
|
||||
class AssetDelProgetto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AssetDelProgetto.objects.all()
|
||||
serializer_class = serializers.AssetDelProgettoSerializer
|
||||
|
||||
|
||||
class RisorsaPersonale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RisorsaPersonale.objects.all()
|
||||
serializer_class = serializers.RisorsaPersonaleSerializer
|
||||
|
||||
|
||||
class RisorsaFisica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RisorsaFisica.objects.all()
|
||||
serializer_class = serializers.RisorsaFisicaSerializer
|
||||
|
||||
|
||||
class RisorsaFinanziaria_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.RisorsaFinanziaria.objects.all()
|
||||
serializer_class = serializers.RisorsaFinanziariaSerializer
|
||||
|
||||
|
||||
class BMCRisorsaChiave_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCRisorsaChiave.objects.all()
|
||||
serializer_class = serializers.BMCRisorsaChiaveSerializer
|
||||
|
||||
|
||||
class ValoreDellAttivita_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ValoreDellAttivita.objects.all()
|
||||
serializer_class = serializers.ValoreDellAttivitaSerializer
|
||||
|
||||
|
||||
class ValorizzazioneEconomicaAttivita_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ValorizzazioneEconomicaAttivita.objects.all()
|
||||
serializer_class = serializers.ValorizzazioneEconomicaAttivitaSerializer
|
||||
|
||||
|
||||
class AssetDaAttivita_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.AssetDaAttivita.objects.all()
|
||||
serializer_class = serializers.AssetDaAttivitaSerializer
|
||||
|
||||
|
||||
class ArchivioFiles_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.ArchivioFiles.objects.all()
|
||||
serializer_class = serializers.ArchivioFilesSerializer
|
||||
|
||||
|
||||
class BMCFlussoDiRicavi_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCFlussoDiRicavi.objects.all()
|
||||
serializer_class = serializers.BMCFlussoDiRicaviSerializer
|
||||
|
||||
|
||||
class BMCCanaleDiDistribuzione_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.BMCCanaleDiDistribuzione.objects.all()
|
||||
serializer_class = serializers.BMCCanaleDiDistribuzioneSerializer
|
||||
|
||||
|
||||
class CanaleDistribuzioneIndiretto_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.CanaleDistribuzioneIndiretto.objects.all()
|
||||
serializer_class = serializers.CanaleDistribuzioneIndirettoSerializer
|
||||
|
||||
|
||||
class SoggettoFiscale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.SoggettoFiscale.objects.all()
|
||||
serializer_class = serializers.SoggettoFiscaleSerializer
|
||||
|
||||
|
||||
class IscrizioneAlboProfessionale_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.IscrizioneAlboProfessionale.objects.all()
|
||||
serializer_class = serializers.IscrizioneAlboProfessionaleSerializer
|
||||
|
||||
|
||||
class PersonaFisica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaFisica.objects.all()
|
||||
serializer_class = serializers.PersonaFisicaSerializer
|
||||
|
||||
|
||||
class PersonaGiuridica_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.PersonaGiuridica.objects.all()
|
||||
serializer_class = serializers.PersonaGiuridicaSerializer
|
||||
|
||||
|
||||
class Sede_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Sede.objects.all()
|
||||
serializer_class = serializers.SedeSerializer
|
||||
|
||||
|
||||
class Indirizzo_View(viewsets.ModelViewSet):
|
||||
# authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
|
||||
# permission_classes = [DjangoModelPermissions]
|
||||
|
||||
queryset = models.Indirizzo.objects.all()
|
||||
serializer_class = serializers.IndirizzoSerializer
|
||||
|
|
|
|||
|
|
@ -67,6 +67,10 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|||
# CSP_FRAME_ANCESTORS =
|
||||
tristate_env_flag('CSRF_COOKIE_SECURE')
|
||||
MYHOSTNAME = os.getenv('MYHOSTNAME','http://imposta-MYHOSTNAME-nell-env.briq.it')
|
||||
if not MYHOSTNAME.startswith('http'):
|
||||
if len(MYHOSTNAME.strip()) == 0:
|
||||
MYHOSTNAME = '127.0.0.1'
|
||||
MYHOSTNAME='http://'+MYHOSTNAME
|
||||
CSRF_TRUSTED_ORIGINS = list({x for x in (os.getenv('CSRF_TRUSTED_ORIGINS','').split(',')+[MYHOSTNAME]) if x})
|
||||
# DATABASE_ROUTERS =
|
||||
|
||||
|
|
@ -130,12 +134,16 @@ FIXTURE_DIRS = (
|
|||
# Application definition
|
||||
INSTALLED_APPS = [
|
||||
'sangue_app.apps.SangueAppConfig',
|
||||
'dati_geo_app.apps.DatiGeograficiAppConfig',
|
||||
'fattura_elettronica_app.apps.FatturaElettronicaAppConfig',
|
||||
'djaa_list_filter',
|
||||
'rest_framework',
|
||||
# 'rest_framework.authtoken',
|
||||
'corsheaders',
|
||||
'drf_yasg',
|
||||
'import_export',
|
||||
'ordered_model',
|
||||
'polymorphic',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
|
|
|
|||
Loading…
Reference in New Issue