Conflicts:
	src/main/java/info/bukova/isspst/ui/requirement/RequirementSubpage.java
Verze_1.0
František Přibyl 10 years ago
commit 9ca4908ce4

@ -0,0 +1,39 @@
package info.bukova.isspst;
import info.bukova.isspst.data.DataModel;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
public class CommonUrlResolver implements EntityUrlResolver {
@Autowired
private HttpServletRequest request;
protected String defaultUrl;
public CommonUrlResolver() {
}
@Override
public String entityUrl(Object entity) {
if (defaultUrl == null) {
this.defaultUrl = request.getRequestURL().toString();
this.defaultUrl = defaultUrl.substring(0, defaultUrl.indexOf(request.getServletPath()));
}
if (!DataModel.class.isAssignableFrom(entity.getClass())) {
return defaultUrl + "/app";
}
String url = Constants.URL_MAP.get(entity.getClass());
if (url == null) {
return defaultUrl + "/app";
}
return defaultUrl + url + "?select=" + String.valueOf(((DataModel)entity).getId());
}
}

@ -1,9 +1,15 @@
package info.bukova.isspst; package info.bukova.isspst;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import info.bukova.isspst.data.Permission; import info.bukova.isspst.data.Permission;
import info.bukova.isspst.data.PermissionType; import info.bukova.isspst.data.PermissionType;
import info.bukova.isspst.data.Requirement;
import info.bukova.isspst.data.RequirementType; import info.bukova.isspst.data.RequirementType;
import info.bukova.isspst.data.Role; import info.bukova.isspst.data.Role;
import info.bukova.isspst.data.TripRequirement;
import info.bukova.isspst.reporting.Report; import info.bukova.isspst.reporting.Report;
import info.bukova.isspst.reporting.ReportMapping; import info.bukova.isspst.reporting.ReportMapping;
import info.bukova.isspst.services.addressbook.AdbService; import info.bukova.isspst.services.addressbook.AdbService;
@ -129,4 +135,10 @@ public class Constants {
public final static long REQ_TYPE_MATERIAL = 1; public final static long REQ_TYPE_MATERIAL = 1;
public final static long REQ_TYPE_SERVICES = 2; public final static long REQ_TYPE_SERVICES = 2;
@SuppressWarnings("serial")
public final static Map<Class<?>, String> URL_MAP = Collections.unmodifiableMap(new HashMap<Class<?>, String>() {{
put(Requirement.class, "/main/orders/");
put(TripRequirement.class, "/main/trips/requirements/");
}} );
} }

@ -0,0 +1,7 @@
package info.bukova.isspst;
public interface EntityUrlResolver {
public String entityUrl(Object entity);
}

@ -0,0 +1,39 @@
package info.bukova.isspst;
import info.bukova.isspst.data.Requirement;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
public class RequirementUrlResolver implements EntityUrlResolver {
private String defaultUrl;
@Autowired
private HttpServletRequest request;
public RequirementUrlResolver() {
}
@Override
public String entityUrl(Object entity) {
if (!(entity instanceof Requirement)) {
return defaultUrl + "/app";
}
if (defaultUrl == null) {
this.defaultUrl = request.getRequestURL().toString();
this.defaultUrl = defaultUrl.substring(0, defaultUrl.indexOf(request.getServletPath()));
}
Requirement req = (Requirement)entity;
if (req.getKind() == Constants.REQ_TYPE_MATERIAL) {
return defaultUrl + Constants.URL_MAP.get(req) + "material/?select=" + String.valueOf(req.getId());
} else {
return defaultUrl + Constants.URL_MAP.get(req) + "services/?select=" + String.valueOf(req.getId());
}
}
}

@ -0,0 +1,30 @@
package info.bukova.isspst;
import java.util.HashMap;
import java.util.Map;
public class UrlResolverHolder {
private EntityUrlResolver commonResolver;
private Map<Class<?>, EntityUrlResolver> resolvers;
public UrlResolverHolder(EntityUrlResolver common) {
this.commonResolver = common;
resolvers = new HashMap<Class<?>, EntityUrlResolver>();
}
public void setResolvers(Map<Class<?>, EntityUrlResolver> resolvers) {
this.resolvers = resolvers;
}
public EntityUrlResolver resolverFor(Class<?> clazz) {
EntityUrlResolver res = resolvers.get(clazz);
if (res == null) {
return commonResolver;
}
return res;
}
}

