Commit ced5649b by Tatang S

widget rt_rw

1 parent 72ebe4ad
...@@ -185,6 +185,56 @@ class BlokKavNoWidget(Widget): ...@@ -185,6 +185,56 @@ class BlokKavNoWidget(Widget):
return result return result
class RtRwWidget(Widget):
template = "opensipkd.base:/views/widgets/rt_rw.pt"
readonly_template = "opensipkd.base:/views/widgets/readonly/rt_rw.pt"
_pstruct_schema = SchemaNode(
Mapping(),
SchemaNode(_StrippedString(), name="rt"),
SchemaNode(_StrippedString(), name="rw")
)
def serialize(self, field, cstruct, **kw):
if cstruct is null:
rt = "000"
rw = "00"
else:
rt, rw = cstruct.split("|", 2)
kw.setdefault("rt", rt)
kw.setdefault("rw", rw)
readonly = kw.get("readonly", self.readonly)
template = readonly and self.readonly_template or self.template
values = self.get_template_values(field, cstruct, kw)
return field.renderer(template, **values)
def deserialize(self, field, pstruct):
if pstruct is null:
return null
else:
try:
validated = self._pstruct_schema.deserialize(pstruct)
except Invalid as exc:
raise Invalid(field.schema, f"Invalid pstruct: {exc}")
rt = validated["rt"]
rw = validated["rw"]
if not rt and not rw:
return null
result = "|".join([rt, rw])
if not rt:
raise Invalid(
field.schema, "RT harus diisi. Minimal 000", result)
if not rw:
raise Invalid(
field.schema, "RW harus diisi. Minimal 00", result)
return result
class Select2MsWidget(Select2Widget): class Select2MsWidget(Select2Widget):
""" """
......
<div class="form-control-static" id="${oid|field.oid}"
tal:define="
has_rt rt and True or False;
has_rw rt and True or False;
"
>
<span tal:condition="has_rt" style="margin-right:0.25rem;">RT ${rt}</span>
<span tal:condition="has_rw" style="margin-right:0.25rem;">RW ${rw}</span>
</div>
<div i18n:domain="deform"
tal:omit-tag=""
tal:define="oid oid|field.oid;
name name|field.name;
css_class css_class|field.widget.css_class;
style style|field.widget.style;">
${field.start_mapping()}
<div class="row">
<div class="col-xs-12 col-lg-6">
<div class="input-group">
<div class="row input-group-addon">
<div class="col-xs-3">
<input type="text" name="rt" value="${rt}"
class="span2 form-control ${css_class or ''}"
tal:attributes="style style;
rt_attributes|field.widget.rt_attributes|{};"
maxlength="3" minlength="3" placeholder="RT"
id="${oid}-rt"/>
</div>
<div class="col-xs-3">
<input type="text" name="rw" value="${rw}"
class="span2 form-control ${css_class or ''}"
tal:attributes="style style;
rw_attributes|field.widget.rw_attributes|{};"
maxlength="2" minlength="2" placeholder="RW"
id="${oid}-rw"/>
</div>
</div>
</div>
</div>
</div>
${field.end_mapping()}
</div>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!