Josef Rokos 9 years ago
commit 970928bb4e

@ -2,6 +2,7 @@ package info.bukova.isspst;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
@ -54,4 +55,31 @@ public class DateTimeUtils
{ {
return DateTimeUtils.getDate(DateTimeUtils.getCurrDateTime()); return DateTimeUtils.getDate(DateTimeUtils.getCurrDateTime());
} }
public static Calendar getCalendarDelta(Date value, int calendarType, int delta) {
if (value == null) {
value = DateTimeUtils.getCurrDate();
}
Calendar calendar = new GregorianCalendar();
calendar.setTime(value);
int deltaValue = calendar.get(calendarType);
calendar.set(calendarType, deltaValue + delta);
return calendar;
}
public static Calendar getCalendar(Date value) {
if (value == null) {
value = DateTimeUtils.getCurrDate();
}
Calendar calendar = new GregorianCalendar();
calendar.setTime(value);
return calendar;
}
public static Date getDateDelta(Date value, int calendarType, int delta) {
Calendar calendar = DateTimeUtils.getCalendarDelta(value, calendarType, delta);
return calendar.getTime();
}
} }

@ -5,6 +5,8 @@ import info.bukova.isspst.data.SignedDocument;
import info.bukova.isspst.data.SignedDocumentItem; import info.bukova.isspst.data.SignedDocumentItem;
import info.bukova.isspst.services.Service; import info.bukova.isspst.services.Service;
import java.util.List;
public interface SignedDocumentService extends Service<SignedDocument> { public interface SignedDocumentService extends Service<SignedDocument> {
SignedDocument getForEntity(DataModel entity); SignedDocument getForEntity(DataModel entity);
@ -13,4 +15,6 @@ public interface SignedDocumentService extends Service<SignedDocument> {
void delFromApprove(SignedDocument document); void delFromApprove(SignedDocument document);
void deleteForEntity(DataModel entity); void deleteForEntity(DataModel entity);
public List<SignedDocument> getActualList();
public List<SignedDocument> getArchiveList();
} }

@ -1,5 +1,6 @@
package info.bukova.isspst.services.signeddocs; package info.bukova.isspst.services.signeddocs;
import info.bukova.isspst.DateTimeUtils;
import info.bukova.isspst.Module; import info.bukova.isspst.Module;
import info.bukova.isspst.ModuleUtils; import info.bukova.isspst.ModuleUtils;
import info.bukova.isspst.data.DataModel; import info.bukova.isspst.data.DataModel;
@ -7,15 +8,20 @@ import info.bukova.isspst.data.SignedDocument;
import info.bukova.isspst.data.SignedDocumentItem; import info.bukova.isspst.data.SignedDocumentItem;
import info.bukova.isspst.services.AbstractOwnedService; import info.bukova.isspst.services.AbstractOwnedService;
import info.bukova.isspst.services.LazyLoader; import info.bukova.isspst.services.LazyLoader;
import info.bukova.isspst.storage.ReportFileStorage; import info.bukova.isspst.storage.ReportFileStorage;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletContext;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.hibernate.Query; import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletContext;
public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocument> implements SignedDocumentService { public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocument> implements SignedDocumentService {
@Autowired @Autowired
@ -96,5 +102,28 @@ public class SignedDocumentServiceImpl extends AbstractOwnedService<SignedDocume
} }
} }
private Date getTresholdDate() {
Date date = DateTimeUtils.getDateDelta(DateTimeUtils.getCurrDate(), Calendar.YEAR, -1);
return date;
}
@SuppressWarnings("unchecked")
@Override
@Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<SignedDocument> getActualList() {
Query q = dao.getQuery("from SignedDocument where signDate >= :refDate");
q.setParameter("refDate", this.getTresholdDate());
return q.list();
}
@SuppressWarnings("unchecked")
@Override
@Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<SignedDocument> getArchiveList() {
Query q = dao.getQuery("from SignedDocument where signDate < :refDate");
q.setParameter("refDate", this.getTresholdDate());
return q.list();
}
} }

