arturrro

model + view

May 5th, 2020
638
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.27 KB | None | 0 0
  1. # model.py
  2.  
  3. """Moduł zawierający modle reprezentujące Słowniki."""
  4.  
  5. from django.db import models
  6. from django.db.models import Q
  7.  
  8.  
  9. class Dictionary(models.Model):
  10.     """Model przechowujący wykaz Słowników zamkniętych/otwartych."""
  11.  
  12.     name = models.CharField('nazwa', max_length=1024)
  13.     indication = models.CharField('oznaczenie', max_length=32, unique=True)
  14.  
  15.     def __str__(self):
  16.         return f'{self.name} ({self.indication})'
  17.  
  18.     class Meta:
  19.         verbose_name = 'słownik'
  20.         verbose_name_plural = 'słowniki'
  21.  
  22.  
  23. class ExtendedDictionaryItemValidityPeriodManager(models.Manager):
  24.     """Menadżer zawierający dodatkowe metody ułatwiające operowanie na wartościach Słowników."""
  25.  
  26.     def available_at(self, time_point):
  27.         """Zwraca wartości dostepne w określonym punkcie czasu.
  28.  
  29.        :param time_point: punkt czasowy
  30.        :type time_point: datetime.datetime
  31.        :rtype: django.db.models.query.QuerySet
  32.        """
  33.         return self.get_queryset().filter(
  34.             Q(entry_date__lte=time_point) & (Q(cancellation_date__gt=time_point) | Q(cancellation_date__isnull=True))
  35.         )
  36.  
  37.  
  38. class CurrentDictionaryItemManager(models.Manager):
  39.     """Menadżer zwracający aktualne wartości Słownika."""
  40.  
  41.     def get_queryset(self):
  42.         return super().get_queryset().filter(cancellation_date__isnull=True)
  43.  
  44.  
  45. class DictionaryItemValidityPeriod(models.Model):
  46.     """Model abstrakcyjny określający okres obowiązywania wartości Słownika."""
  47.  
  48.     entry_date = models.DateTimeField('data obowiązywania - od', auto_now_add=True)
  49.     cancellation_date = models.DateTimeField('data obowiązywania - do', null=True, blank=True)
  50.  
  51.     objects = ExtendedDictionaryItemValidityPeriodManager()
  52.     current = CurrentDictionaryItemManager()
  53.  
  54.     class Meta:
  55.         abstract = True
  56.  
  57.  
  58. class ClosedDictionaryItem(DictionaryItemValidityPeriod):
  59.     """Model przechowujący wartości ze Słowników zamkniętych."""
  60.  
  61.     dictionary = models.ForeignKey(Dictionary, on_delete=models.CASCADE)
  62.     value = models.TextField('wartość')
  63.  
  64.     def __str__(self):
  65.         return f'{self.dictionary.name} - {self.value}'
  66.  
  67.     class Meta:
  68.         verbose_name = 'wartość słownika zamkniętego'
  69.         verbose_name_plural = 'wartości słowników zamkniętych'
  70.  
  71.  
  72. class ExtendedOpenDictionaryItemManager(models.Manager):
  73.     """Menadżer zawierający dodatkowe metody ułatwiające operowanie na wartościach Słowników otwartych."""
  74.  
  75.     def available_at(self, time_point):
  76.         """Zwraca wartości dostepne w określonym punkcie czasu.
  77.  
  78.        :param time_point: punkt czasowy
  79.        :type time_point: datetime.datetime
  80.        :rtype: django.db.models.query.QuerySet
  81.        """
  82.         return self.get_queryset().filter(
  83.             Q(rejected=False) & Q(entry_date__lte=time_point) & (Q(cancellation_date__gt=time_point) | Q(cancellation_date__isnull=True))
  84.         )
  85.  
  86.  
  87. class CurrentOpenDictionaryItemManager(models.Manager):
  88.     """Menadżer zwracający aktualne wartości Słownika otwartego."""
  89.  
  90.     def get_queryset(self):
  91.         return super().get_queryset().filter(entry_date__isnull=False, cancellation_date__isnull=True, rejected=False)
  92.  
  93.  
  94. class OpenDictionaryItem(models.Model):
  95.     """Model przechowujący wartości ze słowników otwartych."""
  96.  
  97.     dictionary = models.ForeignKey(Dictionary, on_delete=models.CASCADE)
  98.     value = models.TextField('wartość')
  99.     entry_date = models.DateTimeField('data obowiązywania - od', null=True, blank=True)
  100.     cancellation_date = models.DateTimeField('data obowiązywania - do', null=True, blank=True)
  101.     rejected = models.BooleanField('odrzucony')
  102.  
  103.     objects = ExtendedOpenDictionaryItemManager()
  104.     current = CurrentOpenDictionaryItemManager()
  105.  
  106.     def __str__(self):
  107.         return f'{self.dictionary.name} - {self.value}'
  108.  
  109.     class Meta:
  110.         verbose_name = 'wartość słownika otwartego'
  111.         verbose_name_plural = 'wartości słowników otwartych'
  112.  
  113.  
  114. class ProjectEntity(DictionaryItemValidityPeriod):
  115.     """Model słownika Podmiotów Projektu."""
  116.  
  117.     name = models.CharField('nazwa jednostki', max_length=1024)
  118.     institutional_role = models.CharField('rola instytucjonalna w projekcie', max_length=256)
  119.     street = models.CharField('ulica', max_length=256)
  120.     house_no = models.CharField('numer lokalu', max_length=64)
  121.     postal_code = models.CharField('kod pocztowy', max_length=6)
  122.     post_office = models.CharField('miejscowość poczty', max_length=256)
  123.     phone_no = models.CharField('numer telefonu', max_length=10)
  124.     e_mail = models.EmailField()
  125.     esp = models.CharField(verbose_name='ESP', max_length=255)
  126.     preferred_communication_channel = models.CharField('preferowany dla instytucji kanał komunikacji', max_length=6)
  127.  
  128.     class Meta:
  129.         verbose_name = 'podmiot projektu'
  130.         verbose_name_plural = 'podmioty projektu'
  131.  
  132.  
  133. class ProjectTeamMember(DictionaryItemValidityPeriod):
  134.     """Model słownika Zespołu projektu."""
  135.  
  136.     last_name = models.CharField('nazwisko', max_length=128)
  137.     first_name = models.CharField('imię', max_length=128)
  138.     role = models.CharField('rola osobowa w projekcie', max_length=128)
  139.     unit_name = models.CharField('nazwa jednostki', max_length=256)
  140.     office_department = models.CharField('biuro/departament', max_length=256)
  141.     function = models.CharField('funkcja w jednostce', max_length=256)
  142.     phone_no = models.CharField('numer telefonu', max_length=10)
  143.     e_mail = models.EmailField()
  144.     esp = models.CharField('ESP', max_length=255)
  145.     preferred_communication_channel = models.CharField('preferowany dla instytucji kanał komunikacji', max_length=6)
  146.  
  147.     class Meta:
  148.         verbose_name = 'członek zespołu projektu'
  149.         verbose_name_plural = 'członkowie zespołu projektu'
  150.  
  151.  
  152. class WalletProgram(DictionaryItemValidityPeriod):
  153.     """Model słownika Portfele/programy."""
  154.  
  155.     short_name = models.CharField('skrócona nazwa portfela PRM/portfela/programu', max_length=32)
  156.     full_name = models.CharField('pełna nazwa portfela PRM/portfela/programu', max_length=128)
  157.  
  158.     class Meta:
  159.         verbose_name = 'portfel/program'
  160.         verbose_name_plural = 'portfele/programy'
  161.  
  162.  
  163. class WalletProgramEntity(DictionaryItemValidityPeriod):
  164.     """Model słownika Podmioty portfela/programu."""
  165.  
  166.     institutional_role = models.CharField('rola instytucjonalna w portfelu PRM/portfelu/programie', max_length=128)
  167.     unit_name = models.CharField('nazwa jednostki', max_length=256)
  168.     street = models.CharField('ulica', max_length=256)
  169.     house_no = models.CharField('numer lokalu', max_length=64)
  170.     postal_code = models.CharField('kod pocztowy', max_length=6)
  171.     post_office = models.CharField('miejscowość poczty', max_length=256)
  172.     phone_no = models.CharField('numer telefonu', max_length=10)
  173.     e_mail = models.EmailField()
  174.     esp = models.CharField(verbose_name='ESP', max_length=255)
  175.     preferred_communication_channel = models.CharField('preferowany dla instytucji kanał komunikacji', max_length=6)
  176.  
  177.     class Meta:
  178.         verbose_name = 'podmiot portfela/programu'
  179.         verbose_name_plural = 'podmioty portfela/programu'
  180.  
  181.  
  182. class WalletProgramTeamMember(DictionaryItemValidityPeriod):
  183.     """Model słownika Zespołu portfela/programu."""
  184.  
  185.     role = models.CharField('rola osobowa w portfelu PRM/ portfelu/programie', max_length=128)
  186.     last_name = models.CharField('nazwisko', max_length=128)
  187.     first_name = models.CharField('imię', max_length=128)
  188.     unit_name = models.CharField('nazwa jednostki', max_length=128)
  189.     office_department = models.CharField('biuro/departament', max_length=256)
  190.     function = models.CharField('funkcja w jednostce', max_length=256)
  191.     phone_no = models.CharField('numer telefonu', max_length=10)
  192.     e_mail = models.EmailField()
  193.     esp = models.CharField(verbose_name='ESP', max_length=256)
  194.     preferred_communication_channel = models.CharField('preferowany dla instytucji kanał komunikacji', max_length=6)
  195.  
  196.     class Meta:
  197.         verbose_name = 'członek zespołu portfela/programu'
  198.         verbose_name_plural = 'członkowie zespołu portfela/programu'
  199.  
  200.  
  201. class SRDProject(DictionaryItemValidityPeriod):
  202.     """Model słowników Projekty SOR."""
  203.  
  204.     name = models.CharField('nazwa projektu SOR', max_length=256)
  205.     kind = models.CharField('typ projektu SOR', max_length=16)
  206.  
  207.     class Meta:
  208.         verbose_name = 'projekt SOR'
  209.         verbose_name_plural = 'projekty SOR'
  210.  
  211.  
  212. class StrategieAndStrategicProgram(DictionaryItemValidityPeriod):
  213.     """Model słownika Strategie i programy strategiczne."""
  214.  
  215.     name = models.CharField('nazwa strategii/programu', max_length=64)
  216.     purpose = models.CharField('cel szczegółowy strategii/programu', max_length=64)
  217.     area = models.CharField('obszar strategii', max_length=64)
  218.  
  219.     class Meta:
  220.         verbose_name = 'strategia i program strategiczny'
  221.         verbose_name_plural = 'strategie i programy strategiczne'
  222.  
  223.  
  224. class OperationalProgram(DictionaryItemValidityPeriod):
  225.     """Model słownika Programy operacyjne."""
  226.  
  227.     activities = models.CharField('działania/Poddziałania Programu Operacyjnego', max_length=1024)
  228.     po = models.CharField('PO', max_length=8)
  229.     priority_axis = models.CharField('oś priorytetowa', max_length=64)
  230.     activity = models.CharField('działanie', max_length=256)
  231.     sub_activity = models.CharField('poddziałanie', max_length=64, blank=True)
  232.  
  233.     class Meta:
  234.         verbose_name = 'program operacyjny'
  235.         verbose_name_plural = 'programy operacyjne'
  236.  
  237.  
  238. class BudgetPart(DictionaryItemValidityPeriod):
  239.     """Model słownika Części budżetowe."""
  240.  
  241.     part = models.CharField('część budżetowa', max_length=256)
  242.     number = models.CharField('numer części budżetowej', max_length=5)
  243.     name = models.CharField('nazwa części budżetowej', max_length=256)
  244.  
  245.     class Meta:
  246.         verbose_name = 'część budżetowa'
  247.         verbose_name_plural = 'części budżetowe'
  248.  
  249.  
  250. class Risk(DictionaryItemValidityPeriod):
  251.     """Model słownika Ryzyka."""
  252.  
  253.     name = models.CharField('nazwa ryzyka', max_length=256)
  254.     category = models.CharField('kategoria ryzyka', max_length=128)
  255.  
  256.     class Meta:
  257.         verbose_name = 'ryzyko'
  258.         verbose_name_plural = 'ryzyka'
  259.  
  260.  
  261. class ProjectOpinion(DictionaryItemValidityPeriod):
  262.     """Model słownika Opiniowanie projektów."""
  263.  
  264.     project_name = models.CharField('nazwa projektu', max_length=256)
  265.     wallet_program_name_abbreviation = models.CharField('skrócona nazwa portfela/programu', max_length=64)
  266.     reviewing_path = models.CharField('ścieżka opiniowania projektu', max_length=128)
  267.     report_opinion = models.CharField('opiniowane raporty formularzowe/zestawy danych', max_length=128)
  268.     phase = models.CharField('faza opiniowania', max_length=128)
  269.     presentation_date = models.DateField('data prezentowania danych opiniowanego projektu')
  270.     recipients = models.CharField('lista adresatów', max_length=128)
  271.  
  272.     class Meta:
  273.         verbose_name = 'opiniowanie projektu'
  274.         verbose_name_plural = 'opiniowanie projektów'
  275.  
  276.  
  277. # views.py
  278.  
  279. class DictionaryListView(LoginRequiredMixin, ListView):
  280.     """Widok listy słowników"""
  281.  
  282.     model = Dictionary
  283.     template_name = 'administration/dictionaries/list.html'
  284.     ordering = []
Add Comment
Please, Sign In to add comment