8 Commits

43 changed files with 424 additions and 114 deletions
+6 -1
View File
@@ -229,7 +229,12 @@
<artifactId>hibernate-search</artifactId> <artifactId>hibernate-search</artifactId>
<version>4.4.6.Final</version> <version>4.4.6.Final</version>
</dependency> </dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.2.8.Final</version>
</dependency>
<!-- ZK --> <!-- ZK -->
<dependency> <dependency>
<groupId>org.zkoss.zk</groupId> <groupId>org.zkoss.zk</groupId>
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import static org.apache.commons.lang.StringUtils.strip;
public class BigDecimalUtils public class BigDecimalUtils
{ {
@@ -23,6 +24,17 @@ public class BigDecimalUtils
String valueS = value.toPlainString(); String valueS = value.toPlainString();
String searchS = search.toPlainString(); String searchS = search.toPlainString();
if (valueS.contains(".") || valueS.contains(",")) {
valueS = strip(valueS, "0");
valueS = strip(valueS, ".,");
}
if (searchS.contains(".") || searchS.contains(",")) {
searchS = strip(searchS, "0");
searchS = strip(searchS, ".,");
}
boolean result = (valueS.compareTo(searchS) == 0); boolean result = (valueS.compareTo(searchS) == 0);
String s = "search='" + searchS + "', value='" + valueS + "', equal=" + (result ? "true" : "false"); String s = "search='" + searchS + "', value='" + valueS + "', equal=" + (result ? "true" : "false");
@@ -1,6 +1,9 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import java.util.Date; import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.FetchType; import javax.persistence.FetchType;
@@ -10,9 +13,7 @@ import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass; import javax.persistence.MappedSuperclass;
import javax.persistence.Transient; import javax.persistence.Transient;
import java.util.Date;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
@MappedSuperclass @MappedSuperclass
@Indexed @Indexed
@@ -29,10 +30,12 @@ public abstract class BaseData implements OwnedDataModel {
@ManyToOne(fetch=FetchType.LAZY) @ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="OWNED_BY_ID") @JoinColumn(name="OWNED_BY_ID")
@IndexedEmbedded @IndexedEmbedded
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private User ownedBy; private User ownedBy;
@ManyToOne(fetch=FetchType.LAZY) @ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MODIFIED_BY_ID") @JoinColumn(name="MODIFIED_BY_ID")
@IndexedEmbedded @IndexedEmbedded
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private User modifiedBy; private User modifiedBy;
@Transient @Transient
private boolean valid; private boolean valid;
@@ -1,5 +1,8 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
@@ -11,6 +14,7 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "JOBMAPPING") @Table(name = "JOBMAPPING")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class JobMapping { public class JobMapping {
@Id @Id
@@ -19,9 +23,11 @@ public class JobMapping {
private int id; private int id;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "MEMBER_ID") @JoinColumn(name = "MEMBER_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Member member; private Member member;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ROLE_ID") @JoinColumn(name = "ROLE_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Role role; private Role role;
public JobMapping() { public JobMapping() {
@@ -1,8 +1,9 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import java.util.ArrayList; import org.hibernate.annotations.Cache;
import java.util.Date; import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.util.List; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@@ -15,12 +16,13 @@ import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.Transient; import javax.persistence.Transient;
import java.util.ArrayList;
import org.hibernate.annotations.LazyCollection; import java.util.Date;
import org.hibernate.annotations.LazyCollectionOption; import java.util.List;
@Entity @Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class Member implements DataModel { public abstract class Member implements DataModel {
@Id @Id
@@ -33,6 +35,7 @@ public abstract class Member implements DataModel {
@ManyToMany @ManyToMany
@LazyCollection(LazyCollectionOption.TRUE) @LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name="MEMBER_PARENT", joinColumns={@JoinColumn(name="MEMBER_ID")}, inverseJoinColumns={@JoinColumn(name="PARENT_ID")}) @JoinTable(name="MEMBER_PARENT", joinColumns={@JoinColumn(name="MEMBER_ID")}, inverseJoinColumns={@JoinColumn(name="PARENT_ID")})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<Workgroup> parents; private List<Workgroup> parents;
@Transient @Transient
private boolean valid; private boolean valid;
@@ -1,6 +1,9 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.Constants; import info.bukova.isspst.Constants;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.springframework.security.core.GrantedAuthority;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@@ -8,10 +11,9 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated; import javax.persistence.Enumerated;
import javax.persistence.Table; import javax.persistence.Table;
import org.springframework.security.core.GrantedAuthority;
@Entity @Entity
@Table(name="PERMISSION") @Table(name="PERMISSION")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Permission extends BaseSimpleData implements GrantedAuthority { public class Permission extends BaseSimpleData implements GrantedAuthority {
/** /**
@@ -1,9 +1,7 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import java.math.BigDecimal; import org.hibernate.search.annotations.Indexed;
import java.util.ArrayList; import org.hibernate.search.annotations.IndexedEmbedded;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
@@ -11,9 +9,10 @@ import javax.persistence.Entity;
import javax.persistence.FetchType; import javax.persistence.FetchType;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import java.math.BigDecimal;
import org.hibernate.search.annotations.Indexed; import java.util.ArrayList;
import org.hibernate.search.annotations.IndexedEmbedded; import java.util.Date;
import java.util.List;
@Entity @Entity
@Table(name = "REQUIREMENT") @Table(name = "REQUIREMENT")
@@ -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 org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption; import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.Analyze;
@@ -24,6 +26,7 @@ import java.util.List;
@MappedSuperclass @MappedSuperclass
@Indexed @Indexed
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class RequirementBase extends BaseData implements FilterableRequirement, SeasonsAware { public class RequirementBase extends BaseData implements FilterableRequirement, SeasonsAware {
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@@ -43,9 +46,11 @@ public class RequirementBase extends BaseData implements FilterableRequirement,
private String description; private String description;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CENTRE_ID") @JoinColumn(name = "CENTRE_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Workgroup centre; private Workgroup centre;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "WORKGROUP_ID") @JoinColumn(name = "WORKGROUP_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Workgroup workgroup; private Workgroup workgroup;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@LazyCollection(LazyCollectionOption.TRUE) @LazyCollection(LazyCollectionOption.TRUE)
@@ -56,6 +61,7 @@ public class RequirementBase extends BaseData implements FilterableRequirement,
private RequirementState state; private RequirementState state;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SEASON_ID") @JoinColumn(name = "SEASON_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Season season; private Season season;
public RequirementBase() { public RequirementBase() {
@@ -1,9 +1,11 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.Constants; import info.bukova.isspst.Constants;
import org.hibernate.annotations.Cache;
import java.util.ArrayList; import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.util.List; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.springframework.security.core.GrantedAuthority;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@@ -11,13 +13,12 @@ import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.ArrayList;
import org.hibernate.annotations.LazyCollection; import java.util.List;
import org.hibernate.annotations.LazyCollectionOption;
import org.springframework.security.core.GrantedAuthority;
@Entity @Entity
@Table(name="ROLE") @Table(name="ROLE")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Role extends BaseSimpleData implements GrantedAuthority, DataModel { public class Role extends BaseSimpleData implements GrantedAuthority, DataModel {
/** /**
@@ -32,6 +33,7 @@ public class Role extends BaseSimpleData implements GrantedAuthority, DataModel
@ManyToMany @ManyToMany
@LazyCollection(LazyCollectionOption.FALSE) @LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="ROLE_PERMISSION", joinColumns={@JoinColumn(name="ROLE_ID")}, inverseJoinColumns={@JoinColumn(name="PERMISSION_ID")}) @JoinTable(name="ROLE_PERMISSION", joinColumns={@JoinColumn(name="ROLE_ID")}, inverseJoinColumns={@JoinColumn(name="PERMISSION_ID")})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<Permission> permissions; private List<Permission> permissions;
@Column(name = "WORKGROUP") @Column(name = "WORKGROUP")
private boolean workgroup; private boolean workgroup;
@@ -1,5 +1,8 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Table; import javax.persistence.Table;
@@ -10,6 +13,7 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name = "SEASON") @Table(name = "SEASON")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Season extends BaseData { public class Season extends BaseData {
@Column(name = "DESCRIPTION") @Column(name = "DESCRIPTION")
private String description; private String description;
@@ -2,6 +2,8 @@ package info.bukova.isspst.data;
import info.bukova.isspst.Constants; import info.bukova.isspst.Constants;
import info.bukova.isspst.storage.EntityWithAttachment; import info.bukova.isspst.storage.EntityWithAttachment;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption; import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.Analyze;
@@ -31,6 +33,7 @@ public class TripBill extends BaseData implements EntityWithAttachment, SeasonsA
@OneToOne(fetch = FetchType.EAGER) @OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "REQUIREMENT_ID") @JoinColumn(name = "REQUIREMENT_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private TripRequirement requirement; private TripRequirement requirement;
@Column(name = "RESULT_MESSAGE_DATE") @Column(name = "RESULT_MESSAGE_DATE")
private Date resultMessageDate; private Date resultMessageDate;
@@ -72,6 +75,7 @@ public class TripBill extends BaseData implements EntityWithAttachment, SeasonsA
private Date paidDate; private Date paidDate;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "SEASON_ID") @JoinColumn(name = "SEASON_ID")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Season season; private Season season;
public TripBill() { public TripBill() {
@@ -1,11 +1,13 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.storage.EntityWithAttachment; import info.bukova.isspst.storage.EntityWithAttachment;
import org.hibernate.annotations.LazyCollection;
import java.math.BigDecimal; import org.hibernate.annotations.LazyCollectionOption;
import java.util.ArrayList; import org.hibernate.search.annotations.Analyze;
import java.util.Date; import org.hibernate.search.annotations.Field;
import java.util.List; import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
@@ -16,14 +18,10 @@ import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import java.math.BigDecimal;
import org.hibernate.annotations.LazyCollection; import java.util.ArrayList;
import org.hibernate.annotations.LazyCollectionOption; import java.util.Date;
import org.hibernate.search.annotations.Analyze; import java.util.List;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
@Entity @Entity
@Table(name = "TRIPREQUIREMENT") @Table(name = "TRIPREQUIREMENT")
@@ -1,9 +1,13 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.StringUtils; import info.bukova.isspst.StringUtils;
import org.hibernate.annotations.Cache;
import java.util.ArrayList; import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.util.List; import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Embedded; import javax.persistence.Embedded;
@@ -13,16 +17,13 @@ import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.ArrayList;
import org.hibernate.search.annotations.Analyze; import java.util.List;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.springframework.security.core.userdetails.UserDetails;
@Entity @Entity
@Table(name="USER") @Table(name="USER")
@Indexed @Indexed
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User extends Member implements UserDetails, DataModel { public class User extends Member implements UserDetails, DataModel {
/** /**
@@ -50,6 +51,7 @@ public class User extends Member implements UserDetails, DataModel {
private boolean notify; private boolean notify;
@ManyToMany(fetch=FetchType.EAGER) @ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="USER_ROLE", joinColumns={@JoinColumn(name="USER_ID")}, inverseJoinColumns={@JoinColumn(name="ROLE_ID")}) @JoinTable(name="USER_ROLE", joinColumns={@JoinColumn(name="USER_ID")}, inverseJoinColumns={@JoinColumn(name="ROLE_ID")})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<Role> authorities; private List<Role> authorities;
@Column(name="SETTINGS", length=1048576) @Column(name="SETTINGS", length=1048576)
private String settings; private String settings;
@@ -1,11 +1,10 @@
package info.bukova.isspst.data; package info.bukova.isspst.data;
import info.bukova.isspst.StringUtils; import info.bukova.isspst.StringUtils;
import org.hibernate.annotations.Cache;
import java.io.Serializable; import org.hibernate.annotations.CacheConcurrencyStrategy;
import java.math.BigDecimal; import org.hibernate.annotations.LazyCollection;
import java.util.ArrayList; import org.hibernate.annotations.LazyCollectionOption;
import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
@@ -17,12 +16,14 @@ import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient; import javax.persistence.Transient;
import java.io.Serializable;
import org.hibernate.annotations.LazyCollection; import java.math.BigDecimal;
import org.hibernate.annotations.LazyCollectionOption; import java.util.ArrayList;
import java.util.List;
@Entity @Entity
@Table(name = "WORKGROUP") @Table(name = "WORKGROUP")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Workgroup extends Member implements OwnedDataModel, Serializable { public class Workgroup extends Member implements OwnedDataModel, Serializable {
/** /**
@@ -37,6 +38,7 @@ public class Workgroup extends Member implements OwnedDataModel, Serializable {
@ManyToMany(cascade = {CascadeType.ALL}) @ManyToMany(cascade = {CascadeType.ALL})
@LazyCollection(LazyCollectionOption.TRUE) @LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name="WORKGROUP_MEMBER", joinColumns={@JoinColumn(name="WORKGROUP_ID")}, inverseJoinColumns={@JoinColumn(name="JOBMAPPING_ID")}) @JoinTable(name="WORKGROUP_MEMBER", joinColumns={@JoinColumn(name="WORKGROUP_ID")}, inverseJoinColumns={@JoinColumn(name="JOBMAPPING_ID")})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<JobMapping> members; private List<JobMapping> members;
@Column(name = "CENTRE") @Column(name = "CENTRE")
private boolean centre; private boolean centre;
@@ -1,5 +1,6 @@
package info.bukova.isspst.filters; package info.bukova.isspst.filters;
import info.bukova.isspst.BigDecimalUtils;
import info.bukova.isspst.BooleanUtils; import info.bukova.isspst.BooleanUtils;
import info.bukova.isspst.DateTimeUtils; import info.bukova.isspst.DateTimeUtils;
import info.bukova.isspst.StringUtils; import info.bukova.isspst.StringUtils;
@@ -48,7 +49,8 @@ public class RequirementFilter implements Filter<Requirement>
boolean foundDeliveryDate = DateTimeUtils.isEqualByDateForFilter(item.getDeliveryDate(), condition.getDeliveryDate()); boolean foundDeliveryDate = DateTimeUtils.isEqualByDateForFilter(item.getDeliveryDate(), condition.getDeliveryDate());
boolean foundUser = User.isEqualByUserForFilter(item.getOwnedBy(), condition.getOwnedBy()); boolean foundUser = User.isEqualByUserForFilter(item.getOwnedBy(), condition.getOwnedBy());
boolean foundProject = BooleanUtils.isEqualByBooleanValue(item.getProject(), condition.getProject()); boolean foundProject = BooleanUtils.isEqualByBooleanValue(item.getProject(), condition.getProject());
return (foundNumser && foundReqDate && foundCenter && foundDescription && foundDeliveryDate && foundUser && foundProject); boolean foundSumTotal = BigDecimalUtils.isEqualByDecimalForFilter(item.getSumTotal(), condition.getSumTotal());
return (foundNumser && foundReqDate && foundCenter && foundDescription && foundDeliveryDate && foundUser && foundProject && foundSumTotal);
} }
@Factory @Factory
@@ -129,7 +129,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')") @PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<Invoicing> getMaterialPendingList() { public List<Invoicing> getMaterialPendingList() {
Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed Is Null or inv.completed = false) and (rq.kind = :kind) order by rq.numser"); Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed Is Null or inv.completed = false) and (rq.kind = :kind) order by rq.numser desc");
q.setParameter("kind", Constants.REQ_TYPE_MATERIAL); q.setParameter("kind", Constants.REQ_TYPE_MATERIAL);
return q.list(); return q.list();
} }
@@ -139,7 +139,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')") @PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<Invoicing> getMaterialArchiveList() { public List<Invoicing> getMaterialArchiveList() {
Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed = true) and (rq.kind = :kind) order by rq.numser"); Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed = true) and (rq.kind = :kind) order by rq.numser desc");
q.setParameter("kind", Constants.REQ_TYPE_MATERIAL); q.setParameter("kind", Constants.REQ_TYPE_MATERIAL);
return q.list(); return q.list();
} }
@@ -149,7 +149,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')") @PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<Invoicing> getServicesPendingList() { public List<Invoicing> getServicesPendingList() {
Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed Is Null or inv.completed = false) and (rq.kind = :kind) order by rq.numser"); Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed Is Null or inv.completed = false) and (rq.kind = :kind) order by rq.numser desc");
q.setParameter("kind", Constants.REQ_TYPE_SERVICES); q.setParameter("kind", Constants.REQ_TYPE_SERVICES);
return q.list(); return q.list();
} }
@@ -159,7 +159,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_READ')") @PreAuthorize("hasPermission(this, 'PERM_READ')")
public List<Invoicing> getServicesArchiveList() { public List<Invoicing> getServicesArchiveList() {
Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed = true) and (rq.kind = :kind) order by rq.numser"); Query q = dao.getQuery("select inv from Invoicing as inv join fetch inv.requirement rq join fetch rq.ownedBy where (inv.completed = true) and (rq.kind = :kind) order by rq.numser desc");
q.setParameter("kind", Constants.REQ_TYPE_SERVICES); q.setParameter("kind", Constants.REQ_TYPE_SERVICES);
return q.list(); return q.list();
} }
@@ -35,8 +35,11 @@ import info.bukova.isspst.services.workgroups.WorkgroupService;
import info.bukova.isspst.signapi.SignData; import info.bukova.isspst.signapi.SignData;
import info.bukova.isspst.storage.FileStorage; import info.bukova.isspst.storage.FileStorage;
import info.bukova.isspst.storage.ReportFileStorage; import info.bukova.isspst.storage.ReportFileStorage;
import info.bukova.isspst.storage.StorageException;
import org.hibernate.LazyInitializationException; import org.hibernate.LazyInitializationException;
import org.hibernate.Query; import org.hibernate.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PostFilter; import org.springframework.security.access.prepost.PostFilter;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@@ -87,6 +90,8 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
@Autowired @Autowired
private SeasonService seasonService; private SeasonService seasonService;
private final static Logger logger = LoggerFactory.getLogger(RequirementBaseServiceImpl.class);
@Override @Override
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_ADD')") @PreAuthorize("hasPermission(this, 'PERM_ADD')")
@@ -580,9 +585,14 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
public void update(T entity) { public void update(T entity) {
entity.getAuthorization().clear(); entity.getAuthorization().clear();
entity.setState(RequirementState.NEW); entity.setState(RequirementState.NEW);
signedDocumentService.deleteForEntity(entity);
super.update(entity); super.update(entity);
try {
signedDocumentService.deleteForEntity(entity);
} catch (StorageException e) {
logger.warn(e.getMessage());
}
sendToApprovers(entity); sendToApprovers(entity);
} }
@@ -590,7 +600,12 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_DELETE') or hasPermission(#entity, this.getDeleteEntityPermission())") @PreAuthorize("hasPermission(this, 'PERM_DELETE') or hasPermission(#entity, this.getDeleteEntityPermission())")
public void delete(T entity) { public void delete(T entity) {
signedDocumentService.delFromApprove(signedDocumentService.getForEntity(entity));
super.delete(entity); super.delete(entity);
try {
signedDocumentService.delFromApprove(signedDocumentService.getForEntity(entity));
} catch (StorageException e) {
logger.warn(e.getMessage());
}
} }
} }
@@ -12,7 +12,10 @@ import info.bukova.isspst.services.IsspstException;
import info.bukova.isspst.services.requirement.RequirementBaseServiceImpl; import info.bukova.isspst.services.requirement.RequirementBaseServiceImpl;
import info.bukova.isspst.services.requirement.RequirementTypeService; import info.bukova.isspst.services.requirement.RequirementTypeService;
import info.bukova.isspst.services.signeddocs.SignedDocumentService; import info.bukova.isspst.services.signeddocs.SignedDocumentService;
import info.bukova.isspst.storage.StorageException;
import org.hibernate.Query; import org.hibernate.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -31,6 +34,8 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
@Autowired @Autowired
private SignedDocumentService signedDocumentService; private SignedDocumentService signedDocumentService;
private final static Logger logger = LoggerFactory.getLogger(TripBillApproval.class);
@Override @Override
public TripBillApproval createApproval(TripBill bill) { public TripBillApproval createApproval(TripBill bill) {
if (bill.getApproval() != null) { if (bill.getApproval() != null) {
@@ -72,9 +77,24 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
@Transactional @Transactional
@PreAuthorize("hasPermission(this, 'PERM_DELETE') or this.canApprove(#bill.approval)") @PreAuthorize("hasPermission(this, 'PERM_DELETE') or this.canApprove(#bill.approval)")
public void cancelApproval(TripBill bill) { public void cancelApproval(TripBill bill) {
TripBillApproval approval = bill.getApproval();
if (approval != null) {
super.delete(approval);
}
removeApproval(bill);
}
private void removeApproval(TripBill bill) {
bill.setApproval(null); bill.setApproval(null);
signedDocumentService.deleteForEntity(bill);
tripBillService.update(bill); tripBillService.update(bill);
try {
signedDocumentService.deleteForEntity(bill);
} catch (StorageException e) {
logger.warn(e.getMessage());
}
} }
@Override @Override
@@ -96,7 +116,7 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
if (bill != null) { if (bill != null) {
dao.delete(entity); dao.delete(entity);
cancelApproval(bill); removeApproval(bill);
} else { } else {
super.delete(entity); super.delete(entity);
} }
@@ -135,7 +135,7 @@ public class TripBillServiceImpl extends AbstractOwnedService<TripBill> implemen
} }
if (item.getBackDeparture() == null) { if (item.getBackDeparture() == null) {
timeBack = (new LocalTime()).withHourOfDay(23).withMinuteOfHour(59); timeBack = (new LocalTime()).withHourOfDay(23).withMinuteOfHour(00);
allDay = true; allDay = true;
} else { } else {
timeBack = new LocalTime(item.getBackDeparture()); timeBack = new LocalTime(item.getBackDeparture());
@@ -0,0 +1,69 @@
package info.bukova.isspst.ui;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zkoss.bind.BindContext;
import org.zkoss.bind.Converter;
import org.zkoss.util.Locales;
import org.zkoss.zk.ui.Component;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Locale;
public class BigDecimalFilterConverter implements Converter<String, BigDecimal, Component>
{
private final static Logger log = LoggerFactory.getLogger(BigDecimalFilterConverter.class.getName());
@Override
public BigDecimal coerceToBean(String str, Component component, BindContext cx)
{
// BigDecimal val = BigDecimal.ZERO;
BigDecimal val = null;
if (str != null)
{
try
{
Locale loc = Locales.getCurrent();
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(loc);
format.setParseBigDecimal(true);
val = (BigDecimal) format.parse(str);
}
catch (NumberFormatException e)
{
log.warn(str, e);
}
catch (ParseException e)
{
log.warn(str, e);
}
}
return val;
}
@Override
public String coerceToUi(BigDecimal val, Component component, BindContext cx)
{
Locale loc = Locales.getCurrent();
if (val == null)
{
return "";
//val = BigDecimal.ZERO;
}
val = val.setScale(2, BigDecimal.ROUND_DOWN);
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(loc);
format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(0);
format.setGroupingUsed(true);
format.setGroupingSize(3);
String formatted = format.format(val);
return formatted;
}
}
@@ -16,6 +16,18 @@ import org.zkoss.zul.Messagebox;
public class DocumentViewModel public class DocumentViewModel
{ {
protected BigDecimalFilterConverter standardBigDecimalFilterConverter;
public BigDecimalFilterConverter getStandardBigDecimalFilterConverter()
{
return standardBigDecimalFilterConverter;
}
public void setStandardBigDecimalFilterConverter(BigDecimalFilterConverter standardBigDecimalFilterConverter)
{
this.standardBigDecimalFilterConverter = standardBigDecimalFilterConverter;
}
protected BigDecimalConverter standardBigDecimalConverter; protected BigDecimalConverter standardBigDecimalConverter;
protected BoolConverter standardBoolConverter; protected BoolConverter standardBoolConverter;
@@ -53,6 +65,7 @@ public class DocumentViewModel
@Init @Init
public void initDocumentViewModel() public void initDocumentViewModel()
{ {
this.standardBigDecimalFilterConverter = new BigDecimalFilterConverter();
this.standardBigDecimalConverter = new BigDecimalConverter(); this.standardBigDecimalConverter = new BigDecimalConverter();
this.standardBoolConverter = new BoolConverter(); this.standardBoolConverter = new BoolConverter();
} }
@@ -23,10 +23,12 @@ import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Messagebox; import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Window; import org.zkoss.zul.Window;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -48,6 +50,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
private boolean sortDesc = true; private boolean sortDesc = true;
private boolean newRec = false; private boolean newRec = false;
private boolean fullFill = false; private boolean fullFill = false;
private Listheader sortHeader;
@WireVariable @WireVariable
private SeasonService seasonService; private SeasonService seasonService;
@@ -144,6 +147,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
dataList = fullList; dataList = fullList;
dataBean = null; dataBean = null;
selIndex = -1; selIndex = -1;
restoreSort();
} else { } else {
doFilter(); doFilter();
dataBean = null; dataBean = null;
@@ -280,9 +284,10 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
dataList.set(selIndex, editBean); dataList.set(selIndex, editBean);
} }
} }
BindUtils.postGlobalCommand(null, null, "reloadRelated", null); BindUtils.postGlobalCommand(null, null, "reloadRelated", null);
restoreUserView();
} }
@GlobalCommand @GlobalCommand
@@ -334,13 +339,13 @@ 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(); afterSelect();
} }
} }
protected void beforeSelectViaUrl() { protected void beforeSelectViaUrl() {
} }
@@ -350,14 +355,13 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
} }
@Command @Command
@NotifyChange("dataBean") @NotifyChange({"dataBean", "canApprove"})
public void onSort(@BindingParam("column") String column) { public void onSortHeader(@BindingParam("header") Listheader header) {
if (sortCol == null || this.sortCol.equals(column)) sortHeader = header;
this.sortDesc = !this.sortDesc;
this.sortCol = column;
selIndex = -1; selIndex = -1;
dataBean = null; dataBean = null;
Collections.sort(dataList,
sortHeader.getSortDirection().equals("ascending") ? sortHeader.getSortDescending() : sortHeader.getSortAscending());
} }
public int getSelIndex() { public int getSelIndex() {
@@ -412,7 +416,28 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
protected void setFullFill(boolean fullFill) { protected void setFullFill(boolean fullFill) {
this.fullFill = fullFill; this.fullFill = fullFill;
} }
protected void restoreUserView() {
int sel = selIndex;
restoreFilter();
restoreSort();
selIndex = sel;
}
private void restoreSort() {
if (sortHeader != null) {
Collections.sort(dataList,
sortHeader.getSortDirection().equals("ascending") ? sortHeader.getSortAscending() : sortHeader.getSortDescending());
}
}
private void restoreFilter() {
if (filter) {
doFilter();
}
}
public boolean isRecordSelected() public boolean isRecordSelected()
{ {
return (dataBean != null); return (dataBean != null);
@@ -72,6 +72,7 @@ public class ApproveDialogVM {
BindUtils.postNotifyChange(null, null, grid, "dataBean"); BindUtils.postNotifyChange(null, null, grid, "dataBean");
BindUtils.postNotifyChange(null, null, grid, "canApprove"); BindUtils.postNotifyChange(null, null, grid, "canApprove");
BindUtils.postGlobalCommand(null, null, "reload", null); BindUtils.postGlobalCommand(null, null, "reload", null);
grid.refresh();
window.detach(); window.detach();
} catch (ApproveException ex) { } catch (ApproveException ex) {
Messagebox.show(StringUtils.localize(ex.getReason()), StringUtils.localize("Error"), Messagebox.OK, Messagebox.show(StringUtils.localize(ex.getReason()), StringUtils.localize("Error"), Messagebox.OK,
@@ -6,11 +6,6 @@ import info.bukova.isspst.filters.RequirementFilter;
import info.bukova.isspst.services.requirement.RequirementService; import info.bukova.isspst.services.requirement.RequirementService;
import info.bukova.isspst.services.workgroups.WorkgroupService; import info.bukova.isspst.services.workgroups.WorkgroupService;
import info.bukova.isspst.ui.requirement.RequirementSubpage; import info.bukova.isspst.ui.requirement.RequirementSubpage;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.BindUtils; import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.GlobalCommand; import org.zkoss.bind.annotation.GlobalCommand;
@@ -18,6 +13,10 @@ import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.select.annotation.WireVariable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class ReqListMyAll extends RequirementSubpage<Requirement> public class ReqListMyAll extends RequirementSubpage<Requirement>
{ {
@WireVariable @WireVariable
@@ -55,10 +54,11 @@ public class ReqListMyAll extends RequirementSubpage<Requirement>
} }
@GlobalCommand @GlobalCommand
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
public void reloadRelated() public void reloadRelated()
{ {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -6,11 +6,6 @@ import info.bukova.isspst.filters.RequirementFilter;
import info.bukova.isspst.services.requirement.RequirementService; import info.bukova.isspst.services.requirement.RequirementService;
import info.bukova.isspst.services.workgroups.WorkgroupService; import info.bukova.isspst.services.workgroups.WorkgroupService;
import info.bukova.isspst.ui.requirement.RequirementSubpage; import info.bukova.isspst.ui.requirement.RequirementSubpage;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.BindUtils; import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.GlobalCommand; import org.zkoss.bind.annotation.GlobalCommand;
@@ -18,6 +13,10 @@ import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.select.annotation.WireVariable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class ReqListMyCenters extends RequirementSubpage<Requirement> public class ReqListMyCenters extends RequirementSubpage<Requirement>
{ {
@WireVariable @WireVariable
@@ -55,10 +54,11 @@ public class ReqListMyCenters extends RequirementSubpage<Requirement>
} }
@GlobalCommand @GlobalCommand
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
public void reloadRelated() public void reloadRelated()
{ {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -6,11 +6,6 @@ import info.bukova.isspst.filters.RequirementFilter;
import info.bukova.isspst.services.requirement.RequirementService; import info.bukova.isspst.services.requirement.RequirementService;
import info.bukova.isspst.services.workgroups.WorkgroupService; import info.bukova.isspst.services.workgroups.WorkgroupService;
import info.bukova.isspst.ui.requirement.RequirementSubpage; import info.bukova.isspst.ui.requirement.RequirementSubpage;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.AccessDeniedException;
import org.zkoss.bind.BindUtils; import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.GlobalCommand; import org.zkoss.bind.annotation.GlobalCommand;
@@ -18,6 +13,10 @@ import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zk.ui.select.annotation.WireVariable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class ReqListMyWorkgroups extends RequirementSubpage<Requirement> public class ReqListMyWorkgroups extends RequirementSubpage<Requirement>
{ {
@WireVariable @WireVariable
@@ -55,10 +54,11 @@ public class ReqListMyWorkgroups extends RequirementSubpage<Requirement>
} }
@GlobalCommand @GlobalCommand
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
public void reloadRelated() public void reloadRelated()
{ {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -63,9 +63,10 @@ public class TripRequirementListAll extends RequirementSubpage<TripRequirement>
} }
@GlobalCommand @GlobalCommand
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
public void reloadRelated() { public void reloadRelated() {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -63,6 +63,7 @@ public class TripRequirementListCentre extends RequirementSubpage<TripRequiremen
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill" })
public void reloadRelated() { public void reloadRelated() {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -70,6 +70,7 @@ public class TripRequirementListWorkgroup extends RequirementSubpage<TripRequire
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill" })
public void reloadRelated() { public void reloadRelated() {
this.reload(); this.reload();
restoreUserView();
} }
@Override @Override
@@ -78,9 +78,9 @@ public class TripBillListBase extends RequirementSubpage<TripBillApproval> {
} }
@GlobalCommand @GlobalCommand
@NotifyChange({ "dataList", "dataBean", "fullFill" }) @NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
public void reloadRelated() public void reloadRelated() {
{
this.reload(); this.reload();
restoreUserView();
} }
} }
+36
View File
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache
eternal="false"
maxElementsInMemory="100000"
timeToLiveSeconds="1800"
overflowToDisk="true" />
<!--<cache name="info.bukova.isspst.data.User"
maxElementsInMemory="1000"
overflowToDisk="false"/>
<cache name="info.bukova.isspst.data.Role"
maxElementsInMemory="1000"
overflowToDisk="false"/>
<cache name="info.bukova.isspst.data.Permission"
maxElementsInMemory="1000"
overflowToDisk="false"/>
<cache name="info.bukova.isspst.data.Requirement"
maxElementsInMemory="10000"
overflowToDisk="true"/>
<cache name="info.bukova.isspst.data.TripRequirement"
maxElementsInMemory="10000"
overflowToDisk="true"/>
<cache name="info.bukova.isspst.data.TripBillApproval"
maxElementsInMemory="10000"
overflowToDisk="true"/>-->
</ehcache>
@@ -58,6 +58,10 @@
<prop key="hibernate.search.default.directory_provider">filesystem</prop> <prop key="hibernate.search.default.directory_provider">filesystem</prop>
<prop key="hibernate.search.default.indexBase">${storage.fulltextIndex}</prop> <prop key="hibernate.search.default.indexBase">${storage.fulltextIndex}</prop>
<prop key="hibernate.search.analyzer">org.apache.lucene.analysis.cz.CzechAnalyzer</prop> <prop key="hibernate.search.analyzer">org.apache.lucene.analysis.cz.CzechAnalyzer</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<!-- <prop key="hibernate.enable_lazy_load_no_trans">true</prop> --> <!-- <prop key="hibernate.enable_lazy_load_no_trans">true</prop> -->
</props> </props>
</property> </property>
+1 -1
View File
@@ -51,6 +51,6 @@
<div id="mainData"> <div id="mainData">
<u:include src="${gridZul}" /> <u:include src="${gridZul}" />
</div> </div>
<div id="footer"> Verze 3.1 </div> <div id="footer"> Verze 4.1 </div>
</div> </div>
</html> </html>
+18
View File
@@ -61,6 +61,24 @@
white-space: nowrap; white-space: nowrap;
} }
.z-listitem:hover .z-listcell {
background: none;
}
.z-listitem:hover .z-listcell-content {
/* přechod myší nad položkou pouze hodnoty ztuční */
font-weight: bold;
}
.z-listitem.z-listitem-selected .z-listcell {
/* vybraná položka pouze hodnoty ztuční */
background: none !important;
}
.z-listitem-selected .z-listcell .z-listcell-content {
/* vybraná položka pouze hodnoty ztuční */
font-weight: bold;
font-style: italic;
}
.combo { .combo {
width: 100%; width: 100%;
min-width: 0; min-width: 0;
@@ -9,37 +9,44 @@
<listheader <listheader
label="${labels.InvoicingRequirementNumber}" label="${labels.InvoicingRequirementNumber}"
sort="czech(requirement.numser)" sort="czech(requirement.numser)"
onCreate="self.sort(false)" onSort="@command('onSortHeader', header=self)"
width="130px" /> width="130px" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(requirement.reqDate)" sort="auto(requirement.reqDate)"
onSort="@command('onSortHeader', header=self)"
width="150px" /> width="150px" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="czech(requirement.centre.fullName)" sort="czech(requirement.centre.fullName)"
onSort="@command('onSortHeader', header=self)"
width="180px" /> width="180px" />
<listheader <listheader
label="${labels.RequirementsGridWorkgroup}" label="${labels.RequirementsGridWorkgroup}"
sort="czech(requirement.workgroup.fullName)" sort="czech(requirement.workgroup.fullName)"
onSort="@command('onSortHeader', header=self)"
width="180px" /> width="180px" />
<listheader <listheader
label="${labels.InvoicingApplicant}" label="${labels.InvoicingApplicant}"
sort="czech(requirement.ownedBy.fullName)" sort="czech(requirement.ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
width="180px" /> width="180px" />
<listheader <listheader
label="${labels.InvoicingDescription}" label="${labels.InvoicingDescription}"
sort="czech(requirement.description)" sort="czech(requirement.description)"
onSort="@command('onSortHeader', header=self)"
width="" /> width="" />
<listheader <listheader
label="${labels.InvoicingRequirementPrice}" label="${labels.InvoicingRequirementPrice}"
sort="auto(requirement.sumTotal)" sort="auto(requirement.sumTotal)"
onSort="@command('onSortHeader', header=self)"
align="right" align="right"
width="130px" /> width="130px" />
<listheader <listheader
label="${labels.InvoicingInvoicedPrice}" label="${labels.InvoicingInvoicedPrice}"
align="right" align="right"
sort="auto(totalInvoiced)" sort="auto(totalInvoiced)"
onSort="@command('onSortHeader', header=self)"
width="130px" /> width="130px" />
</listhead> </listhead>
<auxhead <auxhead
@@ -120,7 +120,7 @@
<div sclass="find-grid-cell"> <div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-divtextbox">
<textbox <textbox
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)" value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
instant="true" instant="true"
onChange="@command('doFilter')" onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)" maxlength="@load(vm.lengthText)"
@@ -3,7 +3,7 @@
vflex="1" vflex="1"
hflex="7" hflex="7"
itemRenderer="@load(vm.requirementsItemRenderer)" itemRenderer="@load(vm.requirementsItemRenderer)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
model="@load(vm.dataList)" model="@load(vm.dataList)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
@@ -13,34 +13,42 @@
<listheader <listheader
label="${labels.StudentProjectAbr}" label="${labels.StudentProjectAbr}"
sort="auto(project)" sort="auto(project)"
onSort="@command('onSortHeader', header=self)"
hflex="5" /> hflex="5" />
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
hflex="7" /> hflex="7" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
hflex="15" /> hflex="15" />
<listheader <listheader
label="${labels.RequirementsGridDeliveryDate}" label="${labels.RequirementsGridDeliveryDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.Amount}" label="${labels.Amount}"
sort="auto(sumTotal)" sort="auto(sumTotal)"
onSort="@command('onSortHeader', header=self)"
align="right" align="right"
hflex="10" /> hflex="10" />
<listheader <listheader
label="${labels.RequirementsGridDescription}" label="${labels.RequirementsGridDescription}"
sort="czech(description)" sort="czech(description)"
onSort="@command('onSortHeader', header=self)"
hflex="20" /> hflex="20" />
<listheader <listheader
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
label="${labels.ownedBy}" label="${labels.ownedBy}"
hflex="15" /> hflex="15" />
</listhead> </listhead>
@@ -128,7 +136,7 @@
<div sclass="find-grid-cell"> <div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-divtextbox">
<textbox <textbox
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)" value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
instant="true" instant="true"
onChange="@command('doFilter')" onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)" maxlength="@load(vm.lengthText)"
@@ -3,7 +3,7 @@
vflex="1" vflex="1"
hflex="7" hflex="7"
itemRenderer="@load(vm.requirementsItemRenderer)" itemRenderer="@load(vm.requirementsItemRenderer)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
model="@load(vm.dataList)" model="@load(vm.dataList)"
@@ -13,34 +13,42 @@
<listheader <listheader
label="${labels.StudentProjectAbr}" label="${labels.StudentProjectAbr}"
sort="auto(project)" sort="auto(project)"
onSort="@command('onSortHeader', header=self)"
hflex="5" /> hflex="5" />
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
hflex="7" /> hflex="7" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
hflex="15" /> hflex="15" />
<listheader <listheader
label="${labels.RequirementsGridDeliveryDate}" label="${labels.RequirementsGridDeliveryDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.Amount}" label="${labels.Amount}"
sort="auto(sumTotal)" sort="auto(sumTotal)"
onSort="@command('onSortHeader', header=self)"
align="right" align="right"
hflex="10" /> hflex="10" />
<listheader <listheader
label="${labels.RequirementsGridDescription}" label="${labels.RequirementsGridDescription}"
sort="czech(description)" sort="czech(description)"
onSort="@command('onSortHeader', header=self)"
hflex="20" /> hflex="20" />
<listheader <listheader
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
label="${labels.ownedBy}" label="${labels.ownedBy}"
hflex="15" /> hflex="15" />
</listhead> </listhead>
@@ -128,7 +136,7 @@
<div sclass="find-grid-cell"> <div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-divtextbox">
<textbox <textbox
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)" value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
instant="true" instant="true"
onChange="@command('doFilter')" onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)" maxlength="@load(vm.lengthText)"
@@ -3,7 +3,7 @@
vflex="1" vflex="1"
hflex="7" hflex="7"
itemRenderer="@load(vm.requirementsItemRenderer)" itemRenderer="@load(vm.requirementsItemRenderer)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
model="@load(vm.dataList)" model="@load(vm.dataList)"
@@ -13,34 +13,42 @@
<listheader <listheader
label="${labels.StudentProjectAbr}" label="${labels.StudentProjectAbr}"
sort="auto(project)" sort="auto(project)"
onSort="@command('onSortHeader', header=self)"
hflex="5" /> hflex="5" />
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
hflex="7" /> hflex="7" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
hflex="15" /> hflex="15" />
<listheader <listheader
label="${labels.RequirementsGridDeliveryDate}" label="${labels.RequirementsGridDeliveryDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
hflex="13" /> hflex="13" />
<listheader <listheader
label="${labels.Amount}" label="${labels.Amount}"
sort="auto(sumTotal)" sort="auto(sumTotal)"
onSort="@command('onSortHeader', header=self)"
align="right" align="right"
hflex="10" /> hflex="10" />
<listheader <listheader
label="${labels.RequirementsGridDescription}" label="${labels.RequirementsGridDescription}"
sort="czech(description)" sort="czech(description)"
onSort="@command('onSortHeader', header=self)"
hflex="20" /> hflex="20" />
<listheader <listheader
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
label="${labelsownedBy}" label="${labelsownedBy}"
hflex="15" /> hflex="15" />
</listhead> </listhead>
@@ -128,7 +136,7 @@
<div sclass="find-grid-cell"> <div sclass="find-grid-cell">
<div sclass="find-grid-divtextbox"> <div sclass="find-grid-divtextbox">
<textbox <textbox
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)" value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
instant="true" instant="true"
onChange="@command('doFilter')" onChange="@command('doFilter')"
maxlength="@load(vm.lengthText)" maxlength="@load(vm.lengthText)"
@@ -12,7 +12,7 @@
model="@load(vm.dataList)" model="@load(vm.dataList)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
itemRenderer="@load(vm.itemRenderer)" itemRenderer="@load(vm.itemRenderer)"
onAfterRender="@command('afterRender')" onAfterRender="@command('afterRender')"
selectedIndex="@bind(vm.selIndex)"> selectedIndex="@bind(vm.selIndex)">
@@ -20,22 +20,27 @@
<listheader <listheader
label="${labels.TravelOrdersGridNumser}" label="${labels.TravelOrdersGridNumser}"
sort="czech(bill.requirement.numser)" sort="czech(bill.requirement.numser)"
onSort="@command('onSortHeader', header=self)"
width="30%" /> width="30%" />
<listheader <listheader
label="${labels.TravelOrdersGridReqDate}" label="${labels.TravelOrdersGridReqDate}"
sort="auto(bill.requirement.reqDate)" sort="auto(bill.requirement.reqDate)"
onSort="@command('onSortHeader', header=self)"
width="70%" /> width="70%" />
<listheader <listheader
label="${labels.TravelOrdersGridFrom}" label="${labels.TravelOrdersGridFrom}"
sort="czech(bill.requirement.from)" sort="czech(bill.requirement.from)"
onSort="@command('onSortHeader', header=self)"
width="70%" /> width="70%" />
<listheader <listheader
label="${labels.TravelOrdersGridTo}" label="${labels.TravelOrdersGridTo}"
sort="czech(bill.requirement.to)" sort="czech(bill.requirement.to)"
onSort="@command('onSortHeader', header=self)"
width="70%" /> width="70%" />
<listheader <listheader
label="${labels.TravelOrdersGridTotal}" label="${labels.TravelOrdersGridTotal}"
sort="auto(bill.total)" sort="auto(bill.total)"
onSort="@command('onSortHeader', header=self)"
align="right" align="right"
width="70%" /> width="70%" />
<listheader <listheader
@@ -10,7 +10,7 @@
<hbox vflex="1"> <hbox vflex="1">
<listbox <listbox
model="@load(vm.dataList)" model="@load(vm.dataList)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
hflex="7" hflex="7"
@@ -21,30 +21,37 @@
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
width="13%" /> width="13%" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridWorkgroup}" label="${labels.RequirementsGridWorkgroup}"
sort="auto(workgroup.fullName)" sort="auto(workgroup.fullName)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridFrom}" label="${labels.RequirementsGridFrom}"
sort="czech(from)" sort="czech(from)"
onSort="@command('onSortHeader', header=self)"
width="30%" /> width="30%" />
<listheader <listheader
label="${labels.RequirementsGridTo}" label="${labels.RequirementsGridTo}"
sort="czech(to)" sort="czech(to)"
onSort="@command('onSortHeader', header=self)"
width="30%" /> width="30%" />
<listheader <listheader
label="${labels.RequirementsGridOwnedBy}" label="${labels.RequirementsGridOwnedBy}"
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
width="20%" /> width="20%" />
</listhead> </listhead>
<auxhead <auxhead
@@ -8,7 +8,7 @@
<hbox vflex="1"> <hbox vflex="1">
<listbox <listbox
model="@load(vm.dataList)" model="@load(vm.dataList)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
hflex="7" hflex="7"
@@ -19,26 +19,32 @@
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
width="13%" /> width="13%" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridFrom}" label="${labels.RequirementsGridFrom}"
sort="auto(from)" sort="auto(from)"
onSort="@command('onSortHeader', header=self)"
width="40%" /> width="40%" />
<listheader <listheader
label="${labels.RequirementsGridTo}" label="${labels.RequirementsGridTo}"
sort="czech(to)" sort="czech(to)"
onSort="@command('onSortHeader', header=self)"
width="40%" /> width="40%" />
<listheader <listheader
label="${labels.RequirementsGridOwnedBy}" label="${labels.RequirementsGridOwnedBy}"
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
width="20%" /> width="20%" />
</listhead> </listhead>
<auxhead <auxhead
@@ -8,7 +8,7 @@
<hbox vflex="1"> <hbox vflex="1">
<listbox <listbox
model="@load(vm.dataList)" model="@load(vm.dataList)"
selectedItem="@bind(vm.dataBean)" selectedItem="@save(vm.dataBean)"
mold="paging" mold="paging"
autopaging="true" autopaging="true"
hflex="7" hflex="7"
@@ -19,30 +19,37 @@
<listheader <listheader
label="${labels.RequirementsGridNumberSerie}" label="${labels.RequirementsGridNumberSerie}"
sort="czech(numser)" sort="czech(numser)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridReqDate}" label="${labels.RequirementsGridReqDate}"
sort="auto(reqDate)" sort="auto(reqDate)"
onSort="@command('onSortHeader', header=self)"
width="13%" /> width="13%" />
<listheader <listheader
label="${labels.RequirementsGridCenter}" label="${labels.RequirementsGridCenter}"
sort="auto(centre.fullName)" sort="auto(centre.fullName)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridWorkgroup}" label="${labels.RequirementsGridWorkgroup}"
sort="auto(workgroup.fullName)" sort="auto(workgroup.fullName)"
onSort="@command('onSortHeader', header=self)"
width="10%" /> width="10%" />
<listheader <listheader
label="${labels.RequirementsGridFrom}" label="${labels.RequirementsGridFrom}"
sort="czech(from)" sort="czech(from)"
onSort="@command('onSortHeader', header=self)"
width="30%" /> width="30%" />
<listheader <listheader
label="${labels.RequirementsGridTo}" label="${labels.RequirementsGridTo}"
sort="czech(to)" sort="czech(to)"
onSort="@command('onSortHeader', header=self)"
width="30%" /> width="30%" />
<listheader <listheader
label="${labels.RequirementsGridOwnedBy}" label="${labels.RequirementsGridOwnedBy}"
sort="auto(ownedBy.fullName)" sort="auto(ownedBy.fullName)"
onSort="@command('onSortHeader', header=self)"
width="20%" /> width="20%" />
</listhead> </listhead>
<auxhead <auxhead