Merge remote-tracking branch 'origin/master'

Verze_3.0
Josef Rokos 10 years ago
commit d7999e78ca

@ -6,7 +6,6 @@ import info.bukova.isspst.data.PermissionType;
import info.bukova.isspst.data.Requirement; 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.SignedDocument;
import info.bukova.isspst.data.TripBill; import info.bukova.isspst.data.TripBill;
import info.bukova.isspst.data.TripBillApproval; import info.bukova.isspst.data.TripBillApproval;
import info.bukova.isspst.data.TripRequirement; import info.bukova.isspst.data.TripRequirement;
@ -24,6 +23,7 @@ import info.bukova.isspst.services.reqsubjects.ServiceItemService;
import info.bukova.isspst.services.requirement.RequirementService; import info.bukova.isspst.services.requirement.RequirementService;
import info.bukova.isspst.services.requirement.RequirementTypeService; import info.bukova.isspst.services.requirement.RequirementTypeService;
import info.bukova.isspst.services.requirement.TripRequirementService; import info.bukova.isspst.services.requirement.TripRequirementService;
import info.bukova.isspst.services.signeddocs.SignedDocumentService;
import info.bukova.isspst.services.tripbill.TripBillService; import info.bukova.isspst.services.tripbill.TripBillService;
import info.bukova.isspst.services.users.RoleService; import info.bukova.isspst.services.users.RoleService;
import info.bukova.isspst.services.users.UserService; import info.bukova.isspst.services.users.UserService;
@ -105,7 +105,7 @@ public class Constants {
new Module(MOD_ORDER, "Objednávky", OrderService.class), new Module(MOD_ORDER, "Objednávky", OrderService.class),
new Module(MOD_INVOICING, "Fakturace požadavků", InvoicingService.class), new Module(MOD_INVOICING, "Fakturace požadavků", InvoicingService.class),
new Module(MOD_SEARCH, "Fulltextové vyhledávání", FullTextService.class, true, false), new Module(MOD_SEARCH, "Fulltextové vyhledávání", FullTextService.class, true, false),
new Module(MOD_SIGNEDDOCS, "Podepsané dokumenty", SignedDocument.class, true, false), new Module(MOD_SIGNEDDOCS, "Podepsané dokumenty", SignedDocumentService.class, true, false),
}; };
public final static String PERM_APPROVE = "PERM_APPROVE"; public final static String PERM_APPROVE = "PERM_APPROVE";

@ -5,11 +5,18 @@ import info.bukova.isspst.Module;
import info.bukova.isspst.StringUtils; import info.bukova.isspst.StringUtils;
import java.util.Date; import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.search.annotations.IndexedEmbedded;
@Entity @Entity
@Table(name = "SIGNED_DOCUMENTS") @Table(name = "SIGNED_DOCUMENTS")
public class SignedDocument extends BaseData { public class SignedDocument extends BaseData {
@ -29,6 +36,11 @@ public class SignedDocument extends BaseData {
@Column(name = "SIGN_DATE") @Column(name = "SIGN_DATE")
private Date signDate; private Date signDate;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "signedDocument", orphanRemoval = true)
@LazyCollection(LazyCollectionOption.TRUE)
@IndexedEmbedded
private List<SignedDocumentItem> items;
public String getModuleName() { public String getModuleName() {
return moduleName; return moduleName;
} }
@ -76,11 +88,24 @@ public class SignedDocument extends BaseData {
} }
for (Module m : Constants.MODULES) { for (Module m : Constants.MODULES) {
if (m.getId() == this.moduleName) { if (this.moduleName.equals(m.getId())) {
return m.getName(); return m.getName();
} }
} }
return ""; return "";
} }
public List<SignedDocumentItem> getItems() {
return items;
}
public void setItems(List<SignedDocumentItem> items) {
this.items = items;
}
public void addItem(SignedDocumentItem item) {
item.setSignedDocument(this);
this.items.add(item);
}
} }