@ -0,0 +1,29 @@
package info.bukova.isspst.ui.signeddocs;
import info.bukova.isspst.data.SignedDocument;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.annotation.Init;
public class SignedDocsActualList extends SignedDocsList {
@Init(superclass = true)
public void SignedDocsActualListInit() {
}
@Override
protected List<SignedDocument> getListFromService() {
try {
return signedDocumentService.getActualList();
}
catch (AccessDeniedException e) {
// BindUtils.postGlobalCommand(null, null, "disableCentre", null);
// e.printStackTrace();
return new ArrayList<SignedDocument>();
}
}
}

@ -0,0 +1,30 @@
package info.bukova.isspst.ui.signeddocs;
import info.bukova.isspst.data.SignedDocument;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.annotation.Init;
public class SignedDocsArchiveList extends SignedDocsList {
@Init(superclass = true)
public void SignedDocsArchiveListInit() {
}
@Override
protected List<SignedDocument> getListFromService() {
try {
return signedDocumentService.getArchiveList();
}
catch (AccessDeniedException e) {
// BindUtils.postGlobalCommand(null, null, "disableCentre", null);
// e.printStackTrace();
return new ArrayList<SignedDocument>();
}
}
}

@ -22,12 +22,25 @@ public class RequirementFormValidator extends BaseValidator
public void validate(ValidationContext ctx) public void validate(ValidationContext ctx)
{ {
Property propertyCentre = ctx.getProperties("centre")[0]; Property propertyCentre = ctx.getProperties("centre")[0];
Workgroup workgroup = (Workgroup) propertyCentre.getValue();
if (workgroup == null) if (propertyCentre != null) {
{ Workgroup workgroup = (Workgroup) propertyCentre.getValue();
this.errorMsg(ctx, StringUtils.localize("RequirementCenterIsEmpty"), "idReqCenter");
return; if (workgroup == null) {
this.errorMsg(ctx, StringUtils.localize("RequirementCenterIsEmpty"), "idReqCenter");
return;
}
}
Property propertyDescription = ctx.getProperties("description")[0];
if (propertyDescription != null) {
String description = (String) propertyDescription.getValue();
if (StringUtils.isNullOrTrimmedEmpty(description)) {
this.errorMsg(ctx, StringUtils.localize("ErrMaterialOrServiceDescription"), "idDescription");
return;
}
} }
} }
} }

@ -357,8 +357,8 @@ SelectGroup=Vybrat skupinu...
RemoveItem=Smazat RemoveItem=Smazat
Confirm=Potvrdit Confirm=Potvrdit
StudentProject = Studentský projekt StudentProject = Zajistím sám
StudentProjectAbr = St. projekt StudentProjectAbr = Zaj. sám
Amount=Částka Amount=Částka
Owner=Vlastník Owner=Vlastník
@ -425,3 +425,6 @@ ErrFillTripBillResultTimes = Zadejte časy odjezdu a příjezdu.
ErrApproveMustBeSigned = Schválení musí být digitálně podepsané. ErrApproveMustBeSigned = Schválení musí být digitálně podepsané.
DigitalSignature = Elektronický podpis DigitalSignature = Elektronický podpis
ContextMenu = Volby v kontextovém menu ContextMenu = Volby v kontextovém menu
ErrMaterialOrServiceDescription=Zadejte popis požadavku.

