https://www.zkoss.org/wiki/Small_Talks/2013/October/ZK_Testing_with_Sahi
https://zkfiddle.org/sample/3ltrsms/9-Grid-style-7-1
https://zkfiddle.org/sample/3bmc52p/1-detect-dark-mode
+#client scripting & binding
+https://www.zkoss.org/wiki/ZUML_Reference/ZUML/Namespaces/Client_Attribute
+https://www.zkoss.org/wiki/ZUML_Reference/ZUML/Namespaces
##### Spring ZK
</Pattern>
</layout>
</appender>
+
+ <appender name="PROJECT" class="ch.qos.logback.core.FileAppender">
+ <file>c:/temp/sly-crm-project.log</file>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <Pattern>%m%n</Pattern>
+ </encoder>
+ </appender>
+ <appender name="PARTNER" class="ch.qos.logback.core.FileAppender">
+ <file>c:/temp/sly-crm-partner.log</file>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <Pattern>%m%n</Pattern>
+ </encoder>
+ </appender>
+
<root level="info">
<appender-ref ref="Console"/>
</root>
+
+ <logger name="PROJECT" level="info" additivity="false">
+ <appender-ref ref="PROJECT"/>
+ </logger>
+ <logger name="PARTNER" level="info" additivity="false">
+ <appender-ref ref="PARTNER"/>
+ </logger>
+
</configuration>
\ No newline at end of file
@Log4j2
@Component
public class PartnerXlsProcessor extends XlsProcessor<Partner> {
+ private static final org.apache.logging.log4j.Logger partnerLog = org.apache.logging.log4j.LogManager.getLogger("PARTNER");
@Autowired
private PartnerRepository partnerRepository;
@Override
protected void process(Partner entity) {
partnerRepository.save(entity);
+ partnerLog.info("{};{}", entity.getName(), entity.getVatNr());
log.info("Partner added: {}", entity.getName());
}
+ @Override
+ protected void processInvalid(Map<String, String> rowData, Partner entity) {
+ partnerLog.info("{};{}", entity.getName(), entity.getVatNr());
+ }
+
}
import java.io.IOException;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
@Log4j2
@Component
public class ProjectXlsProcessor extends XlsProcessor<Project> {
public static final String IMPORTED = "IMPORTED";
+ private static final org.apache.logging.log4j.Logger projectLog = org.apache.logging.log4j.LogManager.getLogger("PROJECT");
@Autowired
private ProjectRepository projectRepository;
protected Project mapEntity(Map<String, String> rowData) {
Project entity = projectXlsMapper.toEntity(rowData);
entity.setProjectStatus(defaultProjectStatus);
- entity.setActive(true);
-
- if (entity.getHumanId().equals("99000199")) {
- log.info("");
- }
return entity;
}
@Override
protected boolean isValid(Project entity) {
return !StringUtils.isBlank(entity.getName())
- && !StringUtils.isBlank(entity.getHumanId());
-// && !Objects.isNull(entity.getPartner());
+ && !StringUtils.isBlank(entity.getHumanId())
+ && !Objects.isNull(entity.getPartner());
}
@Override
log.info("Project added: {}", entity.getName());
}
+ @Override
+ protected void processInvalid(Map<String, String> rowData, Project entity) {
+ projectLog.info("{};{};{}", entity.getHumanId(), entity.getName(), rowData.get("Ügyfél"));
+ }
}
try {
if (isValid(entity)) {
process(entity);
+ } else {
+ processInvalid(rowData, entity);
}
} catch (Exception e) {
log.error("Processing error for {}", r, e);
protected abstract boolean isValid(T entity);
protected abstract void process(T entity);
+
+ protected void processInvalid(Map<String, String> rowData, T entity) {
+ }
}
<timeout-uri>/timeout</timeout-uri>
</session-config>
<client-config>
+ <data-handler>
+ <name>data-mask</name><!-- the attribute name, i.e. data-mask -->
+ <script src="http://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js"/>
+ <script>
+ function (wgt, dataValue) {
+ jq(wgt.$n()).mask(dataValue);
+
+ // unformat after onChange event.
+ wgt.listen({onChange: function (event) {
+ event.data.value = jq(this.$n()).cleanVal();
+ }});
+ }
+ </script>
+ </data-handler>
<error-reload>
<device-type>ajax</device-type>
<error-code>403</error-code>
<?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
-<zk>
+<zk xmlns:c="client/attribute">
+ <script src="~./static/js/clipboard.utils.js"/>
<zscript>
import hu.user.lis.db.Currency;
ListModelList currencies = new ListModelList(Currency.values());
format="#,###.##" locale="hu" instant="true"
onChange="@command('onNetAmountChange')"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
+ disabled="@bind(vm.readonlyForm)"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
<vlayout>
<label value="Bruttó összeg"/>
<doublebox value="@bind(vm.formDocument.grossAmount) @validator(vm)"
format="#,###.##" locale="hu" instant="true"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
+ disabled="@bind(vm.readonlyForm)"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
<vlayout>
<label value="ÁFA (HUF)"/>
<doublebox value="@bind(vm.formDocument.vatAmount) @validator(vm)"
format="#,###.##" locale="hu" instant="true"
forward="onOK=submit.onClick, onCancel=cancel.onClick"
- disabled="@bind(vm.readonlyForm)"/>
+ disabled="@bind(vm.readonlyForm)"
+ c:onPaste="preventPastingNonDigit(event)"/>
</vlayout>
</hlayout>
<hlayout>
<window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.PartnersViewModel')">
<!-- <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')"/>-->
<caption label="Partnerek"/>
+ <!-- <textbox xmlns:c="client/attribute" c:data-mask="00:00:00" onChange='Clients.log(self.value)'/>-->
<borderlayout>
<north flex="true">
<toolbar>
--- /dev/null
+console.log("Included!");
+function preventPastingNonDigit(e){
+ var pastedText = e.clipboardData ? e.clipboardData.getData('text') : window.clipboardData.getData('text');
+ var regex = new RegExp(/\D/g);
+ if (pastedText !== null && regex.test(pastedText)) {
+ var formattedText = pastedText.replace(/\D/g,'');
+ //console.log(pastedText, formattedText, e);
+ e.target.value = formattedText;
+ }
+}