Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 893b665dc2 | |||
| 2a48f440af | |||
| e55d7ad07f | |||
| 48bd9983fc | |||
| c72ab99dc1 | |||
| 4dbe7c47f8 | |||
| 1aeff7f587 | |||
| 70a2e01fae | |||
| fcb8db25fa | |||
| 740847e865 | |||
| 093d359df7 | |||
| ea2708f303 | |||
| 9b2e2b3641 | |||
| a8dc7f1306 | |||
| 7d4d693b2e |
@@ -229,6 +229,11 @@
|
||||
<artifactId>hibernate-search</artifactId>
|
||||
<version>4.4.6.Final</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-ehcache</artifactId>
|
||||
<version>4.2.8.Final</version>
|
||||
</dependency>
|
||||
|
||||
<!-- ZK -->
|
||||
<dependency>
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import static org.apache.commons.lang.StringUtils.strip;
|
||||
|
||||
public class BigDecimalUtils
|
||||
{
|
||||
@@ -23,6 +24,17 @@ public class BigDecimalUtils
|
||||
|
||||
String valueS = value.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);
|
||||
|
||||
String s = "search='" + searchS + "', value='" + valueS + "', equal=" + (result ? "true" : "false");
|
||||
|
||||
@@ -36,7 +36,7 @@ import java.util.Map;
|
||||
|
||||
public class Constants {
|
||||
|
||||
public final static long DB_VERSION = 6;
|
||||
public final static long DB_VERSION = 7;
|
||||
|
||||
public final static String DEF_ADMIN = "admin";
|
||||
public final static String DEF_ADMIN_PASSWD = "admin";
|
||||
@@ -156,6 +156,9 @@ public class Constants {
|
||||
new ReportMapping(MOD_TRIPREQUIREMENTS, new Report(10, true, "Přehled o protokolech předběžné kontroly", "tripRequirementProtocol"))
|
||||
};
|
||||
|
||||
public final static long TRIB_BILLS_REP_ID = 100;
|
||||
public final static long TRIB_BILLS_NP_REP_ID = 101;
|
||||
|
||||
// pokud je v agnde vic nez jedena podepisovaci sestava, musi se definovat ktera sestava nalezi jake entite
|
||||
public final static Map<Class<?>, Integer> SIGN_REPORT_MAP = Collections.unmodifiableMap(new HashMap<Class<?>, Integer>() {{
|
||||
put(TripBillApproval.class, 4);
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
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.FetchType;
|
||||
@@ -10,9 +13,7 @@ import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.MappedSuperclass;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import org.hibernate.search.annotations.Indexed;
|
||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||
import java.util.Date;
|
||||
|
||||
@MappedSuperclass
|
||||
@Indexed
|
||||
@@ -29,10 +30,12 @@ public abstract class BaseData implements OwnedDataModel {
|
||||
@ManyToOne(fetch=FetchType.LAZY)
|
||||
@JoinColumn(name="OWNED_BY_ID")
|
||||
@IndexedEmbedded
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private User ownedBy;
|
||||
@ManyToOne(fetch=FetchType.LAZY)
|
||||
@JoinColumn(name="MODIFIED_BY_ID")
|
||||
@IndexedEmbedded
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private User modifiedBy;
|
||||
@Transient
|
||||
private boolean valid;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
@@ -11,6 +14,7 @@ import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "JOBMAPPING")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class JobMapping {
|
||||
|
||||
@Id
|
||||
@@ -19,9 +23,11 @@ public class JobMapping {
|
||||
private int id;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "MEMBER_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Member member;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Role role;
|
||||
|
||||
public JobMapping() {
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
@@ -15,12 +16,13 @@ import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public abstract class Member implements DataModel {
|
||||
|
||||
@Id
|
||||
@@ -33,6 +35,7 @@ public abstract class Member implements DataModel {
|
||||
@ManyToMany
|
||||
@LazyCollection(LazyCollectionOption.TRUE)
|
||||
@JoinTable(name="MEMBER_PARENT", joinColumns={@JoinColumn(name="MEMBER_ID")}, inverseJoinColumns={@JoinColumn(name="PARENT_ID")})
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<Workgroup> parents;
|
||||
@Transient
|
||||
private boolean valid;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
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.Entity;
|
||||
@@ -8,10 +11,9 @@ import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
|
||||
@Entity
|
||||
@Table(name="PERMISSION")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class Permission extends BaseSimpleData implements GrantedAuthority {
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import org.hibernate.search.annotations.Indexed;
|
||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
@@ -11,9 +9,10 @@ import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.search.annotations.Indexed;
|
||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name = "REQUIREMENT")
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.Constants;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
import org.hibernate.search.annotations.Analyze;
|
||||
@@ -24,6 +26,7 @@ import java.util.List;
|
||||
|
||||
@MappedSuperclass
|
||||
@Indexed
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class RequirementBase extends BaseData implements FilterableRequirement, SeasonsAware {
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@@ -43,9 +46,11 @@ public class RequirementBase extends BaseData implements FilterableRequirement,
|
||||
private String description;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "CENTRE_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Workgroup centre;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "WORKGROUP_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Workgroup workgroup;
|
||||
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
|
||||
@LazyCollection(LazyCollectionOption.TRUE)
|
||||
@@ -56,7 +61,10 @@ public class RequirementBase extends BaseData implements FilterableRequirement,
|
||||
private RequirementState state;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "SEASON_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Season season;
|
||||
@Column(name = "APPROVE_DATE")
|
||||
private Date approveDate;
|
||||
|
||||
public RequirementBase() {
|
||||
authorization = new ArrayList<AuthItem>();
|
||||
@@ -160,4 +168,12 @@ public class RequirementBase extends BaseData implements FilterableRequirement,
|
||||
public void setSeason(Season season) {
|
||||
this.season = season;
|
||||
}
|
||||
|
||||
public Date getApproveDate() {
|
||||
return approveDate;
|
||||
}
|
||||
|
||||
public void setApproveDate(Date approveDate) {
|
||||
this.approveDate = approveDate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.Constants;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
@@ -11,13 +13,12 @@ import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name="ROLE")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class Role extends BaseSimpleData implements GrantedAuthority, DataModel {
|
||||
|
||||
/**
|
||||
@@ -32,6 +33,7 @@ public class Role extends BaseSimpleData implements GrantedAuthority, DataModel
|
||||
@ManyToMany
|
||||
@LazyCollection(LazyCollectionOption.FALSE)
|
||||
@JoinTable(name="ROLE_PERMISSION", joinColumns={@JoinColumn(name="ROLE_ID")}, inverseJoinColumns={@JoinColumn(name="PERMISSION_ID")})
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<Permission> permissions;
|
||||
@Column(name = "WORKGROUP")
|
||||
private boolean workgroup;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
@@ -10,6 +13,7 @@ import java.util.Date;
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "SEASON")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class Season extends BaseData {
|
||||
@Column(name = "DESCRIPTION")
|
||||
private String description;
|
||||
|
||||
@@ -2,6 +2,8 @@ package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.Constants;
|
||||
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.LazyCollectionOption;
|
||||
import org.hibernate.search.annotations.Analyze;
|
||||
@@ -27,10 +29,12 @@ import java.util.List;
|
||||
@Entity
|
||||
@Table(name = "TRIP_BILL")
|
||||
@Indexed
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class TripBill extends BaseData implements EntityWithAttachment, SeasonsAware {
|
||||
|
||||
@OneToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "REQUIREMENT_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private TripRequirement requirement;
|
||||
@Column(name = "RESULT_MESSAGE_DATE")
|
||||
private Date resultMessageDate;
|
||||
@@ -72,6 +76,7 @@ public class TripBill extends BaseData implements EntityWithAttachment, SeasonsA
|
||||
private Date paidDate;
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "SEASON_ID")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private Season season;
|
||||
|
||||
public TripBill() {
|
||||
|
||||
@@ -5,6 +5,8 @@ import javax.persistence.FetchType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Transient;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Pepa Rokos
|
||||
@@ -17,6 +19,26 @@ public class TripBillApproval extends RequirementBase {
|
||||
@OneToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "TRIPBILL_ID")
|
||||
private TripBill bill;
|
||||
@Transient
|
||||
private boolean billForPassenger;
|
||||
@Transient
|
||||
private Date tripDate;
|
||||
|
||||
public boolean isBillForPassenger() {
|
||||
return billForPassenger;
|
||||
}
|
||||
|
||||
public void setBillForPassenger(boolean billForPassenger) {
|
||||
this.billForPassenger = billForPassenger;
|
||||
}
|
||||
|
||||
public Date getTripDate() {
|
||||
return tripDate;
|
||||
}
|
||||
|
||||
public void setTripDate(Date tripDate) {
|
||||
this.tripDate = tripDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNumser() {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.storage.EntityWithAttachment;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
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.hibernate.search.annotations.IndexedEmbedded;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
@@ -16,14 +18,10 @@ import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
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.hibernate.search.annotations.IndexedEmbedded;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name = "TRIPREQUIREMENT")
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
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.Embedded;
|
||||
@@ -13,16 +17,13 @@ import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name="USER")
|
||||
@Indexed
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class User extends Member implements UserDetails, DataModel {
|
||||
|
||||
/**
|
||||
@@ -50,6 +51,7 @@ public class User extends Member implements UserDetails, DataModel {
|
||||
private boolean notify;
|
||||
@ManyToMany(fetch=FetchType.EAGER)
|
||||
@JoinTable(name="USER_ROLE", joinColumns={@JoinColumn(name="USER_ID")}, inverseJoinColumns={@JoinColumn(name="ROLE_ID")})
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<Role> authorities;
|
||||
@Column(name="SETTINGS", length=1048576)
|
||||
private String settings;
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import info.bukova.isspst.StringUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Column;
|
||||
@@ -17,12 +16,14 @@ import javax.persistence.ManyToMany;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Transient;
|
||||
|
||||
import org.hibernate.annotations.LazyCollection;
|
||||
import org.hibernate.annotations.LazyCollectionOption;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@Table(name = "WORKGROUP")
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class Workgroup extends Member implements OwnedDataModel, Serializable {
|
||||
|
||||
/**
|
||||
@@ -37,6 +38,7 @@ public class Workgroup extends Member implements OwnedDataModel, Serializable {
|
||||
@ManyToMany(cascade = {CascadeType.ALL})
|
||||
@LazyCollection(LazyCollectionOption.TRUE)
|
||||
@JoinTable(name="WORKGROUP_MEMBER", joinColumns={@JoinColumn(name="WORKGROUP_ID")}, inverseJoinColumns={@JoinColumn(name="JOBMAPPING_ID")})
|
||||
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<JobMapping> members;
|
||||
@Column(name = "CENTRE")
|
||||
private boolean centre;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package info.bukova.isspst.filters;
|
||||
|
||||
import info.bukova.isspst.BigDecimalUtils;
|
||||
import info.bukova.isspst.BooleanUtils;
|
||||
import info.bukova.isspst.DateTimeUtils;
|
||||
import info.bukova.isspst.StringUtils;
|
||||
@@ -48,7 +49,8 @@ public class RequirementFilter implements Filter<Requirement>
|
||||
boolean foundDeliveryDate = DateTimeUtils.isEqualByDateForFilter(item.getDeliveryDate(), condition.getDeliveryDate());
|
||||
boolean foundUser = User.isEqualByUserForFilter(item.getOwnedBy(), condition.getOwnedBy());
|
||||
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
|
||||
|
||||
@@ -53,7 +53,11 @@ public class TripBillApprovalFilter implements Filter<TripBillApproval>
|
||||
boolean foundOwner = User.isEqualByUserForFilter(item.getBill().getOwnedBy(), condition.getBill().getOwnedBy());
|
||||
boolean foundPaid = BooleanUtils.isEqualByBooleanValue(item.getBill().getPaid(), condition.getBill().getPaid());
|
||||
boolean foundPaidDate = DateTimeUtils.isEqualByDateForFilter(item.getBill().getPaidDate(), condition.getBill().getPaidDate());
|
||||
return foundNumser && foundReqDate && foundDescription && foundFrom && foundTo && foundWorkgroup && foundCentre && foundOwner && foundPaid && foundPaidDate;
|
||||
boolean foundPassenger = (item.getBill().getOwnedBy() != item.getBill().getRequirement().getOwnedBy()) == condition.isBillForPassenger();
|
||||
boolean foundApproveDate = DateTimeUtils.isEqualByDateForFilter(item.getApproveDate(), condition.getApproveDate());
|
||||
boolean foundTripDate = DateTimeUtils.isEqualByDateForFilter(item.getBill().getRequirement().getTripDate(), condition.getTripDate());
|
||||
return foundNumser && foundReqDate && foundDescription && foundFrom && foundTo && foundWorkgroup && foundCentre && foundOwner && foundPaid
|
||||
&& foundPaidDate && foundPassenger && foundApproveDate && foundTripDate;
|
||||
}
|
||||
|
||||
@Factory
|
||||
|
||||
@@ -0,0 +1,306 @@
|
||||
package info.bukova.isspst.security;
|
||||
|
||||
import org.springframework.ldap.core.DirContextOperations;
|
||||
import org.springframework.ldap.core.DistinguishedName;
|
||||
import org.springframework.ldap.support.LdapUtils;
|
||||
import org.springframework.security.authentication.AccountExpiredException;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.security.authentication.CredentialsExpiredException;
|
||||
import org.springframework.security.authentication.DisabledException;
|
||||
import org.springframework.security.authentication.LockedException;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.AuthorityUtils;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.ldap.SpringSecurityLdapTemplate;
|
||||
import org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.naming.AuthenticationException;
|
||||
import javax.naming.Context;
|
||||
import javax.naming.NamingException;
|
||||
import javax.naming.OperationNotSupportedException;
|
||||
import javax.naming.directory.DirContext;
|
||||
import javax.naming.directory.SearchControls;
|
||||
import javax.naming.ldap.InitialLdapContext;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Hashtable;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AdAuthenticationProvider extends AbstractLdapAuthenticationProvider{
|
||||
private static final Pattern SUB_ERROR_CODE = Pattern.compile(".*data\\s([0-9a-f]{3,4}).*");
|
||||
|
||||
// Error codes
|
||||
private static final int USERNAME_NOT_FOUND = 0x525;
|
||||
private static final int INVALID_PASSWORD = 0x52e;
|
||||
private static final int NOT_PERMITTED = 0x530;
|
||||
private static final int PASSWORD_EXPIRED = 0x532;
|
||||
private static final int ACCOUNT_DISABLED = 0x533;
|
||||
private static final int ACCOUNT_EXPIRED = 0x701;
|
||||
private static final int PASSWORD_NEEDS_RESET = 0x773;
|
||||
private static final int ACCOUNT_LOCKED = 0x775;
|
||||
|
||||
private final String domain;
|
||||
private final String rootDn;
|
||||
private final String url;
|
||||
private final String upnSuffix;
|
||||
private boolean convertSubErrorCodesToExceptions;
|
||||
|
||||
// Only used to allow tests to substitute a mock LdapContext
|
||||
ContextFactory contextFactory = new ContextFactory();
|
||||
|
||||
/**
|
||||
* @param domain the domain for which authentication should take place
|
||||
*/
|
||||
// public ActiveDirectoryLdapAuthenticationProvider(String domain) {
|
||||
// this (domain, null);
|
||||
// }
|
||||
|
||||
/**
|
||||
* @param domain the domain name (may be null or empty)
|
||||
* @param url an LDAP url (or multiple URLs)
|
||||
*/
|
||||
public AdAuthenticationProvider(String domain, String upnSuffix, String url) {
|
||||
Assert.isTrue(StringUtils.hasText(url), "Url cannot be empty");
|
||||
this.domain = StringUtils.hasText(domain) ? domain.toLowerCase() : null;
|
||||
//this.url = StringUtils.hasText(url) ? url : null;
|
||||
this.url = url;
|
||||
this.upnSuffix = upnSuffix;
|
||||
rootDn = this.domain == null ? null : rootDnFromDomain(this.domain);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DirContextOperations doAuthentication(UsernamePasswordAuthenticationToken auth) {
|
||||
String username = auth.getName();
|
||||
String password = (String)auth.getCredentials();
|
||||
|
||||
DirContext ctx = bindAsUser(username, password);
|
||||
|
||||
try {
|
||||
return searchForUser(ctx, username);
|
||||
|
||||
} catch (NamingException e) {
|
||||
logger.error("Failed to locate directory entry for authenticated user: " + username, e);
|
||||
throw badCredentials();
|
||||
} finally {
|
||||
LdapUtils.closeContext(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the user authority list from the values of the {@code memberOf} attribute obtained from the user's
|
||||
* Active Directory entry.
|
||||
*/
|
||||
@Override
|
||||
protected Collection<? extends GrantedAuthority> loadUserAuthorities(DirContextOperations userData, String username, String password) {
|
||||
String[] groups = userData.getStringAttributes("memberOf");
|
||||
|
||||
if (groups == null) {
|
||||
logger.debug("No values for 'memberOf' attribute.");
|
||||
|
||||
return AuthorityUtils.NO_AUTHORITIES;
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("'memberOf' attribute values: " + Arrays.asList(groups));
|
||||
}
|
||||
|
||||
ArrayList<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(groups.length);
|
||||
|
||||
for (String group : groups) {
|
||||
authorities.add(new SimpleGrantedAuthority(new DistinguishedName(group).removeLast().getValue()));
|
||||
}
|
||||
|
||||
return authorities;
|
||||
}
|
||||
|
||||
private DirContext bindAsUser(String username, String password) {
|
||||
// TODO. add DNS lookup based on domain
|
||||
final String bindUrl = url;
|
||||
|
||||
Hashtable<String,String> env = new Hashtable<String,String>();
|
||||
env.put(Context.SECURITY_AUTHENTICATION, "simple");
|
||||
String bindPrincipal = createBindPrincipal(username);
|
||||
env.put(Context.SECURITY_PRINCIPAL, bindPrincipal);
|
||||
env.put(Context.PROVIDER_URL, bindUrl);
|
||||
env.put(Context.SECURITY_CREDENTIALS, password);
|
||||
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
|
||||
|
||||
try {
|
||||
return contextFactory.createContext(env);
|
||||
} catch (NamingException e) {
|
||||
if ((e instanceof AuthenticationException) || (e instanceof OperationNotSupportedException)) {
|
||||
handleBindException(bindPrincipal, e);
|
||||
throw badCredentials();
|
||||
} else {
|
||||
throw LdapUtils.convertLdapException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void handleBindException(String bindPrincipal, NamingException exception) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Authentication for " + bindPrincipal + " failed:" + exception);
|
||||
}
|
||||
|
||||
int subErrorCode = parseSubErrorCode(exception.getMessage());
|
||||
|
||||
if (subErrorCode > 0) {
|
||||
logger.info("Active Directory authentication failed: " + subCodeToLogMessage(subErrorCode));
|
||||
|
||||
if (convertSubErrorCodesToExceptions) {
|
||||
raiseExceptionForErrorCode(subErrorCode);
|
||||
}
|
||||
} else {
|
||||
logger.debug("Failed to locate AD-specific sub-error code in message");
|
||||
}
|
||||
}
|
||||
|
||||
int parseSubErrorCode(String message) {
|
||||
Matcher m = SUB_ERROR_CODE.matcher(message);
|
||||
|
||||
if (m.matches()) {
|
||||
return Integer.parseInt(m.group(1), 16);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void raiseExceptionForErrorCode(int code) {
|
||||
switch (code) {
|
||||
case PASSWORD_EXPIRED:
|
||||
throw new CredentialsExpiredException(messages.getMessage("LdapAuthenticationProvider.credentialsExpired",
|
||||
"User credentials have expired"));
|
||||
case ACCOUNT_DISABLED:
|
||||
throw new DisabledException(messages.getMessage("LdapAuthenticationProvider.disabled",
|
||||
"User is disabled"));
|
||||
case ACCOUNT_EXPIRED:
|
||||
throw new AccountExpiredException(messages.getMessage("LdapAuthenticationProvider.expired",
|
||||
"User account has expired"));
|
||||
case ACCOUNT_LOCKED:
|
||||
throw new LockedException(messages.getMessage("LdapAuthenticationProvider.locked",
|
||||
"User account is locked"));
|
||||
}
|
||||
}
|
||||
|
||||
String subCodeToLogMessage(int code) {
|
||||
switch (code) {
|
||||
case USERNAME_NOT_FOUND:
|
||||
return "User was not found in directory";
|
||||
case INVALID_PASSWORD:
|
||||
return "Supplied password was invalid";
|
||||
case NOT_PERMITTED:
|
||||
return "User not permitted to logon at this time";
|
||||
case PASSWORD_EXPIRED:
|
||||
return "Password has expired";
|
||||
case ACCOUNT_DISABLED:
|
||||
return "Account is disabled";
|
||||
case ACCOUNT_EXPIRED:
|
||||
return "Account expired";
|
||||
case PASSWORD_NEEDS_RESET:
|
||||
return "User must reset password";
|
||||
case ACCOUNT_LOCKED:
|
||||
return "Account locked";
|
||||
}
|
||||
|
||||
return "Unknown (error code " + Integer.toHexString(code) +")";
|
||||
}
|
||||
|
||||
private BadCredentialsException badCredentials() {
|
||||
return new BadCredentialsException(messages.getMessage(
|
||||
"LdapAuthenticationProvider.badCredentials", "Bad credentials"));
|
||||
}
|
||||
|
||||
private DirContextOperations searchForUser(DirContext ctx, String username) throws NamingException {
|
||||
SearchControls searchCtls = new SearchControls();
|
||||
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
|
||||
|
||||
String searchFilter = "(&(objectClass=user)(userPrincipalName={0}))";
|
||||
|
||||
final String bindPrincipal = createBindPrincipal(username);
|
||||
final String searchDn = createSearchDn(username);
|
||||
|
||||
String searchRoot = rootDn != null ? rootDn : searchRootFromPrincipal(bindPrincipal);
|
||||
|
||||
DirContextOperations ctxOp;
|
||||
|
||||
try {
|
||||
ctxOp = SpringSecurityLdapTemplate.searchForSingleEntryInternal(ctx, searchCtls, searchRoot, searchFilter,
|
||||
new Object[]{searchDn});
|
||||
|
||||
if (ctxOp != null) {
|
||||
return ctxOp;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("UPN " + searchDn + " not found. Falling back to search with domain UPN suffix.");
|
||||
}
|
||||
|
||||
return SpringSecurityLdapTemplate.searchForSingleEntryInternal(ctx, searchCtls, searchRoot, searchFilter,
|
||||
new Object[]{bindPrincipal});
|
||||
}
|
||||
|
||||
private String searchRootFromPrincipal(String bindPrincipal) {
|
||||
int atChar = bindPrincipal.lastIndexOf('@');
|
||||
|
||||
if (atChar < 0) {
|
||||
logger.debug("User principal '" + bindPrincipal + "' does not contain the domain, and no domain has been configured");
|
||||
throw badCredentials();
|
||||
}
|
||||
|
||||
return rootDnFromDomain(bindPrincipal.substring(atChar+ 1, bindPrincipal.length()));
|
||||
}
|
||||
|
||||
private String rootDnFromDomain(String domain) {
|
||||
String[] tokens = StringUtils.tokenizeToStringArray(domain, ".");
|
||||
StringBuilder root = new StringBuilder();
|
||||
|
||||
for (String token : tokens) {
|
||||
if (root.length() > 0) {
|
||||
root.append(',');
|
||||
}
|
||||
root.append("dc=").append(token);
|
||||
}
|
||||
|
||||
return root.toString();
|
||||
}
|
||||
|
||||
String createBindPrincipal(String username) {
|
||||
if (domain == null || username.toLowerCase().endsWith(domain)) {
|
||||
return username;
|
||||
}
|
||||
|
||||
return username + "@" + domain;
|
||||
}
|
||||
|
||||
String createSearchDn(String username) {
|
||||
if (upnSuffix == null) {
|
||||
return createBindPrincipal(username);
|
||||
}
|
||||
|
||||
return username + "@" + upnSuffix;
|
||||
}
|
||||
|
||||
/**
|
||||
* By default, a failed authentication (LDAP error 49) will result in a {@code BadCredentialsException}.
|
||||
* <p>
|
||||
* If this property is set to {@code true}, the exception message from a failed bind attempt will be parsed
|
||||
* for the AD-specific error code and a {@link CredentialsExpiredException}, {@link DisabledException},
|
||||
* {@link AccountExpiredException} or {@link LockedException} will be thrown for the corresponding codes. All
|
||||
* other codes will result in the default {@code BadCredentialsException}.
|
||||
*
|
||||
* @param convertSubErrorCodesToExceptions {@code true} to raise an exception based on the AD error code.
|
||||
*/
|
||||
public void setConvertSubErrorCodesToExceptions(boolean convertSubErrorCodesToExceptions) {
|
||||
this.convertSubErrorCodesToExceptions = convertSubErrorCodesToExceptions;
|
||||
}
|
||||
|
||||
static class ContextFactory {
|
||||
DirContext createContext(Hashtable<?,?> env) throws NamingException {
|
||||
return new InitialLdapContext(env, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,20 @@
|
||||
package info.bukova.isspst.services.dbinfo;
|
||||
|
||||
import info.bukova.isspst.Constants;
|
||||
import info.bukova.isspst.dao.BaseDao;
|
||||
import info.bukova.isspst.dao.RequirementDao;
|
||||
import info.bukova.isspst.dao.TripBillApprovalDao;
|
||||
import info.bukova.isspst.dao.TripRequirementDao;
|
||||
import info.bukova.isspst.data.DbInfo;
|
||||
import info.bukova.isspst.data.RequirementBase;
|
||||
import info.bukova.isspst.data.RequirementState;
|
||||
import info.bukova.isspst.services.AbstractService;
|
||||
import info.bukova.isspst.services.requirement.RequirementBaseService;
|
||||
import info.bukova.isspst.services.requirement.RequirementService;
|
||||
import info.bukova.isspst.services.requirement.TripRequirementService;
|
||||
import info.bukova.isspst.services.tripbill.TripBillApprovalService;
|
||||
import org.hibernate.SQLQuery;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -11,6 +22,20 @@ import java.util.List;
|
||||
|
||||
public class DbInfoServiceImpl extends AbstractService<DbInfo> implements DbInfoService
|
||||
{
|
||||
@Autowired
|
||||
private TripBillApprovalService tripBillApprovalService;
|
||||
@Autowired
|
||||
private TripBillApprovalDao tripBillApprovalDao;
|
||||
@Autowired
|
||||
private TripRequirementService tripRequirement;
|
||||
@Autowired
|
||||
private TripRequirementDao tripRequirementDao;
|
||||
@Autowired
|
||||
private RequirementService requirementService;
|
||||
@Autowired
|
||||
private RequirementDao requirementDao;
|
||||
|
||||
|
||||
private DbInfo getDbInfo()
|
||||
{
|
||||
DbInfo dbInfo = null;
|
||||
@@ -211,10 +236,26 @@ public class DbInfoServiceImpl extends AbstractService<DbInfo> implements DbInfo
|
||||
sq.executeUpdate();
|
||||
}
|
||||
|
||||
if (dbVersion < 7) {
|
||||
setApproveDate((RequirementBaseService)tripBillApprovalService, (BaseDao)tripBillApprovalDao);
|
||||
setApproveDate((RequirementBaseService)tripRequirement, (BaseDao)tripRequirementDao);
|
||||
setApproveDate((RequirementBaseService)requirementService, (BaseDao)requirementDao);
|
||||
}
|
||||
|
||||
this.updateDatabaseVersion();
|
||||
}
|
||||
}
|
||||
|
||||
private void setApproveDate(RequirementBaseService<RequirementBase> service, BaseDao<RequirementBase> daoReq) {
|
||||
for (RequirementBase req : service.getAll()) {
|
||||
if (req.getState() == RequirementState.APPROVED) {
|
||||
service.loadAuthItems(req);
|
||||
req.setApproveDate(req.getLastApproveDate());
|
||||
daoReq.modify(req);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateDatabaseVersion()
|
||||
|
||||
@@ -129,7 +129,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_READ')")
|
||||
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);
|
||||
return q.list();
|
||||
}
|
||||
@@ -139,7 +139,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_READ')")
|
||||
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);
|
||||
return q.list();
|
||||
}
|
||||
@@ -149,7 +149,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_READ')")
|
||||
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);
|
||||
return q.list();
|
||||
}
|
||||
@@ -159,7 +159,7 @@ public class InvoicingServiceImpl extends AbstractOwnedService<Invoicing> implem
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_READ')")
|
||||
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);
|
||||
return q.list();
|
||||
}
|
||||
|
||||
+19
-3
@@ -35,8 +35,11 @@ import info.bukova.isspst.services.workgroups.WorkgroupService;
|
||||
import info.bukova.isspst.signapi.SignData;
|
||||
import info.bukova.isspst.storage.FileStorage;
|
||||
import info.bukova.isspst.storage.ReportFileStorage;
|
||||
import info.bukova.isspst.storage.StorageException;
|
||||
import org.hibernate.LazyInitializationException;
|
||||
import org.hibernate.Query;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PostFilter;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
@@ -87,6 +90,8 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
@Autowired
|
||||
private SeasonService seasonService;
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(RequirementBaseServiceImpl.class);
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_ADD')")
|
||||
@@ -284,6 +289,7 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
|
||||
if (getNextWorkflow(e) == null) {
|
||||
e.setState(RequirementState.APPROVED);
|
||||
e.setApproveDate(approveDate);
|
||||
} else {
|
||||
e.setState(RequirementState.PARTIALLY);
|
||||
}
|
||||
@@ -580,9 +586,14 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
public void update(T entity) {
|
||||
entity.getAuthorization().clear();
|
||||
entity.setState(RequirementState.NEW);
|
||||
signedDocumentService.deleteForEntity(entity);
|
||||
|
||||
super.update(entity);
|
||||
|
||||
try {
|
||||
signedDocumentService.deleteForEntity(entity);
|
||||
} catch (StorageException e) {
|
||||
logger.warn(e.getMessage());
|
||||
}
|
||||
|
||||
sendToApprovers(entity);
|
||||
}
|
||||
|
||||
@@ -590,7 +601,12 @@ public abstract class RequirementBaseServiceImpl<T extends RequirementBase> exte
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_DELETE') or hasPermission(#entity, this.getDeleteEntityPermission())")
|
||||
public void delete(T entity) {
|
||||
signedDocumentService.delFromApprove(signedDocumentService.getForEntity(entity));
|
||||
super.delete(entity);
|
||||
|
||||
try {
|
||||
signedDocumentService.delFromApprove(signedDocumentService.getForEntity(entity));
|
||||
} catch (StorageException e) {
|
||||
logger.warn(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+35
-2
@@ -8,16 +8,22 @@ import info.bukova.isspst.data.DataModel;
|
||||
import info.bukova.isspst.data.RequirementState;
|
||||
import info.bukova.isspst.data.TripBill;
|
||||
import info.bukova.isspst.data.TripBillApproval;
|
||||
import info.bukova.isspst.reporting.Report;
|
||||
import info.bukova.isspst.services.IsspstException;
|
||||
import info.bukova.isspst.services.requirement.RequirementBaseServiceImpl;
|
||||
import info.bukova.isspst.services.requirement.RequirementTypeService;
|
||||
import info.bukova.isspst.services.signeddocs.SignedDocumentService;
|
||||
import info.bukova.isspst.storage.StorageException;
|
||||
import org.hibernate.Query;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Pepa Rokos
|
||||
@@ -31,6 +37,8 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
||||
@Autowired
|
||||
private SignedDocumentService signedDocumentService;
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(TripBillApproval.class);
|
||||
|
||||
@Override
|
||||
public TripBillApproval createApproval(TripBill bill) {
|
||||
if (bill.getApproval() != null) {
|
||||
@@ -72,9 +80,24 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
||||
@Transactional
|
||||
@PreAuthorize("hasPermission(this, 'PERM_DELETE') or this.canApprove(#bill.approval)")
|
||||
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);
|
||||
signedDocumentService.deleteForEntity(bill);
|
||||
tripBillService.update(bill);
|
||||
|
||||
try {
|
||||
signedDocumentService.deleteForEntity(bill);
|
||||
} catch (StorageException e) {
|
||||
logger.warn(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -96,9 +119,19 @@ public class TripBillApprovalServiceImpl extends RequirementBaseServiceImpl<Trip
|
||||
|
||||
if (bill != null) {
|
||||
dao.delete(entity);
|
||||
cancelApproval(bill);
|
||||
removeApproval(bill);
|
||||
} else {
|
||||
super.delete(entity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Report> getReports() {
|
||||
List<Report> reports = new ArrayList<Report>();
|
||||
|
||||
reports.add(new Report(Constants.TRIB_BILLS_REP_ID, false, "Přehled vyúčtovaných CP", "tripBills"));
|
||||
reports.add(new Report(Constants.TRIB_BILLS_NP_REP_ID, false, "Přehled nevyúčtovaných CP", "tripBillsNP"));
|
||||
|
||||
return reports;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ public class TripBillServiceImpl extends AbstractOwnedService<TripBill> implemen
|
||||
}
|
||||
|
||||
if (item.getBackDeparture() == null) {
|
||||
timeBack = (new LocalTime()).withHourOfDay(23).withMinuteOfHour(59);
|
||||
timeBack = (new LocalTime()).withHourOfDay(23).withMinuteOfHour(00);
|
||||
allDay = true;
|
||||
} else {
|
||||
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
|
||||
{
|
||||
protected BigDecimalFilterConverter standardBigDecimalFilterConverter;
|
||||
|
||||
public BigDecimalFilterConverter getStandardBigDecimalFilterConverter()
|
||||
{
|
||||
return standardBigDecimalFilterConverter;
|
||||
}
|
||||
|
||||
public void setStandardBigDecimalFilterConverter(BigDecimalFilterConverter standardBigDecimalFilterConverter)
|
||||
{
|
||||
this.standardBigDecimalFilterConverter = standardBigDecimalFilterConverter;
|
||||
}
|
||||
|
||||
protected BigDecimalConverter standardBigDecimalConverter;
|
||||
|
||||
protected BoolConverter standardBoolConverter;
|
||||
@@ -53,6 +65,7 @@ public class DocumentViewModel
|
||||
@Init
|
||||
public void initDocumentViewModel()
|
||||
{
|
||||
this.standardBigDecimalFilterConverter = new BigDecimalFilterConverter();
|
||||
this.standardBigDecimalConverter = new BigDecimalConverter();
|
||||
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.EventListener;
|
||||
import org.zkoss.zk.ui.select.annotation.WireVariable;
|
||||
import org.zkoss.zul.Listheader;
|
||||
import org.zkoss.zul.Messagebox;
|
||||
import org.zkoss.zul.Window;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -48,6 +50,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
private boolean sortDesc = true;
|
||||
private boolean newRec = false;
|
||||
private boolean fullFill = false;
|
||||
private Listheader sortHeader;
|
||||
|
||||
@WireVariable
|
||||
private SeasonService seasonService;
|
||||
@@ -66,11 +69,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
{
|
||||
super.initDocumentViewModel();
|
||||
seasons = seasonService.getAllSeasons();
|
||||
|
||||
Map<String, String[]> map = Executions.getCurrent().getParameterMap();
|
||||
if (map.get("select") == null) {
|
||||
selSeason = seasonService.getActive();
|
||||
}
|
||||
selSeason = seasonService.getActive();
|
||||
setHqlFilter();
|
||||
}
|
||||
|
||||
@@ -144,6 +143,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
dataList = fullList;
|
||||
dataBean = null;
|
||||
selIndex = -1;
|
||||
restoreSort();
|
||||
} else {
|
||||
doFilter();
|
||||
dataBean = null;
|
||||
@@ -283,6 +283,7 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
|
||||
BindUtils.postGlobalCommand(null, null, "reloadRelated", null);
|
||||
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@@ -323,9 +324,6 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
}
|
||||
|
||||
if (id > 0) {
|
||||
selSeason = null;
|
||||
setHqlFilter();
|
||||
dataList = getListFromService();
|
||||
for (int i = 0; i < dataList.size(); i++) {
|
||||
if (dataList.get(i).getId() == id) {
|
||||
selIndex = i;
|
||||
@@ -350,14 +348,13 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
}
|
||||
|
||||
@Command
|
||||
@NotifyChange("dataBean")
|
||||
public void onSort(@BindingParam("column") String column) {
|
||||
if (sortCol == null || this.sortCol.equals(column))
|
||||
this.sortDesc = !this.sortDesc;
|
||||
|
||||
this.sortCol = column;
|
||||
@NotifyChange({"dataBean", "canApprove"})
|
||||
public void onSortHeader(@BindingParam("header") Listheader header) {
|
||||
sortHeader = header;
|
||||
selIndex = -1;
|
||||
dataBean = null;
|
||||
Collections.sort(dataList,
|
||||
sortHeader.getSortDirection().equals("ascending") ? sortHeader.getSortDescending() : sortHeader.getSortAscending());
|
||||
}
|
||||
|
||||
public int getSelIndex() {
|
||||
@@ -413,6 +410,27 @@ public class ListViewModel<T extends DataModel> extends DocumentViewModel
|
||||
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()
|
||||
{
|
||||
return (dataBean != null);
|
||||
|
||||
@@ -72,6 +72,7 @@ public class ApproveDialogVM {
|
||||
BindUtils.postNotifyChange(null, null, grid, "dataBean");
|
||||
BindUtils.postNotifyChange(null, null, grid, "canApprove");
|
||||
BindUtils.postGlobalCommand(null, null, "reload", null);
|
||||
grid.refresh();
|
||||
window.detach();
|
||||
} catch (ApproveException ex) {
|
||||
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.workgroups.WorkgroupService;
|
||||
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.zkoss.bind.BindUtils;
|
||||
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.zk.ui.select.annotation.WireVariable;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ReqListMyAll extends RequirementSubpage<Requirement>
|
||||
{
|
||||
@WireVariable
|
||||
@@ -55,10 +54,11 @@ public class ReqListMyAll extends RequirementSubpage<Requirement>
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
|
||||
public void reloadRelated()
|
||||
{
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,11 +6,6 @@ import info.bukova.isspst.filters.RequirementFilter;
|
||||
import info.bukova.isspst.services.requirement.RequirementService;
|
||||
import info.bukova.isspst.services.workgroups.WorkgroupService;
|
||||
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.zkoss.bind.BindUtils;
|
||||
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.zk.ui.select.annotation.WireVariable;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ReqListMyCenters extends RequirementSubpage<Requirement>
|
||||
{
|
||||
@WireVariable
|
||||
@@ -55,10 +54,11 @@ public class ReqListMyCenters extends RequirementSubpage<Requirement>
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
|
||||
public void reloadRelated()
|
||||
{
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+44
-7
@@ -1,16 +1,14 @@
|
||||
package info.bukova.isspst.ui.main.orders.requirements;
|
||||
|
||||
import info.bukova.isspst.data.Limit;
|
||||
import info.bukova.isspst.data.Requirement;
|
||||
import info.bukova.isspst.data.Workgroup;
|
||||
import info.bukova.isspst.filters.RequirementFilter;
|
||||
import info.bukova.isspst.services.invoicing.InvoicingService;
|
||||
import info.bukova.isspst.services.limits.LimitService;
|
||||
import info.bukova.isspst.services.requirement.RequirementService;
|
||||
import info.bukova.isspst.services.workgroups.WorkgroupService;
|
||||
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.zkoss.bind.BindUtils;
|
||||
import org.zkoss.bind.annotation.GlobalCommand;
|
||||
@@ -18,6 +16,10 @@ import org.zkoss.bind.annotation.Init;
|
||||
import org.zkoss.bind.annotation.NotifyChange;
|
||||
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>
|
||||
{
|
||||
@WireVariable
|
||||
@@ -26,6 +28,12 @@ public class ReqListMyWorkgroups extends RequirementSubpage<Requirement>
|
||||
@WireVariable
|
||||
protected WorkgroupService workgroupService;
|
||||
|
||||
@WireVariable
|
||||
protected LimitService limitService;
|
||||
|
||||
@WireVariable
|
||||
protected InvoicingService invoicingService;
|
||||
|
||||
public List<Workgroup> getCentres()
|
||||
{
|
||||
return workgroupService.getCentres();
|
||||
@@ -55,10 +63,11 @@ public class ReqListMyWorkgroups extends RequirementSubpage<Requirement>
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
|
||||
public void reloadRelated()
|
||||
{
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -75,8 +84,36 @@ public class ReqListMyWorkgroups extends RequirementSubpage<Requirement>
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotifyChange({ "dataBean", "ableToDelete", "canApprove", "invoicedAmount" })
|
||||
@NotifyChange({ "dataBean", "ableToDelete", "canApprove", "invoicedAmount", "workgroupLimit", "workgroupInvoiced" })
|
||||
public void setDataBean(Requirement data) {
|
||||
super.setDataBean(data);
|
||||
}
|
||||
|
||||
public BigDecimal getWorkgroupLimit() {
|
||||
if (getDataBean() != null && getDataBean().getWorkgroup() != null) {
|
||||
Limit limit = limitService.getForWorkgroup(getDataBean().getWorkgroup());
|
||||
|
||||
if (limit == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return limit.getLimit();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public BigDecimal getWorkgroupInvoiced() {
|
||||
if (getDataBean() != null && getDataBean().getWorkgroup() != null) {
|
||||
BigDecimal invoiced = invoicingService.totalInvoicedForWorkgroup(getDataBean().getWorkgroup());
|
||||
|
||||
if (invoiced == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return invoiced;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,9 +63,10 @@ public class TripRequirementListAll extends RequirementSubpage<TripRequirement>
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
|
||||
public void reloadRelated() {
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,6 +63,7 @@ public class TripRequirementListCentre extends RequirementSubpage<TripRequiremen
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
public void reloadRelated() {
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,6 +70,7 @@ public class TripRequirementListWorkgroup extends RequirementSubpage<TripRequire
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
public void reloadRelated() {
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -78,9 +78,9 @@ public class TripBillListBase extends RequirementSubpage<TripBillApproval> {
|
||||
}
|
||||
|
||||
@GlobalCommand
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill" })
|
||||
public void reloadRelated()
|
||||
{
|
||||
@NotifyChange({ "dataList", "dataBean", "fullFill", "selIndex" })
|
||||
public void reloadRelated() {
|
||||
this.reload();
|
||||
restoreUserView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -1,3 +1,4 @@
|
||||
ad.domain=bukova.net
|
||||
ad.upnSuffix=bukova.info
|
||||
ad.ldapUrl=ldap://192.168.25.110/
|
||||
ad.allowedGroup=ucitele
|
||||
@@ -247,6 +247,7 @@ TripBillCancelApprovalTitle=Zrušit schválení
|
||||
TripBillPaid=Proplaceno
|
||||
TripBillPaidDate=Datum proplacení
|
||||
TripBillPay=Proplatit
|
||||
TribBillApproveDate=Datum schválení
|
||||
|
||||
TripBillSummaryDetail=Detail
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,192 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TripBills" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b63eddc4-7326-45c4-99b4-fc35d6e98179">
|
||||
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
|
||||
<property name="ireport.zoom" value="1.9487171000000014"/>
|
||||
<property name="ireport.x" value="0"/>
|
||||
<property name="ireport.y" value="0"/>
|
||||
<queryString>
|
||||
<![CDATA[]]>
|
||||
</queryString>
|
||||
<field name="bill.requirement.numser" class="java.lang.String"/>
|
||||
<field name="bill.requirement.reqDate" class="java.util.Date"/>
|
||||
<field name="bill.requirement.tripDate" class="java.util.Date"/>
|
||||
<field name="bill.requirement.to" class="java.lang.String"/>
|
||||
<field name="bill.requirement.from" class="java.lang.String"/>
|
||||
<field name="bill.total" class="java.math.BigDecimal"/>
|
||||
<field name="bill.ownedBy" class="info.bukova.isspst.data.User"/>
|
||||
<field name="bill.paidDate" class="java.util.Date"/>
|
||||
<background>
|
||||
<band splitType="Stretch"/>
|
||||
</background>
|
||||
<title>
|
||||
<band height="23" splitType="Stretch">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="550" height="20" uuid="bc6cd7eb-bb1a-4114-b37d-ac64e951ca84"/>
|
||||
<textElement textAlignment="Center">
|
||||
<font size="14" isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Přehled vyúčtovaných CP]]></text>
|
||||
</staticText>
|
||||
</band>
|
||||
</title>
|
||||
<columnHeader>
|
||||
<band height="26" splitType="Stretch">
|
||||
<staticText>
|
||||
<reportElement x="-3" y="0" width="49" height="24" uuid="4ac41092-a9db-4a53-adcf-403484a88f0c">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5bae174d-9ec1-47bf-b996-c693f3deb590"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Číslo]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="52" y="0" width="55" height="25" uuid="4ad11f47-bf12-4f6a-9459-31f6a1bf740a">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ec379d5f-c508-4339-997b-960e31840623"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Datum požad.]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="109" y="0" width="55" height="24" uuid="82e13fca-38df-497d-879a-a83b5811e7fc">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="1a0527d9-8676-4271-b662-dbed84c8de59"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Datum cesty]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="166" y="0" width="95" height="24" uuid="b37db24a-5134-42fb-92f6-1be4891f19ae">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f01bf96d-78de-440b-9322-27510f96e117"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Počátek cesty]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="262" y="0" width="95" height="24" uuid="dc940c96-6170-4ff0-bf1c-c3b228635812">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f296e149-4f38-4ed6-b0a6-1e4544728890"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Cíl]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="358" y="0" width="97" height="24" uuid="9eddb29b-3024-4f0d-90f5-e8e896add7c0">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="df75863b-fbfb-4332-a9fa-dbacf818e85c"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Žadatel]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="451" y="0" width="45" height="24" uuid="783dc31a-7f32-44d1-b455-6e8d25d5a943">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ef5d98d4-a0b8-4098-be82-3ea9a1bc2213"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Částka]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="501" y="0" width="52" height="24" uuid="2e899e0b-4c95-4088-8342-b6c701267c1f">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="781e4236-2351-4b02-99d0-cc2f76e00e3b"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Datum vyúčt.]]></text>
|
||||
</staticText>
|
||||
<line>
|
||||
<reportElement x="0" y="25" width="550" height="1" uuid="813c3d6a-167c-4710-ab3a-e0795d31b3eb"/>
|
||||
</line>
|
||||
</band>
|
||||
</columnHeader>
|
||||
<detail>
|
||||
<band height="18" splitType="Stretch">
|
||||
<printWhenExpression><![CDATA[$F{bill.paidDate} != null]]></printWhenExpression>
|
||||
<textField>
|
||||
<reportElement x="-3" y="1" width="57" height="12" uuid="52ea43dc-f565-4502-9d17-4a41dab6db08">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5bae174d-9ec1-47bf-b996-c693f3deb590"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.numser}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="dd.MM.yyyy">
|
||||
<reportElement x="52" y="1" width="60" height="12" uuid="88d723d7-ab14-4c78-8b26-26d804e52b42">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ec379d5f-c508-4339-997b-960e31840623"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.reqDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="dd.MM.yyyy">
|
||||
<reportElement x="109" y="1" width="60" height="12" uuid="02f1eb70-9fa5-4249-93a3-aaa27ce5db96">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="1a0527d9-8676-4271-b662-dbed84c8de59"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.tripDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="166" y="1" width="95" height="12" uuid="10790d11-b692-4a37-849f-8b3054f65b52">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f01bf96d-78de-440b-9322-27510f96e117"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.from}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="262" y="1" width="95" height="12" uuid="bc0a5da9-d998-4734-a0dd-8993e24d96d2">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f296e149-4f38-4ed6-b0a6-1e4544728890"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.to}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="358" y="1" width="97" height="12" uuid="3a197226-28d7-4384-b74a-12e748bd0967">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="df75863b-fbfb-4332-a9fa-dbacf818e85c"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.ownedBy}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="###0.00;-###0.00">
|
||||
<reportElement x="451" y="1" width="45" height="12" uuid="02a5e327-b7ab-4841-a895-0d285770e3c8">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ef5d98d4-a0b8-4098-be82-3ea9a1bc2213"/>
|
||||
</reportElement>
|
||||
<textElement textAlignment="Right">
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
<paragraph lineSpacing="Single"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.total}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="dd.MM.yyyy">
|
||||
<reportElement x="501" y="1" width="60" height="12" uuid="9750faaa-4e86-4b96-ae11-e394af572b82">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="781e4236-2351-4b02-99d0-cc2f76e00e3b"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.paidDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
</band>
|
||||
</detail>
|
||||
<summary>
|
||||
<band height="23" splitType="Stretch"/>
|
||||
</summary>
|
||||
</jasperReport>
|
||||
Binary file not shown.
@@ -0,0 +1,174 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TripBills" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b63eddc4-7326-45c4-99b4-fc35d6e98179">
|
||||
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
|
||||
<property name="ireport.zoom" value="1.4641000000000006"/>
|
||||
<property name="ireport.x" value="0"/>
|
||||
<property name="ireport.y" value="0"/>
|
||||
<queryString>
|
||||
<![CDATA[]]>
|
||||
</queryString>
|
||||
<field name="bill.requirement.numser" class="java.lang.String"/>
|
||||
<field name="bill.requirement.reqDate" class="java.util.Date"/>
|
||||
<field name="bill.requirement.tripDate" class="java.util.Date"/>
|
||||
<field name="bill.requirement.to" class="java.lang.String"/>
|
||||
<field name="bill.requirement.from" class="java.lang.String"/>
|
||||
<field name="bill.total" class="java.math.BigDecimal"/>
|
||||
<field name="bill.ownedBy" class="info.bukova.isspst.data.User"/>
|
||||
<field name="bill.paidDate" class="java.util.Date"/>
|
||||
<background>
|
||||
<band splitType="Stretch"/>
|
||||
</background>
|
||||
<title>
|
||||
<band height="23" splitType="Stretch">
|
||||
<staticText>
|
||||
<reportElement x="0" y="0" width="552" height="20" uuid="bc6cd7eb-bb1a-4114-b37d-ac64e951ca84"/>
|
||||
<textElement textAlignment="Center">
|
||||
<font size="14" isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Přehled nevyúčtovaných CP]]></text>
|
||||
</staticText>
|
||||
</band>
|
||||
</title>
|
||||
<columnHeader>
|
||||
<band height="26" splitType="Stretch">
|
||||
<staticText>
|
||||
<reportElement x="-3" y="0" width="49" height="24" uuid="4ac41092-a9db-4a53-adcf-403484a88f0c">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5bae174d-9ec1-47bf-b996-c693f3deb590"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Číslo]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="57" y="0" width="55" height="25" uuid="4ad11f47-bf12-4f6a-9459-31f6a1bf740a">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ec379d5f-c508-4339-997b-960e31840623"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Datum požad.]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="120" y="0" width="55" height="24" uuid="82e13fca-38df-497d-879a-a83b5811e7fc">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="1a0527d9-8676-4271-b662-dbed84c8de59"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Datum cesty]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="183" y="0" width="105" height="24" uuid="b37db24a-5134-42fb-92f6-1be4891f19ae">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f01bf96d-78de-440b-9322-27510f96e117"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Počátek cesty]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="290" y="0" width="105" height="24" uuid="dc940c96-6170-4ff0-bf1c-c3b228635812">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f296e149-4f38-4ed6-b0a6-1e4544728890"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Cíl]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="398" y="0" width="112" height="24" uuid="9eddb29b-3024-4f0d-90f5-e8e896add7c0">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="df75863b-fbfb-4332-a9fa-dbacf818e85c"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Žadatel]]></text>
|
||||
</staticText>
|
||||
<staticText>
|
||||
<reportElement x="512" y="0" width="40" height="24" uuid="783dc31a-7f32-44d1-b455-6e8d25d5a943">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ef5d98d4-a0b8-4098-be82-3ea9a1bc2213"/>
|
||||
</reportElement>
|
||||
<textElement verticalAlignment="Middle">
|
||||
<font isBold="true" pdfFontName="Helvetica-Bold" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<text><![CDATA[Částka]]></text>
|
||||
</staticText>
|
||||
<line>
|
||||
<reportElement x="0" y="25" width="550" height="1" uuid="813c3d6a-167c-4710-ab3a-e0795d31b3eb"/>
|
||||
</line>
|
||||
</band>
|
||||
</columnHeader>
|
||||
<detail>
|
||||
<band height="18" splitType="Stretch">
|
||||
<printWhenExpression><![CDATA[$F{bill.paidDate} == null]]></printWhenExpression>
|
||||
<textField>
|
||||
<reportElement x="-3" y="1" width="57" height="12" uuid="52ea43dc-f565-4502-9d17-4a41dab6db08">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="5bae174d-9ec1-47bf-b996-c693f3deb590"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.numser}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="dd.MM.yyyy">
|
||||
<reportElement x="57" y="1" width="60" height="12" uuid="88d723d7-ab14-4c78-8b26-26d804e52b42">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ec379d5f-c508-4339-997b-960e31840623"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.reqDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="dd.MM.yyyy">
|
||||
<reportElement x="120" y="1" width="60" height="12" uuid="02f1eb70-9fa5-4249-93a3-aaa27ce5db96">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="1a0527d9-8676-4271-b662-dbed84c8de59"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.tripDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="183" y="1" width="105" height="12" uuid="10790d11-b692-4a37-849f-8b3054f65b52">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f01bf96d-78de-440b-9322-27510f96e117"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.from}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="290" y="1" width="105" height="12" uuid="bc0a5da9-d998-4734-a0dd-8993e24d96d2">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="f296e149-4f38-4ed6-b0a6-1e4544728890"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.requirement.to}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="398" y="1" width="112" height="12" uuid="3a197226-28d7-4384-b74a-12e748bd0967">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="df75863b-fbfb-4332-a9fa-dbacf818e85c"/>
|
||||
</reportElement>
|
||||
<textElement>
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.ownedBy}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField pattern="###0.00;-###0.00">
|
||||
<reportElement x="512" y="1" width="40" height="12" uuid="02a5e327-b7ab-4841-a895-0d285770e3c8">
|
||||
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="ef5d98d4-a0b8-4098-be82-3ea9a1bc2213"/>
|
||||
</reportElement>
|
||||
<textElement textAlignment="Right">
|
||||
<font pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="true"/>
|
||||
<paragraph lineSpacing="Single"/>
|
||||
</textElement>
|
||||
<textFieldExpression><![CDATA[$F{bill.total}]]></textFieldExpression>
|
||||
</textField>
|
||||
</band>
|
||||
</detail>
|
||||
<summary>
|
||||
<band height="23" splitType="Stretch"/>
|
||||
</summary>
|
||||
</jasperReport>
|
||||
@@ -9,10 +9,17 @@
|
||||
<security:authentication-provider ref="adAuthProvider"/>
|
||||
</security:authentication-manager>
|
||||
|
||||
<bean id="adAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
|
||||
<!--<bean id="adAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
|
||||
<constructor-arg name="domain" value="${ad.domain}"/>
|
||||
<constructor-arg name="url" value="${ad.ldapUrl}"/>
|
||||
<property name="userDetailsContextMapper" ref="adUserMapper"/>
|
||||
</bean>-->
|
||||
|
||||
<bean id="adAuthProvider" class="info.bukova.isspst.security.AdAuthenticationProvider">
|
||||
<constructor-arg name="domain" value="${ad.domain}"/>
|
||||
<constructor-arg name="upnSuffix" value="${ad.upnSuffix}"/>
|
||||
<constructor-arg name="url" value="${ad.ldapUrl}"/>
|
||||
<property name="userDetailsContextMapper" ref="adUserMapper"/>
|
||||
</bean>
|
||||
|
||||
<bean id="adUserMapper" class="info.bukova.isspst.services.users.AdUserCtxMapper">
|
||||
|
||||
@@ -58,6 +58,10 @@
|
||||
<prop key="hibernate.search.default.directory_provider">filesystem</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.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> -->
|
||||
</props>
|
||||
</property>
|
||||
|
||||
@@ -51,6 +51,6 @@
|
||||
<div id="mainData">
|
||||
<u:include src="${gridZul}" />
|
||||
</div>
|
||||
<div id="footer"> Verze 3.1 </div>
|
||||
<div id="footer"> Verze 4.4 </div>
|
||||
</div>
|
||||
</html>
|
||||
@@ -61,6 +61,24 @@
|
||||
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 {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
|
||||
@@ -9,37 +9,44 @@
|
||||
<listheader
|
||||
label="${labels.InvoicingRequirementNumber}"
|
||||
sort="czech(requirement.numser)"
|
||||
onCreate="self.sort(false)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="130px" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(requirement.reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="150px" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="czech(requirement.centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="180px" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridWorkgroup}"
|
||||
sort="czech(requirement.workgroup.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="180px" />
|
||||
<listheader
|
||||
label="${labels.InvoicingApplicant}"
|
||||
sort="czech(requirement.ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="180px" />
|
||||
<listheader
|
||||
label="${labels.InvoicingDescription}"
|
||||
sort="czech(requirement.description)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="" />
|
||||
<listheader
|
||||
label="${labels.InvoicingRequirementPrice}"
|
||||
sort="auto(requirement.sumTotal)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
align="right"
|
||||
width="130px" />
|
||||
<listheader
|
||||
label="${labels.InvoicingInvoicedPrice}"
|
||||
align="right"
|
||||
sort="auto(totalInvoiced)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="130px" />
|
||||
</listhead>
|
||||
<auxhead
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<textbox
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)"
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
|
||||
instant="true"
|
||||
onChange="@command('doFilter')"
|
||||
maxlength="@load(vm.lengthText)"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
vflex="1"
|
||||
hflex="7"
|
||||
itemRenderer="@load(vm.requirementsItemRenderer)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
model="@load(vm.dataList)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
@@ -13,34 +13,42 @@
|
||||
<listheader
|
||||
label="${labels.StudentProjectAbr}"
|
||||
sort="auto(project)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="5" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="7" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="15" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDeliveryDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.Amount}"
|
||||
sort="auto(sumTotal)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
align="right"
|
||||
hflex="10" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDescription}"
|
||||
sort="czech(description)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="20" />
|
||||
<listheader
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
label="${labels.ownedBy}"
|
||||
hflex="15" />
|
||||
</listhead>
|
||||
@@ -128,7 +136,7 @@
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<textbox
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)"
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
|
||||
instant="true"
|
||||
onChange="@command('doFilter')"
|
||||
maxlength="@load(vm.lengthText)"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
vflex="1"
|
||||
hflex="7"
|
||||
itemRenderer="@load(vm.requirementsItemRenderer)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
model="@load(vm.dataList)"
|
||||
@@ -13,34 +13,42 @@
|
||||
<listheader
|
||||
label="${labels.StudentProjectAbr}"
|
||||
sort="auto(project)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="5" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="7" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="15" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDeliveryDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.Amount}"
|
||||
sort="auto(sumTotal)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
align="right"
|
||||
hflex="10" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDescription}"
|
||||
sort="czech(description)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="20" />
|
||||
<listheader
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
label="${labels.ownedBy}"
|
||||
hflex="15" />
|
||||
</listhead>
|
||||
@@ -128,7 +136,7 @@
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<textbox
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)"
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
|
||||
instant="true"
|
||||
onChange="@command('doFilter')"
|
||||
maxlength="@load(vm.lengthText)"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
vflex="1"
|
||||
hflex="7"
|
||||
itemRenderer="@load(vm.requirementsItemRenderer)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
model="@load(vm.dataList)"
|
||||
@@ -13,34 +13,42 @@
|
||||
<listheader
|
||||
label="${labels.StudentProjectAbr}"
|
||||
sort="auto(project)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="5" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="7" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="15" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDeliveryDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="13" />
|
||||
<listheader
|
||||
label="${labels.Amount}"
|
||||
sort="auto(sumTotal)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
align="right"
|
||||
hflex="10" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridDescription}"
|
||||
sort="czech(description)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
hflex="20" />
|
||||
<listheader
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
label="${labelsownedBy}"
|
||||
hflex="15" />
|
||||
</listhead>
|
||||
@@ -128,7 +136,7 @@
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<textbox
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.bigDecimalConverter)"
|
||||
value="@bind(vm.filterTemplate.sumTotal) @converter(vm.standardBigDecimalFilterConverter)"
|
||||
instant="true"
|
||||
onChange="@command('doFilter')"
|
||||
maxlength="@load(vm.lengthText)"
|
||||
@@ -197,7 +205,14 @@
|
||||
<label value="${labels.RequirementInvoicedAmount}"/>
|
||||
<label value="@load(vm.invoicedAmount) @converter(vm.bigDecimalConverter)"/>
|
||||
</hbox>
|
||||
|
||||
<hbox visible="@load(not empty vm.workgroupLimit)">
|
||||
<label value="Limit komise "/>
|
||||
<label value="@load(vm.dataBean.workgroup)"/>
|
||||
<label value=" / vyčerpáno: "/>
|
||||
<label value="@load(vm.workgroupLimit) @converter(vm.bigDecimalConverter)"/>
|
||||
<label value=" / "/>
|
||||
<label value="@load(vm.workgroupInvoiced) @converter(vm.bigDecimalConverter)"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</div>
|
||||
</hbox>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
model="@load(vm.dataList)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
itemRenderer="@load(vm.itemRenderer)"
|
||||
onAfterRender="@command('afterRender')"
|
||||
selectedIndex="@bind(vm.selIndex)">
|
||||
@@ -20,33 +20,49 @@
|
||||
<listheader
|
||||
label="${labels.TravelOrdersGridNumser}"
|
||||
sort="czech(bill.requirement.numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.TravelOrdersGridReqDate}"
|
||||
sort="auto(bill.requirement.reqDate)"
|
||||
width="70%" />
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="40%" />
|
||||
<listheader
|
||||
label="${labels.TripBillTravelBegin}"
|
||||
sort="auto(bill.requirement.tripDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="40%" />
|
||||
<listheader
|
||||
label="${labels.TravelOrdersGridFrom}"
|
||||
sort="czech(bill.requirement.from)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="70%" />
|
||||
<listheader
|
||||
label="${labels.TravelOrdersGridTo}"
|
||||
sort="czech(bill.requirement.to)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="70%" />
|
||||
<listheader
|
||||
label="${labels.TravelOrdersGridTotal}"
|
||||
sort="auto(bill.total)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
align="right"
|
||||
width="70%" />
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.ownedBy}"
|
||||
width="50%"/>
|
||||
<listheader
|
||||
label="${labels.RequirementsFormPassengers}"
|
||||
width="10%"/>
|
||||
<listheader
|
||||
label="${labels.TribBillApproveDate}"
|
||||
width="40%"/>
|
||||
<listheader
|
||||
label="${labels.TripBillPaid}"
|
||||
width="10%"/>
|
||||
<listheader
|
||||
label="${labels.TripBillPaidDate}"
|
||||
width="20%"/>
|
||||
width="40%"/>
|
||||
</listhead>
|
||||
<auxhead
|
||||
sclass="category-center"
|
||||
@@ -82,6 +98,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</auxheader>
|
||||
<auxheader>
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<datebox
|
||||
value="@bind(vm.filterTemplate.tripDate)"
|
||||
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>
|
||||
<auxheader>
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
@@ -148,6 +180,34 @@
|
||||
</div>
|
||||
</div>
|
||||
</auxheader>
|
||||
<auxheader>
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
<checkbox
|
||||
checked="@bind(vm.filterTemplate.billForPassenger)"
|
||||
onClick="@command('doFilter')" />
|
||||
</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.approveDate)"
|
||||
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>
|
||||
<auxheader>
|
||||
<div sclass="find-grid-cell">
|
||||
<div sclass="find-grid-divtextbox">
|
||||
@@ -181,10 +241,13 @@
|
||||
<listitem>
|
||||
<listcell label="@load(each.bill.requirement.numser)" />
|
||||
<listcell label="@load(each.bill.requirement.reqDate) @converter('formatedDate', format=labels.DateFormat)" />
|
||||
<listcell label="@load(each.bill.requirement.tripDate) @converter('formatedDate', format=labels.DateFormat)" />
|
||||
<listcell label="@load(each.bill.requirement.from)" />
|
||||
<listcell label="@load(each.bill.requirement.to)" />
|
||||
<listcell label="@load(each.bill.total) @converter(vm.standardBigDecimalConverter)"/>
|
||||
<listcell label="@load(each.bill.ownedBy)"/>
|
||||
<listcell label="@load(each.bill.ownedBy ne each.bill.requirement.ownedBy) @converter(vm.standardBoolConverter)"/>
|
||||
<listcell label="@load(each.approveDate) @converter('formatedDate', format=labels.DateFormat)"/>
|
||||
<listcell label="@load(each.bill.paid) @converter(vm.standardBoolConverter)"/>
|
||||
<listcell label="@load(each.bill.paidDate) @converter('formatedDate', format=labels.DateFormat)"/>
|
||||
</listitem>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<hbox vflex="1">
|
||||
<listbox
|
||||
model="@load(vm.dataList)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
hflex="7"
|
||||
@@ -21,30 +21,37 @@
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="13%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridWorkgroup}"
|
||||
sort="auto(workgroup.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridFrom}"
|
||||
sort="czech(from)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridTo}"
|
||||
sort="czech(to)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridOwnedBy}"
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="20%" />
|
||||
</listhead>
|
||||
<auxhead
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<hbox vflex="1">
|
||||
<listbox
|
||||
model="@load(vm.dataList)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
hflex="7"
|
||||
@@ -19,26 +19,32 @@
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="13%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridFrom}"
|
||||
sort="auto(from)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="40%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridTo}"
|
||||
sort="czech(to)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="40%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridOwnedBy}"
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="20%" />
|
||||
</listhead>
|
||||
<auxhead
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<hbox vflex="1">
|
||||
<listbox
|
||||
model="@load(vm.dataList)"
|
||||
selectedItem="@bind(vm.dataBean)"
|
||||
selectedItem="@save(vm.dataBean)"
|
||||
mold="paging"
|
||||
autopaging="true"
|
||||
hflex="7"
|
||||
@@ -19,30 +19,37 @@
|
||||
<listheader
|
||||
label="${labels.RequirementsGridNumberSerie}"
|
||||
sort="czech(numser)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridReqDate}"
|
||||
sort="auto(reqDate)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="13%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridCenter}"
|
||||
sort="auto(centre.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridWorkgroup}"
|
||||
sort="auto(workgroup.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="10%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridFrom}"
|
||||
sort="czech(from)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridTo}"
|
||||
sort="czech(to)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="30%" />
|
||||
<listheader
|
||||
label="${labels.RequirementsGridOwnedBy}"
|
||||
sort="auto(ownedBy.fullName)"
|
||||
onSort="@command('onSortHeader', header=self)"
|
||||
width="20%" />
|
||||
</listhead>
|
||||
<auxhead
|
||||
|
||||
Reference in New Issue
Block a user