@ -1,5 +1,8 @@
package info.bukova.isspst.mail; package info.bukova.isspst.mail;
import info.bukova.isspst.EntityUrlResolver;
import info.bukova.isspst.UrlResolverHolder;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -12,6 +15,7 @@ public class EntityMessageBuilder implements MessageBuilder {
private final static Logger logger = LoggerFactory.getLogger(EntityMessageBuilder.class); private final static Logger logger = LoggerFactory.getLogger(EntityMessageBuilder.class);
private boolean html; private boolean html;
private UrlResolverHolder urlResolverHolder;
public void setHtml(boolean html) { public void setHtml(boolean html) {
this.html = html; this.html = html;
@ -53,7 +57,11 @@ public class EntityMessageBuilder implements MessageBuilder {
for (String p : properties) { for (String p : properties) {
try { try {
ret = ret.replaceAll("\\[" + p + "\\]", BeanUtils.getProperty(data, p)); if (p.equals("-url-")) {
ret = ret.replaceAll("\\[" + p + "\\]", getUrl(data));
} else {
ret = ret.replaceAll("\\[" + p + "\\]", BeanUtils.getProperty(data, p));
}
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
} catch (InvocationTargetException e) { } catch (InvocationTargetException e) {
@ -67,5 +75,18 @@ public class EntityMessageBuilder implements MessageBuilder {
return ret; return ret;
} }
private String getUrl(Object data) {
if (urlResolverHolder == null) {
return "";
}
EntityUrlResolver res = urlResolverHolder.resolverFor(data.getClass());
return res.entityUrl(data);
}
public void setUrlResolverHolder(UrlResolverHolder urlResolverHolder) {
this.urlResolverHolder = urlResolverHolder;
}
} }

@ -42,6 +42,10 @@ public class MailerWithAttachement implements Mailer {
message.setFrom(from); message.setFrom(from);
} }
} }
if (message.getReplyTo() == null) {
message.setReplyTo(message.getFrom());
}
helper.setFrom(message.getFrom()); helper.setFrom(message.getFrom());
helper.setReplyTo(message.getReplyTo()); helper.setReplyTo(message.getReplyTo());
@ -63,6 +67,7 @@ public class MailerWithAttachement implements Mailer {
} }
try { try {
sender.send(mimeMessage); sender.send(mimeMessage);
logger.info("Mail queued for send");
} catch (MailAuthenticationException e) { } catch (MailAuthenticationException e) {
logger.error("Authentication error"); logger.error("Authentication error");
} catch (MailSendException e) { } catch (MailSendException e) {

@ -44,7 +44,15 @@ public class BindingForm<T> extends SimpleForm {
// } // }
try try
{ {
PropertyUtils.setProperty(object, key, getField(key)); if (PropertyUtils.getPropertyType(object, key).isPrimitive()
&& (getField(key) == null))
{
PropertyUtils.setProperty(object, key, 0);
}
else
{
PropertyUtils.setProperty(object, key, getField(key));
}
} }
catch (NoSuchMethodException e) catch (NoSuchMethodException e)
{ {

@ -300,11 +300,16 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
if (selIndex > -1) { if (selIndex > -1) {
this.setDataBean(dataList.get(selIndex)); this.setDataBean(dataList.get(selIndex));
afterSelect();
} }
} }
protected void beforeSelectViaUrl() { protected void beforeSelectViaUrl() {
}
protected void afterSelect() {
} }
@Command @Command

@ -4,14 +4,18 @@ import info.bukova.isspst.data.Address;
import info.bukova.isspst.data.AddressEmb; import info.bukova.isspst.data.AddressEmb;
import info.bukova.isspst.data.Order; import info.bukova.isspst.data.Order;
import info.bukova.isspst.data.OrderItem; import info.bukova.isspst.data.OrderItem;
import info.bukova.isspst.services.IsspstException;
import info.bukova.isspst.services.addressbook.AdbService; import info.bukova.isspst.services.addressbook.AdbService;
import info.bukova.isspst.services.addressbook.AddressFinder;
import info.bukova.isspst.services.orders.OrderService; import info.bukova.isspst.services.orders.OrderService;
import info.bukova.isspst.services.settings.GlobalSettingsService; import info.bukova.isspst.services.settings.GlobalSettingsService;
import info.bukova.isspst.ui.FormViewModel; import info.bukova.isspst.ui.FormViewModel;
import info.bukova.isspst.validators.OrderFormValidator; import info.bukova.isspst.validators.OrderFormValidator;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -19,9 +23,13 @@ import org.zkoss.bind.BindUtils;
import org.zkoss.bind.SimpleForm; import org.zkoss.bind.SimpleForm;
import org.zkoss.bind.annotation.BindingParam; import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.GlobalCommand;
import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Window;
import org.zkoss.zul.impl.InputElement; import org.zkoss.zul.impl.InputElement;
public class OrderForm extends FormViewModel<Order> public class OrderForm extends FormViewModel<Order>
@ -29,8 +37,12 @@ public class OrderForm extends FormViewModel<Order>
private final static Logger log = LoggerFactory.getLogger(OrderForm.class.getName()); private final static Logger log = LoggerFactory.getLogger(OrderForm.class.getName());
@WireVariable @WireVariable
protected AdbService adbService; private AdbService adbService;
@WireVariable
private AddressFinder addressFinderAres;
@WireVariable
private AddressFinder addressFinderTaxID;
@WireVariable @WireVariable
protected GlobalSettingsService settingsService; protected GlobalSettingsService settingsService;
@ -61,14 +73,19 @@ public class OrderForm extends FormViewModel<Order>
{ {
this.orderFormValidator = new OrderFormValidator(); this.orderFormValidator = new OrderFormValidator();
if (this.getDataBean().getSuplier() == null) if (getDataBean().getSuplier() != null)
{
if (getDataBean().getSuplier().getAddress().getId() != 0)
{
this.selectedSuppAddrItem = this.getDataBean().getSuplier().getAddress();
}
this.suppCompany = getDataBean().getSuplier().getCompany();
}
else
{ {
this.getDataBean().setSuplier(new AddressEmb()); this.getDataBean().setSuplier(new AddressEmb());
} }
this.selectedSuppAddrItem = this.getDataBean().getSuplier().getAddress();
this.suppCompany = this.selectedSuppAddrItem.getCompany();
if (this.getDataBean().getDeliveryAddress() == null) if (this.getDataBean().getDeliveryAddress() == null)
{ {
this.getDataBean().setDeliveryAddress(new AddressEmb()); this.getDataBean().setDeliveryAddress(new AddressEmb());
@ -289,4 +306,60 @@ public class OrderForm extends FormViewModel<Order>
// jiných objednávek // jiných objednávek
orderService.updateApprovedItems(this.getDataBean(), orderedChanged); orderService.updateApprovedItems(this.getDataBean(), orderedChanged);
} }
@Command
@NotifyChange({"dataBean", "suppCompany"})
public void searchAddress()
{
getDataForm().bind();
Address adr = getDataBean().getSuplier().getAddress();
if (adr.getIc() != 0)
{
try
{
adbService.fillFoundData(addressFinderTaxID, adr);
getDataBean().setSuplier(new AddressEmb(adr));
suppCompany = adr.getCompany();
}
catch (IsspstException e)
{
Messagebox.show("Chyba při hledání adresy", "Chyba", Messagebox.OK, Messagebox.ERROR);
return;
}
}
else
{
Map<String, List<Address>> arg = new HashMap<String, List<Address>>();
try {
arg.put("result", adbService.lookForAddr(addressFinderAres, adr));
} catch (IsspstException e) {
Messagebox.show("Chyba při hledání adresy", "Chyba", Messagebox.OK, Messagebox.ERROR);
return;
}
Window resWin = (Window) Executions.createComponents("/lists/addressbook/addrFindResult.zul", null, arg);
resWin.doModal();
}
}
@GlobalCommand
@NotifyChange({"dataBean", "suppCompany"})
public void selectAddress(@BindingParam("selected") Address selected, @BindingParam("window") Window window) {
try {
adbService.fillFoundData(addressFinderTaxID, selected);
} catch (IsspstException e) {
e.printStackTrace();
}
Address adr = getDataBean().getSuplier().getAddress();
adbService.mergeAddress(adr, selected, true);
getDataBean().setSuplier(new AddressEmb(adr));
suppCompany = adr.getCompany();
if (window != null)
window.detach();
}
} }

@ -82,4 +82,9 @@ public class RequirementSubpage<T extends RequirementBase> extends ListViewModel
{ {
this.requirementsItemRenderer = requirementsItemRenderer; this.requirementsItemRenderer = requirementsItemRenderer;
} }
@Override
protected void afterSelect() {
BindUtils.postNotifyChange(null, null, this, "canApprove");
}
} }

@ -94,6 +94,12 @@ public class GlobalSettingsVM {
message.setText(message.getText() + "[" + field + "]"); message.setText(message.getText() + "[" + field + "]");
} }
@Command
@NotifyChange("settings")
public void insertUrl(@BindingParam("message") MailMessage message) {
message.setText(message.getText() + "[-url-]");
}
@Command @Command
@NotifyChange("settings") @NotifyChange("settings")
public void addAddress() { public void addAddress() {

@ -172,6 +172,7 @@ GlobalSettingsHours=Hodin
GlobalSettingsUploadStamp=Nahrát obrázek razítka GlobalSettingsUploadStamp=Nahrát obrázek razítka
GlobalSettingsStamp=Razítko GlobalSettingsStamp=Razítko
GlobalSettingsReqEnable=Povolení požadavků GlobalSettingsReqEnable=Povolení požadavků
GlobalSettingsInsertUrl=Vložit URL záznamu
UserSettings=Uživatelské nastavení UserSettings=Uživatelské nastavení

@ -30,6 +30,20 @@
<bean id="messageBuilder" class="info.bukova.isspst.mail.EntityMessageBuilder"> <bean id="messageBuilder" class="info.bukova.isspst.mail.EntityMessageBuilder">
<property name="html" value="true"/> <property name="html" value="true"/>
<property name="urlResolverHolder" ref="urlResolverHolder"/>
</bean>
<bean id="commonUrlResolver" class="info.bukova.isspst.CommonUrlResolver"/>
<bean id="requirementUrlResolver" class="info.bukova.isspst.RequirementUrlResolver"/>
<bean id="urlResolverHolder" class="info.bukova.isspst.UrlResolverHolder">
<constructor-arg ref="commonUrlResolver"/>
<property name="resolvers">
<map>
<entry key="#{T(info.bukova.isspst.data.Requirement)}" value-ref="requirementUrlResolver"/>
</map>
</property>
</bean> </bean>
<!-- <bean id="mailer" class="info.bukova.rsfaktura.services.mail.ThreadMailer"> --> <!-- <bean id="mailer" class="info.bukova.rsfaktura.services.mail.ThreadMailer"> -->

@ -51,6 +51,6 @@
<div id="mainData"> <div id="mainData">
<u:include src="${gridZul}" /> <u:include src="${gridZul}" />
</div> </div>
<div id="footer"> </div> <div id="footer"> Verze 1.0 </div>
</div> </div>
</html> </html>

@ -146,19 +146,29 @@
<row> <row>
<cell sclass="row-title">${labels.SuppliersFormCompany} :</cell> <cell sclass="row-title">${labels.SuppliersFormCompany} :</cell>
<cell colspan="3"> <cell colspan="3">
<combobox <hbox hflex="1">
ctrlKeys="${labels.HandleComboKey}" <combobox
onCtrlKey="@command('handleComboKey', ctrl=self, keyEvent=event)" ctrlKeys="${labels.HandleComboKey}"
onChange="@command('doFillSuppAddress')" onCtrlKey="@command('handleComboKey', ctrl=self, keyEvent=event)"
width="100%" onChange="@command('doFillSuppAddress')"
selectedItem="@bind(vm.selectedSuppAddrItem)" hflex="4"
value="@bind(vm.suppCompany)" selectedItem="@bind(vm.selectedSuppAddrItem)"
model="@load(vm.suppAddresses)" value="@bind(vm.suppCompany)"
readonly="false"> model="@load(vm.suppAddresses)"
<template name="model"> instant="true"
<comboitem label="@load(each)" /> readonly="false">
</template> <template name="model">
</combobox> <comboitem label="@load(each)" />
</template>
</combobox>
<hbox hflex="2">
<button image="/img/search.png"
label="${labels.SuppliersFormFindInARES}"
sclass="nicebutton"
disabled="@load((not empty vm.selectedSuppAddrItem) or ((empty vm.suppCompany) and (fx.suplier.ic eq 0)))"
onClick="@command('searchAddress')"/>
</hbox>
</hbox>
</cell> </cell>
</row> </row>
<row> <row>
@ -166,7 +176,8 @@
<cell> <cell>
<textbox <textbox
id="idSuppIC" id="idSuppIC"
value="@bind(fx.suplier.ic)" /> value="@bind(fx.suplier.ic)"
instant="true" />
</cell> </cell>
<cell sclass="row-title">${labels.SuppliersFormDIC} :</cell> <cell sclass="row-title">${labels.SuppliersFormDIC} :</cell>
<cell> <cell>

@ -21,7 +21,10 @@
<vbox> <vbox>
<ckeditor toolbar="Basic" value="@bind(vm.settings.newReqTemplate.text)" width="460px" height="180px" if="${vm.canSave}"/> <ckeditor toolbar="Basic" value="@bind(vm.settings.newReqTemplate.text)" width="460px" height="180px" if="${vm.canSave}"/>
<html content="@load(vm.settings.newReqTemplate.text)" width="460px" height="180px" if="${not vm.canSave}"/> <html content="@load(vm.settings.newReqTemplate.text)" width="460px" height="180px" if="${not vm.canSave}"/>
<button label="${labels.InsertField}" popup="fieldsNew, position=after_start" disabled="@load(not vm.canSave)"/> <hbox>
<button label="${labels.InsertField}" popup="fieldsNew, position=after_start" disabled="@load(not vm.canSave)"/>
<button label="${labels.GlobalSettingsInsertUrl}" onClick="@command('insertUrl', message=vm.settings.newReqTemplate)" disabled="@load(not vm.canSave)"/>
</hbox>
</vbox> </vbox>
</row> </row>
</rows> </rows>
@ -41,7 +44,10 @@
<vbox> <vbox>
<ckeditor toolbar="Basic" value="@bind(vm.settings.authReqTemplate.text)" width="460px" height="180px" if="${vm.canSave}" /> <ckeditor toolbar="Basic" value="@bind(vm.settings.authReqTemplate.text)" width="460px" height="180px" if="${vm.canSave}" />
<html content="@load(vm.settings.authReqTemplate.text)" width="460px" height="180px" if="${not vm.canSave}"/> <html content="@load(vm.settings.authReqTemplate.text)" width="460px" height="180px" if="${not vm.canSave}"/>
<button label="${labels.InsertField}" popup="fieldsAuth, position=after_start" disabled="@load(not vm.canSave)"/> <hbox>
<button label="${labels.InsertField}" popup="fieldsAuth, position=after_start" disabled="@load(not vm.canSave)"/>
<button label="${labels.GlobalSettingsInsertUrl}" onClick="@command('insertUrl', message=vm.settings.authReqTemplate)" disabled="@load(not vm.canSave)"/>
</hbox>
</vbox> </vbox>
</row> </row>
</rows> </rows>

Loading…
Cancel
Save