diff --git a/django/business_model_canvas_app/__init__.py b/django/business_model_canvas_app/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/django/business_model_canvas_app/admin.py b/django/business_model_canvas_app/admin.py
new file mode 100644
index 0000000..928060e
--- /dev/null
+++ b/django/business_model_canvas_app/admin.py
@@ -0,0 +1,119 @@
+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.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.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.BMCAttivitaChiave)
+class BMCAttivitaChiaveAdmin(ImportExportModelAdmin):
+ # resource = resources.BMCAttivitaChiaveResource
+ # 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.BMCRisorsaChiave)
+class BMCRisorsaChiaveAdmin(ImportExportModelAdmin):
+ # resource = resources.BMCRisorsaChiaveResource
+ # 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
diff --git a/django/business_model_canvas_app/apps.py b/django/business_model_canvas_app/apps.py
new file mode 100644
index 0000000..971a0d5
--- /dev/null
+++ b/django/business_model_canvas_app/apps.py
@@ -0,0 +1,12 @@
+import pathlib
+
+from django.apps import AppConfig
+
+
+class BusinessModelCanvasAppConfig(AppConfig):
+ name = 'business_model_canvas_app'
+ verbose_name = 'Business Model Canvas'
+ path = pathlib.Path(__file__).parent
+
+ def ready(self):
+ from . import signals
diff --git a/django/business_model_canvas_app/consumers.py b/django/business_model_canvas_app/consumers.py
new file mode 100644
index 0000000..f11bdce
--- /dev/null
+++ b/django/business_model_canvas_app/consumers.py
@@ -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)
diff --git a/django/business_model_canvas_app/migrations/0001_initial.py b/django/business_model_canvas_app/migrations/0001_initial.py
new file mode 100644
index 0000000..4b19a5a
--- /dev/null
+++ b/django/business_model_canvas_app/migrations/0001_initial.py
@@ -0,0 +1,264 @@
+# Generated by Django 4.1.7 on 2023-05-12 22:46
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+ initial = True
+
+ dependencies = []
+
+ operations = [
+ migrations.CreateModel(
+ name="BMCModelloDiBusiness",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("descrizione", models.CharField(max_length=4096, null=True)),
+ ],
+ options={
+ "verbose_name": "bmcmodellodibusiness",
+ "verbose_name_plural": "bmcmodellodibusiness",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCSegmentiDiClientela",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("settore_cliente", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCSegmentiDiClientela_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcsegmentidiclientela",
+ "verbose_name_plural": "bmcsegmentidiclientela",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCRisorsaChiave",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("risorsa_chiave", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCRisorsaChiave_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcrisorsachiave",
+ "verbose_name_plural": "bmcrisorsachiave",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCRelazioneConCliente",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("relazione_cliente", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCRelazioneConCliente_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcrelazioneconcliente",
+ "verbose_name_plural": "bmcrelazioneconcliente",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCPropostaDiValore",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("proposta_di_valore", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCPropostaDiValore_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcpropostadivalore",
+ "verbose_name_plural": "bmcpropostadivalore",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCPartnerChiave",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("partnership_azienda", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCPartnerChiave_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcpartnerchiave",
+ "verbose_name_plural": "bmcpartnerchiave",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCFlussoDiRicavi",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("flusso_di_ricavi", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCFlussoDiRicavi_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcflussodiricavi",
+ "verbose_name_plural": "bmcflussodiricavi",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCCanaleDiDistribuzione",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("canale", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCCanaleDiDistribuzione_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmccanaledidistribuzione",
+ "verbose_name_plural": "bmccanaledidistribuzione",
+ },
+ ),
+ migrations.CreateModel(
+ name="BMCAttivitaChiave",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("attivita_chiave", models.IntegerField(blank=True, null=True)),
+ (
+ "modello_di_business",
+ models.ForeignKey(
+ blank=True,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="BMCAttivitaChiave_da_BMCModelloDiBusiness_modello_di_business",
+ to="business_model_canvas_app.bmcmodellodibusiness",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "bmcattivitachiave",
+ "verbose_name_plural": "bmcattivitachiave",
+ },
+ ),
+ ]
diff --git a/django/business_model_canvas_app/migrations/__init__.py b/django/business_model_canvas_app/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/django/business_model_canvas_app/modello_database.xml b/django/business_model_canvas_app/modello_database.xml
new file mode 100644
index 0000000..4e2f1cd
--- /dev/null
+++ b/django/business_model_canvas_app/modello_database.xml
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+INTEGER
+NULL
+
+VARCHAR(4096)
+NULL
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+INTEGER
+NULL
+
+
+id
+
+
+
diff --git a/django/business_model_canvas_app/models.py b/django/business_model_canvas_app/models.py
new file mode 100644
index 0000000..a9aa5a8
--- /dev/null
+++ b/django/business_model_canvas_app/models.py
@@ -0,0 +1,118 @@
+from django.db import models
+
+# --------------- FINE PREFISSO TEMPLATE ---------------
+
+
+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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCPartnerChiave_da_BMCModelloDiBusiness_modello_di_business")
+
+
+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.IntegerField(null=True, blank=True)
+ 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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCRelazioneConCliente_da_BMCModelloDiBusiness_modello_di_business")
+
+
+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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCAttivitaChiave_da_BMCModelloDiBusiness_modello_di_business")
+
+
+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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCPropostaDiValore_da_BMCModelloDiBusiness_modello_di_business")
+
+
+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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCRisorsaChiave_da_BMCModelloDiBusiness_modello_di_business")
+
+
+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.IntegerField(null=True, blank=True)
+ 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.IntegerField(null=True, blank=True)
+ modello_di_business = models.ForeignKey('BMCModelloDiBusiness', on_delete=models.CASCADE, null=True,
+ blank=True, related_name="BMCCanaleDiDistribuzione_da_BMCModelloDiBusiness_modello_di_business")
diff --git a/django/business_model_canvas_app/resources.py b/django/business_model_canvas_app/resources.py
new file mode 100644
index 0000000..8a51383
--- /dev/null
+++ b/django/business_model_canvas_app/resources.py
@@ -0,0 +1,49 @@
+from import_export import resources
+from . import models
+
+# --------------- FINE PREFISSO TEMPLATE ---------------
+
+
+class BMCModelloDiBusinessResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCModelloDiBusiness
+
+
+class BMCPartnerChiaveResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCPartnerChiave
+
+
+class BMCSegmentiDiClientelaResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCSegmentiDiClientela
+
+
+class BMCRelazioneConClienteResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCRelazioneConCliente
+
+
+class BMCAttivitaChiaveResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCAttivitaChiave
+
+
+class BMCPropostaDiValoreResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCPropostaDiValore
+
+
+class BMCRisorsaChiaveResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCRisorsaChiave
+
+
+class BMCFlussoDiRicaviResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCFlussoDiRicavi
+
+
+class BMCCanaleDiDistribuzioneResource(resources.ModelResource):
+ class Meta:
+ model = models.BMCCanaleDiDistribuzione
diff --git a/django/business_model_canvas_app/serializers.py b/django/business_model_canvas_app/serializers.py
new file mode 100644
index 0000000..ed15f1d
--- /dev/null
+++ b/django/business_model_canvas_app/serializers.py
@@ -0,0 +1,58 @@
+from rest_framework import serializers
+from . import models
+
+# --------------- FINE PREFISSO TEMPLATE ---------------
+
+
+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 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 BMCAttivitaChiaveSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = models.BMCAttivitaChiave
+ fields = ('attivita_chiave', 'modello_di_business')
+
+
+class BMCPropostaDiValoreSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = models.BMCPropostaDiValore
+ fields = ('proposta_di_valore', 'modello_di_business')
+
+
+class BMCRisorsaChiaveSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = models.BMCRisorsaChiave
+ fields = ('risorsa_chiave', 'modello_di_business')
+
+
+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')
diff --git a/django/business_model_canvas_app/signals.py b/django/business_model_canvas_app/signals.py
new file mode 100644
index 0000000..418cbb8
--- /dev/null
+++ b/django/business_model_canvas_app/signals.py
@@ -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
diff --git a/django/business_model_canvas_app/sqldes2django.py b/django/business_model_canvas_app/sqldes2django.py
new file mode 100755
index 0000000..89b438d
--- /dev/null
+++ b/django/business_model_canvas_app/sqldes2django.py
@@ -0,0 +1,480 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+sqldes2django.
+
+Usage:
+ sqldes2django.py write [--tgt-dir=] [--unmanaged=] [--models-file=] [--serializers-file=] [--views-file=] [--urls-file=] [--admin-file=] [--resources-file=] [--no-format] [--xml=]
+ sqldes2django.py (-h | --help)
+ sqldes2django.py (--version)
+
+
+Options:
+ --tgt-dir= Directory di output [default: .].
+ --xml= Directory di output [default: modello_database.xml].
+ --models-file= Nome del file dei modelli [default: /models.py].
+ --serializers-file= Nome del file dei serializers [default: /serializers.py].
+ --views-file= Nome del file delle views [default: /views.py].
+ --urls-file= Nome del file degli url [default: /urls.py].
+ --admin-file= Nome del file dell'admin [default: /admin.py].
+ --resources-file= Nome del file delle resources [default: /resources.py].
+ --no-format Non formattare l'output con autopep8.
+ --unmanaged= Crea modelli unmanaged (senza migrazioni): supporta pk e fk multiple, setta database=
+ --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("",
+ 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[^(]*)\((?P[^)]*)\)')
+ 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]))
diff --git a/django/business_model_canvas_app/tests.py b/django/business_model_canvas_app/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/django/business_model_canvas_app/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/django/business_model_canvas_app/urls.py b/django/business_model_canvas_app/urls.py
new file mode 100644
index 0000000..71eb5d9
--- /dev/null
+++ b/django/business_model_canvas_app/urls.py
@@ -0,0 +1,25 @@
+from rest_framework import routers
+from django.urls import include, path
+from . import views
+
+app_name = "business_model_canvas_app"
+
+urlpatterns = [
+ # path('', views.index, name='index'),
+]
+router = routers.DefaultRouter()
+
+# --------------- FINE PREFISSO TEMPLATE ---------------
+
+router.register(r'bmcmodellodibusiness', views.BMCModelloDiBusiness_View)
+router.register(r'bmcpartnerchiave', views.BMCPartnerChiave_View)
+router.register(r'bmcsegmentidiclientela', views.BMCSegmentiDiClientela_View)
+router.register(r'bmcrelazioneconcliente', views.BMCRelazioneConCliente_View)
+router.register(r'bmcattivitachiave', views.BMCAttivitaChiave_View)
+router.register(r'bmcpropostadivalore', views.BMCPropostaDiValore_View)
+router.register(r'bmcrisorsachiave', views.BMCRisorsaChiave_View)
+router.register(r'bmcflussodiricavi', views.BMCFlussoDiRicavi_View)
+router.register(r'bmccanaledidistribuzione',
+ views.BMCCanaleDiDistribuzione_View)
+
+urlpatterns += router.urls
diff --git a/django/business_model_canvas_app/views.py b/django/business_model_canvas_app/views.py
new file mode 100644
index 0000000..2a1f53e
--- /dev/null
+++ b/django/business_model_canvas_app/views.py
@@ -0,0 +1,91 @@
+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 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 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 BMCAttivitaChiave_View(viewsets.ModelViewSet):
+ # authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
+ # permission_classes = [DjangoModelPermissions]
+
+ queryset = models.BMCAttivitaChiave.objects.all()
+ serializer_class = serializers.BMCAttivitaChiaveSerializer
+
+
+class BMCPropostaDiValore_View(viewsets.ModelViewSet):
+ # authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
+ # permission_classes = [DjangoModelPermissions]
+
+ queryset = models.BMCPropostaDiValore.objects.all()
+ serializer_class = serializers.BMCPropostaDiValoreSerializer
+
+
+class BMCRisorsaChiave_View(viewsets.ModelViewSet):
+ # authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication]
+ # permission_classes = [DjangoModelPermissions]
+
+ queryset = models.BMCRisorsaChiave.objects.all()
+ serializer_class = serializers.BMCRisorsaChiaveSerializer
+
+
+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
diff --git a/django/sangue_app/admin.py b/django/sangue_app/admin.py
index 099f1ed..28daa66 100644
--- a/django/sangue_app/admin.py
+++ b/django/sangue_app/admin.py
@@ -200,24 +200,6 @@ class SettoreAziendaAdmin(ImportExportModelAdmin):
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
@@ -227,24 +209,6 @@ class RelazioneConAziendaAdmin(ImportExportModelAdmin):
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
@@ -254,15 +218,6 @@ class TipoAttivitaAdmin(ImportExportModelAdmin):
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
@@ -272,15 +227,6 @@ class ValoreDelProgettoAdmin(ImportExportModelAdmin):
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
@@ -326,15 +272,6 @@ class RisorsaFinanziariaAdmin(ImportExportModelAdmin):
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
@@ -371,24 +308,6 @@ class ArchivioFilesAdmin(ImportExportModelAdmin):
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
diff --git a/django/sangue_app/migrations/0002_remove_bmccanaledidistribuzione_canale_and_more.py b/django/sangue_app/migrations/0002_remove_bmccanaledidistribuzione_canale_and_more.py
new file mode 100644
index 0000000..b38ee39
--- /dev/null
+++ b/django/sangue_app/migrations/0002_remove_bmccanaledidistribuzione_canale_and_more.py
@@ -0,0 +1,95 @@
+# Generated by Django 4.1.7 on 2023-05-12 22:46
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("sangue_app", "0001_initial"),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name="bmccanaledidistribuzione",
+ name="canale",
+ ),
+ migrations.RemoveField(
+ model_name="bmccanaledidistribuzione",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcflussodiricavi",
+ name="flusso_di_ricavi",
+ ),
+ migrations.RemoveField(
+ model_name="bmcflussodiricavi",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcpartnerchiave",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcpartnerchiave",
+ name="partnership_azienda",
+ ),
+ migrations.RemoveField(
+ model_name="bmcpropostadivalore",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcpropostadivalore",
+ name="proposta_di_valore",
+ ),
+ migrations.RemoveField(
+ model_name="bmcrelazioneconcliente",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcrelazioneconcliente",
+ name="relazione_cliente",
+ ),
+ migrations.RemoveField(
+ model_name="bmcrisorsachiave",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcrisorsachiave",
+ name="risorsa_chiave",
+ ),
+ migrations.RemoveField(
+ model_name="bmcsegmentidiclientela",
+ name="modello_di_business",
+ ),
+ migrations.RemoveField(
+ model_name="bmcsegmentidiclientela",
+ name="settore_cliente",
+ ),
+ migrations.DeleteModel(
+ name="BMCAttivitaChiave",
+ ),
+ migrations.DeleteModel(
+ name="BMCCanaleDiDistribuzione",
+ ),
+ migrations.DeleteModel(
+ name="BMCFlussoDiRicavi",
+ ),
+ migrations.DeleteModel(
+ name="BMCModelloDiBusiness",
+ ),
+ migrations.DeleteModel(
+ name="BMCPartnerChiave",
+ ),
+ migrations.DeleteModel(
+ name="BMCPropostaDiValore",
+ ),
+ migrations.DeleteModel(
+ name="BMCRelazioneConCliente",
+ ),
+ migrations.DeleteModel(
+ name="BMCRisorsaChiave",
+ ),
+ migrations.DeleteModel(
+ name="BMCSegmentiDiClientela",
+ ),
+ ]
diff --git a/django/sangue_app/models.py b/django/sangue_app/models.py
index a23343b..17bbb7c 100644
--- a/django/sangue_app/models.py
+++ b/django/sangue_app/models.py
@@ -275,31 +275,6 @@ class SettoreAzienda(models.Model):
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'
@@ -316,34 +291,6 @@ class RelazioneConAzienda(models.Model):
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'
@@ -355,20 +302,6 @@ class TipoAttivita(models.Model):
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'
@@ -383,20 +316,6 @@ class ValoreDelProgetto(models.Model):
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'
@@ -458,20 +377,6 @@ class RisorsaFinanziaria(models.Model):
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'
@@ -526,34 +431,6 @@ class ArchivioFiles(models.Model):
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'
diff --git a/django/sangue_app/resources.py b/django/sangue_app/resources.py
index b6755f4..8b57153 100644
--- a/django/sangue_app/resources.py
+++ b/django/sangue_app/resources.py
@@ -94,51 +94,21 @@ class SettoreAziendaResource(resources.ModelResource):
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
@@ -164,11 +134,6 @@ class RisorsaFinanziariaResource(resources.ModelResource):
model = models.RisorsaFinanziaria
-class BMCRisorsaChiaveResource(resources.ModelResource):
- class Meta:
- model = models.BMCRisorsaChiave
-
-
class ValoreDellAttivitaResource(resources.ModelResource):
class Meta:
model = models.ValoreDellAttivita
@@ -189,16 +154,6 @@ class ArchivioFilesResource(resources.ModelResource):
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
diff --git a/django/sangue_app/serializers.py b/django/sangue_app/serializers.py
index 0ef0a5a..93b10f0 100644
--- a/django/sangue_app/serializers.py
+++ b/django/sangue_app/serializers.py
@@ -114,60 +114,24 @@ class SettoreAziendaSerializer(serializers.ModelSerializer):
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
@@ -198,12 +162,6 @@ class RisorsaFinanziariaSerializer(serializers.ModelSerializer):
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
@@ -228,18 +186,6 @@ class ArchivioFilesSerializer(serializers.ModelSerializer):
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
diff --git a/django/sangue_app/urls.py b/django/sangue_app/urls.py
index 8ce3599..cd03e3e 100644
--- a/django/sangue_app/urls.py
+++ b/django/sangue_app/urls.py
@@ -30,29 +30,19 @@ 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)
diff --git a/django/sangue_app/views.py b/django/sangue_app/views.py
index 27eb9d4..790f3b3 100644
--- a/django/sangue_app/views.py
+++ b/django/sangue_app/views.py
@@ -163,22 +163,6 @@ class SettoreAzienda_View(viewsets.ModelViewSet):
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]
@@ -187,22 +171,6 @@ class RelazioneConAzienda_View(viewsets.ModelViewSet):
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]
@@ -211,14 +179,6 @@ class TipoAttivita_View(viewsets.ModelViewSet):
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]
@@ -227,14 +187,6 @@ class ValoreDelProgetto_View(viewsets.ModelViewSet):
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]
@@ -275,14 +227,6 @@ class RisorsaFinanziaria_View(viewsets.ModelViewSet):
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]
@@ -315,22 +259,6 @@ class ArchivioFiles_View(viewsets.ModelViewSet):
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]
diff --git a/django/sangue_django/settings.py b/django/sangue_django/settings.py
index 0e588e1..18c883c 100644
--- a/django/sangue_django/settings.py
+++ b/django/sangue_django/settings.py
@@ -134,9 +134,10 @@ FIXTURE_DIRS = (
# Application definition
INSTALLED_APPS = [
'sangue_app.apps.SangueAppConfig',
- 'dati_geo_app.apps.DatiGeograficiAppConfig',
+ 'business_model_canvas_app.apps.BusinessModelCanvasAppConfig',
'fattura_elettronica_app.apps.FatturaElettronicaAppConfig',
'contatti_app.apps.ContattiAppConfig',
+ 'dati_geo_app.apps.DatiGeograficiAppConfig',
'djaa_list_filter',
'rest_framework',
# 'rest_framework.authtoken',