@ -1,6 +1,8 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.Constants; import info.bukova.isspst.Constants;
import info.bukova.isspst.reporting.Report;
import info.bukova.isspst.reporting.ReportMapping;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -56,6 +58,18 @@ public class SignedDocumentItem {
this.reportName = reportName; this.reportName = reportName;
} }
public String getActualReportName() {
for (ReportMapping rm : Constants.REPORTS) {
Report rep = rm.getReport();
if (this.reportId == rep.getReportId()) {
return rep.getName();
}
}
return reportName;
}
public String getFileName() { public String getFileName() {
return fileName; return fileName;
} }

@ -0,0 +1,64 @@
package info.bukova.isspst.filters;
import info.bukova.isspst.DateTimeUtils;
import info.bukova.isspst.StringUtils;
import info.bukova.isspst.data.SignedDocument;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class SignedDocumentFilter implements Filter<SignedDocument>
{
private SignedDocument condition;
public SignedDocumentFilter(SignedDocument cond)
{
this.condition = cond;
}
private static class SignedDocumentMatcher extends TypeSafeMatcher<SignedDocument>
{
private SignedDocument condition;
public SignedDocumentMatcher(SignedDocument cond)
{
this.condition = cond;
}
@Override
public void describeTo(Description desc)
{
desc.appendText("SignedDocument matches");
}
@Override
public boolean matchesSafely(SignedDocument item)
{
boolean foundAgendaName = StringUtils.isEqualForFilter(item.getAgendaName(), condition.getAgendaName());
boolean foundNumSer = StringUtils.isEqualForFilter(item.getNumser(), condition.getNumser());
boolean foundDescription = StringUtils.isEqualForFilter(item.getDescription(), condition.getDescription());
boolean foundSignDate = DateTimeUtils.isEqualByDateForFilter(item.getSignDate(), condition.getSignDate());
return (foundAgendaName && foundNumSer && foundDescription && foundSignDate);
}
@Factory
public static Matcher<SignedDocument> matchBuilding(SignedDocument item)
{
return new SignedDocumentMatcher(item);
}
}
@Override
public SignedDocumentMatcher matcher()
{
return new SignedDocumentMatcher(condition);
}
@Override
public String queryString()
{
return "";
}
}

@ -2,6 +2,21 @@ package info.bukova.isspst.services.signeddocs;
import info.bukova.isspst.data.SignedDocument; import info.bukova.isspst.data.SignedDocument;
import info.bukova.isspst.services.AbstractOwnedService; import info.bukova.isspst.services.AbstractOwnedService;
import info.bukova.isspst.services.LazyLoader;
import org.hibernate.Hibernate;
import org.springframework.transaction.annotation.Transactional;
public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocument> implements SignedDocumentService { public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocument> implements SignedDocumentService {
@LazyLoader("grid")
@Transactional
public void lazyLoadItems(SignedDocument signedDocument) {
if (signedDocument == null) {
return;
}
SignedDocument sd = dao.getById(signedDocument.getId());
Hibernate.initialize(sd.getItems());
signedDocument.setItems(sd.getItems());
}
} }

