We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Cargo de Comissão - permite atribuir cargo indicado como único para mais de um membro
Não deve permitir atribuir o mesmo cargo assinalado como único para mais de um membro da comissão. O cargo deve estar vago.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `sapl/comissoes/forms.py`
Content:
```
1 from django import forms
2 from django.contrib.contenttypes.models import ContentType
3 from django.core.exceptions import ValidationError
4 from django.db import transaction
5 from django.db.models import Q
6 from django.forms import ModelForm
7 from django.utils.translation import ugettext_lazy as _
8 
9 from sapl.base.models import Autor, TipoAutor
10 from sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio,
11                                    Participacao, Reuniao)
12 from sapl.parlamentares.models import Legislatura, Mandato, Parlamentar
13 
14 
15 class ParticipacaoCreateForm(forms.ModelForm):
16 
17     parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())
18 
19     class Meta:
20         model = Participacao
21         exclude = ['composicao']
22 
23     def __init__(self, user=None, **kwargs):
24         super(ParticipacaoCreateForm, self).__init__(**kwargs)
25 
26         if self.instance:
27             comissao = kwargs['initial']
28             comissao_pk = int(comissao['parent_pk'])
29             composicao = Composicao.objects.get(id=comissao_pk)
30             participantes = composicao.participacao_set.all()
31             id_part = [p.parlamentar.id for p in participantes]
32         else:
33             id_part = []
34 
35         qs = self.create_participacao()
36 
37         parlamentares = Mandato.objects.filter(qs,
38                                                parlamentar__ativo=True
39                                                ).prefetch_related('parlamentar').\
40             values_list('parlamentar',
41                         flat=True).distinct()
42 
43         qs = Parlamentar.objects.filter(id__in=parlamentares).distinct().\
44             exclude(id__in=id_part)
45         eligible = self.verifica()
46         result = list(set(qs) & set(eligible))
47         if not cmp(result, eligible):  # se igual a 0 significa que o qs e o eli são iguais!
48             self.fields['parlamentar'].queryset = qs
49         else:
50             ids = [e.id for e in eligible]
51             qs = Parlamentar.objects.filter(id__in=ids)
52             self.fields['parlamentar'].queryset = qs
53 
54     def create_participacao(self):
55         composicao = Composicao.objects.get(id=self.initial['parent_pk'])
56         data_inicio_comissao = composicao.periodo.data_inicio
57         data_fim_comissao = composicao.periodo.data_fim
58         q1 = Q(data_fim_mandato__isnull=False,
59                data_fim_mandato__gte=data_inicio_comissao)
60         q2 = Q(data_inicio_mandato__gte=data_inicio_comissao) \
61             & Q(data_inicio_mandato__lte=data_fim_comissao)
62         q3 = Q(data_fim_mandato__isnull=True,
63                data_inicio_mandato__lte=data_inicio_comissao)
64         qs = q1 | q2 | q3
65         return qs
66 
67     def verifica(self):
68         composicao = Composicao.objects.get(id=self.initial['parent_pk'])
69         participantes = composicao.participacao_set.all()
70         participantes_id = [p.parlamentar.id for p in participantes]
71         parlamentares = Parlamentar.objects.all().exclude(
72             id__in=participantes_id).order_by('nome_completo')
73         parlamentares = [p for p in parlamentares if p.ativo]
74 
75         lista = []
76 
77         for p in parlamentares:
78             mandatos = p.mandato_set.all()
79             for m in mandatos:
80                 data_inicio = m.data_inicio_mandato
81                 data_fim = m.data_fim_mandato
82                 comp_data_inicio = composicao.periodo.data_inicio
83                 comp_data_fim = composicao.periodo.data_fim
84                 if (data_fim and data_fim >= comp_data_inicio)\
85                         or (data_inicio >= comp_data_inicio and data_inicio <= comp_data_fim)\
86                         or (data_fim is None and data_inicio <= comp_data_inicio):
87                     lista.append(p)
88 
89         lista = list(set(lista))
90 
91         return lista
92 
93 
94 class ParticipacaoEditForm(forms.ModelForm):
95 
96     parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())
97     nome_parlamentar = forms.CharField(required=False, label='Parlamentar')
98 
99     class Meta:
100         model = Participacao
101         fields = ['nome_parlamentar', 'parlamentar', 'cargo', 'titular',
102                   'data_designacao', 'data_desligamento',
103                   'motivo_desligamento', 'observacao']
104         widgets = {
105             'parlamentar': forms.HiddenInput(),
106         }
107 
108     def __init__(self, user=None, **kwargs):
109         super(ParticipacaoEditForm, self).__init__(**kwargs)
110         self.initial['nome_parlamentar'] = Parlamentar.objects.get(
111             id=self.initial['parlamentar']).nome_parlamentar
112         self.fields['nome_parlamentar'].widget.attrs['disabled'] = 'disabled'
113 
114 
115 class ComissaoForm(forms.ModelForm):
116 
117     class Meta:
118         model = Comissao
119         fields = '__all__'
120 
121     def clean(self):
122         super(ComissaoForm, self).clean()
123 
124         if not self.is_valid():
125             return self.cleaned_data
126 
127         if self.cleaned_data['data_extincao']:
128             if (self.cleaned_data['data_extincao'] <
129                     self.cleaned_data['data_criacao']):
130                 msg = _('Data de extinção não pode ser menor que a de criação')
131                 raise ValidationError(msg)
132         return self.cleaned_data
133 
134     @transaction.atomic
135     def save(self, commit=True):
136         comissao = super(ComissaoForm, self).save(commit)
137         content_type = ContentType.objects.get_for_model(Comissao)
138         object_id = comissao.pk
139         tipo = TipoAutor.objects.get(descricao__icontains='Comiss')
140         nome = comissao.sigla + ' - ' + comissao.nome
141         Autor.objects.create(
142             content_type=content_type,
143             object_id=object_id,
144             tipo=tipo,
145             nome=nome
146         )
147         return comissao
148 
149 
150 class ReuniaoForm(ModelForm):
151 
152     comissao = forms.ModelChoiceField(queryset=Comissao.objects.all(),
153                                       widget=forms.HiddenInput())
154 
155     class Meta:
156         model = Reuniao
157         exclude = ['cod_andamento_reuniao']
158 
159     def clean(self):
160         super(ReuniaoForm, self).clean()
161 
162         if not self.is_valid():
163             return self.cleaned_data
164 
165         if self.cleaned_data['hora_fim']:
166             if (self.cleaned_data['hora_fim'] <
167                     self.cleaned_data['hora_inicio']):
168                 msg = _('A hora de término da reunião não pode ser menor que a de início')
169                 raise ValidationError(msg)
170         return self.cleaned_data
171 
172 class DocumentoAcessorioCreateForm(forms.ModelForm):
173 
174     parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())
175 
176     class Meta:
177         model = DocumentoAcessorio
178         exclude = ['reuniao']
179 
180     def __init__(self, user=None, **kwargs):
181         super(DocumentoAcessorioCreateForm, self).__init__(**kwargs)
182 
183         if self.instance:
184             reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])
185             comissao = reuniao.comissao
186             comissao_pk = comissao.id
187             documentos = reuniao.documentoacessorio_set.all()
188             return self.create_documentoacessorio()
189 
190 
191     def create_documentoacessorio(self):
192         reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])
193 
194 
195 class DocumentoAcessorioEditForm(forms.ModelForm):
196 
197     parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())
198 
199     class Meta:
200         model = DocumentoAcessorio
201         fields = ['nome', 'data', 'autor', 'ementa',
202                   'indexacao', 'arquivo']
203 
204     def __init__(self, user=None, **kwargs):
205         super(DocumentoAcessorioEditForm, self).__init__(**kwargs)
206 
207
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py
--- a/sapl/comissoes/forms.py
+++ b/sapl/comissoes/forms.py
@@ -18,6 +18,7 @@
 
     class Meta:
         model = Participacao
+        fields = '__all__'
         exclude = ['composicao']
 
     def __init__(self, user=None, **kwargs):
@@ -51,6 +52,21 @@
             qs = Parlamentar.objects.filter(id__in=ids)
             self.fields['parlamentar'].queryset = qs
 
+
+    def clean(self):
+        cleaned_data = super(ParticipacaoCreateForm, self).clean()
+
+        if not self.is_valid():
+            return cleaned_data
+
+        composicao = Composicao.objects.get(id=self.initial['parent_pk'])
+        cargos_unicos = [c.cargo.nome for c in composicao.participacao_set.filter(cargo__unico=True)]
+
+        if cleaned_data['cargo'].nome in cargos_unicos:
+            msg = _('Este cargo é único para esta Comissão.')
+            raise ValidationError(msg)
+
+
     def create_participacao(self):
         composicao = Composicao.objects.get(id=self.initial['parent_pk'])
         data_inicio_comissao = composicao.periodo.data_inicio

{"golden_diff": "diff --git a/sapl/comissoes/forms.py b/sapl/comissoes/forms.py\n--- a/sapl/comissoes/forms.py\n+++ b/sapl/comissoes/forms.py\n@@ -18,6 +18,7 @@\n \n     class Meta:\n         model = Participacao\n+        fields = '__all__'\n         exclude = ['composicao']\n \n     def __init__(self, user=None, **kwargs):\n@@ -51,6 +52,21 @@\n             qs = Parlamentar.objects.filter(id__in=ids)\n             self.fields['parlamentar'].queryset = qs\n \n+\n+    def clean(self):\n+        cleaned_data = super(ParticipacaoCreateForm, self).clean()\n+\n+        if not self.is_valid():\n+            return cleaned_data\n+\n+        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n+        cargos_unicos = [c.cargo.nome for c in composicao.participacao_set.filter(cargo__unico=True)]\n+\n+        if cleaned_data['cargo'].nome in cargos_unicos:\n+            msg = _('Este cargo \u00e9 \u00fanico para esta Comiss\u00e3o.')\n+            raise ValidationError(msg)\n+\n+\n     def create_participacao(self):\n         composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n         data_inicio_comissao = composicao.periodo.data_inicio\n", "issue": "Cargo de Comiss\u00e3o - permite atribuir cargo indicado como \u00fanico para mais de um membro\nN\u00e3o deve permitir atribuir o mesmo cargo assinalado como \u00fanico para mais de um membro da comiss\u00e3o. O cargo deve estar vago.\n", "before_files": [{"content": "from django import forms\nfrom django.contrib.contenttypes.models import ContentType\nfrom django.core.exceptions import ValidationError\nfrom django.db import transaction\nfrom django.db.models import Q\nfrom django.forms import ModelForm\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom sapl.base.models import Autor, TipoAutor\nfrom sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio,\n                                   Participacao, Reuniao)\nfrom sapl.parlamentares.models import Legislatura, Mandato, Parlamentar\n\n\nclass ParticipacaoCreateForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = Participacao\n        exclude = ['composicao']\n\n    def __init__(self, user=None, **kwargs):\n        super(ParticipacaoCreateForm, self).__init__(**kwargs)\n\n        if self.instance:\n            comissao = kwargs['initial']\n            comissao_pk = int(comissao['parent_pk'])\n            composicao = Composicao.objects.get(id=comissao_pk)\n            participantes = composicao.participacao_set.all()\n            id_part = [p.parlamentar.id for p in participantes]\n        else:\n            id_part = []\n\n        qs = self.create_participacao()\n\n        parlamentares = Mandato.objects.filter(qs,\n                                               parlamentar__ativo=True\n                                               ).prefetch_related('parlamentar').\\\n            values_list('parlamentar',\n                        flat=True).distinct()\n\n        qs = Parlamentar.objects.filter(id__in=parlamentares).distinct().\\\n            exclude(id__in=id_part)\n        eligible = self.verifica()\n        result = list(set(qs) & set(eligible))\n        if not cmp(result, eligible):  # se igual a 0 significa que o qs e o eli s\u00e3o iguais!\n            self.fields['parlamentar'].queryset = qs\n        else:\n            ids = [e.id for e in eligible]\n            qs = Parlamentar.objects.filter(id__in=ids)\n            self.fields['parlamentar'].queryset = qs\n\n    def create_participacao(self):\n        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n        data_inicio_comissao = composicao.periodo.data_inicio\n        data_fim_comissao = composicao.periodo.data_fim\n        q1 = Q(data_fim_mandato__isnull=False,\n               data_fim_mandato__gte=data_inicio_comissao)\n        q2 = Q(data_inicio_mandato__gte=data_inicio_comissao) \\\n            & Q(data_inicio_mandato__lte=data_fim_comissao)\n        q3 = Q(data_fim_mandato__isnull=True,\n               data_inicio_mandato__lte=data_inicio_comissao)\n        qs = q1 | q2 | q3\n        return qs\n\n    def verifica(self):\n        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n        participantes = composicao.participacao_set.all()\n        participantes_id = [p.parlamentar.id for p in participantes]\n        parlamentares = Parlamentar.objects.all().exclude(\n            id__in=participantes_id).order_by('nome_completo')\n        parlamentares = [p for p in parlamentares if p.ativo]\n\n        lista = []\n\n        for p in parlamentares:\n            mandatos = p.mandato_set.all()\n            for m in mandatos:\n                data_inicio = m.data_inicio_mandato\n                data_fim = m.data_fim_mandato\n                comp_data_inicio = composicao.periodo.data_inicio\n                comp_data_fim = composicao.periodo.data_fim\n                if (data_fim and data_fim >= comp_data_inicio)\\\n                        or (data_inicio >= comp_data_inicio and data_inicio <= comp_data_fim)\\\n                        or (data_fim is None and data_inicio <= comp_data_inicio):\n                    lista.append(p)\n\n        lista = list(set(lista))\n\n        return lista\n\n\nclass ParticipacaoEditForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n    nome_parlamentar = forms.CharField(required=False, label='Parlamentar')\n\n    class Meta:\n        model = Participacao\n        fields = ['nome_parlamentar', 'parlamentar', 'cargo', 'titular',\n                  'data_designacao', 'data_desligamento',\n                  'motivo_desligamento', 'observacao']\n        widgets = {\n            'parlamentar': forms.HiddenInput(),\n        }\n\n    def __init__(self, user=None, **kwargs):\n        super(ParticipacaoEditForm, self).__init__(**kwargs)\n        self.initial['nome_parlamentar'] = Parlamentar.objects.get(\n            id=self.initial['parlamentar']).nome_parlamentar\n        self.fields['nome_parlamentar'].widget.attrs['disabled'] = 'disabled'\n\n\nclass ComissaoForm(forms.ModelForm):\n\n    class Meta:\n        model = Comissao\n        fields = '__all__'\n\n    def clean(self):\n        super(ComissaoForm, self).clean()\n\n        if not self.is_valid():\n            return self.cleaned_data\n\n        if self.cleaned_data['data_extincao']:\n            if (self.cleaned_data['data_extincao'] <\n                    self.cleaned_data['data_criacao']):\n                msg = _('Data de extin\u00e7\u00e3o n\u00e3o pode ser menor que a de cria\u00e7\u00e3o')\n                raise ValidationError(msg)\n        return self.cleaned_data\n\n    @transaction.atomic\n    def save(self, commit=True):\n        comissao = super(ComissaoForm, self).save(commit)\n        content_type = ContentType.objects.get_for_model(Comissao)\n        object_id = comissao.pk\n        tipo = TipoAutor.objects.get(descricao__icontains='Comiss')\n        nome = comissao.sigla + ' - ' + comissao.nome\n        Autor.objects.create(\n            content_type=content_type,\n            object_id=object_id,\n            tipo=tipo,\n            nome=nome\n        )\n        return comissao\n\n\nclass ReuniaoForm(ModelForm):\n\n    comissao = forms.ModelChoiceField(queryset=Comissao.objects.all(),\n                                      widget=forms.HiddenInput())\n\n    class Meta:\n        model = Reuniao\n        exclude = ['cod_andamento_reuniao']\n\n    def clean(self):\n        super(ReuniaoForm, self).clean()\n\n        if not self.is_valid():\n            return self.cleaned_data\n\n        if self.cleaned_data['hora_fim']:\n            if (self.cleaned_data['hora_fim'] <\n                    self.cleaned_data['hora_inicio']):\n                msg = _('A hora de t\u00e9rmino da reuni\u00e3o n\u00e3o pode ser menor que a de in\u00edcio')\n                raise ValidationError(msg)\n        return self.cleaned_data\n\nclass DocumentoAcessorioCreateForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = DocumentoAcessorio\n        exclude = ['reuniao']\n\n    def __init__(self, user=None, **kwargs):\n        super(DocumentoAcessorioCreateForm, self).__init__(**kwargs)\n\n        if self.instance:\n            reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])\n            comissao = reuniao.comissao\n            comissao_pk = comissao.id\n            documentos = reuniao.documentoacessorio_set.all()\n            return self.create_documentoacessorio()\n\n\n    def create_documentoacessorio(self):\n        reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])\n\n\nclass DocumentoAcessorioEditForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = DocumentoAcessorio\n        fields = ['nome', 'data', 'autor', 'ementa',\n                  'indexacao', 'arquivo']\n\n    def __init__(self, user=None, **kwargs):\n        super(DocumentoAcessorioEditForm, self).__init__(**kwargs)\n\n", "path": "sapl/comissoes/forms.py"}], "after_files": [{"content": "from django import forms\nfrom django.contrib.contenttypes.models import ContentType\nfrom django.core.exceptions import ValidationError\nfrom django.db import transaction\nfrom django.db.models import Q\nfrom django.forms import ModelForm\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom sapl.base.models import Autor, TipoAutor\nfrom sapl.comissoes.models import (Comissao, Composicao, DocumentoAcessorio,\n                                   Participacao, Reuniao)\nfrom sapl.parlamentares.models import Legislatura, Mandato, Parlamentar\n\n\nclass ParticipacaoCreateForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = Participacao\n        fields = '__all__'\n        exclude = ['composicao']\n\n    def __init__(self, user=None, **kwargs):\n        super(ParticipacaoCreateForm, self).__init__(**kwargs)\n\n        if self.instance:\n            comissao = kwargs['initial']\n            comissao_pk = int(comissao['parent_pk'])\n            composicao = Composicao.objects.get(id=comissao_pk)\n            participantes = composicao.participacao_set.all()\n            id_part = [p.parlamentar.id for p in participantes]\n        else:\n            id_part = []\n\n        qs = self.create_participacao()\n\n        parlamentares = Mandato.objects.filter(qs,\n                                               parlamentar__ativo=True\n                                               ).prefetch_related('parlamentar').\\\n            values_list('parlamentar',\n                        flat=True).distinct()\n\n        qs = Parlamentar.objects.filter(id__in=parlamentares).distinct().\\\n            exclude(id__in=id_part)\n        eligible = self.verifica()\n        result = list(set(qs) & set(eligible))\n        if not cmp(result, eligible):  # se igual a 0 significa que o qs e o eli s\u00e3o iguais!\n            self.fields['parlamentar'].queryset = qs\n        else:\n            ids = [e.id for e in eligible]\n            qs = Parlamentar.objects.filter(id__in=ids)\n            self.fields['parlamentar'].queryset = qs\n\n\n    def clean(self):\n        cleaned_data = super(ParticipacaoCreateForm, self).clean()\n\n        if not self.is_valid():\n            return cleaned_data\n\n        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n        cargos_unicos = [c.cargo.nome for c in composicao.participacao_set.filter(cargo__unico=True)]\n\n        if cleaned_data['cargo'].nome in cargos_unicos:\n            msg = _('Este cargo \u00e9 \u00fanico para esta Comiss\u00e3o.')\n            raise ValidationError(msg)\n\n\n    def create_participacao(self):\n        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n        data_inicio_comissao = composicao.periodo.data_inicio\n        data_fim_comissao = composicao.periodo.data_fim\n        q1 = Q(data_fim_mandato__isnull=False,\n               data_fim_mandato__gte=data_inicio_comissao)\n        q2 = Q(data_inicio_mandato__gte=data_inicio_comissao) \\\n            & Q(data_inicio_mandato__lte=data_fim_comissao)\n        q3 = Q(data_fim_mandato__isnull=True,\n               data_inicio_mandato__lte=data_inicio_comissao)\n        qs = q1 | q2 | q3\n        return qs\n\n    def verifica(self):\n        composicao = Composicao.objects.get(id=self.initial['parent_pk'])\n        participantes = composicao.participacao_set.all()\n        participantes_id = [p.parlamentar.id for p in participantes]\n        parlamentares = Parlamentar.objects.all().exclude(\n            id__in=participantes_id).order_by('nome_completo')\n        parlamentares = [p for p in parlamentares if p.ativo]\n\n        lista = []\n\n        for p in parlamentares:\n            mandatos = p.mandato_set.all()\n            for m in mandatos:\n                data_inicio = m.data_inicio_mandato\n                data_fim = m.data_fim_mandato\n                comp_data_inicio = composicao.periodo.data_inicio\n                comp_data_fim = composicao.periodo.data_fim\n                if (data_fim and data_fim >= comp_data_inicio)\\\n                        or (data_inicio >= comp_data_inicio and data_inicio <= comp_data_fim)\\\n                        or (data_fim is None and data_inicio <= comp_data_inicio):\n                    lista.append(p)\n\n        lista = list(set(lista))\n\n        return lista\n\n\nclass ParticipacaoEditForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n    nome_parlamentar = forms.CharField(required=False, label='Parlamentar')\n\n    class Meta:\n        model = Participacao\n        fields = ['nome_parlamentar', 'parlamentar', 'cargo', 'titular',\n                  'data_designacao', 'data_desligamento',\n                  'motivo_desligamento', 'observacao']\n        widgets = {\n            'parlamentar': forms.HiddenInput(),\n        }\n\n    def __init__(self, user=None, **kwargs):\n        super(ParticipacaoEditForm, self).__init__(**kwargs)\n        self.initial['nome_parlamentar'] = Parlamentar.objects.get(\n            id=self.initial['parlamentar']).nome_parlamentar\n        self.fields['nome_parlamentar'].widget.attrs['disabled'] = 'disabled'\n\n\nclass ComissaoForm(forms.ModelForm):\n\n    class Meta:\n        model = Comissao\n        fields = '__all__'\n\n    def clean(self):\n        super(ComissaoForm, self).clean()\n\n        if not self.is_valid():\n            return self.cleaned_data\n\n        if self.cleaned_data['data_extincao']:\n            if (self.cleaned_data['data_extincao'] <\n                    self.cleaned_data['data_criacao']):\n                msg = _('Data de extin\u00e7\u00e3o n\u00e3o pode ser menor que a de cria\u00e7\u00e3o')\n                raise ValidationError(msg)\n        return self.cleaned_data\n\n    @transaction.atomic\n    def save(self, commit=True):\n        comissao = super(ComissaoForm, self).save(commit)\n        content_type = ContentType.objects.get_for_model(Comissao)\n        object_id = comissao.pk\n        tipo = TipoAutor.objects.get(descricao__icontains='Comiss')\n        nome = comissao.sigla + ' - ' + comissao.nome\n        Autor.objects.create(\n            content_type=content_type,\n            object_id=object_id,\n            tipo=tipo,\n            nome=nome\n        )\n        return comissao\n\n\nclass ReuniaoForm(ModelForm):\n\n    comissao = forms.ModelChoiceField(queryset=Comissao.objects.all(),\n                                      widget=forms.HiddenInput())\n\n    class Meta:\n        model = Reuniao\n        exclude = ['cod_andamento_reuniao']\n\n    def clean(self):\n        super(ReuniaoForm, self).clean()\n\n        if not self.is_valid():\n            return self.cleaned_data\n\n        if self.cleaned_data['hora_fim']:\n            if (self.cleaned_data['hora_fim'] <\n                    self.cleaned_data['hora_inicio']):\n                msg = _('A hora de t\u00e9rmino da reuni\u00e3o n\u00e3o pode ser menor que a de in\u00edcio')\n                raise ValidationError(msg)\n        return self.cleaned_data\n\nclass DocumentoAcessorioCreateForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = DocumentoAcessorio\n        exclude = ['reuniao']\n\n    def __init__(self, user=None, **kwargs):\n        super(DocumentoAcessorioCreateForm, self).__init__(**kwargs)\n\n        if self.instance:\n            reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])\n            comissao = reuniao.comissao\n            comissao_pk = comissao.id\n            documentos = reuniao.documentoacessorio_set.all()\n            return self.create_documentoacessorio()\n\n\n    def create_documentoacessorio(self):\n        reuniao = Reuniao.objects.get(id=self.initial['parent_pk'])\n\n\nclass DocumentoAcessorioEditForm(forms.ModelForm):\n\n    parent_pk = forms.CharField(required=False)  # widget=forms.HiddenInput())\n\n    class Meta:\n        model = DocumentoAcessorio\n        fields = ['nome', 'data', 'autor', 'ementa',\n                  'indexacao', 'arquivo']\n\n    def __init__(self, user=None, **kwargs):\n        super(DocumentoAcessorioEditForm, self).__init__(**kwargs)\n\n", "path": "sapl/comissoes/forms.py"}]}