@ -1,216 +1,129 @@
<?page contentType="text/html;charset=UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul" <hlayout vflex="1">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <listbox
xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"> vflex="1"
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> hflex="60"
<window selectedItem="@bind(vm.dataBean)"
vflex="1" onSelect="@command('onChangeSelectSignedDocs', ctrl=self)"
border="normal" model="@load(vm.dataList)">
apply="org.zkoss.bind.BindComposer" <listhead menupopup="auto">
viewModel="@id('vm') @init('info.bukova.isspst.ui.signeddocs.SignedDocsList')"> <listheader
<caption hflex="7"
image="/img/adobe-032.png" sort="czech(agendaName)"
zclass="form-caption" label="${labels.AgendaName}" />
label="${labels.AgendaSignedDocuments}" /> <listheader
<tabbox hflex="4"
vflex="1" sort="czech(numser)"
orient="top"> label="${labels.number}" />
<tabs width="500px"> <listheader
<tab label="${labels.ActualDocuments}" /> hflex="20"
<!-- tab label="${labels.Archive}" /--> sort="czech(description)"
</tabs> label="${labels.OrderFormDescription}" />
<tabpanels> <listheader
<tabpanel> hflex="5"
<include src="toolbar.zul" /> onCreate="self.sort(false)"
<hlayout vflex="1"> sort="auto(signDate)"
<listbox label="${labels.SigningDate}" />
vflex="1" </listhead>
hflex="60" <auxhead visible="@load(vm.filter)">
selectedItem="@bind(vm.dataBean)" <auxheader>
onSelect="@command('onChangeSelectSignedDocs', ctrl=self)" <div sclass="find-grid-cell">
model="@load(vm.dataList)"> <div sclass="find-grid-divtextbox">
<listhead menupopup="auto"> <textbox
<listheader value="@bind(vm.filterTemplate.agendaName)"
hflex="7" instant="true"
sort="czech(agendaName)" onChange="@command('doFilter')"
label="${labels.AgendaName}" /> maxlength="@load(vm.lengthText)"
<listheader sclass="find-grid-textbox" />
hflex="4" </div>
sort="czech(numser)" <div sclass="find-grid-img">
label="${labels.number}" /> <image src="/img/funnel.png" />
<listheader </div>
hflex="20" </div>
sort="czech(description)" </auxheader>
label="${labels.OrderFormDescription}" /> <auxheader>
<listheader <div sclass="find-grid-cell">
hflex="5" <div sclass="find-grid-divtextbox">
onCreate="self.sort(false)" <textbox
sort="auto(signDate)" value="@bind(vm.filterTemplate.numser)"
label="${labels.SigningDate}" /> instant="true"
</listhead> onChange="@command('doFilter')"
<auxhead visible="@load(vm.filter)"> maxlength="@load(vm.lengthText)"
<auxheader> sclass="find-grid-textbox" />
<div sclass="find-grid-cell"> </div>
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-img">
<textbox <image src="/img/funnel.png" />
value="@bind(vm.filterTemplate.agendaName)" </div>
instant="true" </div>
onChange="@command('doFilter')" </auxheader>
maxlength="@load(vm.lengthText)" <auxheader>
sclass="find-grid-textbox" /> <div sclass="find-grid-cell">
</div> <div sclass="find-grid-divtextbox">
<div sclass="find-grid-img"> <textbox
<image src="/img/funnel.png" /> value="@bind(vm.filterTemplate.description)"
</div> instant="true"
</div> onChange="@command('doFilter')"
</auxheader> maxlength="@load(vm.lengthDescription)"
<auxheader> sclass="find-grid-textbox" />
<div sclass="find-grid-cell"> </div>
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-img">
<textbox <image src="/img/funnel.png" />
value="@bind(vm.filterTemplate.numser)" </div>
instant="true" </div>
onChange="@command('doFilter')" </auxheader>
maxlength="@load(vm.lengthText)" <auxheader>
sclass="find-grid-textbox" /> <div sclass="find-grid-cell">
</div> <div sclass="find-grid-divtextbox">
<div sclass="find-grid-img"> <datebox
<image src="/img/funnel.png" /> value="@bind(vm.filterTemplate.signDate)"
</div> format="${labels.DateFormat}"
</div> instant="true"
</auxheader> onChange="@command('doFilter')"
<auxheader> sclass="find-grid-textbox"
<div sclass="find-grid-cell"> width="100%" />
<div sclass="find-grid-divtextbox"> </div>
<textbox <div sclass="find-grid-img">
value="@bind(vm.filterTemplate.description)" <image src="/img/funnel.png" />
instant="true" </div>
onChange="@command('doFilter')" </div>
maxlength="@load(vm.lengthDescription)" </auxheader>
sclass="find-grid-textbox" /> </auxhead>
</div> <template name="model">
<div sclass="find-grid-img"> <listitem>
<image src="/img/funnel.png" /> <listcell label="@load(each.agendaName)" />
</div> <listcell label="@load(each.numser)" />
</div> <listcell label="@load(each.description)" />
</auxheader> <listcell label="@load(each.signDate) @converter('formatedDate', format=labels.DateFormat)" />
<auxheader> </listitem>
<div sclass="find-grid-cell"> </template>
<div sclass="find-grid-divtextbox"> </listbox>
<datebox <listbox
value="@bind(vm.filterTemplate.signDate)" vflex="1"
format="${labels.DateFormat}" hflex="40"
instant="true" selectedItem="@bind(vm.signedDocumentItem)"
onChange="@command('doFilter')" model="@load(vm.signedDocumentItems)">
sclass="find-grid-textbox" <listhead menupopup="auto">
width="100%" /> <listheader
</div> hflex="2"
<div sclass="find-grid-img"> sort="czech(actualReportName)"
<image src="/img/funnel.png" /> label="${labels.PrintReports}" />
</div> <listheader
</div> hflex="3"
</auxheader> sort="czech(fileName)"
</auxhead> label="${labels.FileName}" />
<template name="model"> <listheader hflex="1" />
<listitem> </listhead>
<listcell label="@load(each.agendaName)" /> <template name="model">
<listcell label="@load(each.numser)" /> <listitem>
<listcell label="@load(each.description)" /> <listcell label="@load(each.actualReportName)" />
<listcell label="@load(each.signDate) @converter('formatedDate', format=labels.DateFormat)" /> <listcell label="@load(each.fileName)" />
</listitem> <listcell>
</template> <button
</listbox> label="Otevřít"
<listbox onClick="@command('onOpen', item = each)"
vflex="1" sclass="nicebutton" />
hflex="40" </listcell>
selectedItem="@bind(vm.signedDocumentItem)" </listitem>
model="@load(vm.signedDocumentItems)"> </template>
<listhead menupopup="auto"> </listbox>
<listheader </hlayout>
hflex="2"
sort="czech(actualReportName)"
label="${labels.PrintReports}" />
<listheader
hflex="3"
sort="czech(fileName)"
label="${labels.FileName}" />
<listheader
hflex="1"/>
</listhead>
<template name="model">
<listitem>
<listcell label="@load(each.actualReportName)" />
<listcell label="@load(each.fileName)" />
<listcell>
<button label="Otevřít" onClick="@command('onOpen', item = each)" sclass="nicebutton"/>
</listcell>
</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,13 @@
<zk>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<window
vflex="1"
border="none"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('info.bukova.isspst.ui.signeddocs.SignedDocsActualList')">
<include src="/lists/signeddocs/toolbar.zul" />
<include
vflex="1"
src="/lists/signeddocs/grid.zul" />
</window>
</zk>

