Browse Source

Merge branch 'master' of github.com:interlegis/sapl

pull/754/head
Eduardo Calil 8 years ago
parent
commit
97723c2af9
  1. 2
      README.rst
  2. 109
      sapl/base/forms.py
  3. 12
      sapl/base/views.py
  4. 12
      sapl/static/js/app.js
  5. 34
      sapl/static/styles/app.scss

2
README.rst

@ -31,7 +31,7 @@ Instalar as seguintes dependências do sistema::
sudo apt-get install git nginx python3-dev libpq-dev graphviz-dev graphviz \ sudo apt-get install git nginx python3-dev libpq-dev graphviz-dev graphviz \
pkg-config postgresql postgresql-contrib pgadmin3 python-psycopg2 \ pkg-config postgresql postgresql-contrib pgadmin3 python-psycopg2 \
software-properties-common build-essential libxml2-dev libjpeg-dev \ software-properties-common build-essential libxml2-dev libjpeg-dev \
libssl-dev libffi-dev libxslt1-dev python3-setuptools curl libmysqlclient-dev libssl-dev libffi-dev libxslt1-dev python3-setuptools curl
sudo easy_install3 pip lxml sudo easy_install3 pip lxml

109
sapl/base/forms.py

@ -152,15 +152,6 @@ class AutorForm(ModelForm):
choices=ACTION_CREATE_USERS_AUTOR_CHOICE, choices=ACTION_CREATE_USERS_AUTOR_CHOICE,
widget=forms.RadioSelect()) widget=forms.RadioSelect())
status_user = forms.ChoiceField(
label=_('Bloqueio do Usuário Existente'),
choices=STATUS_USER_CHOICE,
widget=forms.RadioSelect(),
required=False,
help_text=_('Se vc está trocando ou removendo o usuário deste Autor, '
'como o Sistema deve proceder com o usuário que está sendo'
' desvinculado?'))
class Meta: class Meta:
model = Autor model = Autor
fields = ['tipo', fields = ['tipo',
@ -205,13 +196,17 @@ class AutorForm(ModelForm):
to_column(('confirma_email', 3)), to_column(('confirma_email', 3)),
css_class='new_user_fields hidden') css_class='new_user_fields hidden')
row4 = Row(to_column((Div(InlineRadios('status_user'), row4 = Row(to_column((
css_class='radiogroup-status hidden'), 12))) Div(InlineRadios('status_user'),
css_class='radiogroup-status hidden'),
12))) if 'status_user' in self.Meta.fields else None
controle_acesso = Fieldset( controle_acesso = [row2, row3]
_('Controle de Acesso do Autor'),
row2, row3, row4 if row4:
) controle_acesso.append(row4)
controle_acesso = Fieldset(_('Controle de Acesso do Autor'),
*controle_acesso)
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = SaplFormLayout(autor_select, controle_acesso) self.helper.layout = SaplFormLayout(autor_select, controle_acesso)
@ -227,26 +222,30 @@ class AutorForm(ModelForm):
self.instance.autor_related)] self.instance.autor_related)]
self.fields['q'].initial = '' self.fields['q'].initial = ''
self.fields[ self.fields['autor_related'].initial = self.instance.autor_related
'autor_related'].initial = self.instance.autor_related
if self.instance.user: if self.instance.user:
self.fields['username'].initial = self.instance.user.username self.fields['username'].initial = self.instance.user.username
self.fields['action_user'].initial = 'A' self.fields['action_user'].initial = 'A'
self.fields['status_user'].initial = 'R'
self.fields['username'].label = string_concat( self.fields['username'].label = string_concat(
self.fields['username'].label, self.fields['username'].label,
' (', self.instance.user.username, ')') ' (', self.instance.user.username, ')')
self.fields['status_user'].label = string_concat(
self.fields['status_user'].label, if 'status_user' in self.Meta.fields:
' (', self.instance.user.username, ')') self.fields['status_user'].initial = 'R'
self.fields['status_user'].label = string_concat(
self.fields['status_user'].label,
' (', self.instance.user.username, ')')
self.fields['username'].widget.attrs.update({ self.fields['username'].widget.attrs.update({
'data': self.instance.user.username 'data': self.instance.user.username
if self.instance.user else ''}) if self.instance.user else ''})
self.fields['status_user'].widget.attrs.update({ if 'status_user' in self.Meta.fields:
'data': self.instance.user.username self.fields['status_user'].widget.attrs.update({
if self.instance.user else ''}) 'data': self.instance.user.username
if self.instance.user else ''})
def valida_igualdade(self, texto1, texto2, msg): def valida_igualdade(self, texto1, texto2, msg):
if texto1 != texto2: if texto1 != texto2:
@ -261,13 +260,14 @@ class AutorForm(ModelForm):
raise ValidationError(_('Informe se o Autor terá usuário ' raise ValidationError(_('Informe se o Autor terá usuário '
'vinculado para acesso ao Sistema.')) 'vinculado para acesso ao Sistema.'))
if self.instance.pk and self.instance.user_id: if 'status_user' in self.Meta.fields:
if self.instance.user.username != cd['username']: if self.instance.pk and self.instance.user_id:
if 'status_user' not in cd or not cd['status_user']: if self.instance.user.username != cd['username']:
raise ValidationError( if 'status_user' not in cd or not cd['status_user']:
_('Foi trocado ou removido o usuário deste Autor, ' raise ValidationError(
'mas não foi informado como se deve proceder com o ' _('Foi trocado ou removido o usuário deste Autor, '
'usuário que está sendo desvinculado?')) 'mas não foi informado como se deve proceder '
'com o usuário que está sendo desvinculado?'))
qs_user = User.objects.all() qs_user = User.objects.all()
qs_autor = Autor.objects.all() qs_autor = Autor.objects.all()
@ -406,23 +406,48 @@ class AutorForm(ModelForm):
user_old.groups.remove(grupo) user_old.groups.remove(grupo)
else: else:
if 'status_user' in self.cleaned_data and user_old: if 'status_user' in self.Meta.fields:
if self.cleaned_data['status_user'] == 'X': if 'status_user' in self.cleaned_data and user_old:
user_old.delete() if self.cleaned_data['status_user'] == 'X':
user_old.delete()
elif self.cleaned_data['status_user'] == 'D':
user_old.groups.remove(grupo) elif self.cleaned_data['status_user'] == 'D':
user_old.is_active = False user_old.groups.remove(grupo)
user_old.save() user_old.is_active = False
user_old.save()
elif self.cleaned_data['status_user'] == 'R':
elif self.cleaned_data['status_user'] == 'R':
user_old.groups.remove(grupo)
elif user_old:
user_old.groups.remove(grupo) user_old.groups.remove(grupo)
elif user_old: else:
user_old.groups.remove(grupo) user_old.groups.remove(grupo)
return autor return autor
class AutorFormForAdmin(AutorForm):
status_user = forms.ChoiceField(
label=_('Bloqueio do Usuário Existente'),
choices=STATUS_USER_CHOICE,
widget=forms.RadioSelect(),
required=False,
help_text=_('Se vc está trocando ou removendo o usuário deste Autor, '
'como o Sistema deve proceder com o usuário que está sendo'
' desvinculado?'))
class Meta:
model = Autor
fields = ['tipo',
'nome',
'cargo',
'autor_related',
'q',
'action_user',
'username',
'status_user']
class RelatorioAtasFilterSet(django_filters.FilterSet): class RelatorioAtasFilterSet(django_filters.FilterSet):
filter_overrides = {models.DateField: { filter_overrides = {models.DateField: {

12
sapl/base/views.py

@ -13,7 +13,7 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django_filters.views import FilterView from django_filters.views import FilterView
from sapl.base.forms import AutorForm, TipoAutorForm from sapl.base.forms import AutorForm, TipoAutorForm, AutorFormForAdmin
from sapl.base.models import Autor, TipoAutor from sapl.base.models import Autor, TipoAutor
from sapl.crud.base import CrudAux from sapl.crud.base import CrudAux
from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
@ -69,6 +69,11 @@ class AutorCrud(CrudAux):
# devido a implement do form o form_valid do Crud deve ser pulado # devido a implement do form o form_valid do Crud deve ser pulado
return super(CrudAux.UpdateView, self).form_valid(form) return super(CrudAux.UpdateView, self).form_valid(form)
def get(self, request, *args, **kwargs):
if request.user.is_superuser:
self.form_class = AutorFormForAdmin
return CrudAux.UpdateView.get(self, request, *args, **kwargs)
def get_success_url(self): def get_success_url(self):
# FIXME try except - testar envio de emails # FIXME try except - testar envio de emails
@ -115,6 +120,11 @@ class AutorCrud(CrudAux):
# devido a implement do form o form_valid do Crud deve ser pulado # devido a implement do form o form_valid do Crud deve ser pulado
return super(CrudAux.CreateView, self).form_valid(form) return super(CrudAux.CreateView, self).form_valid(form)
def get(self, request, *args, **kwargs):
if request.user.is_superuser:
self.form_class = AutorFormForAdmin
return CrudAux.CreateView.get(self, request, *args, **kwargs)
def get_success_url(self): def get_success_url(self):
pk_autor = self.object.id pk_autor = self.object.id
try: try:

12
sapl/static/js/app.js

@ -150,9 +150,21 @@ function autorModal() {
get_nome_autor("#id_autoria__autor");*/ get_nome_autor("#id_autoria__autor");*/
} }
var customsFront = function() {
$('[type=radio], [type=checkbox]').each(function() {
var $controls = $(this).closest('.controls')
$controls && !$controls.hasClass('controls-radio-checkbox') && $controls.addClass('controls-radio-checkbox')
});
}
$(document).ready(function(){ $(document).ready(function(){
refreshDatePicker(); refreshDatePicker();
refreshMask(); refreshMask();
autorModal(); autorModal();
initTinymce("texto-rico"); initTinymce("texto-rico");
customsFront();
}); });

34
sapl/static/styles/app.scss

@ -113,6 +113,40 @@ h6, .h6 {
} }
} }
.controls-radio-checkbox {
padding: 0px;
border: 1px solid #d6e1e5;
border-radius: 4px;
min-height: 20px;
.help-block {
margin: $grid-gutter-width / 2;
padding: $grid-gutter-width / 2;
border: 2px dashed #d6e1e5;
}
label {
padding: 5px;
.icons {
top: 5px;
left: 8px;
}
&.checkbox-inline, &.radio-inline {
padding: 8px;
padding-left: 36px;
.icons {
top: 8px;
left: 8px;
}
}
}
.checkbox, .radio, .checkbox-inline, .radio-inline {
margin: 0;
&:hover {
background-color: #d6e1e5;;
}
}
}
// #### CRUD DETAIL ######################################## // #### CRUD DETAIL ########################################
p.control-label { p.control-label {

Loading…
Cancel
Save