@ -0,0 +1,73 @@
package info.bukova.isspst.ui.signeddocs;
import info.bukova.isspst.data.SignedDocument;
import info.bukova.isspst.data.SignedDocumentItem;
import info.bukova.isspst.filters.SignedDocumentFilter;
import info.bukova.isspst.services.signeddocs.SignedDocumentService;
import info.bukova.isspst.ui.ListViewModel;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Listbox;
public class SignedDocsList extends ListViewModel<SignedDocument>
{
@SuppressWarnings("unused")
private final static Logger log = LoggerFactory.getLogger(SignedDocsList.class.getName());
@WireVariable
protected SignedDocumentService signedDocumentService;
protected SignedDocumentItem signedDocumentItem;
protected List<SignedDocumentItem> signedDocumentItems;
@Init(superclass = true)
public void initSignedDocsList() {
service = signedDocumentService;
dataClass = SignedDocument.class;
formZul = "form.zul";
dataFilter = new SignedDocumentFilter(getFilterTemplate());
this.signedDocumentItem = null;
this.signedDocumentItems = new ArrayList<SignedDocumentItem>();
}
public SignedDocumentItem getSignedDocumentItem() {
return signedDocumentItem;
}
public void setSignedDocumentItem(SignedDocumentItem signedDocumentItem) {
this.signedDocumentItem = signedDocumentItem;
}
public List<SignedDocumentItem> getSignedDocumentItems() {
return signedDocumentItems;
}
public void setSignedDocumentItems(List<SignedDocumentItem> signedDocumentItems) {
this.signedDocumentItems = signedDocumentItems;
}
@Command
@NotifyChange("signedDocumentItems")
public void onChangeSelectSignedDocs(@BindingParam("ctrl") Listbox lb) {
if (lb == null) {
return;
}
if (lb.getSelectedIndex() > -1) {
this.signedDocumentItems = this.getDataBean().getItems();
}
else {
this.signedDocumentItems = new ArrayList<SignedDocumentItem>();
}
}
}

@ -1,6 +1,11 @@
# Default file # Default file
AppName=Informační systém SPŠ Třebíč AppName=Informační systém SPŠ Třebíč
AgendaSignedDocuments=Podepsané dokumenty AgendaSignedDocuments=Podepsané dokumenty
ActualDocuments=Aktuální dokumenty
AgendaName=Název agendy
SigningDate=Datum podepsání
PrintReports=Tiskové sestavy
FileName=Název souboru
AgendaActRequirements=Aktuální požadavky AgendaActRequirements=Aktuální požadavky
AgendaRequirementsHistory=Ukončené požadavky AgendaRequirementsHistory=Ukončené požadavky