@ -0,0 +1,13 @@
<zk>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<window
vflex="1"
border="none"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('info.bukova.isspst.ui.signeddocs.SignedDocsArchiveList')">
<include src="/lists/signeddocs/toolbar.zul" />
<include
vflex="1"
src="/lists/signeddocs/grid.zul" />
</window>
</zk>

@ -2,7 +2,7 @@
<zk> <zk>
<zscript> <zscript>
String gridZul = "grid.zul"; String gridZul = "setup.zul";
</zscript> </zscript>
<include src="/app/template.zhtml"/> <include src="/app/template.zhtml"/>

@ -0,0 +1,19 @@
<?page contentType="text/html;charset=UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<zscript>
String gridActual = "/lists/signeddocs/headListActual.zul";
String gridArchive = "/lists/signeddocs/headListArchive.zul";
</zscript>
<window
vflex="1"
border="normal">
<caption
src="/img/adobe-032.png"
zclass="form-caption"
label="${labels.AgendaSignedDocuments}" />
<include
vflex="1"
src="/lists/signeddocs/tabPanels.zul" />
</window>
</zk>

@ -0,0 +1,17 @@
<tabbox
apply="org.zkoss.bind.BindComposer"
orient="top"
vflex="1">
<tabs>
<tab label="${labels.ActualDocuments}" />
<tab label="${labels.Archive}" />
</tabs>
<tabpanels>
<tabpanel>
<include src="${gridActual}" />
</tabpanel>
<tabpanel>
<include src="${gridArchive}" />
</tabpanel>
</tabpanels>
</tabbox>

@ -81,7 +81,7 @@
<cell sclass="row-title">${labels.RequirementsFormDescription} :</cell> <cell sclass="row-title">${labels.RequirementsFormDescription} :</cell>
<cell> <cell>
<textbox <textbox
id="description" id="idDescription"
width="400px" width="400px"
rows="5" rows="5"
maxlength="@load(vm.lengthDescription)" maxlength="@load(vm.lengthDescription)"

Loading…
Cancel
Save