Skip to content

Commit

Permalink
Fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
UmSenhorQualquer committed May 24, 2019
1 parent 513efdc commit dd360ae
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 27 deletions.
1 change: 1 addition & 0 deletions pyforms_web/basewidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,7 @@ def parent(self, value):
if hasattr(self, '_parent_win_id'):
del self._parent_win_id
self._parent_win = value
self.mark_to_update_client()

############################################################################
############ WEB Properties ################################################
Expand Down
10 changes: 9 additions & 1 deletion pyforms_web/controls/control_autocomplete.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,16 @@ def serialize(self):
data.update({'items_url': self.items_url, 'items':items, 'multiple':self.multiple})

return data


@property
def objects(self):
"""
Return the selected objects.
"""
if self.queryset:
return self.queryset.filter(pk__in=self.value if self.multiple else [self.value])
else:
return False

@property
def parent(self):
Expand Down
2 changes: 1 addition & 1 deletion pyforms_web/controls/control_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def value(self):
@value.setter
def value(self, value):
oldvalue = self._value
if oldvalue!=value:
if oldvalue!=value:
self._value = value
self.mark_to_update_client()
self.changed_event()
Expand Down
10 changes: 8 additions & 2 deletions pyforms_web/controls/control_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,17 @@ def value(self, value):
if isinstance(value, str) and len(value.strip())==0:
value = None

if value is not None and not isinstance(value, datetime.date):
if value is not None and isinstance(value, str):
try:
value = datetime.datetime.strptime(value, '%Y%m%d')
except:
raise Exception('The value is not a valid date')
try:
value = datetime.datetime.strptime(value, '%Y-%m-%d')
except Exception as e:
raise Exception('The value is not a valid date: '+value)
if value and isinstance(value, datetime.datetime):
value = value.date()


ControlBase.value.fset(self, value)
self.error = False
Expand Down
20 changes: 9 additions & 11 deletions pyforms_web/controls/control_emptywidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,14 @@ def init_form(self):

def serialize(self):
data = ControlBase.serialize(self)

if isinstance(self.value, BaseWidget):
data.update({'value':self.value.uid})
data.update({
'value':self.value.uid
})
self.value.parent = self.parent
else:
data.update({'value':None})
data.update({'value':None, 'clear_widget': True})

return data

Expand All @@ -35,26 +38,21 @@ def deserialize(self, properties):
#self._visible = properties.get('visible',True)

if isinstance(self.value, BaseWidget):
self.value = PyFormsMiddleware.get_instance(self.value.uid)
self.value = PyFormsMiddleware.get_instance(self._value.uid)
if self.value is not None:
self.value.parent = self.parent
else:
self.value = None



def mark_to_update_client(self):
self._update_client = True
request = PyFormsMiddleware.get_request()
if self.parent is not None and request is not None and hasattr(request,'updated_apps'):
request.updated_apps.add_top(self.parent)

@property
def value(self): return ControlBase.value.fget(self)
def value(self):
return ControlBase.value.fget(self)

@value.setter
def value(self, value):
ControlBase.value.fset(self, value)
if value:
if value:
value.LAYOUT_POSITION = self.place_id

16 changes: 12 additions & 4 deletions pyforms_web/controls/control_float.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pyforms_web.controls.control_base import ControlBase
import simplejson
from decimal import Decimal

class ControlFloat(ControlBase):

Expand All @@ -9,8 +10,15 @@ def init_form(self):
simplejson.dumps(self.serialize())
)

@property
def value(self): return ControlBase.value.fget(self)

@value.setter
def value(self, value): ControlBase.value.fset(self, value)
def deserialize(self, properties):
"""
Serialize the control data.
:param dict properties: Serialized data to load.
"""
super().deserialize(properties)

self.value = float(
properties.get('value', None)
)
4 changes: 2 additions & 2 deletions pyforms_web/web/static/pyformsjs/ControlEmptyWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ class ControlEmptyWidget extends ControlBase{
////////////////////////////////////////////////////////////////////////////////

deserialize(data){
if(data.clear_widget==1){

if(data.clear_widget){
pyforms.remove_app( this.properties.child_widget_id );
this.jquery_place().html('');
if( data.child_widget_id===undefined ) delete this.properties.child_widget_id;
Expand Down
35 changes: 29 additions & 6 deletions pyforms_web/widgets/django/modelform.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,7 @@ def __init__(self, *args, **kwargs):

BaseWidget.__init__(self, *args, **kwargs )

self._has_update_permissions = self.has_update_permissions()
self._has_add_permissions = self.has_add_permissions()
self._has_view_permissions = self.has_view_permissions()
self.update_permissions_variables()

if self.object_pk:
if not self._has_view_permissions:
Expand Down Expand Up @@ -166,7 +164,6 @@ def __init__(self, *args, **kwargs):
self._create_btn = ControlButton(self.CREATE_BTN_LABEL, label_visible=False, default=self.__create_btn_event)
self.edit_buttons.append( self._create_btn )

self._has_remove_permissions = self.has_remove_permissions()
if self._has_remove_permissions:
self._remove_btn = ControlButton(self.REMOVE_BTN_LABEL, css='red basic', label_visible=False, default=self.__remove_btn_event)
self.edit_buttons.append( self._remove_btn )
Expand Down Expand Up @@ -223,6 +220,20 @@ def model_object(self):
#### FUNCTIONS ##################################################################
#################################################################################

def update_permissions_variables(self):
if self.object_pk:
self._has_update_permissions = self.has_update_permissions()
else:
self._has_update_permissions = False

self._has_add_permissions = self.has_add_permissions()
self._has_view_permissions = self.has_view_permissions()

if self.object_pk:
self._has_remove_permissions = self.has_remove_permissions()
else:
self._has_remove_permissions = False

def get_readonly(self, default):
"""
The function returns the readonly fields to be set in the form.
Expand Down Expand Up @@ -520,8 +531,6 @@ def show_edit_form(self, pk=None):
else:
pyforms_field.value = value



self.inlines_apps = []
for inline in self.inlines:
pyforms_field = getattr(self, inline.__name__)
Expand All @@ -531,6 +540,20 @@ def show_edit_form(self, pk=None):
pyforms_field.value = app
pyforms_field.show()

self.update_permissions_variables()

if hasattr(self, '_save_btn'):
if self._has_update_permissions:
self._save_btn.show()
else:
self._save_btn.hide()

if hasattr(self, '_remove_btn'):
if self._has_remove_permissions:
self._remove_btn.show()
else:
self._remove_btn.hide()

return obj


Expand Down

0 comments on commit dd360ae

Please sign in to comment.