parecchia roba da aggiustare

my-submodulepoetico
Guido Longoni 2023-05-12 19:44:08 +02:00
parent 80a4b62b40
commit 6858c52042
56 changed files with 211807 additions and 1235 deletions

View File

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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 &amp; 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>

View File

@ -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})"

View File

@ -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

View File

@ -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 = ('')

View File

@ -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

View File

@ -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]))

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -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

View File

@ -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

View File

View File

@ -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',)

View File

@ -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'

View File

@ -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

View File

@ -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')},
},
),
]

View File

@ -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)
]

View File

@ -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',
},
),
]

View File

@ -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)
]

View File

@ -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'),
),
]

View File

@ -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)

View File

@ -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 %}

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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})"

View File

@ -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

View File

@ -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')

View File

@ -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

View File

@ -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]))

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -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

View File

@ -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

79
django/poetry.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -35,5 +35,418 @@ from . import resources
# def has_delete_permission(self, request, obj=None):
# return False
# --------------- FINE PREFISSO TEMPLATE ---------------
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
# --------------- FINE PREFISSO TEMPLATE ---------------
@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

View File

@ -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.')
# --------------- FINE PREFISSO TEMPLATE ---------------
class DestinatarioOfferta(models.Model):
class Meta:
verbose_name = 'destinatarioofferta'
verbose_name_plural = 'destinatarioofferta'
def __str__(self):
return f"DestinatarioOfferta (id: {self.id})"
destinazione = models.ForeignKey('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)

View File

@ -1,5 +1,234 @@
from import_export import resources
from . import models
# --------------- FINE PREFISSO TEMPLATE ---------------
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
# --------------- FINE PREFISSO TEMPLATE ---------------
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

View File

@ -1,5 +1,284 @@
from rest_framework import serializers
from . import models
# --------------- FINE PREFISSO TEMPLATE ---------------
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
# --------------- FINE PREFISSO TEMPLATE ---------------
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')

View File

@ -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 +-+')

View File

@ -5,9 +5,62 @@ from . import views
app_name = "sangue_app"
urlpatterns = [
# path('', views.index, name='index'),
# path('', views.index, name='index'),
]
router = routers.DefaultRouter()
# --------------- FINE PREFISSO TEMPLATE ---------------
raise Exception('Fai girare sqldes2django oppure elimina questa eccezione.')
# --------------- FINE PREFISSO TEMPLATE ---------------
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

View File

@ -16,4 +16,372 @@ from . import serializers
# def index(request):
# return HttpResponse("Hello, %s!" % (request.user.username if request.user.is_authenticated else 'World'))
# --------------- FINE PREFISSO TEMPLATE ---------------
# --------------- 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

View File

@ -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',