@ -0,0 +1,209 @@
<?page contentType="text/html;charset=UTF-8"?>
<zk>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<window
vflex="1"
border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('info.bukova.isspst.ui.signeddocs.SignedDocsList')">
<caption
image="/img/adobe-032.png"
zclass="form-caption"
label="${labels.AgendaSignedDocuments}" />
<tabbox
vflex="1"
orient="top">
<tabs width="500px">
<tab label="${labels.ActualDocuments}" />
<!-- tab label="${labels.Archive}" /-->
</tabs>
<tabpanels>
<tabpanel>
<include src="toolbar.zul" />
<hlayout vflex="1">
<listbox
vflex="1"
hflex="60"
selectedItem="@bind(vm.dataBean)"
onSelect="@command('onChangeSelectSignedDocs', ctrl=self)"
model="@load(vm.dataList)">
<listhead menupopup="auto">
<listheader
hflex="7"
sort="czech(agendaName)"
label="${labels.AgendaName}" />
<listheader
hflex="4"
sort="czech(numser)"
label="${labels.number}" />
<listheader
hflex="20"
sort="czech(description)"
label="${labels.OrderFormDescription}" />
<listheader
hflex="5"
onCreate="self.sort(false)"
sort="auto(signDate)"
label="${labels.SigningDate}" />
</listhead>
<auxhead visible="@load(vm.filter)">
<auxheader>
<div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox">
<textbox
value="@bind(vm.filterTemplate.agendaName)"
instant="true"
onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)"
sclass="find-grid-textbox" />
</div>
<div sclass="find-grid-img">
<image src="/img/funnel.png" />
</div>
</div>
</auxheader>
<auxheader>
<div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox">
<textbox
value="@bind(vm.filterTemplate.numser)"
instant="true"
onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)"
sclass="find-grid-textbox" />
</div>
<div sclass="find-grid-img">
<image src="/img/funnel.png" />
</div>
</div>
</auxheader>
<auxheader>
<div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox">
<textbox
value="@bind(vm.filterTemplate.description)"
instant="true"
onChange="@command('doFilter')"
maxlength="@load(vm.lengthDescription)"
sclass="find-grid-textbox" />
</div>
<div sclass="find-grid-img">
<image src="/img/funnel.png" />
</div>
</div>
</auxheader>
<auxheader>
<div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox">
<datebox
value="@bind(vm.filterTemplate.signDate)"
format="${labels.DateFormat}"
instant="true"
onChange="@command('doFilter')"
sclass="find-grid-textbox"
width="100%" />
</div>
<div sclass="find-grid-img">
<image src="/img/funnel.png" />
</div>
</div>
</auxheader>
</auxhead>
<template name="model">
<listitem>
<listcell label="@load(each.agendaName)" />
<listcell label="@load(each.numser)" />
<listcell label="@load(each.description)" />
<listcell label="@load(each.signDate) @converter('formatedDate', format=labels.DateFormat)" />
</listitem>
</template>
</listbox>
<listbox
vflex="1"
hflex="40"
selectedItem="@bind(vm.signedDocumentItem)"
model="@load(vm.signedDocumentItems)">
<listhead menupopup="auto">
<listheader
hflex="1"
sort="czech(actualReportName)"
label="${labels.PrintReports}" />
<listheader
hflex="2"
sort="czech(fileName)"
label="${labels.FileName}" />
</listhead>
<template name="model">
<listitem>
<listcell label="@load(each.actualReportName)" />
<listcell label="@load(each.fileName)" />
</listitem>
</template>
</listbox>
</hlayout>
</tabpanel>
<tabpanel>
<!-- listbox
vflex="1"
selectedItem="@bind(vm.selectedOrderItem)"
model="@load(vm.orderItems)">
<listhead menupopup="auto">
<listheader
hflex="7"
sort="czech(code)"
label="${labels.RequirementItemCode}" />
<listheader
hflex="15"
sort="czech(name)"
label="${labels.RequirementItemName}" />
<listheader
hflex="20"
sort="czech(textItem)"
label="${labels.RequirementItemText}" />
<listheader
hflex="5"
sort="auto(quantity)"
align="right"
label="${labels.RequirementItemQuantity}" />
<listheader
hflex="5"
sort="auto(munit.name)"
label="${labels.RequirementItemMUnit}" />
<listheader
hflex="7"
align="right"
sort="auto(unitPrice)"
label="${labels.RequirementItemUnitPrice}" />
<listheader
hflex="7"
align="right"
sort="auto(total)"
label="${labels.RequirementItemTotal}" />
<listheader
hflex="15"
sort="czech(description)"
label="${labels.RequirementItemDescription}" />
<listheader
hflex="5"
sort="auto(reqItem.orderNum)"
label="${labels.OrderAbr}" />
</listhead>
<template name="model">
<listitem>
<listcell label="@load(each.code)" />
<listcell label="@load(each.name)" />
<listcell label="@load(each.textItem)" />
<listcell label="@load(each.quantity) @converter(vm.standardBigDecimalConverter)" />
<listcell label="@load(each.munit.name)" />
<listcell label="@load(each.unitPrice) @converter(vm.standardBigDecimalConverter)" />
<listcell label="@load(each.total) @converter(vm.standardBigDecimalConverter)" />
<listcell label="@load(each.description)" />
<listcell label="@load(each.reqItem.orderNum)" />
</listitem>
</template>
</listbox-->
</tabpanel>
</tabpanels>
</tabbox>
</window>
</zk>

@ -0,0 +1,7 @@
<?page title="toolbar" contentType="text/html;charset=UTF-8"?>
<zk>
<toolbar>
<toolbarbutton image="/img/funnel.png" tooltiptext="${labels.ToolbarRecFilter}" id="btnFilter" onClick="@command('filter')" />
<!-- toolbarbutton image="/img/print.png" tooltiptext="${labels.ToolbarPrint}" id="btnPrint" onClick="@command('onPrint')" /-->
</toolbar>
</zk>
Loading…
Cancel
Save