Commit 918c544e by Tuomas Riihimäki

Kauppaviilausta,

1 parent 56bce642
Showing with 2372 additions and 854 deletions
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -10,7 +9,6 @@ import java.util.Map.Entry; ...@@ -10,7 +9,6 @@ import java.util.Map.Entry;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.EJBAccessException;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -130,39 +128,4 @@ public class AccountEventBean implements AccountEventBeanLocal { ...@@ -130,39 +128,4 @@ public class AccountEventBean implements AccountEventBeanLocal {
} }
@Override
@RolesAllowed(SpecialPermission.S_USER)
public BigDecimal getAccountBalance(IUser user) {
if (user == null) {
user = permbean.getCurrentUser();
}
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(UserPermission.VIEW_ACCOUNTEVENTS)) {
throw new EJBAccessException("No enough rights to view accountevents");
}
List<AccountEvent> acs = accountfacade.getAccountEvents(user);
BigDecimal ret = BigDecimal.ZERO;
if (acs != null)
{
for (AccountEvent ac : acs) {
ret = ret.add(ac.getTotal()).setScale(2, RoundingMode.HALF_UP);
}
}
return ret;
}
@Override
@RolesAllowed(SpecialPermission.S_USER)
public List<AccountEvent> getAccountEvents(IUser user) {
if (user == null) {
user = permbean.getCurrentUser();
}
if (!permbean.isCurrentUser(user) && !permbean.hasPermission(UserPermission.VIEW_ACCOUNTEVENTS)) {
throw new EJBAccessException("No enough rights to view accountevents");
}
return accountfacade.getAccountEvents(user);
}
} }
...@@ -56,7 +56,7 @@ public class BillBean implements BillBeanLocal { ...@@ -56,7 +56,7 @@ public class BillBean implements BillBeanLocal {
@EJB @EJB
private PermissionBeanLocal permbean; private PermissionBeanLocal permbean;
@EJB @EJB
private ProductBeanLocal productBean; private ProductBean productBean;
@EJB @EJB
private PlaceBean placebean; private PlaceBean placebean;
...@@ -220,7 +220,7 @@ public class BillBean implements BillBeanLocal { ...@@ -220,7 +220,7 @@ public class BillBean implements BillBeanLocal {
placebean.lockPlaceProduct(bill.getUser(), prod, bl.getQuantity()); placebean.lockPlaceProduct(bill.getUser(), prod, bl.getQuantity());
} }
productBean.createAccountEvent(prod, bl.getQuantity(), bill.getUser()); productBean.createAccountEvent(prod, bl.getQuantity(), bill.getUser(), bill.getSentDate());
} }
} }
......
...@@ -10,6 +10,7 @@ import java.util.List; ...@@ -10,6 +10,7 @@ import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
...@@ -34,6 +35,7 @@ import fi.insomnia.bortal.util.MailMessage; ...@@ -34,6 +35,7 @@ import fi.insomnia.bortal.util.MailMessage;
* Session Bean implementation class CardTemplateBean * Session Bean implementation class CardTemplateBean
*/ */
@Stateless @Stateless
@LocalBean
@DeclareRoles({ UserPermission.S_WRITE_ROLES }) @DeclareRoles({ UserPermission.S_WRITE_ROLES })
public class CardTemplateBean implements CardTemplateBeanLocal { public class CardTemplateBean implements CardTemplateBeanLocal {
......
...@@ -112,6 +112,7 @@ public class Menubean implements MenubeanLocal { ...@@ -112,6 +112,7 @@ public class Menubean implements MenubeanLocal {
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"), UserPermission.READ_ROLES); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/listCardTemplates"), UserPermission.READ_ROLES);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"), UserPermission.WRITE_ROLES); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/createCardTemplate"), UserPermission.WRITE_ROLES);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/editCardTemplate"), null).setVisible(false); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/editCardTemplate"), null).setVisible(false);
adminuser.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/edit"), UserPermission.VIEW_ALL).setVisible(false); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/edit"), UserPermission.VIEW_ALL).setVisible(false);
adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/changePassword"), UserPermission.VIEW_ALL).setVisible(false); adminuser.addPage(menuitemfacade.findOrCreate("/useradmin/changePassword"), UserPermission.VIEW_ALL).setVisible(false);
......
...@@ -122,7 +122,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -122,7 +122,7 @@ public class PlaceBean implements PlaceBeanLocal {
} }
private BigDecimal addAndCalcPrice(IUser user, Place newPlace) { private BigDecimal addAndCalcPrice(EventUser user, Place newPlace) {
Set<Place> places = new HashSet<Place>(); Set<Place> places = new HashSet<Place>();
places.addAll(placeFacade.findUsersReservations(eventBean.getCurrentEvent(), user)); places.addAll(placeFacade.findUsersReservations(eventBean.getCurrentEvent(), user));
...@@ -135,10 +135,11 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -135,10 +135,11 @@ public class PlaceBean implements PlaceBeanLocal {
BigDecimal total = BigDecimal.ZERO; BigDecimal total = BigDecimal.ZERO;
Calendar now = Calendar.getInstance();
for (Entry<Product, Integer> entry : mockmap.entrySet()) { for (Entry<Product, Integer> entry : mockmap.entrySet()) {
logger.debug("Adding to price {} of {}", entry.getValue(), entry.getKey().getName()); logger.debug("Adding to price {} of {}", entry.getValue(), entry.getKey().getName());
if (entry.getKey() != null) { if (entry.getKey() != null) {
total = total.add(productBean.calculateTotal(entry.getKey(), new BigDecimal(entry.getValue()))); total = total.add(productBean.calculateTotal(entry.getKey(), new BigDecimal(entry.getValue()), now));
} }
} }
return total; return total;
...@@ -248,7 +249,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -248,7 +249,7 @@ public class PlaceBean implements PlaceBeanLocal {
// PlaceGroup pg = pgbean.createPlaceGroup(user); // PlaceGroup pg = pgbean.createPlaceGroup(user);
BigDecimal totalprice = addAndCalcPrice(user, null); BigDecimal totalprice = addAndCalcPrice(user, null);
BigDecimal balance = acbean.getAccountBalance(user); BigDecimal balance = user.getAccountBalance();
if (balance.compareTo(totalprice) < 0) { if (balance.compareTo(totalprice) < 0) {
logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice }); logger.info("User {} Could not buy things because account balance {} is too low for purchase {}", new Object[] { user, balance, totalprice });
......
...@@ -2,12 +2,14 @@ package fi.insomnia.bortal.beans; ...@@ -2,12 +2,14 @@ package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
...@@ -27,6 +29,7 @@ import fi.insomnia.bortal.model.Product; ...@@ -27,6 +29,7 @@ import fi.insomnia.bortal.model.Product;
* Session Bean implementation class ProductBean * Session Bean implementation class ProductBean
*/ */
@Stateless @Stateless
@LocalBean
@DeclareRoles({ @DeclareRoles({
ShopPermission.S_LIST_ALL_PRODUCTS, ShopPermission.S_LIST_ALL_PRODUCTS,
ShopPermission.S_LIST_USERPRODUCTS, ShopPermission.S_LIST_USERPRODUCTS,
...@@ -106,12 +109,12 @@ public class ProductBean implements ProductBeanLocal { ...@@ -106,12 +109,12 @@ public class ProductBean implements ProductBeanLocal {
} }
@Override @Override
public BigDecimal calculateTotal(Product product, BigDecimal quantity) { public BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date) {
if (product == null || quantity == null) { if (product == null || quantity == null) {
throw new RuntimeException("Some parameter is null!"); throw new RuntimeException("Some parameter is null!");
} }
BigDecimal total = product.getPrice(); BigDecimal total = product.getPrice();
for (Discount d : product.getActiveDiscounts(quantity)) { for (Discount d : product.getActiveDiscounts(quantity, date)) {
total = total.multiply(d.getPercentage()); total = total.multiply(d.getPercentage());
} }
return total.setScale(2, RoundingMode.HALF_UP).multiply(quantity); return total.setScale(2, RoundingMode.HALF_UP).multiply(quantity);
...@@ -132,10 +135,11 @@ public class ProductBean implements ProductBeanLocal { ...@@ -132,10 +135,11 @@ public class ProductBean implements ProductBeanLocal {
// return ret; // return ret;
// } // }
@Override public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user, Calendar date) {
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user) {
BigDecimal unitPrice = product.getPrice().negate(); BigDecimal unitPrice = product.getPrice().negate();
List<Discount> discounts = product.getActiveDiscounts(quantity);
List<Discount> discounts = product.getActiveDiscounts(quantity, date);
for (Discount d : discounts) { for (Discount d : discounts) {
unitPrice = unitPrice.multiply(d.getPercentage()); unitPrice = unitPrice.multiply(d.getPercentage());
} }
...@@ -143,6 +147,7 @@ public class ProductBean implements ProductBeanLocal { ...@@ -143,6 +147,7 @@ public class ProductBean implements ProductBeanLocal {
user = eventUserFacade.find(user.getId()); user = eventUserFacade.find(user.getId());
AccountEvent ret = new AccountEvent(user, product, unitPrice, quantity, Calendar.getInstance()); AccountEvent ret = new AccountEvent(user, product, unitPrice, quantity, Calendar.getInstance());
ret.setDelivered(Calendar.getInstance()); ret.setDelivered(Calendar.getInstance());
ret.setSeller(permbean.getCurrentUser()); ret.setSeller(permbean.getCurrentUser());
...@@ -152,7 +157,10 @@ public class ProductBean implements ProductBeanLocal { ...@@ -152,7 +157,10 @@ public class ProductBean implements ProductBeanLocal {
// discountinstancefacade.create(discInst); // discountinstancefacade.create(discInst);
accEventdiscounts.add(new DiscountInstance(ret, d)); accEventdiscounts.add(new DiscountInstance(ret, d));
} }
// user.getAccountEvents().add(ret); if (user.getAccountEvents() == null) {
user.setAccountEvents(new ArrayList<AccountEvent>());
}
user.getAccountEvents().add(ret);
accounteventfacade.create(ret); accounteventfacade.create(ret);
// flush changes to db. // flush changes to db.
userFacade.flush(); userFacade.flush();
...@@ -186,4 +194,8 @@ public class ProductBean implements ProductBeanLocal { ...@@ -186,4 +194,8 @@ public class ProductBean implements ProductBeanLocal {
return discountfacade.merge(discount); return discountfacade.merge(discount);
} }
@Override
public AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user) {
return createAccountEvent(product, quantity, user, Calendar.getInstance());
}
} }
...@@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory; ...@@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.facade.PrintedCardFacade; import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.ReaderEventFacade; import fi.insomnia.bortal.facade.ReaderEventFacade;
import fi.insomnia.bortal.facade.ReaderFacade; import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
...@@ -33,6 +35,10 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -33,6 +35,10 @@ public class ReaderBean implements ReaderBeanLocal {
private ReaderEventFacade readerEventFacade; private ReaderEventFacade readerEventFacade;
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
@EJB
private UserBeanLocal userbean;
@EJB
private CardTemplateBean cardTemplateBean;
private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class); private static final Logger logger = LoggerFactory.getLogger(ReaderBean.class);
...@@ -41,7 +47,7 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -41,7 +47,7 @@ public class ReaderBean implements ReaderBeanLocal {
PrintedCard card = cardfacade.findByRfid(tag); PrintedCard card = cardfacade.findByRfid(tag);
Reader reader = readerfacade.findOrCreateByIdent(readerIdent); Reader reader = readerfacade.findOrCreateByIdent(readerIdent);
logger.info("reader {}, ident {}", reader, readerIdent);
// RfidEvent revent = reventcontainer.foundTag(reader, tag); // RfidEvent revent = reventcontainer.foundTag(reader, tag);
List<ReaderEvent> lastevents = readerEventFacade.findLastEvents(reader, 1); List<ReaderEvent> lastevents = readerEventFacade.findLastEvents(reader, 1);
ReaderEvent ret = null; ReaderEvent ret = null;
...@@ -183,6 +189,32 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -183,6 +189,32 @@ public class ReaderBean implements ReaderBeanLocal {
@Override @Override
public User findTagFromAnyEvent(String value) { public User findTagFromAnyEvent(String value) {
return cardfacade.findLatestByRfidFromAny(value).getUser().getUser(); PrintedCard card = cardfacade.findLatestByRfidFromAny(value);
User ret = null;
if (card != null && card.getUser() != null)
{
ret = card.getUser().getUser();
}
return ret;
}
@Override
public ReaderEvent createCard(ReaderEvent event, EventUser user) {
ReaderEvent ret = null;
if (event.getPrintedCard() == null)
{
CardTemplate ct = cardTemplateBean.getUsersCardtype(user);
PrintedCard card = new PrintedCard(user, ct, null, true);
card.setRfidUid(event.getValue());
cardfacade.create(card);
ret = new ReaderEvent(Calendar.getInstance(), card, event.getReader());
card.getReaderEvents().add(event);
ret.setNotes("User associated to a card");
}
return ret;
} }
} }
...@@ -13,6 +13,7 @@ import javax.annotation.Resource; ...@@ -13,6 +13,7 @@ import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles; import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.SessionContext; import javax.ejb.SessionContext;
import javax.ejb.Stateless; import javax.ejb.Stateless;
...@@ -32,6 +33,7 @@ import fi.insomnia.bortal.model.Role; ...@@ -32,6 +33,7 @@ import fi.insomnia.bortal.model.Role;
* @author tuukka * @author tuukka
*/ */
@Stateless @Stateless
@LocalBean
@DeclareRoles({ UserPermission.S_READ_ROLES, UserPermission.S_WRITE_ROLES }) @DeclareRoles({ UserPermission.S_READ_ROLES, UserPermission.S_WRITE_ROLES })
public class RoleBean implements RoleBeanLocal { public class RoleBean implements RoleBeanLocal {
......
...@@ -131,7 +131,7 @@ public class UserBean implements UserBeanLocal { ...@@ -131,7 +131,7 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public List<Role> findUsersRoles(EventUser u) { public List<Role> findUsersRoles(EventUser u) {
IUser currusr = permbean.getCurrentUser(); EventUser currusr = permbean.getCurrentUser();
if (!currusr.equals(u) && !permbean.hasPermission(UserPermission.MODIFY)) { if (!currusr.equals(u) && !permbean.hasPermission(UserPermission.MODIFY)) {
loggerbean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "User tried to fetc another users roles: " + u); loggerbean.logMessage(SecurityLogType.permissionDenied, permbean.getCurrentUser(), "User tried to fetc another users roles: " + u);
throw new EJBAccessException("Not enough rights to find roles"); throw new EJBAccessException("Not enough rights to find roles");
...@@ -425,9 +425,10 @@ public class UserBean implements UserBeanLocal { ...@@ -425,9 +425,10 @@ public class UserBean implements UserBeanLocal {
@Override @Override
public EventUser getEventUser(User user) { public EventUser getEventUser(User user) {
if (user != null && user.getId() != null) { if (user == null || user.getId() == null) {
user = userFacade.find(user.getId()); return null;
} }
user = userFacade.find(user.getId());
EventUser ret = eventUserFacade.find(user); EventUser ret = eventUserFacade.find(user);
if (ret == null) if (ret == null)
......
...@@ -50,6 +50,7 @@ public class BillFacade extends IntegerPkGenericFacade<Bill> { ...@@ -50,6 +50,7 @@ public class BillFacade extends IntegerPkGenericFacade<Bill> {
CriteriaQuery<Bill> cq = cb.createQuery(Bill.class); CriteriaQuery<Bill> cq = cb.createQuery(Bill.class);
Root<Bill> root = cq.from(Bill.class); Root<Bill> root = cq.from(Bill.class);
cq.where(cb.equal(root.get(Bill_.event), eventbean.getCurrentEvent())); cq.where(cb.equal(root.get(Bill_.event), eventbean.getCurrentEvent()));
cq.orderBy(cb.desc(root.get(Bill_.id)));
return getEm().createQuery(cq).getResultList(); return getEm().createQuery(cq).getResultList();
} }
......
...@@ -10,6 +10,9 @@ import javax.persistence.criteria.CriteriaBuilder; ...@@ -10,6 +10,9 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.model.LanEvent; import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
...@@ -19,6 +22,7 @@ import fi.insomnia.bortal.model.Reader_; ...@@ -19,6 +22,7 @@ import fi.insomnia.bortal.model.Reader_;
@LocalBean @LocalBean
public class ReaderFacade extends IntegerPkGenericFacade<Reader> { public class ReaderFacade extends IntegerPkGenericFacade<Reader> {
private static final Logger logger = LoggerFactory.getLogger(ReaderFacade.class);
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
...@@ -33,18 +37,19 @@ public class ReaderFacade extends IntegerPkGenericFacade<Reader> { ...@@ -33,18 +37,19 @@ public class ReaderFacade extends IntegerPkGenericFacade<Reader> {
Root<Reader> root = cq.from(Reader.class); Root<Reader> root = cq.from(Reader.class);
cq.select(root); cq.select(root);
TypedQuery<Reader> q = getEm().createQuery(cq);
cq.where( cq.where(
cb.and( cb.equal(root.get(Reader_.event), event),
cb.equal(root.get(Reader_.event), event), cb.equal(root.get(Reader_.identification), reader));
cb.equal(root.get(Reader_.identification), reader))); TypedQuery<Reader> q = getEm().createQuery(cq);
return getSingleNullableResult(q); return getSingleNullableResult(q);
} }
public Reader findOrCreateByIdent(String ident) { public Reader findOrCreateByIdent(String ident) {
LanEvent event = eventbean.getCurrentEvent(); LanEvent event = eventbean.getCurrentEvent();
Reader ret = findByIdent(event, ident); Reader ret = findByIdent(event, ident);
logger.info("Tried to return reader {} from event {}", ret, event);
if (ret == null) { if (ret == null) {
ret = createIdent(this, event, ident); ret = createIdent(this, event, ident);
} }
...@@ -57,7 +62,9 @@ public class ReaderFacade extends IntegerPkGenericFacade<Reader> { ...@@ -57,7 +62,9 @@ public class ReaderFacade extends IntegerPkGenericFacade<Reader> {
ret = new Reader(ev, ident); ret = new Reader(ev, ident);
ret.setDescription("Automagically created"); ret.setDescription("Automagically created");
rf.create(ret); rf.create(ret);
logger.info("Created new reader for ident {} reader {}", ident, ev);
} }
return ret; return ret;
} }
......
...@@ -26,8 +26,4 @@ public interface AccountEventBeanLocal { ...@@ -26,8 +26,4 @@ public interface AccountEventBeanLocal {
void shopCash(EventUser shoppingUser, Map<Product, BigDecimal> void shopCash(EventUser shoppingUser, Map<Product, BigDecimal>
shopMap, boolean buyInstant); shopMap, boolean buyInstant);
BigDecimal getAccountBalance(IUser user);
List<AccountEvent> getAccountEvents(IUser user);
} }
package fi.insomnia.bortal.beans; package fi.insomnia.bortal.beans;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List; import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
...@@ -23,7 +24,7 @@ public interface ProductBeanLocal { ...@@ -23,7 +24,7 @@ public interface ProductBeanLocal {
Product findCreditProduct(); Product findCreditProduct();
BigDecimal calculateTotal(Product key, BigDecimal value); // BigDecimal calculateTotal(Product key, BigDecimal value);
AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user); AccountEvent createAccountEvent(Product product, BigDecimal quantity, EventUser user);
...@@ -37,4 +38,6 @@ public interface ProductBeanLocal { ...@@ -37,4 +38,6 @@ public interface ProductBeanLocal {
Discount save(Discount discount); Discount save(Discount discount);
BigDecimal calculateTotal(Product product, BigDecimal quantity, Calendar date);
} }
...@@ -4,6 +4,7 @@ import java.util.List; ...@@ -4,6 +4,7 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader; import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent; import fi.insomnia.bortal.model.ReaderEvent;
...@@ -28,4 +29,6 @@ public interface ReaderBeanLocal { ...@@ -28,4 +29,6 @@ public interface ReaderBeanLocal {
User findTagFromAnyEvent(String value); User findTagFromAnyEvent(String value);
ReaderEvent createCard(ReaderEvent event, EventUser user);
} }
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
*/ */
package fi.insomnia.bortal.model; package fi.insomnia.bortal.model;
import static javax.persistence.TemporalType.DATE;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
...@@ -85,8 +83,8 @@ public class Bill extends GenericEntity { ...@@ -85,8 +83,8 @@ public class Bill extends GenericEntity {
private String addr5; private String addr5;
@Column(nullable = false, name = "sent_time") @Column(nullable = false, name = "sent_time")
@Temporal(DATE) @Temporal(TemporalType.TIMESTAMP)
private Date sentDate = new Date(); private Calendar sentDate = Calendar.getInstance();
@Column(name = "payment_time", nullable = false) @Column(name = "payment_time", nullable = false)
private Integer paymentTime = 0; private Integer paymentTime = 0;
...@@ -199,7 +197,7 @@ public class Bill extends GenericEntity { ...@@ -199,7 +197,7 @@ public class Bill extends GenericEntity {
public Calendar getDueDate() { public Calendar getDueDate() {
Calendar dueDate = Calendar.getInstance(); Calendar dueDate = Calendar.getInstance();
dueDate.setTime(this.getSentDate()); dueDate.setTime(this.getSentDate().getTime());
dueDate.add(Calendar.DATE, this.getPaymentTime()); dueDate.add(Calendar.DATE, this.getPaymentTime());
return dueDate; return dueDate;
} }
...@@ -341,7 +339,7 @@ public class Bill extends GenericEntity { ...@@ -341,7 +339,7 @@ public class Bill extends GenericEntity {
} }
this.getBillLines().add(new BillLine(this, product, count)); this.getBillLines().add(new BillLine(this, product, count));
for (Discount disc : product.getActiveDiscounts(count)) { for (Discount disc : product.getActiveDiscounts(count, sentDate)) {
this.getBillLines().add(new BillLine(this, product, disc, count)); this.getBillLines().add(new BillLine(this, product, disc, count));
...@@ -368,11 +366,35 @@ public class Bill extends GenericEntity { ...@@ -368,11 +366,35 @@ public class Bill extends GenericEntity {
this.paidDate = paidDate; this.paidDate = paidDate;
} }
public Date getSentDate() { public Date getSentDateTime()
{
Date ret = null;
if (sentDate != null)
{
ret = sentDate.getTime();
}
return ret;
}
public void setSentDateTime(Date date)
{
if (date == null)
{
sentDate = null;
} else {
if (sentDate == null)
{
sentDate = Calendar.getInstance();
}
sentDate.setTime(date);
}
}
public Calendar getSentDate() {
return sentDate; return sentDate;
} }
public void setSentDate(Date sentDate) { public void setSentDate(Calendar sentDate) {
this.sentDate = sentDate; this.sentDate = sentDate;
} }
......
...@@ -58,7 +58,7 @@ public class CompoEntry extends GenericEntity { ...@@ -58,7 +58,7 @@ public class CompoEntry extends GenericEntity {
@Column(name = "final_position") @Column(name = "final_position")
private Integer finalPosition; private Integer finalPosition;
@JoinColumn(name = "current_file_id", referencedColumnName = "id") @JoinColumn(name = "current_file_id", referencedColumnName = CompoEntryFile.ID_COLUMN)
@OneToOne @OneToOne
private CompoEntryFile currentFile; private CompoEntryFile currentFile;
......
...@@ -2,6 +2,8 @@ package fi.insomnia.bortal.model; ...@@ -2,6 +2,8 @@ package fi.insomnia.bortal.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
...@@ -13,6 +15,8 @@ import javax.persistence.ManyToMany; ...@@ -13,6 +15,8 @@ import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/** /**
* *
...@@ -34,6 +38,13 @@ public class Discount extends GenericEntity { ...@@ -34,6 +38,13 @@ public class Discount extends GenericEntity {
@Column(name = "code") @Column(name = "code")
private String code; private String code;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "valid_from")
private Calendar validFrom;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "valid_to")
private Calendar validTo;
@Lob @Lob
@Column(name = "details") @Column(name = "details")
private String details; private String details;
...@@ -193,4 +204,66 @@ public class Discount extends GenericEntity { ...@@ -193,4 +204,66 @@ public class Discount extends GenericEntity {
this.event = event; this.event = event;
} }
public Date getValidToTime()
{
Date ret = null;
if (validTo != null) {
ret = validTo.getTime();
}
return ret;
}
public void setValidToTime(Date date)
{
if (date == null)
{
validTo = null;
} else {
if (validTo == null) {
validTo = Calendar.getInstance();
}
validTo.setTime(date);
}
}
public Date getValidFromTime()
{
Date ret = null;
if (validFrom != null) {
ret = validFrom.getTime();
}
return ret;
}
public void setValidFromTime(Date date)
{
if (date == null)
{
validFrom = null;
} else {
if (validFrom == null) {
validFrom = Calendar.getInstance();
}
validFrom.setTime(date);
}
}
public Calendar getValidTo() {
return validTo;
}
public void setValidTo(Calendar validTo) {
this.validTo = validTo;
}
public Calendar getValidFrom() {
return validFrom;
}
public void setValidFrom(Calendar validFrom) {
this.validFrom = validFrom;
}
} }
...@@ -5,6 +5,8 @@ import static javax.persistence.CascadeType.MERGE; ...@@ -5,6 +5,8 @@ import static javax.persistence.CascadeType.MERGE;
import static javax.persistence.CascadeType.PERSIST; import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REFRESH; import static javax.persistence.CascadeType.REFRESH;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List; import java.util.List;
...@@ -48,7 +50,7 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -48,7 +50,7 @@ public class EventUser extends GenericEntity implements IUser {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<UserNote> notes; private List<UserNote> notes;
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany()
private List<Role> roles = new ArrayList<Role>(); private List<Role> roles = new ArrayList<Role>();
@OneToMany(mappedBy = "user") @OneToMany(mappedBy = "user")
...@@ -74,15 +76,15 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -74,15 +76,15 @@ public class EventUser extends GenericEntity implements IUser {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user") @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private List<PrintedCard> printedCards; private List<PrintedCard> printedCards;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user") @OneToMany(mappedBy = "user")
@OrderBy(AccountEvent.ID_COLUMN) @OrderBy(AccountEvent.ID_COLUMN)
private List<AccountEvent> accountEvents; private List<AccountEvent> accountEvents;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user") @OneToMany(mappedBy = "user")
@OrderBy(Bill.ID_COLUMN) @OrderBy(Bill.ID_COLUMN)
private List<Bill> bills; private List<Bill> bills;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "seller") @OneToMany(mappedBy = "seller")
@OrderBy(AccountEvent.ID_COLUMN) @OrderBy(AccountEvent.ID_COLUMN)
private List<AccountEvent> soldItems; private List<AccountEvent> soldItems;
...@@ -440,4 +442,17 @@ public class EventUser extends GenericEntity implements IUser { ...@@ -440,4 +442,17 @@ public class EventUser extends GenericEntity implements IUser {
return user.getCreated(); return user.getCreated();
} }
public BigDecimal getAccountBalance() {
BigDecimal ret = BigDecimal.ZERO;
if (accountEvents != null)
{
for (AccountEvent ac : accountEvents) {
ret = ret.add(ac.getTotal()).setScale(2, RoundingMode.HALF_UP);
}
}
return ret;
}
} }
...@@ -6,6 +6,7 @@ package fi.insomnia.bortal.model; ...@@ -6,6 +6,7 @@ package fi.insomnia.bortal.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
...@@ -27,16 +28,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType; ...@@ -27,16 +28,6 @@ import org.eclipse.persistence.annotations.OptimisticLockingType;
*/ */
@Entity @Entity
@Table(name = "products") @Table(name = "products")
// @NamedQueries({
// @NamedQuery(name = "Product.findAll", query = "SELECT p FROM Product p"),
// @NamedQuery(name = "Product.findByProductName", query =
// "SELECT p FROM Product p WHERE p.name = :name"),
// @NamedQuery(name = "Product.findByPrice", query =
// "SELECT p FROM Product p WHERE p.price = :price"),
// @NamedQuery(name = "Product.findBySort", query =
// "SELECT p FROM Product p WHERE p.sort = :sort"),
// @NamedQuery(name = "Product.findByBarcode", query =
// "SELECT p FROM Product p WHERE p.barcode = :barcode") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Product extends GenericEntity { public class Product extends GenericEntity {
...@@ -66,7 +57,7 @@ public class Product extends GenericEntity { ...@@ -66,7 +57,7 @@ public class Product extends GenericEntity {
@Column(name = "instant_shop") @Column(name = "instant_shop")
private boolean prepaidInstant = false; private boolean prepaidInstant = false;
@JoinColumn(name = "provided_role_id", referencedColumnName = "id") @JoinColumn(name = "provided_role_id", referencedColumnName = Role.ID_COLUMN)
@ManyToOne @ManyToOne
private Role provides; private Role provides;
...@@ -79,10 +70,10 @@ public class Product extends GenericEntity { ...@@ -79,10 +70,10 @@ public class Product extends GenericEntity {
@ManyToMany(cascade = CascadeType.ALL) @ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "product_discounts", @JoinTable(name = "product_discounts",
inverseJoinColumns = { inverseJoinColumns = {
@JoinColumn(name = "discount_id", referencedColumnName = "id") @JoinColumn(name = "discount_id", referencedColumnName = Discount.ID_COLUMN)
}, },
joinColumns = { joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = "id") @JoinColumn(name = "product_id", referencedColumnName = Product.ID_COLUMN)
}) })
private List<Discount> discounts; private List<Discount> discounts;
...@@ -92,10 +83,10 @@ public class Product extends GenericEntity { ...@@ -92,10 +83,10 @@ public class Product extends GenericEntity {
@ManyToMany() @ManyToMany()
@JoinTable(name = "product_foodwavetemplate", @JoinTable(name = "product_foodwavetemplate",
joinColumns = { joinColumns = {
@JoinColumn(name = "product_id", referencedColumnName = "id"), @JoinColumn(name = "product_id", referencedColumnName = Product.ID_COLUMN),
}, },
inverseJoinColumns = { inverseJoinColumns = {
@JoinColumn(name = "food_wave_template_id", referencedColumnName = "id") @JoinColumn(name = "food_wave_template_id", referencedColumnName = FoodWaveTemplate.ID_COLUMN)
}, },
uniqueConstraints = { uniqueConstraints = {
@UniqueConstraint(columnNames = { "product_id", "food_wave_template_id" }) @UniqueConstraint(columnNames = { "product_id", "food_wave_template_id" })
...@@ -133,10 +124,12 @@ public class Product extends GenericEntity { ...@@ -133,10 +124,12 @@ public class Product extends GenericEntity {
} }
// TODO: alennukset lasketaan täällä. HUOMHUOM!! // TODO: alennukset lasketaan täällä. HUOMHUOM!!
public List<Discount> getActiveDiscounts(BigDecimal quantity) { public List<Discount> getActiveDiscounts(BigDecimal quantity, Calendar time) {
ArrayList<Discount> ret = new ArrayList<Discount>(); ArrayList<Discount> ret = new ArrayList<Discount>();
for (Discount d : getDiscounts()) { for (Discount d : getDiscounts()) {
if (d.isActive() && if (d.isActive() &&
(d.getValidTo() == null || d.getValidTo().after(time)) &&
(d.getValidFrom() == null || d.getValidFrom().before(time)) &&
quantity.compareTo(d.getAmountMax()) <= 0 && quantity.compareTo(d.getAmountMax()) <= 0 &&
quantity.compareTo(d.getAmountMin()) >= 0) { quantity.compareTo(d.getAmountMin()) >= 0) {
ret.add(d); ret.add(d);
......
...@@ -32,13 +32,6 @@ import fi.insomnia.bortal.model.salespoint.SalesEntity; ...@@ -32,13 +32,6 @@ import fi.insomnia.bortal.model.salespoint.SalesEntity;
*/ */
@Entity @Entity
@Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) }) @Table(name = "readers", uniqueConstraints = { @UniqueConstraint(columnNames = { "reader_ident", "event_id" }) })
// @NamedQueries({
// @NamedQuery(name = "Reader.findAll", query = "SELECT r FROM Reader r"),
//
// @NamedQuery(name = "Reader.findByIdentification", query =
// "SELECT r FROM Reader r WHERE r.identification = :identification"),
// @NamedQuery(name = "Reader.findByDescription", query =
// "SELECT r FROM Reader r WHERE r.description = :description") })
@OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS) @OptimisticLocking(type = OptimisticLockingType.CHANGED_COLUMNS)
public class Reader extends GenericEntity { public class Reader extends GenericEntity {
......
...@@ -7,6 +7,7 @@ import java.util.Calendar; ...@@ -7,6 +7,7 @@ import java.util.Calendar;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
...@@ -36,6 +37,10 @@ public class ReaderEvent extends GenericEntity { ...@@ -36,6 +37,10 @@ public class ReaderEvent extends GenericEntity {
@Column(name = "value") @Column(name = "value")
private String value; private String value;
@Lob
@Column(name = "notes")
private String notes;
@Column(nullable = false) @Column(nullable = false)
private Integer gamePoint = 0; private Integer gamePoint = 0;
...@@ -57,6 +62,14 @@ public class ReaderEvent extends GenericEntity { ...@@ -57,6 +62,14 @@ public class ReaderEvent extends GenericEntity {
super(); super();
} }
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public Calendar getTime() { public Calendar getTime() {
return time; return time;
} }
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<display-name>LanBortalWeb</display-name> xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
<session-config> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
<session-timeout>30</session-timeout> id="WebApp_ID" version="3.0">
</session-config> <display-name>LanBortalWeb</display-name>
<context-param> <session-config>
<param-name>javax.faces.PROJECT_STAGE</param-name> <session-timeout>30</session-timeout>
<param-value>Production</param-value> </session-config>
</context-param> <context-param>
<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name>
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-value>Production</param-value>
<param-value>true</param-value> </context-param>
</context-param> <context-param>
<servlet-mapping> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<servlet-name>PlaceMap</servlet-name> <param-value>true</param-value>
<url-pattern>/PlaceMap</url-pattern> </context-param>
</servlet-mapping> <servlet-mapping>
<welcome-file-list> <servlet-name>PlaceMap</servlet-name>
<welcome-file>index.html</welcome-file> <url-pattern>/PlaceMap</url-pattern>
<welcome-file>index.jsf</welcome-file> </servlet-mapping>
<welcome-file>index.jsp</welcome-file> <welcome-file-list>
<welcome-file>index.wtf</welcome-file> <welcome-file>index.html</welcome-file>
</welcome-file-list> <welcome-file>index.jsf</welcome-file>
<servlet> <welcome-file>index.jsp</welcome-file>
<servlet-name>Faces Servlet</servlet-name> <welcome-file>index.wtf</welcome-file>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </welcome-file-list>
<load-on-startup>1</load-on-startup> <servlet>
</servlet> <servlet-name>Faces Servlet</servlet-name>
<servlet> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<servlet-name>UploadServlet</servlet-name> <load-on-startup>1</load-on-startup>
<servlet-class>fi.insomnia.bortal.servlet.UploadServlet</servlet-class> </servlet>
</servlet> <servlet>
<servlet-mapping> <servlet-name>UploadServlet</servlet-name>
<servlet-name>UploadServlet</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.UploadServlet</servlet-class>
<url-pattern>/UploadServlet</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<servlet> <servlet-name>UploadServlet</servlet-name>
<servlet-name>UserImageServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern>
<servlet-class>fi.insomnia.bortal.servlet.UserImageServlet</servlet-class> </servlet-mapping>
</servlet> <servlet>
<servlet-mapping> <servlet-name>UserImageServlet</servlet-name>
<servlet-name>UserImageServlet</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.UserImageServlet</servlet-class>
<url-pattern>/Userimage</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<servlet> <servlet-name>UserImageServlet</servlet-name>
<servlet-name>UserCardServlet</servlet-name> <url-pattern>/Userimage</url-pattern>
<servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class> </servlet-mapping>
</servlet> <servlet>
<servlet-mapping> <servlet-name>UserCardServlet</servlet-name>
<servlet-name>UserCardServlet</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.UserCardServlet</servlet-class>
<url-pattern>/UserCard</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<servlet> <servlet-name>UserCardServlet</servlet-name>
<servlet-name>CardTemplateServlet</servlet-name> <url-pattern>/UserCard</url-pattern>
<servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class> </servlet-mapping>
</servlet> <servlet>
<servlet-mapping> <servlet-name>CardTemplateServlet</servlet-name>
<servlet-name>CardTemplateServlet</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.CardTemplateServlet</servlet-class>
<url-pattern>/CardTemplate</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<servlet> <servlet-name>CardTemplateServlet</servlet-name>
<servlet-name>PlaceMap</servlet-name> <url-pattern>/CardTemplate</url-pattern>
<servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class> </servlet-mapping>
</servlet> <servlet>
<servlet-mapping> <servlet-name>PlaceMap</servlet-name>
<servlet-name>Faces Servlet</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.PlaceMap</servlet-class>
<url-pattern>*.jsf</url-pattern> </servlet>
<url-pattern>*.wtf</url-pattern> <servlet-mapping>
<url-pattern>/faces/*</url-pattern> <servlet-name>Faces Servlet</servlet-name>
</servlet-mapping> <url-pattern>*.jsf</url-pattern>
<filter> <url-pattern>*.wtf</url-pattern>
<display-name>PrimefacesFileupload</display-name> <url-pattern>/faces/*</url-pattern>
<filter-name>PrimeFacesFileupload</filter-name> </servlet-mapping>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <filter>
</filter> <display-name>PrimefacesFileupload</display-name>
<filter-mapping> <filter-name>PrimeFacesFileupload</filter-name>
<filter-name>PrimeFacesFileupload</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<servlet-name>Faces Servlet</servlet-name> </filter>
</filter-mapping> <filter-mapping>
<filter> <filter-name>PrimeFacesFileupload</filter-name>
<display-name>HostnameFilter</display-name> <servlet-name>Faces Servlet</servlet-name>
<filter-name>HostnameFilter</filter-name> </filter-mapping>
<filter-class>fi.insomnia.bortal.HostnameFilter</filter-class> <filter>
</filter> <display-name>HostnameFilter</display-name>
<filter-mapping> <filter-name>HostnameFilter</filter-name>
<filter-name>HostnameFilter</filter-name> <filter-class>fi.insomnia.bortal.HostnameFilter</filter-class>
<servlet-name>*</servlet-name> </filter>
</filter-mapping> <filter-mapping>
<login-config> <filter-name>HostnameFilter</filter-name>
<auth-method>FORM</auth-method> <servlet-name>*</servlet-name>
<realm-name>omniarealm</realm-name> </filter-mapping>
<form-login-config> <login-config>
<form-login-page>/auth/login.jsf</form-login-page> <auth-method>FORM</auth-method>
<form-error-page>/auth/loginError.jsf</form-error-page> <realm-name>omniarealm</realm-name>
</form-login-config> <form-login-config>
</login-config> <form-login-page>/auth/login.jsf</form-login-page>
<security-constraint> <form-error-page>/auth/loginError.jsf</form-error-page>
<display-name>Forbidden resource</display-name> </form-login-config>
<web-resource-collection> </login-config>
<web-resource-name>Forbidden</web-resource-name> <security-constraint>
<url-pattern>*.xhtml</url-pattern> <display-name>Forbidden resource</display-name>
<url-pattern>/layout/*</url-pattern> <web-resource-collection>
<url-pattern>/resources/tools/*</url-pattern> <web-resource-name>Forbidden</web-resource-name>
</web-resource-collection> <url-pattern>*.xhtml</url-pattern>
<auth-constraint> <url-pattern>/layout/*</url-pattern>
<description>Thou shall not read the sources or use utils directly</description> <url-pattern>/resources/tools/*</url-pattern>
</auth-constraint> </web-resource-collection>
<user-data-constraint> <auth-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <description>Thou shall not read the sources or use utils directly</description>
</user-data-constraint> </auth-constraint>
</security-constraint> <user-data-constraint>
<servlet> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
<description></description> </user-data-constraint>
<display-name>PrintBill</display-name> </security-constraint>
<servlet-name>PrintBill</servlet-name> <servlet>
<servlet-class>fi.insomnia.bortal.servlet.PrintBill</servlet-class> <description></description>
</servlet> <display-name>PrintBill</display-name>
<servlet-mapping> <servlet-name>PrintBill</servlet-name>
<servlet-name>PrintBill</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.PrintBill</servlet-class>
<url-pattern>/PrintBill</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<persistence-unit-ref> <servlet-name>PrintBill</servlet-name>
<persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name> <url-pattern>/PrintBill</url-pattern>
</persistence-unit-ref> </servlet-mapping>
<servlet> <persistence-unit-ref>
<description></description> <persistence-unit-ref-name>BortalEMF</persistence-unit-ref-name>
<display-name>PlaceGroupPdf</display-name> </persistence-unit-ref>
<servlet-name>PlaceGroupPdf</servlet-name> <servlet>
<servlet-class>fi.insomnia.bortal.servlet.PlaceGroupPdf</servlet-class> <description></description>
</servlet> <display-name>PlaceGroupPdf</display-name>
<servlet-mapping> <servlet-name>PlaceGroupPdf</servlet-name>
<servlet-name>PlaceGroupPdf</servlet-name> <servlet-class>fi.insomnia.bortal.servlet.PlaceGroupPdf</servlet-class>
<url-pattern>/PlaceGroupPdf</url-pattern> </servlet>
</servlet-mapping> <servlet-mapping>
<servlet-name>PlaceGroupPdf</servlet-name>
<url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>bortal</param-value>
</context-param>
</web-app> </web-app>
\ No newline at end of file
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<h:inputText value="#{billEditView.bill.addr5}" /> <h:inputText value="#{billEditView.bill.addr5}" />
<h:outputLabel for="sentDate" value="#{i18n['bill.sentDate']}:" /> <h:outputLabel for="sentDate" value="#{i18n['bill.sentDate']}:" />
<h:inputText id="sentDate" value="#{billEditView.bill.sentDate}"> <h:inputText id="sentDate" value="#{billEditView.bill.sentDateTime}">
<f:convertDateTime /> <f:convertDateTime />
</h:inputText> </h:inputText>
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products"> xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
>
<h:head> <h:head>
<title></title> <title></title>
</h:head> </h:head>
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface> <composite:interface>
</composite:interface> </composite:interface>
...@@ -18,13 +16,16 @@ ...@@ -18,13 +16,16 @@
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['bill.payer']}" /> <h:outputText value="${i18n['bill.payer']}" />
</f:facet> </f:facet>
<h:outputText value="#{bill.addr1}" /> <h:link rendered="#{billListView.canWriteBill()}" outcome="/useradmin/edit" value="#{bill.addr1}">
<f:param name="userid" value="#{bill.user.user.id}" />
</h:link>
<h:outputText rendered="#{!billListView.canWriteBill()}" value="#{bill.addr1}" />
</h:column> </h:column>
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['bill.sentDate']}" /> <h:outputText value="${i18n['bill.sentDate']}" />
</f:facet> </f:facet>
<h:outputText value="#{bill.sentDate.time}"> <h:outputText value="#{bill.sentDateTime}">
<f:convertDateTime dateStyle="short" /> <f:convertDateTime dateStyle="short" />
</h:outputText> </h:outputText>
</h:column> </h:column>
...@@ -60,9 +61,9 @@ ...@@ -60,9 +61,9 @@
</h:link> </h:link>
</h:column> </h:column>
<h:column rendered="#{billListView.canWriteBill()}"> <h:column rendered="#{billListView.canWriteBill()}">
<h:commandButton rendered="#{bill.paidDate == null}" action="#{billListView.markPaid()}" <h:commandButton rendered="#{bill.paidDate == null}" action="#{billListView.markPaid()}" value="#{i18n['bill.markPaid']}">
value="#{i18n['bill.markPaid']}" <f:ajax render="@form" />
/> </h:commandButton>
<h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" /> <h:outputText rendered="#{bill.paidDate != null}" value="#{i18n['bill.isPaid']}" />
</h:column> </h:column>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"> xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:p="http://primefaces.org/ui">
<composite:interface> <composite:interface>
...@@ -21,7 +21,10 @@ ...@@ -21,7 +21,10 @@
<h:message for="shortdesc" /> <h:message for="shortdesc" />
<h:outputLabel for="percentage" value="#{i18n['discount.percentage']}:" /> <h:outputLabel for="percentage" value="#{i18n['discount.percentage']}:" />
<h:inputText id="percentage" value="#{productView.discount.percentage}" required="true" /> <h:inputText id="percentage" value="#{productView.discount.percentage}" required="true">
<f:validateRequired for="percentage" />
<f:validateDoubleRange maximum="1" minimum="0" />
</h:inputText>
<h:message for="percentage" /> <h:message for="percentage" />
<h:outputLabel for="code" value="#{i18n['discount.code']}:" /> <h:outputLabel for="code" value="#{i18n['discount.code']}:" />
...@@ -36,10 +39,18 @@ ...@@ -36,10 +39,18 @@
<h:inputText id="amountmax" value="#{productView.discount.amountMax}" required="true" /> <h:inputText id="amountmax" value="#{productView.discount.amountMax}" required="true" />
<h:message for="amountmax" /> <h:message for="amountmax" />
<h:outputLabel for="maxnum" value="#{i18n['discount.maxNum']}:" /> <h:outputLabel for="maxnum" value="#{i18n['discount.maxNum']}:" />
<h:inputText id="maxnum" value="#{productView.discount.maxNum}" required="true" /> <h:inputText id="maxnum" value="#{productView.discount.maxNum}" required="true" />
<h:message for="maxnum" /> <h:message for="maxnum" />
<h:outputLabel for="validFrom" value="#{i18n['discount.validFrom']}:" />
<p:calendar id="validFrom" value="#{productView.discount.validFromTime}" style="simple" pattern="#{sessionHandler.datetimeFormat}" />
<h:message for="validFrom" />
<h:outputLabel for="validTo" value="#{i18n['discount.validTo']}:" />
<p:calendar id="validTo" value="#{productView.discount.validToTime}" style="simple" pattern="#{sessionHandler.datetimeFormat}" />
<h:message for="validTo" />
<h:outputLabel for="active" value="#{i18n['discount.active']}" /> <h:outputLabel for="active" value="#{i18n['discount.active']}" />
<h:selectBooleanCheckbox id="active" value="#{productView.discount.active}" /> <h:selectBooleanCheckbox id="active" value="#{productView.discount.active}" />
<h:message for="active" /> <h:message for="active" />
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event"> <h:dataTable border="1" id="event" value="#{readerView.readerEvents}" var="event">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="${i18n['readerevent.']}" /> <h:outputText value="${i18n['readerevent.tagname']}" />
</f:facet> </f:facet>
<h:outputText rendered="#{!empty event.printedCard}" id="cardtag" value="#{event.printedCard.rfidUid}" /> <h:outputText rendered="#{!empty event.printedCard}" id="cardtag" value="#{event.printedCard.rfidUid}" />
......
<?xml version='1.0' encoding='UTF-8' ?> <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:composite="http://java.sun.com/jsf/composite" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools">
xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:tools="http://java.sun.com/jsf/composite/tools"
>
<composite:interface> <composite:interface>
<composite:attribute name="tabId" type="java.lang.String" required="true" /> <composite:attribute name="tabId" type="java.lang.String" required="true" />
</composite:interface> </composite:interface>
...@@ -27,10 +25,16 @@ ...@@ -27,10 +25,16 @@
<f:param name="userid" value="#{userView.user.user.id}" /> <f:param name="userid" value="#{userView.user.user.id}" />
</h:link></li> </h:link></li>
<li class="shop"><h:link outcome="/shop/shopToUser" value="#{i18n['submenu.user.shop']}">
<f:param name="userid" value="#{userView.user.user.id}" />
</h:link></li>
<li class="accountevents"><h:link outcome="/useradmin/accountEvents" value="#{i18n['submenu.user.accountEvents']}"> <li class="accountevents"><h:link outcome="/useradmin/accountEvents" value="#{i18n['submenu.user.accountEvents']}">
<f:param name="userid" value="#{userView.user.user.id}" /> <f:param name="userid" value="#{userView.user.user.id}" />
</h:link></li> </h:link></li>
<li class="groups"><h:link outcome="/place/adminGroups" value="#{i18n['submenu.place.myGroups']}"> <li class="groups"><h:link outcome="/place/adminGroups" value="#{i18n['submenu.place.myGroups']}">
<f:param name="userid" value="#{userView.user.user.id}" /> <f:param name="userid" value="#{userView.user.user.id}" />
</h:link></li> </h:link></li>
......
/*
*
* PrimeFaces Aristo Theme
* http://wijmo.com/
*
* Based on the Aristo theme concept created by 280 North and Pinvoke (https://github.com/280north/aristo).
*
*/
a {
outline: none;
}
.ui-icon {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/*
* jQuery UI CSS Framework @VERSION
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial,sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=c4c4c4&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=a8a8a8&fcHeader=4f4f4f&iconColorHeader=898989&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=100&borderColorContent=a8a8a8&fcContent=4f4f4f&iconColorContent=616161&bgColorDefault=c4c4c4&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=80&borderColorDefault=a8a8a8&fcDefault=4f4f4f&iconColorDefault=ffffff&bgColorHover=c4c4c4&bgTextureHover=04_highlight_hard.png&bgImgOpacityHover=80&borderColorHover=a8a8a8&fcHover=4f4f4f&iconColorHover=ffffff&bgColorActive=c4c4c4&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=4f4f4f&iconColorActive=ffffff&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=05_inset_soft.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=4f4f4f&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget
{
/* font-family: Arial,sans-serif; */
/* font-size: 1.1em; */
}
.ui-widget .ui-widget
{
/* font-size: 1em; */
}
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button
{
/* font-family: Arial,sans-serif; */
/* font-size: 1em; */
}
.ui-widget-content
{
border: 1px solid #a8a8a8;
background: #ffffff;
color: #4f4f4f;
}
.ui-widget-content a
{
color: #4f4f4f;
}
.ui-widget-header
{
border: 1px solid #a8a8a8;
background: #c4c4c4 url("#{resource['primefaces-treco:images/ui-bg_highlight-soft_100_c4c4c4_1x100.png']}") 50% 50% repeat-x;
background: #c4c4c4 linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #c4c4c4 -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #c4c4c4 -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)"; */
color: #333;
font-weight: bold;
text-shadow: 0px 1px 0px rgba(255,255,255,0.7);
}
.ui-widget-header a
{
color: #4f4f4f;
}
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default
{
border: 1px solid #a8a8a8;
background: #c4c4c4 url("#{resource['primefaces-treco:images/ui-bg_highlight-hard_80_c4c4c4_1x100.png']}") 50% 50% repeat-x;
background: #c4c4c4 linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #c4c4c4 -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #c4c4c4 -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)"; */
/* font-weight: bold; */
/* color: #4f4f4f; */
text-shadow: 0px 1px 0px rgba(255,255,255,0.7);
}
.ui-state-default
{
-moz-box-shadow: inset 0px 1px 0px #fff;
-webkit-box-shadow: inset 0px 1px 0px #fff;
box-shadow: inset 0px 1px 0px #fff;
}
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited
{
color: #4f4f4f;
text-decoration: none;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
}
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus
{
border: 1px solid #7096ab;
background: #85b2cb url("#{resource['primefaces-treco:images/ui-bg_highlight-hard_80_85b2cb_1x100.png']}") 50% 50% repeat-x;
background: #85b2cb linear-gradient(top, rgba(255,255,255,0.6), rgba(255,255,255,0));
background: #85b2cb -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.6)), to(rgba(255,255,255,0)));
background: #85b2cb -moz-linear-gradient(top, rgba(255,255,255,0.6), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#CCFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#CCFFFFFF, endColorstr=#00FFFFFF)"; */
/* font-weight: bold; */
color: #313131;
-moz-box-shadow: 0 0 5px #85b2cb;
-webkit-box-shadow: 0px 0px 8px #85b2cb;
box-shadow: 0px 0px 8px #85b2cb;
}
.ui-state-hover
{
-moz-box-shadow: 0px 0px 8px #85b2cb, inset 0px 1px 0px #fff;
-webkit-box-shadow: 0px 0px 8px #85b2cb, inset 0px 1px 0px #fff;
box-shadow: 0px 0px 8px #85b2cb, inset 0px 1px 0px #fff;
}
.ui-state-hover a, .ui-state-hover a:hover
{
color: #2f556a;
text-decoration: none;
}
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active
{
border: 1px solid #7096ab;
background: #85b2cb url("#{resource['primefaces-treco:images/ui-bg_inset-hard_65_85b2cb_1x100.png']}") 50% 50% repeat-x;
background: #85b2cb linear-gradient(top, rgba(255,255,255,0), rgba(255,255,255,0.4));
background: #85b2cb -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0)), to(rgba(255,255,255,0.4)));
background: #85b2cb -moz-linear-gradient(top, rgba(255,255,255,0), rgba(255,255,255,0.4)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF, endColorstr=#CCFFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF, endColorstr=#CCFFFFFF)"; */
font-weight: bold;
color: #1C4257;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.7);
}
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited
{
color: #2f556a;
text-decoration: none;
}
.ui-widget :active
{
outline: none;
}
.ui-state-active
{
-moz-box-shadow: inset 0px -1px 0px #fff;
-webkit-box-shadow: inset 0px 1px 0px #fff;
box-shadow: inset 0px 1px 0px #fff;
}
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight
{
border: 1px solid #666666;
background: #aaaaaa;
background: #aaaaaa linear-gradient(top, rgba(0,0,0,0.25), rgba(0,0,0,0));
background: #aaaaaa -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0.25)), to(rgba(0,0,0,0)));
background: #aaaaaa -moz-linear-gradient(top, rgba(0,0,0,0.25), rgba(0,0,0,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000, endColorstr=#00000000); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000, endColorstr=#00000000)"; */
color: #ffffff;
text-shadow: 1px 1px 1px #333333;
}
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a
{
color: #363636;
}
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error
{
border: 1px solid #cd0a0a;
background: #fef1ec url("#{resource['primefaces-treco:images/ui-bg_inset-soft_95_fef1ec_1x100.png']}") 50% bottom repeat-x;
background: #fef1ec linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #fef1ec -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #fef1ec -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)";*/
color: #cd0a0a;
}
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a
{
color: #cd0a0a;
}
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text
{
color: #cd0a0a;
}
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary
{
font-weight: bold;
}
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary
{
opacity: .7;
filter: Alpha(Opacity=70);
font-weight: normal;
}
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled
{
opacity: .35;
filter: Alpha(Opacity=35);
background-image: none;
}
/* Icons
----------------------------------*/
/* states and images */
.ui-icon
{
width: 16px;
height: 16px;
background-image: url("#{resource['primefaces-treco:images/ui-icons_616161_256x240.png']}");
}
.ui-widget-content .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_616161_256x240.png']}");
}
.ui-widget-header .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_898989_256x240.png']}");
}
.ui-state-default .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_38667f_256x240.png']}");
}
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_38667f_256x240.png']}");
}
.ui-state-active .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_38667f_256x240.png']}");
}
.ui-state-highlight .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_2e83ff_256x240.png']}");
}
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon
{
background-image: url("#{resource['primefaces-treco:images/ui-icons_cd0a0a_256x240.png']}");
}
/* positioning */
.ui-icon-carat-1-n
{
background-position: 0 0;
}
.ui-icon-carat-1-ne
{
background-position: -16px 0;
}
.ui-icon-carat-1-e
{
background-position: -32px 0;
}
.ui-icon-carat-1-se
{
background-position: -48px 0;
}
.ui-icon-carat-1-s
{
background-position: -64px 0;
}
.ui-icon-carat-1-sw
{
background-position: -80px 0;
}
.ui-icon-carat-1-w
{
background-position: -96px 0;
}
.ui-icon-carat-1-nw
{
background-position: -112px 0;
}
.ui-icon-carat-2-n-s
{
background-position: -128px 0;
}
.ui-icon-carat-2-e-w
{
background-position: -144px 0;
}
.ui-icon-triangle-1-n
{
background-position: 0 -16px;
}
.ui-icon-triangle-1-ne
{
background-position: -16px -16px;
}
.ui-icon-triangle-1-e
{
background-position: -32px -16px;
}
.ui-icon-triangle-1-se
{
background-position: -48px -16px;
}
.ui-icon-triangle-1-s
{
background-position: -64px -16px;
}
.ui-icon-triangle-1-sw
{
background-position: -80px -16px;
}
.ui-icon-triangle-1-w
{
background-position: -96px -16px;
}
.ui-icon-triangle-1-nw
{
background-position: -112px -16px;
}
.ui-icon-triangle-2-n-s
{
background-position: -128px -16px;
}
.ui-icon-triangle-2-e-w
{
background-position: -144px -16px;
}
.ui-icon-arrow-1-n
{
background-position: 0 -32px;
}
.ui-icon-arrow-1-ne
{
background-position: -16px -32px;
}
.ui-icon-arrow-1-e
{
background-position: -32px -32px;
}
.ui-icon-arrow-1-se
{
background-position: -48px -32px;
}
.ui-icon-arrow-1-s
{
background-position: -64px -32px;
}
.ui-icon-arrow-1-sw
{
background-position: -80px -32px;
}
.ui-icon-arrow-1-w
{
background-position: -96px -32px;
}
.ui-icon-arrow-1-nw
{
background-position: -112px -32px;
}
.ui-icon-arrow-2-n-s
{
background-position: -128px -32px;
}
.ui-icon-arrow-2-ne-sw
{
background-position: -144px -32px;
}
.ui-icon-arrow-2-e-w
{
background-position: -160px -32px;
}
.ui-icon-arrow-2-se-nw
{
background-position: -176px -32px;
}
.ui-icon-arrowstop-1-n
{
background-position: -192px -32px;
}
.ui-icon-arrowstop-1-e
{
background-position: -208px -32px;
}
.ui-icon-arrowstop-1-s
{
background-position: -224px -32px;
}
.ui-icon-arrowstop-1-w
{
background-position: -240px -32px;
}
.ui-icon-arrowthick-1-n
{
background-position: 0 -48px;
}
.ui-icon-arrowthick-1-ne
{
background-position: -16px -48px;
}
.ui-icon-arrowthick-1-e
{
background-position: -32px -48px;
}
.ui-icon-arrowthick-1-se
{
background-position: -48px -48px;
}
.ui-icon-arrowthick-1-s
{
background-position: -64px -48px;
}
.ui-icon-arrowthick-1-sw
{
background-position: -80px -48px;
}
.ui-icon-arrowthick-1-w
{
background-position: -96px -48px;
}
.ui-icon-arrowthick-1-nw
{
background-position: -112px -48px;
}
.ui-icon-arrowthick-2-n-s
{
background-position: -128px -48px;
}
.ui-icon-arrowthick-2-ne-sw
{
background-position: -144px -48px;
}
.ui-icon-arrowthick-2-e-w
{
background-position: -160px -48px;
}
.ui-icon-arrowthick-2-se-nw
{
background-position: -176px -48px;
}
.ui-icon-arrowthickstop-1-n
{
background-position: -192px -48px;
}
.ui-icon-arrowthickstop-1-e
{
background-position: -208px -48px;
}
.ui-icon-arrowthickstop-1-s
{
background-position: -224px -48px;
}
.ui-icon-arrowthickstop-1-w
{
background-position: -240px -48px;
}
.ui-icon-arrowreturnthick-1-w
{
background-position: 0 -64px;
}
.ui-icon-arrowreturnthick-1-n
{
background-position: -16px -64px;
}
.ui-icon-arrowreturnthick-1-e
{
background-position: -32px -64px;
}
.ui-icon-arrowreturnthick-1-s
{
background-position: -48px -64px;
}
.ui-icon-arrowreturn-1-w
{
background-position: -64px -64px;
}
.ui-icon-arrowreturn-1-n
{
background-position: -80px -64px;
}
.ui-icon-arrowreturn-1-e
{
background-position: -96px -64px;
}
.ui-icon-arrowreturn-1-s
{
background-position: -112px -64px;
}
.ui-icon-arrowrefresh-1-w
{
background-position: -128px -64px;
}
.ui-icon-arrowrefresh-1-n
{
background-position: -144px -64px;
}
.ui-icon-arrowrefresh-1-e
{
background-position: -160px -64px;
}
.ui-icon-arrowrefresh-1-s
{
background-position: -176px -64px;
}
.ui-icon-arrow-4
{
background-position: 0 -80px;
}
.ui-icon-arrow-4-diag
{
background-position: -16px -80px;
}
.ui-icon-extlink
{
background-position: -32px -80px;
}
.ui-icon-newwin
{
background-position: -48px -80px;
}
.ui-icon-refresh
{
background-position: -64px -80px;
}
.ui-icon-shuffle
{
background-position: -80px -80px;
}
.ui-icon-transfer-e-w
{
background-position: -96px -80px;
}
.ui-icon-transferthick-e-w
{
background-position: -112px -80px;
}
.ui-icon-folder-collapsed
{
background-position: 0 -96px;
}
.ui-icon-folder-open
{
background-position: -16px -96px;
}
.ui-icon-document
{
background-position: -32px -96px;
}
.ui-icon-document-b
{
background-position: -48px -96px;
}
.ui-icon-note
{
background-position: -64px -96px;
}
.ui-icon-mail-closed
{
background-position: -80px -96px;
}
.ui-icon-mail-open
{
background-position: -96px -96px;
}
.ui-icon-suitcase
{
background-position: -112px -96px;
}
.ui-icon-comment
{
background-position: -128px -96px;
}
.ui-icon-person
{
background-position: -144px -96px;
}
.ui-icon-print
{
background-position: -160px -96px;
}
.ui-icon-trash
{
background-position: -176px -96px;
}
.ui-icon-locked
{
background-position: -192px -96px;
}
.ui-icon-unlocked
{
background-position: -208px -96px;
}
.ui-icon-bookmark
{
background-position: -224px -96px;
}
.ui-icon-tag
{
background-position: -240px -96px;
}
.ui-icon-home
{
background-position: 0 -112px;
}
.ui-icon-flag
{
background-position: -16px -112px;
}
.ui-icon-calendar
{
background-position: -32px -112px;
}
.ui-icon-cart
{
background-position: -48px -112px;
}
.ui-icon-pencil
{
background-position: -64px -112px;
}
.ui-icon-clock
{
background-position: -80px -112px;
}
.ui-icon-disk
{
background-position: -96px -112px;
}
.ui-icon-calculator
{
background-position: -112px -112px;
}
.ui-icon-zoomin
{
background-position: -128px -112px;
}
.ui-icon-zoomout
{
background-position: -144px -112px;
}
.ui-icon-search
{
background-position: -160px -112px;
}
.ui-icon-wrench
{
background-position: -176px -112px;
}
.ui-icon-gear
{
background-position: -192px -112px;
}
.ui-icon-heart
{
background-position: -208px -112px;
}
.ui-icon-star
{
background-position: -224px -112px;
}
.ui-icon-link
{
background-position: -240px -112px;
}
.ui-icon-cancel
{
background-position: 0 -128px;
}
.ui-icon-plus
{
background-position: -16px -128px;
}
.ui-icon-plusthick
{
background-position: -32px -128px;
}
.ui-icon-minus
{
background-position: -48px -128px;
}
.ui-icon-minusthick
{
background-position: -64px -128px;
}
.ui-icon-close
{
background-position: -80px -128px;
}
.ui-icon-closethick
{
background-position: -96px -128px;
}
.ui-icon-key
{
background-position: -112px -128px;
}
.ui-icon-lightbulb
{
background-position: -128px -128px;
}
.ui-icon-scissors
{
background-position: -144px -128px;
}
.ui-icon-clipboard
{
background-position: -160px -128px;
}
.ui-icon-copy
{
background-position: -176px -128px;
}
.ui-icon-contact
{
background-position: -192px -128px;
}
.ui-icon-image
{
background-position: -208px -128px;
}
.ui-icon-video
{
background-position: -224px -128px;
}
.ui-icon-script
{
background-position: -240px -128px;
}
.ui-icon-alert
{
background-position: 0 -144px;
}
.ui-icon-info
{
background-position: -16px -144px;
}
.ui-icon-notice
{
background-position: -32px -144px;
}
.ui-icon-help
{
background-position: -48px -144px;
}
.ui-icon-check
{
background-position: -64px -144px;
}
.ui-icon-bullet
{
background-position: -80px -144px;
}
.ui-icon-radio-off
{
background-position: -96px -144px;
}
.ui-icon-radio-on
{
background-position: -112px -144px;
}
.ui-icon-pin-w
{
background-position: -128px -144px;
}
.ui-icon-pin-s
{
background-position: -144px -144px;
}
.ui-icon-play
{
background-position: 0 -160px;
}
.ui-icon-pause
{
background-position: -16px -160px;
}
.ui-icon-seek-next
{
background-position: -32px -160px;
}
.ui-icon-seek-prev
{
background-position: -48px -160px;
}
.ui-icon-seek-end
{
background-position: -64px -160px;
}
.ui-icon-seek-start
{
background-position: -80px -160px;
}
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first
{
background-position: -80px -160px;
}
.ui-icon-stop
{
background-position: -96px -160px;
}
.ui-icon-eject
{
background-position: -112px -160px;
}
.ui-icon-volume-off
{
background-position: -128px -160px;
}
.ui-icon-volume-on
{
background-position: -144px -160px;
}
.ui-icon-power
{
background-position: 0 -176px;
}
.ui-icon-signal-diag
{
background-position: -16px -176px;
}
.ui-icon-signal
{
background-position: -32px -176px;
}
.ui-icon-battery-0
{
background-position: -48px -176px;
}
.ui-icon-battery-1
{
background-position: -64px -176px;
}
.ui-icon-battery-2
{
background-position: -80px -176px;
}
.ui-icon-battery-3
{
background-position: -96px -176px;
}
.ui-icon-circle-plus
{
background-position: 0 -192px;
}
.ui-icon-circle-minus
{
background-position: -16px -192px;
}
.ui-icon-circle-close
{
background-position: -32px -192px;
}
.ui-icon-circle-triangle-e
{
background-position: -48px -192px;
}
.ui-icon-circle-triangle-s
{
background-position: -64px -192px;
}
.ui-icon-circle-triangle-w
{
background-position: -80px -192px;
}
.ui-icon-circle-triangle-n
{
background-position: -96px -192px;
}
.ui-icon-circle-arrow-e
{
background-position: -112px -192px;
}
.ui-icon-circle-arrow-s
{
background-position: -128px -192px;
}
.ui-icon-circle-arrow-w
{
background-position: -144px -192px;
}
.ui-icon-circle-arrow-n
{
background-position: -160px -192px;
}
.ui-icon-circle-zoomin
{
background-position: -176px -192px;
}
.ui-icon-circle-zoomout
{
background-position: -192px -192px;
}
.ui-icon-circle-check
{
background-position: -208px -192px;
}
.ui-icon-circlesmall-plus
{
background-position: 0 -208px;
}
.ui-icon-circlesmall-minus
{
background-position: -16px -208px;
}
.ui-icon-circlesmall-close
{
background-position: -32px -208px;
}
.ui-icon-squaresmall-plus
{
background-position: -48px -208px;
}
.ui-icon-squaresmall-minus
{
background-position: -64px -208px;
}
.ui-icon-squaresmall-close
{
background-position: -80px -208px;
}
.ui-icon-grip-dotted-vertical
{
background-position: 0 -224px;
}
.ui-icon-grip-dotted-horizontal
{
background-position: -16px -224px;
}
.ui-icon-grip-solid-vertical
{
background-position: -32px -224px;
}
.ui-icon-grip-solid-horizontal
{
background-position: -48px -224px;
}
.ui-icon-gripsmall-diagonal-se
{
background-position: -64px -224px;
}
.ui-icon-grip-diagonal-se
{
background-position: -80px -224px;
}
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl
{
-moz-border-radius-topleft: 3px;
-webkit-border-top-left-radius: 3px;
border-top-left-radius: 3px;
}
.ui-corner-tr
{
-moz-border-radius-topright: 3px;
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
}
.ui-corner-bl
{
-moz-border-radius-bottomleft: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.ui-corner-br
{
-moz-border-radius-bottomright: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
}
.ui-corner-top
{
-moz-border-radius-topleft: 3px;
-webkit-border-top-left-radius: 3px;
border-top-left-radius: 3px;
-moz-border-radius-topright: 3px;
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
}
.ui-corner-bottom
{
-moz-border-radius-bottomleft: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
-moz-border-radius-bottomright: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
}
.ui-corner-right
{
-moz-border-radius-topright: 3px;
-webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px;
-moz-border-radius-bottomright: 3px;
-webkit-border-bottom-right-radius: 3px;
border-bottom-right-radius: 3px;
}
.ui-corner-left
{
-moz-border-radius-topleft: 3px;
-webkit-border-top-left-radius: 3px;
border-top-left-radius: 3px;
-moz-border-radius-bottomleft: 3px;
-webkit-border-bottom-left-radius: 3px;
border-bottom-left-radius: 3px;
}
.ui-corner-all
{
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.ui-round-all
{
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/* Overlays */
.ui-widget-overlay
{
background: #2d5972 url("#{resource['primefaces-treco:images/ui-bg_flat_0_2d5972_40x100.png']}") 50% 50% repeat-x;
opacity: .30;
filter: Alpha(Opacity=30);
}
.ui-widget-shadow
{
margin: -8px 0 0 -8px;
padding: 8px;
background: #4f4f4f url("#{resource['primefaces-treco:images/ui-bg_flat_0_4f4f4f_40x100.png']}") 50% 50% repeat-x;
opacity: .30;
filter: Alpha(Opacity=30);
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
}
/**
* Widget Extensions
*/
.ui-accordion .ui-accordion-header {
margin: 0;
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-accordion .ui-accordion-content {
margin-bottom: 0;
}
.ui-dialog {
-moz-box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
-webkit-box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
}
.ui-dialog .ui-dialog-titlebar {
border-top: none;
border-right: none;
border-left: none;
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-slider {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
background: #cbcbcb;
-moz-box-shadow: inset 0 2px 2px #8f8f8f;
-webkit-box-shadow: inset 0 2px 2px #8f8f8f;
box-shadow: inset 0 2px 2px #8f8f8f;
}
.ui-slider .ui-slider-handle {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.ui-slider .ui-slider-range {
background: #a3cae0;
-moz-box-shadow: inset 0 2px 2px #7d9aab;
-webkit-box-shadow: inset 0 2px 2px #7d9aab;
box-shadow: inset 0 2px 2px #7d9aab;
}
.ui-slider-vertical {
background: #cbcbcb;
-moz-box-shadow: inset 0 2px 2px #8f8f8f;
-webkit-box-shadow: inset 0 2px 2px #8f8f8f;
box-shadow: inset 0 2px 2px #8f8f8f;
}
.ui-slider-vertical .ui-slider-range {
background: #a3cae0;
-moz-box-shadow: inset 2px 0 2px #7d9aab;
-webkit-box-shadow: inset 2px 0 2px #7d9aab;
box-shadow: inset 2px 0 2px #7d9aab;
}
.ui-slider .ui-slider-handle span {
height: 16px !important;
width: 16px !important;
float: none !important;
margin: 0 auto !important;
}
.ui-slider .ui-slider-handle {
background: #85b2cb;
background: #85b2cb linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #85b2cb -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #85b2cb -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)"; */
}
.ui-tabs .ui-tabs-nav li {
border: 1px solid #a8a8a8;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
border: 1px solid #a8a8a8;
border-bottom: 0 !important;
}
.ui-tabs .ui-tabs-panel {
border-width: 0;
padding: 1em 1.4em;
background: none;
}
.ui-tabs .ui-tabs-nav {
background: #e3e3e3;
background: #e3e3e3 linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #e3e3e3 -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #e3e3e3 -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)"; */
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-tabs .ui-tabs-nav .ui-tabs-selected {
background: #fff;
border-bottom: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
cursor: pointer;
}
.ui-datepicker table {
table-layout: fixed;
}
.ui-datepicker .ui-datepicker-calendar .ui-state-default {
background: none;
border: none;
color: #5F83B9;
}
.ui-datepicker .ui-datepicker-calendar .ui-state-hover {
color: #1C4257;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.ui-datepicker .ui-datepicker-current-day .ui-state-highlight, .ui-datepicker .ui-datepicker-current-day .ui-state-default {
background: #5F83B9;
color: #FFFFFF !important;
font-weight: bold;
text-shadow: 0 1px 1px #234386;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.ui-datepicker .ui-datepicker-header {
background: #e3e3e3;
background: #e3e3e3 linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #e3e3e3 -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #e3e3e3 -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0)); /* filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)"; */
border-right: none;
border-left: none;
border-top: none;
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.ui-datepicker .ui-datepicker-next-hover, .ui-datepicker .ui-datepicker-prev-hover {
background: none;
border: solid 1px transparent;
-moz-box-shadow: none;
}
.ui-progressbar {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
-moz-box-shadow: inset 0 2px 2px #8f8f8f;
-webkit-box-shadow: inset 0 2px 2px #8f8f8f;
box-shadow: inset 0 2px 2px #8f8f8f;
}
.ui-progressbar .ui-widget-header {
background: #85b2cb;
background: #85b2cb linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #85b2cb -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #85b2cb -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#DDFFFFFF, endColorstr=#00FFFFFF)";
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/* PrimeFaces Extensions */
.ui-inputfield, .ui-widget-content .ui-inputfield, .ui-widget-header .ui-inputfield {
background: #ffffff;
-moz-box-shadow: inset 0 2px 2px #8f8f8f;
-webkit-box-shadow: inset 0 2px 2px #8f8f8f;
box-shadow: inset 0 2px 2px #8f8f8f;
color: #313131;
}
.ui-inputfield.ui-state-focus, .ui-widget-content .ui-inputfield.ui-state-focus, .ui-widget-header .ui-inputfield.ui-state-focus {
-moz-box-shadow: 0px 0px 5px #85b2cb, inset 0 2px 2px #8f8f8f;
-webkit-box-shadow: 0px 0px 5px #85b2cb, inset 0 2px 2px #8f8f8f;
box-shadow: 0px 0px 5px #85b2cb, inset 0 2px 2px #8f8f8f;
}
.ui-menu {
background: #c4c4c4 url("#{resource['primefaces-treco:images/ui-bg_highlight-hard_80_c4c4c4_1x100.png']}") top repeat-x;
background: #c4c4c4 linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
background: #c4c4c4 -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), to(rgba(255,255,255,0)));
background: #c4c4c4 -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0));
}
.ui-menu .ui-state-default {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.ui-menu .ui-menu-child {
-moz-box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
-webkit-box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
box-shadow: 0px 5px 10px rgba(0,0,0,0.8);
}
.ui-menu-slide .ui-menu-list {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
*html .ui-menu .ui-menu-list {
background: none;
}
*html .ui-menubar .ui-menu-child {
background: #ffffff;
}
*html .ui-menu .ui-menuitem-link {
border-color: #c4c4c4;
filter: chroma(color=#c4c4c4);
}
\ No newline at end of file
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
<ui:define name="content"> <ui:define name="content">
<ui:fragment rendered="#{!empty readerView.neighborUser}"> <ui:fragment rendered="#{!empty readerView.neighborUser}">
<h1>Neighbor event user found:</h1>
<h:outputText value="#{readerView.neighborUser.user.wholeName}" />
<h:form> <h:form>
<h:dataTable var="card" value="#{readerView.neighborUser.printedCards}"> <h:dataTable var="card" value="#{readerView.neighborUser.printedCards}">
<h:column> <h:column>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata> <f:metadata>
...@@ -11,22 +11,37 @@ ...@@ -11,22 +11,37 @@
<f:event type="preRenderView" listener="#{productShopView.initShopView}" /> <f:event type="preRenderView" listener="#{productShopView.initShopView}" />
</f:metadata> </f:metadata>
<ui:define name="title">
<h1>#{i18n['user.shop.title']}</h1>
<users:usertabs tabId="shop" />
</ui:define>
<ui:define name="content"> <ui:define name="content">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.user']}" />
<h:outputText value="#{productShopView.user.wholeName} #{productShopView.user.nick}" />
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.user.accountBalance}">
<f:convertNumber />
</h:outputText>
</h:panelGrid>
<h:form id="shoppingcartform"> <h:form id="shoppingcartform">
<h:panelGrid columns="2">
<h:outputLabel value="#{i18n['shop.totalPrice']}" />
<h:outputText value="#{productShopView.totalPrice}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.accountBalance}">
<f:convertNumber />
</h:outputText>
<h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{productShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:outputText value="#{i18n['product.shopInstant']}" /> <h:outputText value="#{i18n['product.shopInstant']}" />
<h:selectBooleanCheckbox value="#{productShopView.payInstant}" /> <h:selectBooleanCheckbox value="#{productShopView.payInstant}">
<f:ajax render="@form" execute="@form" />
</h:selectBooleanCheckbox>
<products:shop commitaction="#{productShopView.commitShoppingCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" /> <products:shop commitaction="#{productShopView.commitShoppingCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
</h:form> </h:form>
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" /> <h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" />
<h:outputText id="accountbalance" value="#{userView.accountBalance}" /> <h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
<h:dataTable border="1" id="ac" value="#{userView.accountEvents}" var="ac"> <h:dataTable border="1" id="ac" value="#{userView.user.accountEvents}" var="ac">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['accountEvent.productname']}" /> <h:outputText value="#{i18n['accountEvent.productname']}" />
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<h:form> <h:form>
<h:panelGrid columns="3"> <h:panelGrid columns="3">
<h:outputLabel for="invite" value="#{i18n['user.invitemail']}" /> <h:outputLabel for="invite" value="#{i18n['user.invitemail']}" />
<h:inputText id="invite" value="#{inviteView.invitemail}" required="true" /> <h:inputText id="invite" value="#{inviteView.invitemail}" size="40" required="true" />
<h:message for="invite" /> <h:message for="invite" />
</h:panelGrid> </h:panelGrid>
<h:commandButton action="#{inviteView.invite()}" value="#{i18n['user.invite']}" /> <h:commandButton action="#{inviteView.invite()}" value="#{i18n['user.invite']}" />
......
...@@ -18,8 +18,8 @@ ...@@ -18,8 +18,8 @@
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" /> <h:outputLabel value="#{i18n['user.accountBalance']}: " for="accountbalance" />
<h:outputText id="accountbalance" value="#{userView.accountBalance}" /> <h:outputText id="accountbalance" value="#{userView.user.accountBalance}" />
<h:dataTable border="1" id="ac" value="#{userView.accountEvents}" var="ac"> <h:dataTable border="1" id="ac" value="#{userView.user.accountEvents}" var="ac">
<h:column> <h:column>
<f:facet name="header"> <f:facet name="header">
<h:outputText value="#{i18n['accountEvent.productname']}" /> <h:outputText value="#{i18n['accountEvent.productname']}" />
......
...@@ -29,4 +29,4 @@ productshop.minusTen = -10 ...@@ -29,4 +29,4 @@ productshop.minusTen = -10
productshop.plusOne = +1 productshop.plusOne = +1
productshop.plusTen = +10 productshop.plusTen = +10
user.unauthenticated = Kirjautumaton user.unauthenticated = Kirjautumaton
...@@ -40,6 +40,7 @@ bill.deliveryTerms = Delivery terms ...@@ -40,6 +40,7 @@ bill.deliveryTerms = Delivery terms
bill.edit = edit bill.edit = edit
bill.isPaid = Paid bill.isPaid = Paid
bill.markPaid = Mark paid bill.markPaid = Mark paid
bill.markedPaid = Bill marked paid
bill.notes = Notes bill.notes = Notes
bill.noticetime = Notice time bill.noticetime = Notice time
bill.ourReference = Our reference bill.ourReference = Our reference
...@@ -84,6 +85,8 @@ discount.products = Products ...@@ -84,6 +85,8 @@ discount.products = Products
discount.role = Role discount discount.role = Role discount
discount.save = Save discount.save = Save
discount.shortdesc = Description discount.shortdesc = Description
discount.validFrom = Valid from
discount.validTo = Valid to
editplace.header = Edit place editplace.header = Edit place
...@@ -130,6 +133,7 @@ global.save = Save ...@@ -130,6 +133,7 @@ global.save = Save
imagefile.description = Description imagefile.description = Description
imagefile.file = Imagefile imagefile.file = Imagefile
invite.emailexists = User with that email address already exists in the system.
invite.notFound = Invite invalid or already used invite.notFound = Invite invalid or already used
invite.successfull = Invite sent successfully invite.successfull = Invite sent successfully
invite.userCreateSuccessfull = User successfully created. You can now login. invite.userCreateSuccessfull = User successfully created. You can now login.
...@@ -324,7 +328,7 @@ product.prepaid = Prepaid ...@@ -324,7 +328,7 @@ product.prepaid = Prepaid
product.prepaidInstant = Created when prepaid is paid product.prepaidInstant = Created when prepaid is paid
product.price = Price of product product.price = Price of product
product.save = Save product.save = Save
product.shopInstant = Luo k\u2030teismaksu tuotteille product.shopInstant = Create automatic cashpayment
product.sort = Sort nr product.sort = Sort nr
product.totalPrice = Total product.totalPrice = Total
product.unitName = Unit name product.unitName = Unit name
...@@ -368,6 +372,8 @@ role.read = (R) ...@@ -368,6 +372,8 @@ role.read = (R)
role.write = (W) role.write = (W)
shop.accountBalance = Balance shop.accountBalance = Balance
shop.cash = Cash deposit
shop.totalPrice = Price of products
shop.user = Selling to shop.user = Selling to
sidebar.bill.list = My bills sidebar.bill.list = My bills
...@@ -431,6 +437,7 @@ submenu.user.invite = Invite friends ...@@ -431,6 +437,7 @@ submenu.user.invite = Invite friends
submenu.user.manageuserlinks = Manage users submenu.user.manageuserlinks = Manage users
submenu.user.rolelinks = Manage roles submenu.user.rolelinks = Manage roles
submenu.user.sendPicture = Send picture submenu.user.sendPicture = Send picture
submenu.user.shop = Shop
submenu.user.userlinks = User information submenu.user.userlinks = User information
submenu.useradmin.create = Create user submenu.useradmin.create = Create user
submenu.useradmin.createCardTemplate = Create cardtemplate submenu.useradmin.createCardTemplate = Create cardtemplate
...@@ -501,6 +508,7 @@ user.sex.FEMALE = Female ...@@ -501,6 +508,7 @@ user.sex.FEMALE = Female
user.sex.MALE = Male user.sex.MALE = Male
user.sex.UNDEFINED = Undefined user.sex.UNDEFINED = Undefined
user.shop = Buy user.shop = Buy
user.shop.title = Shop to user
user.successfullySaved = Changes saved successfully user.successfullySaved = Changes saved successfully
user.superadmin = Superadmin user.superadmin = Superadmin
user.thisIsCurrentImage = Current image user.thisIsCurrentImage = Current image
...@@ -516,6 +524,8 @@ userimage.webcam = Take picture with webcam ...@@ -516,6 +524,8 @@ userimage.webcam = Take picture with webcam
userlist.header = Users userlist.header = Users
userlist.search = Search userlist.search = Search
usertitle.managingUser = Shop
userview.header = Users userview.header = Users
userview.loginstringFaulty = Username has to be atleast 2 characters long! userview.loginstringFaulty = Username has to be atleast 2 characters long!
userview.passwordTooShort = Password has to be atleast 5 characters long! userview.passwordTooShort = Password has to be atleast 5 characters long!
......
accountEvent.commit = Tallenna accountEvent.commit = Tallenna
accountEvent.delivered = Toimitettu accountEvent.delivered = Toimitettu
accountEvent.edit = Muokkaa accountEvent.edit = Muokkaa
accountEvent.eventTime = Aika accountEvent.eventTime = Aika
accountEvent.productname = Tuote accountEvent.productname = Tuote
accountEvent.quantity = Lkm accountEvent.quantity = Lkm
accountEvent.seller = Myyj\u00E4 accountEvent.seller = Myyj\u00E4
accountEvent.total = Yhteens\u00E4 accountEvent.total = Yhteens\u00E4
accountEvent.unitPrice = Yksikk\u00F6hinta accountEvent.unitPrice = Yksikk\u00F6hinta
actionlog.create.header = Luo uusi ActionMessage actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti actionlog.create.message = Viesti
actionlog.create.role = Kohderooli actionlog.create.role = Kohderooli
actionlog.create.submitbutton = L\u00E4het\u00E4 actionlog.create.submitbutton = L\u00E4het\u00E4
actionlog.create.taskradio = Teht\u00E4v\u00E4 actionlog.create.taskradio = Teht\u00E4v\u00E4
actionlog.crew = Crew actionlog.crew = Crew
actionlog.message = Tapahtuma actionlog.message = Tapahtuma
actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4. actionlog.messagelist.description = Voit seurata sek\u00E4 luoda uusia ActionMessageja t\u00E4ss\u00E4 n\u00E4kym\u00E4ss\u00E4.
actionlog.messagelist.header = ActionLog actionlog.messagelist.header = ActionLog
actionlog.messagestate.DONE = Tehty actionlog.messagestate.DONE = Tehty
actionlog.messagestate.NEW = Uusi actionlog.messagestate.NEW = Uusi
actionlog.messagestate.PENDING = Ty\u00F6n alla actionlog.messagestate.PENDING = Ty\u00F6n alla
actionlog.state = Tila actionlog.state = Tila
actionlog.task = Taski actionlog.task = Taski
actionlog.tasklist.header = Viestilista actionlog.tasklist.header = Viestilista
actionlog.time = Aika actionlog.time = Aika
actionlog.user = Tekij\u00E4 actionlog.user = Tekij\u00E4
applicationPermission.description = kuvaus applicationPermission.description = kuvaus
applicationPermission.name = Oikeusryhm\u00E4 applicationPermission.name = Oikeusryhm\u00E4
bill.addr1 = Osoite 1 bill.addr1 = Osoite 1
bill.addr2 = Osoite 2 bill.addr2 = Osoite 2
bill.addr3 = Osoite 3 bill.addr3 = Osoite 3
bill.addr4 = Osoite 4 bill.addr4 = Osoite 4
bill.addr5 = Osoite 5 bill.addr5 = Osoite 5
bill.billNumber = Laskun numero bill.billNumber = Laskun numero
bill.deliveryTerms = Toimitusehdot bill.deliveryTerms = Toimitusehdot
bill.edit = Muokkaa bill.edit = Muokkaa
bill.isPaid = Maksettu bill.isPaid = Maksettu
bill.markPaid = Maksettu bill.markPaid = Maksettu
bill.markedPaid = Lasku merkitty maksetuksi. bill.markedPaid = Lasku merkitty maksetuksi.
bill.notes = Huomioita bill.notes = Huomioita
bill.noticetime = Huomautusaika bill.noticetime = Huomautusaika
bill.ourReference = Myyj\u00E4n viite bill.ourReference = Myyj\u00E4n viite
bill.paidDate = Maksup\u00E4iv\u00E4 bill.paidDate = Maksup\u00E4iv\u00E4
bill.payer = Maksaja bill.payer = Maksaja
bill.paymentTime = Maksuehdot bill.paymentTime = Maksuehdot
bill.printBill = Tulosta lasku bill.printBill = Tulosta lasku
bill.referenceNumberBase = Viitenumeropohja bill.referenceNumberBase = Viitenumeropohja
bill.referencenumber = Viitenumero bill.referencenumber = Viitenumero
bill.sentDate = P\u00E4iv\u00E4ys bill.sentDate = P\u00E4iv\u00E4ys
bill.theirReference = Asiakkaan viite bill.theirReference = Asiakkaan viite
bill.totalPrice = Laskun summa bill.totalPrice = Laskun summa
billine.name = Tuote billine.name = Tuote
billine.quantity = Lukum\u00E4\u00E4r\u00E4 billine.quantity = Lukum\u00E4\u00E4r\u00E4
billine.referencedProduct = Tuoteviittaus billine.referencedProduct = Tuoteviittaus
billine.save = Tallenna billine.save = Tallenna
billine.unitName = Yksikk\u00F6 billine.unitName = Yksikk\u00F6
billine.unitPrice = Yksikk\u00F6hinta billine.unitPrice = Yksikk\u00F6hinta
billine.vat = ALV billine.vat = ALV
bills.noBills = Ei laskuja bills.noBills = Ei laskuja
cardTemplate.edit = Muokkaa cardTemplate.edit = Muokkaa
cardTemplate.name = Korttipohja cardTemplate.name = Korttipohja
cardTemplate.power = Teho cardTemplate.power = Teho
cardTemplate.roles = Yhdistetyt roolit cardTemplate.roles = Yhdistetyt roolit
discount.active = Aktiivinen discount.active = Aktiivinen
discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMax = Enimm\u00E4ism\u00E4\u00E4r\u00E4
discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4 discount.amountMin = V\u00E4himm\u00E4ism\u00E4\u00E4r\u00E4
discount.code = Alennuskoodi discount.code = Alennuskoodi
discount.create = Luo uusi discount.create = Luo uusi
discount.details = Tiedot discount.details = Tiedot
discount.edit = Muokkaa discount.edit = Muokkaa
discount.maxNum = Alennusten enimm\u00E4islkm discount.maxNum = Alennusten enimm\u00E4islkm
discount.perUser = Alennuksia per k\u00E4ytt\u00E4j\u00E4 discount.perUser = Alennuksia per k\u00E4ytt\u00E4j\u00E4
discount.percentage = Alennusprosentti discount.percentage = Alennusprosentti
discount.products = Tuotteet discount.products = Tuotteet
discount.role = Roolialennus discount.role = Roolialennus
discount.save = Tallenna discount.save = Tallenna
discount.shortdesc = Kuvaus discount.shortdesc = Kuvaus
discount.validFrom = Voimassa alkaen
editplace.header = Muokkaa paikkaa discount.validTo = Voimassa asti
editplacegroup.header = Paikkaryhm\u00E4n tiedot editplace.header = Muokkaa paikkaa
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli editplacegroup.header = Paikkaryhm\u00E4n tiedot
event.edit = Muokkaa
event.endTime = Lopetusp\u00E4iv\u00E4 event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
event.name = Tapahtuman nimi event.edit = Muokkaa
event.nextBillNumber = Seuraavan laskun numero event.endTime = Lopetusp\u00E4iv\u00E4
event.referenceNumberBase = Viitenumeron pohja event.name = Tapahtuman nimi
event.save = Tallenna event.nextBillNumber = Seuraavan laskun numero
event.startTime = Aloitusp\u00E4iv\u00E4 event.referenceNumberBase = Viitenumeron pohja
event.save = Tallenna
eventdomain.domainname = Domain event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.remove = Poista
eventdomain.domainname = Domain
eventorg.bankName1 = Pankin nimi 2 eventdomain.remove = Poista
eventorg.bankNumber1 = Tilinumero 2
eventorg.billAddress1 = Laskutusosoite 1 eventorg.bankName1 = Pankin nimi 2
eventorg.billAddress2 = Laskutusosoite 2 eventorg.bankNumber1 = Tilinumero 2
eventorg.billAddress3 = Laskutusosoite 3 eventorg.billAddress1 = Laskutusosoite 1
eventorg.billAddress4 = Laskutusosoite 4 eventorg.billAddress2 = Laskutusosoite 2
eventorg.bundleCountry = Kieli-bundle eventorg.billAddress3 = Laskutusosoite 3
eventorg.createEvent = Luo tapahtuma eventorg.billAddress4 = Laskutusosoite 4
eventorg.createevent = Luo uusi tapahtuma eventorg.bundleCountry = Kieli-bundle
eventorg.events = Organisaation tapahtumat eventorg.createEvent = Luo tapahtuma
eventorg.organisation = Organisaation nimi eventorg.createevent = Luo uusi tapahtuma
eventorg.save = Tallenna eventorg.events = Organisaation tapahtumat
eventorg.organisation = Organisaation nimi
eventorgView.eventname = Tapahtuman nimi eventorg.save = Tallenna
eventorganiser.name = Tapahtumaj\u00E4rjest\u00E4j\u00E4 eventorgView.eventname = Tapahtuman nimi
game.gamepoints = Insomnia Game pisteet: eventorganiser.name = Tapahtumaj\u00E4rjest\u00E4j\u00E4
global.cancel = Peruuta game.gamepoints = Insomnia Game pisteet:
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle. global.cancel = Peruuta
global.save = Tallenna global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
httpsession.id = ID global.save = Tallenna
httpsession.invalidate = Mit\uFFFDt\uFFFDi
httpsession.invalidateSuccessfull = Sessio onnistuneesti mit\uFFFDt\uFFFDity httpsession.id = ID
httpsession.isSessionNew = Uusi sessio httpsession.invalidate = Mit\uFFFDt\uFFFDi
httpsession.lastAccessedTime = Viimeksi n\uFFFDhty httpsession.invalidateSuccessfull = Sessio onnistuneesti mit\uFFFDt\uFFFDity
httpsession.maxInactiveInterval = Aikakatkaisu (s) httpsession.isSessionNew = Uusi sessio
httpsession.sessionHasExisted = Ollut elossa (s) httpsession.lastAccessedTime = Viimeksi n\uFFFDhty
httpsession.user = Tunnus httpsession.maxInactiveInterval = Aikakatkaisu (s)
httpsession.sessionHasExisted = Ollut elossa (s)
imagefile.description = Kuvaus httpsession.user = Tunnus
imagefile.file = Kuvatiedosto
imagefile.description = Kuvaus
index.title = Etusivu imagefile.file = Kuvatiedosto
invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty. index.title = Etusivu
invite.successfull = Kutsu l\u00E4hetetty
invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n. invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella.
invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty.
javax.validation.constraints.AssertFalse.message = must be false invite.successfull = Kutsu l\u00E4hetetty
javax.validation.constraints.AssertTrue.message = must be true invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n.
javax.validation.constraints.DecimalMax.message = must be less than or equal to {value}
javax.validation.constraints.DecimalMin.message = must be greater than or equal to {value} javax.validation.constraints.AssertFalse.message = must be false
javax.validation.constraints.Digits.message = numeric value out of bounds (<{integer} digits>.<{fraction} digits> expected) javax.validation.constraints.AssertTrue.message = must be true
javax.validation.constraints.Future.message = must be in the future javax.validation.constraints.DecimalMax.message = must be less than or equal to {value}
javax.validation.constraints.Max.message = must be less than or equal to {value} javax.validation.constraints.DecimalMin.message = must be greater than or equal to {value}
javax.validation.constraints.Min.message = must be greater than or equal to {value} javax.validation.constraints.Digits.message = numeric value out of bounds (<{integer} digits>.<{fraction} digits> expected)
javax.validation.constraints.NotNull.message = may not be null javax.validation.constraints.Future.message = must be in the future
javax.validation.constraints.Null.message = must be null javax.validation.constraints.Max.message = must be less than or equal to {value}
javax.validation.constraints.Past.message = must be in the past javax.validation.constraints.Min.message = must be greater than or equal to {value}
javax.validation.constraints.Pattern.message = must match "{regexp}" javax.validation.constraints.NotNull.message = may not be null
javax.validation.constraints.Size.message = size must be between {min} and {max} javax.validation.constraints.Null.message = must be null
javax.validation.constraints.Past.message = must be in the past
login.login = Kirjaudu sis\u00E4\u00E4n javax.validation.constraints.Pattern.message = must match "{regexp}"
login.logout = Kirjaudu ulos javax.validation.constraints.Size.message = size must be between {min} and {max}
login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana login.login = Kirjaudu sis\u00E4\u00E4n
login.submit = Kirjaudu sis\u00E4\u00E4n login.logout = Kirjaudu ulos
login.username = K\u00E4ytt\u00E4j\u00E4tunnus login.logoutmessage = Olet kirjautunut ulos j\u00E4rjestelm\u00E4st\u00E4.
login.password = Salasana
loginerror.header = Kirjautuminen ep\u00E4onnistui login.submit = Kirjaudu sis\u00E4\u00E4n
loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein. login.username = K\u00E4ytt\u00E4j\u00E4tunnus
loginerror.resetpassword = Salasana unohtunut?
loginerror.header = Kirjautuminen ep\u00E4onnistui
map.edit = Muokkaa loginerror.message = K\u00E4ytt\u00E4j\u00E4tunnus tai salasana ei ollut oikein.
map.name = Nimi loginerror.resetpassword = Salasana unohtunut?
mapManage.lockedPlaces = Lukittu kartasta {0} paikkaa. map.edit = Muokkaa
mapManage.releasedPlaces = Vapautettu kartasta {0} paikkaa map.name = Nimi
mapView.buyPlaces = Lukitse valitut paikat mapManage.lockedPlaces = Lukittu kartasta {0} paikkaa.
mapView.errorWhenReleasingPlace = Paikkaa vapauttassa tapahtui virhe. mapManage.releasedPlaces = Vapautettu kartasta {0} paikkaa
mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe.
mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin. mapView.buyPlaces = Lukitse valitut paikat
mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen. mapView.errorWhenReleasingPlace = Paikkaa vapauttassa tapahtui virhe.
mapView.errorWhenReservingPlace = Paikkaa varatessa tapahtui virhe.
menu.index = Etusivu mapView.errorWhileBuyingPlaces = Virhe paikkojen ostossa. Ole hyv\u00E4 ja yrit\u00E4 uudelleen. Jos virhe toistuu ota yhteytt\u00E4 j\u00E4rjest\u00E4jiin.
menu.place.placemap = Paikkakartta mapView.notEnoughCreditsToReserve = Sinulla ei ole riitt\u00E4v\u00E4sti suoritettuja konepaikkamaksuja t\u00E4m\u00E4n paikan varaamiseen.
menu.poll.index = Kyselyt
menu.shop.createBill = Kauppa menu.index = Etusivu
menu.user.edit = Omat tiedot menu.place.placemap = Paikkakartta
menu.poll.index = Kyselyt
news.abstract = Lyhennelm\u00E4 menu.shop.createBill = Kauppa
news.expire = Lopeta julkaisu menu.user.edit = Omat tiedot
news.publish = Julkaise
news.save = Tallenna news.abstract = Lyhennelm\u00E4
news.title = Otsikko news.expire = Lopeta julkaisu
news.publish = Julkaise
newsgroup.edit = Muokkaa news.save = Tallenna
newsgroup.name = Uutisryhm\u00E4n nimi news.title = Otsikko
newsgroup.priority = J\u00E4rjestysnumero
newsgroup.readerRole = Lukijoiden roolit newsgroup.edit = Muokkaa
newsgroup.writerRole = Kirjoittajaryhm\u00E4 newsgroup.name = Uutisryhm\u00E4n nimi
newsgroup.priority = J\u00E4rjestysnumero
newslist.header = Uutisryhm\u00E4t newsgroup.readerRole = Lukijoiden roolit
newsgroup.writerRole = Kirjoittajaryhm\u00E4
org.hibernate.validator.constraints.Email.message = not a well-formed email address
org.hibernate.validator.constraints.Length.message = length must be between {min} and {max} newslist.header = Uutisryhm\u00E4t
org.hibernate.validator.constraints.NotEmpty.message = may not be empty
org.hibernate.validator.constraints.Range.message = must be between {min} and {max} org.hibernate.validator.constraints.Email.message = not a well-formed email address
org.hibernate.validator.constraints.Length.message = length must be between {min} and {max}
page.account.list.header = Tilitapahtumat org.hibernate.validator.constraints.NotEmpty.message = may not be empty
page.auth.loginerror.header = kirjautuminen ep\u00E4onnistui org.hibernate.validator.constraints.Range.message = must be between {min} and {max}
page.auth.logout.header = Uloskirjautuminen
page.auth.logoutsuccess.header = Logout page.account.list.header = Tilitapahtumat
page.auth.resetPassword.header = Nollaa salasana page.auth.loginerror.header = kirjautuminen ep\u00E4onnistui
page.bill.billSummary.header = Laskujen yhteenveto page.auth.logout.header = Uloskirjautuminen
page.bill.edit.header = Laskun tiedot page.auth.logoutsuccess.header = Logout
page.bill.list.header = Laskut page.auth.resetPassword.header = Nollaa salasana
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi page.bill.billSummary.header = Laskujen yhteenveto
page.place.mygroups.header = Paikkaryhm\u00E4t page.bill.edit.header = Laskun tiedot
page.place.placemap.header = Paikkakartta page.bill.list.header = Laskut
page.product.createBill.header = Osta tuotteita page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.user.create.header = Luo uusi k\u00E4ytt\u00E4j\u00E4 page.place.mygroups.header = Paikkaryhm\u00E4t
page.place.placemap.header = Paikkakartta
pagination.firstpage = Ensimm\u00E4inen page.product.createBill.header = Osta tuotteita
pagination.lastpage = Viimeinen page.user.create.header = Luo uusi k\u00E4ytt\u00E4j\u00E4
pagination.nextpage = Seuraava
pagination.pages = Sivuja pagination.firstpage = Ensimm\u00E4inen
pagination.previouspage = Edellinen pagination.lastpage = Viimeinen
pagination.results = Tuloksia pagination.nextpage = Seuraava
pagination.pages = Sivuja
passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n. pagination.previouspage = Edellinen
passwordChanged.header = Salasana vaihdettu onnistuneesti pagination.results = Tuloksia
passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon. passwordChanged.body = Voit nyt kirjautua k\u00E4ytt\u00E4j\u00E4tunnuksella ja uudella salasanalla sis\u00E4\u00E4n j\u00E4rjestelm\u00E4\u00E4n.
passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen. passwordChanged.header = Salasana vaihdettu onnistuneesti
passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et ole pyyt\u00E4nyt unohtuneen salasanan vaihtamista, ei t\u00E4h\u00E4n viestiin tarvitse reagoida.\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi passwordReset.errorChanging = Odotamaton virhe. Ota yhteytt\u00E4 yll\u00E4pitoon.
passwordreset.mailSubject = [INSOMNIA] Salasanan vaihtaminen passwordReset.hashNotFound = Salasanan vaihto on vanhentunut. Jos haluat vaihtaa salasanan l\u00E4het\u00E4 vaihtopyynt\u00F6 uudelleen.
passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4.
passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et ole pyyt\u00E4nyt unohtuneen salasanan vaihtamista, ei t\u00E4h\u00E4n viestiin tarvitse reagoida.\n\nTerveisin,\nInsomnia lippupalvelu\nwww.insomnia.fi
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia! passwordreset.mailSubject = [INSOMNIA] Salasanan vaihtaminen
permissiondenied.header = P\u00E4\u00E4sy kielletty passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4.
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia!
place.code = Paikkakoodi permissiondenied.header = P\u00E4\u00E4sy kielletty
place.commit = Tallenna permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
place.description = Kuvaus
place.details = Tiedot place.code = Paikkakoodi
place.edit = Muokkaa place.commit = Tallenna
place.groupremove = Poista paikka paikkaryhm\u00E4st\u00E4 place.description = Kuvaus
place.height = Korkeus place.details = Tiedot
place.mapX = X place.edit = Muokkaa
place.mapY = Y place.groupremove = Poista paikka paikkaryhm\u00E4st\u00E4
place.membership = Yhdistetty k\u00E4ytt\u00E4j\u00E4 place.height = Korkeus
place.name = Nimi place.mapX = X
place.noReserver = Ei liitetty k\u00E4ytt\u00E4j\u00E4\u00E4n place.mapY = Y
place.product = Tuote place.membership = Yhdistetty k\u00E4ytt\u00E4j\u00E4
place.releasetime = Vapautusaika place.name = Nimi
place.width = Leveys place.noReserver = Ei liitetty k\u00E4ytt\u00E4j\u00E4\u00E4n
place.product = Tuote
placeSelect.legend.blue = Oma valittu paikka place.releasetime = Vapautusaika
placeSelect.legend.green = Oma ostettu paikka place.width = Leveys
placeSelect.legend.grey = Vapautetaan tarvittaessa
placeSelect.legend.red = Varattu paikka placeSelect.legend.blue = Oma valittu paikka
placeSelect.legend.white = Vapaa paikka placeSelect.legend.green = Oma ostettu paikka
placeSelect.placeName = Paikka placeSelect.legend.grey = Vapautetaan tarvittaessa
placeSelect.placePrice = Paikan hinta placeSelect.legend.red = Varattu paikka
placeSelect.placeProductName = Paikan tyyppi placeSelect.legend.white = Vapaa paikka
placeSelect.placesleft = Paikkoja j\u00E4ljell\u00E4 placeSelect.placeName = Paikka
placeSelect.reservationPrice = Tilauksen hinta placeSelect.placePrice = Paikan hinta
placeSelect.reservedPlaces = Valitut paikat placeSelect.placeProductName = Paikan tyyppi
placeSelect.totalPlaces = Paikkoja yhteens\u00E4 placeSelect.placesleft = Paikkoja j\u00E4ljell\u00E4
placeSelect.reservationPrice = Tilauksen hinta
placegroup.created = Luotu placeSelect.reservedPlaces = Valitut paikat
placegroup.creator = Varaaja placeSelect.totalPlaces = Paikkoja yhteens\u00E4
placegroup.details = Tiedot
placegroup.edit = N\u00E4yt\u00E4 placegroup.created = Luotu
placegroup.edited = Muokattu placegroup.creator = Varaaja
placegroup.name = Nimi placegroup.details = Tiedot
placegroup.places = Paikat placegroup.edit = N\u00E4yt\u00E4
placegroup.printPdf = Tulosta paikkakoodit placegroup.edited = Muokattu
placegroup.name = Nimi
placegroupview.groupCreator = Varaaja placegroup.places = Paikat
placegroupview.header = Omat paikat placegroup.printPdf = Tulosta paikkakoodit
placegroupview.noMemberships = Ei omia paikkoja
placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui! placegroupview.groupCreator = Varaaja
placegroupview.placeReleased = Paikka {0} vapautettu placegroupview.header = Omat paikat
placegroupview.releasePlace = Vapauta placegroupview.noMemberships = Ei omia paikkoja
placegroupview.reservationName = Paikka placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui!
placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4 placegroupview.placeReleased = Paikka {0} vapautettu
placegroupview.releasePlace = Vapauta
placetoken.commit = Liit\u00E4 placegroupview.reservationName = Paikka
placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi placegroupview.token = Paikkakoodi / k\u00E4ytt\u00E4j\u00E4
placetoken.placelist = Omat paikat
placetoken.token = Paikkakoodi placetoken.commit = Liit\u00E4
placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt! Tarkista koodi. placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi
placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n. placetoken.placelist = Omat paikat
placetoken.token = Paikkakoodi
poll.answer = Vastaa kyselyyn placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt! Tarkista koodi.
poll.begin = Avaa kysely placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n.
poll.description = Kuvaus
poll.end = Sulje kysely poll.answer = Vastaa kyselyyn
poll.name = Kyselyn nimi poll.begin = Avaa kysely
poll.save = L\u00E4het\u00E4 vastauksesi poll.description = Kuvaus
poll.end = Sulje kysely
product.barcode = Viivakoodi poll.name = Kyselyn nimi
product.billed = Laskutettu poll.save = L\u00E4het\u00E4 vastauksesi
product.boughtTotal = Tuotteita laskutettu
product.cart.count = Ostoskoriin product.barcode = Viivakoodi
product.cashed = Ostettu k\u00E4teisell\u00E4 product.billed = Laskutettu
product.color = V\u00E4ri k\u00E4ytt\u00F6liittym\u00E4ss\u00E4 product.boughtTotal = Tuotteita laskutettu
product.create = Luo tuote product.cart.count = Ostoskoriin
product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus product.cashed = Ostettu k\u00E4teisell\u00E4
product.edit = Muokkaa product.color = V\u00E4ri k\u00E4ytt\u00F6liittym\u00E4ss\u00E4
product.name = Tuotteen nimi product.create = Luo tuote
product.paid = Maksettu product.createDiscount = Lis\u00E4\u00E4 m\u00E4\u00E4r\u00E4alennus
product.prepaid = Prepaid product.edit = Muokkaa
product.prepaidInstant = Luodaan kun prepaid maksetaan product.name = Tuotteen nimi
product.price = Tuotteen hinta product.paid = Maksettu
product.save = Tallenna product.prepaid = Prepaid
product.shopInstant = Luo k\u00E4teismaksu tuotteille product.prepaidInstant = Luodaan kun prepaid maksetaan
product.sort = J\u00E4rjestys luku product.price = Tuotteen hinta
product.totalPrice = Summa product.save = Tallenna
product.unitName = Tuoteyksikk\u00F6 product.shopInstant = Luo k\u00E4teismaksu tuotteille
product.vat = ALV product.sort = J\u00E4rjestys luku
product.totalPrice = Summa
products.save = Tallenna product.unitName = Tuoteyksikk\u00F6
product.vat = ALV
productshop.billCreated = Lasku luotu
productshop.commit = Osta products.save = Tallenna
productshop.noItemsInCart = Ostoskorissa ei ole tuotteita
productshop.total = Yhteens\u00E4 productshop.billCreated = Lasku luotu
productshop.commit = Osta
reader.assocToCard = Yhdist\u00E4 korttiin productshop.noItemsInCart = Ostoskorissa ei ole tuotteita
reader.name = Lukijan nimi productshop.total = Yhteens\u00E4
reader.tag = Tag
reader.user = K\u00E4ytt\u00E4j\u00E4 reader.assocToCard = Yhdist\u00E4 korttiin
reader.name = Lukijan nimi
readerevent.associateToUser = Yhdist\u00E4 k\u00E4ytt\u00E4j\u00E4\u00E4n reader.tag = Tag
readerevent.seenSince = N\u00E4hty viimeksi reader.user = K\u00E4ytt\u00E4j\u00E4
readerevent.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle
readerevent.associateToUser = Yhdist\u00E4 k\u00E4ytt\u00E4j\u00E4\u00E4n
readerview.cards = Kortit ( tulostuslkm ) readerevent.seenSince = N\u00E4hty viimeksi
readerevent.shopToUser = Osta k\u00E4ytt\u00E4j\u00E4lle
resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Unohtuneen salasanan vaihto readerview.cards = Kortit ( tulostuslkm )
resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetMail.username = K\u00E4ytt\u00E4j\u00E4tunnus resetMail.body = Voit vaihtaa unohtuneen salasanan sy\u00F6tt\u00E4m\u00E4ll\u00E4 k\u00E4ytt\u00E4j\u00E4tunnuksesi allaolevaan kentt\u00E4\u00E4n. Tunnukseen liitettyyn s\u00E4hk\u00F6postiosoitteeseen l\u00E4hetet\u00E4\u00E4n kertak\u00E4ytt\u00F6inen osoite jossa voit vaihtaa sy\u00F6tt\u00E4m\u00E4si k\u00E4ytt\u00E4j\u00E4tunnuksen salasanan.
resetMail.header = Unohtuneen salasanan vaihto
resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan. resetMail.send = L\u00E4het\u00E4 s\u00E4hk\u00F6posti
resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty resetMail.username = K\u00E4ytt\u00E4j\u00E4tunnus
role.cardtemplate = Korttipohja resetmailSent.body = Antamasi k\u00E4ytt\u00E4j\u00E4tunnuksen s\u00E4hk\u00F6postiosoitteeseen on l\u00E4hetetty osoite jossa voit vaihtaa tunnuksen salasanan.
role.create = Luo rooli resetmailSent.header = S\u00E4hk\u00F6posti l\u00E4hetetty
role.description = Kuvaus
role.edit = Muokkaa role.cardtemplate = Korttipohja
role.edit.save = Tallenna role.create = Luo rooli
role.name = Nimi role.description = Kuvaus
role.parents = Periytyy role.edit = Muokkaa
role.savePermissions = Tallenna oikeudet role.edit.save = Tallenna
role.name = Nimi
sendPicture.header = L\u00E4het\u00E4 kuva role.parents = Periytyy
role.savePermissions = Tallenna oikeudet
shop.accountBalance = Tilin saldo
shop.user = Myyd\u00E4\u00E4n sendPicture.header = L\u00E4het\u00E4 kuva
sidebar.bill.list = Omat laskut shop.accountBalance = Tilin saldo
sidebar.bill.listAll = Kaikki laskut shop.cash = K\u00E4teispano
sidebar.bill.summary = Laskujen yhteenveto shop.totalPrice = Tuotteiden hinta
sidebar.bills = Laskut shop.user = Myyd\u00E4\u00E4n
sidebar.cardTemplate.create = Uusi korttipohja
sidebar.cardTemplate.list = N\u00E4yt\u00E4 korttipohjat sidebar.bill.list = Omat laskut
sidebar.createuser = Rekister\u00F6idy uudeksi k\u00E4ytt\u00E4j\u00E4ksi sidebar.bill.listAll = Kaikki laskut
sidebar.eventorg.list = Omat organisaatiot sidebar.bill.summary = Laskujen yhteenveto
sidebar.map.list = Kartat sidebar.bills = Laskut
sidebar.map.placemap = Paikkakartta sidebar.cardTemplate.create = Uusi korttipohja
sidebar.maps = Kartat sidebar.cardTemplate.list = N\u00E4yt\u00E4 korttipohjat
sidebar.other = Muuta sidebar.createuser = Rekister\u00F6idy uudeksi k\u00E4ytt\u00E4j\u00E4ksi
sidebar.product.create = Uusi tuote sidebar.eventorg.list = Omat organisaatiot
sidebar.product.createBill = Luo lasku sidebar.map.list = Kartat
sidebar.product.list = Tuotteet sidebar.map.placemap = Paikkakartta
sidebar.products = Tuotteet sidebar.maps = Kartat
sidebar.role.create = Uusi rooli sidebar.other = Muuta
sidebar.role.list = Roolit sidebar.product.create = Uusi tuote
sidebar.roles = Roolit sidebar.product.createBill = Luo lasku
sidebar.shop.readerEvents = Lukijan tapahtumat sidebar.product.list = Tuotteet
sidebar.shop.readerlist = N\u00E4yt\u00E4 lukijat sidebar.products = Tuotteet
sidebar.user.create = Uusi k\u00E4ytt\u00E4j\u00E4 sidebar.role.create = Uusi rooli
sidebar.user.list = K\u00E4ytt\u00E4j\u00E4t sidebar.role.list = Roolit
sidebar.users = K\u00E4ytt\u00E4j\u00E4t sidebar.roles = Roolit
sidebar.utils.flushCache = Flush Cache sidebar.shop.readerEvents = Lukijan tapahtumat
sidebar.utils.testdata = Testdata sidebar.shop.readerlist = N\u00E4yt\u00E4 lukijat
sidebar.user.create = Uusi k\u00E4ytt\u00E4j\u00E4
sitepage.edit = Muokkaa sidebar.user.list = K\u00E4ytt\u00E4j\u00E4t
sitepage.name = Sivun nimi sidebar.users = K\u00E4ytt\u00E4j\u00E4t
sitepage.roles = N\u00E4ytet\u00E4\u00E4n rooleille sidebar.utils.flushCache = Flush Cache
sidebar.utils.testdata = Testdata
sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
sitepage.edit = Muokkaa
submenu.auth.login = Kirjaudu sitepage.name = Sivun nimi
submenu.auth.logoutResponse = Uloskirjautuminen onnistui sitepage.roles = N\u00E4ytet\u00E4\u00E4n rooleille
submenu.auth.sendResetMail = Salasanan palautus
submenu.bill.billSummary = Laskujen yhteenveto sitepagelist.header = Sivuston sis\u00E4ll\u00F6t
submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.bill.listAll = Kaikki laskut submenu.auth.login = Kirjaudu
submenu.map.create = Uusi kartta submenu.auth.logoutResponse = Uloskirjautuminen onnistui
submenu.map.list = N\u00E4yt\u00E4 kartat submenu.auth.sendResetMail = Salasanan palautus
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4 submenu.bill.billSummary = Laskujen yhteenveto
submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t submenu.bill.list = N\u00E4yt\u00E4 omat laskut
submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi submenu.bill.listAll = Kaikki laskut
submenu.place.myGroups = Omat paikkavaraukset submenu.map.create = Uusi kartta
submenu.poll.index = Kyselyt submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.product.create = Uusi tuote submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
submenu.product.list = Listaa tuotteet submenu.pages.list = N\u00E4yt\u00E4 sis\u00E4ll\u00F6t
submenu.role.create = Luo rooli submenu.place.insertToken = Sy\u00F6t\u00E4 paikkakoodi
submenu.role.list = Roolit submenu.place.myGroups = Omat paikkavaraukset
submenu.shop.createBill = Luo lasku submenu.poll.index = Kyselyt
submenu.user.accountEvents = Tilitapahtumat submenu.product.create = Uusi tuote
submenu.user.changePassword = Vaihda salasana submenu.product.list = Listaa tuotteet
submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4 submenu.role.create = Luo rooli
submenu.user.createCardTemplate = Luo korttiryhm\u00E4 submenu.role.list = Roolit
submenu.user.edit = K\u00E4ytt\u00E4j\u00E4n tiedot submenu.shop.createBill = Luo lasku
submenu.user.invite = Kutsu yst\u00E4vi\u00E4 submenu.user.accountEvents = Tilitapahtumat
submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t submenu.user.changePassword = Vaihda salasana
submenu.user.listCardTemplates = Korttiryhm\u00E4t submenu.user.create = Luo k\u00E4ytt\u00E4j\u00E4
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4 submenu.user.createCardTemplate = Luo korttiryhm\u00E4
submenu.user.rolelinks = Hallitse rooleja submenu.user.edit = K\u00E4ytt\u00E4j\u00E4n tiedot
submenu.user.sendPicture = L\u00E4het\u00E4 kuva submenu.user.invite = Kutsu yst\u00E4vi\u00E4
submenu.user.userlinks = Muokkaa tietoja submenu.user.list = Kaikki k\u00E4ytt\u00E4j\u00E4t
submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4 submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.useradmin.createCardTemplate = Luo uusi korttipohja submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.useradmin.list = Listaa k\u00E4ytt\u00E4j\u00E4t submenu.user.rolelinks = Hallitse rooleja
submenu.useradmin.listCardTemplates = Listaa korttipohjat submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.shop = Kauppaan
supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4 submenu.user.userlinks = Muokkaa tietoja
supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4 submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja
template.loggedInAs = Kirjautunut tunnuksella: submenu.useradmin.list = Listaa k\u00E4ytt\u00E4j\u00E4t
submenu.useradmin.listCardTemplates = Listaa korttipohjat
topnavi.billing = Laskutus
topnavi.contents = Sivuston sis\u00E4lt\u00F6 supernavi.admin = Yll\u00E4piton\u00E4kym\u00E4
topnavi.frontpage = Etusivu supernavi.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
topnavi.maps = Kartat
topnavi.placemap = Paikkakartta template.loggedInAs = Kirjautunut tunnuksella:
topnavi.poll = Kyselyt
topnavi.products = Tuotteet topnavi.billing = Laskutus
topnavi.shop = Kauppa topnavi.contents = Sivuston sis\u00E4lt\u00F6
topnavi.user = Omat tiedot topnavi.frontpage = Etusivu
topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t topnavi.maps = Kartat
topnavi.placemap = Paikkakartta
user.accountBalance = Tilin saldo topnavi.poll = Kyselyt
user.accountEventHeader = Tilitapahtumat topnavi.products = Tuotteet
user.accountevents = Tilitapahtumat topnavi.shop = Kauppa
user.address = Osoite topnavi.user = Omat tiedot
user.bank = Pankki topnavi.usermgmt = K\u00E4ytt\u00E4j\u00E4t
user.bankaccount = Pankkitili
user.changePassword = Vaihda salasana user.accountBalance = Tilin saldo
user.changepassword.forUser = K\u00E4ytt\u00E4j\u00E4lle user.accountEventHeader = Tilitapahtumat
user.changepassword.title = Vaihda salasana user.accountevents = Tilitapahtumat
user.create = Luo k\u00E4ytt\u00E4j\u00E4 user.address = Osoite
user.createdmessage = K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n. user.bank = Pankki
user.defaultImage = Oletukuva user.bankaccount = Pankkitili
user.edit = Muokkaa user.changePassword = Vaihda salasana
user.edit.title = Omat tiedot user.changepassword.forUser = K\u00E4ytt\u00E4j\u00E4lle
user.email = S\u00E4hk\u00F6posti user.changepassword.title = Vaihda salasana
user.firstNames = Etunimi user.create = Luo k\u00E4ytt\u00E4j\u00E4
user.hasImage = Kuva user.createdmessage = K\u00E4ytt\u00E4j\u00E4tunnus on luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n.
user.imageUploaded = Kuva l\u00E4hetetty. user.defaultImage = Oletukuva
user.imagelist = Tallennetut kuvat user.edit = Muokkaa
user.imagesubmit = L\u00E4het\u00E4 kuva user.edit.title = Omat tiedot
user.invite = Kutsu user.email = S\u00E4hk\u00F6posti
user.invite.header = Luo k\u00E4ytt\u00E4j\u00E4 kutsusta user.firstNames = Etunimi
user.invitemail = S\u00E4hk\u00F6postiosoite user.hasImage = Kuva
user.lastName = Sukunimi user.imageUploaded = Kuva l\u00E4hetetty.
user.login = K\u00E4ytt\u00E4j\u00E4tunnus user.imagelist = Tallennetut kuvat
user.nick = Nick user.imagesubmit = L\u00E4het\u00E4 kuva
user.noAccountevents = Ei tilitapahtumia user.invite = Kutsu
user.noCurrentImage = Ei kuvaa user.invite.header = Luo k\u00E4ytt\u00E4j\u00E4 kutsusta
user.noImage = EI kuvaa user.invitemail = S\u00E4hk\u00F6postiosoite
user.page.invite = Kutsu yst\u00E4vi\u00E4 user.lastName = Sukunimi
user.password = Salasana user.login = K\u00E4ytt\u00E4j\u00E4tunnus
user.passwordcheck = Salasana ( uudelleen ) user.nick = Nick
user.passwordlengthMessage = Salasana liian lyhyt user.noAccountevents = Ei tilitapahtumia
user.phone = Puhelin user.noCurrentImage = Ei kuvaa
user.placegroups = Omat paikkaryhm\u00E4t user.noImage = EI kuvaa
user.realname = Nimi user.page.invite = Kutsu yst\u00E4vi\u00E4
user.roles = Roolit user.password = Salasana
user.rolesave = Tallenna roolit user.passwordcheck = Salasana ( uudelleen )
user.save = Tallenna user.passwordlengthMessage = Salasana liian lyhyt
user.sendPicture = Kuvan l\u00E4hetys user.phone = Puhelin
user.sex = Sukupuoli user.placegroups = Omat paikkaryhm\u00E4t
user.sex.FEMALE = Nainen user.realname = Nimi
user.sex.MALE = Mies user.roles = Roolit
user.sex.UNDEFINED = M\u00E4\u00E4rittelem\u00E4tt\u00E4 user.rolesave = Tallenna roolit
user.shop = Osta user.save = Tallenna
user.successfullySaved = Tiedot tallennettu onnistuneesti user.sendPicture = Kuvan l\u00E4hetys
user.superadmin = Superadmin user.sex = Sukupuoli
user.thisIsCurrentImage = Nykyinen kuva user.sex.FEMALE = Nainen
user.town = Kaupunki user.sex.MALE = Mies
user.uploadimage = L\u00E4het\u00E4 kuva user.sex.UNDEFINED = M\u00E4\u00E4rittelem\u00E4tt\u00E4
user.username = K\u00E4ytt\u00E4j\u00E4tunnus user.shop = Osta
user.validate.notUniqueUsername = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus user.shop.title = Osta k\u00E4ytt\u00E4j\u00E4lle
user.wholeName = Nimi user.successfullySaved = Tiedot tallennettu onnistuneesti
user.zipCode = Postinumero user.superadmin = Superadmin
user.thisIsCurrentImage = Nykyinen kuva
userimage.webcam = Ota kuva webkameralla user.town = Kaupunki
user.uploadimage = L\u00E4het\u00E4 kuva
userlist.header = Etsi k\u00E4ytt\u00E4ji\u00E4 user.username = K\u00E4ytt\u00E4j\u00E4tunnus
userlist.search = Etsi user.validate.notUniqueUsername = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus
user.wholeName = Nimi
usertitle.managingUser = Hallitaan k\u00E4ytt\u00E4j\u00E4\u00E4 user.zipCode = Postinumero
userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4. userimage.webcam = Ota kuva webkameralla
userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
userview.passwordsChanged = Salasana vaihdettu userlist.header = Etsi k\u00E4ytt\u00E4ji\u00E4
userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen. userlist.search = Etsi
userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus.
usertitle.managingUser = Kauppa
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
viewexpired.title = N\u00E4kym\u00E4 on vanhentunut userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4.
userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
voting.allcompos.curEntries = Entryja userview.passwordsChanged = Salasana vaihdettu
voting.allcompos.descri = Kuvaus userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen.
voting.allcompos.description = Compojen informaatiot. userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Ole hyv\u00E4 ja valitse toinen tunnus.
voting.allcompos.endTime = Lopetusaika
voting.allcompos.header = Kaikki compot viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
voting.allcompos.maxParts = Max osallistujam\u00E4\u00E4r\u00E4 viewexpired.title = N\u00E4kym\u00E4 on vanhentunut
voting.allcompos.name = Nimi
voting.allcompos.startTime = Aloitusaika voting.allcompos.curEntries = Entryja
voting.allcompos.submitEnd = Lis\u00E4ys kiinni voting.allcompos.descri = Kuvaus
voting.allcompos.submitEntry = L\u00E4het\u00E4 entry voting.allcompos.description = Compojen informaatiot.
voting.allcompos.submitStart = Lis\u00E4ys auki voting.allcompos.endTime = Lopetusaika
voting.allcompos.voteEnd = \u00C4\u00E4nestys kiinni voting.allcompos.header = Kaikki compot
voting.allcompos.voteStart = \u00C4\u00E4nestys auki voting.allcompos.maxParts = Max osallistujam\u00E4\u00E4r\u00E4
voting.create.compoEnd = Lopetusaika voting.allcompos.name = Nimi
voting.create.compoStart = Aloitusaika voting.allcompos.startTime = Aloitusaika
voting.create.createButton = Luo voting.allcompos.submitEnd = Lis\u00E4ys kiinni
voting.create.dateValidatorEndDate = Loppumisaika ennen alkua. voting.allcompos.submitEntry = L\u00E4het\u00E4 entry
voting.create.description = Kuvaus voting.allcompos.submitStart = Lis\u00E4ys auki
voting.create.header = Compon luonti voting.allcompos.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.maxParticipants = Max osallistujat voting.allcompos.voteStart = \u00C4\u00E4nestys auki
voting.create.name = Nimi voting.create.compoEnd = Lopetusaika
voting.create.submitEnd = Submit kiinni voting.create.compoStart = Aloitusaika
voting.create.submitStart = Submit auki voting.create.createButton = Luo
voting.create.voteEnd = \u00C4\u00E4nestys kiinni voting.create.dateValidatorEndDate = Loppumisaika ennen alkua.
voting.create.voteStart = \u00C4\u00E4nestys auki voting.create.description = Kuvaus
voting.create.header = Compon luonti
voting.create.maxParticipants = Max osallistujat
voting.create.name = Nimi
voting.create.submitEnd = Submit kiinni
voting.create.submitStart = Submit auki
voting.create.voteEnd = \u00C4\u00E4nestys kiinni
voting.create.voteStart = \u00C4\u00E4nestys auki
...@@ -60,7 +60,7 @@ public class MapView extends GenericCDIView { ...@@ -60,7 +60,7 @@ public class MapView extends GenericCDIView {
{ {
if (balance == null) if (balance == null)
{ {
balance = acbean.getAccountBalance(user); balance = user.getAccountBalance();
} }
return balance; return balance;
} }
......
...@@ -97,7 +97,7 @@ public class PlaceView extends GenericCDIView { ...@@ -97,7 +97,7 @@ public class PlaceView extends GenericCDIView {
} else if (place.isBuyable() && !place.isTaken()) { } else if (place.isBuyable() && !place.isTaken()) {
BigDecimal balance = acbean.getAccountBalance(permbean.getCurrentUser()); BigDecimal balance = user.getAccountBalance();
BigDecimal price = null; BigDecimal price = null;
if (permbean.isCurrentUser(user)) { if (permbean.isCurrentUser(user)) {
price = placebean.getTotalReservationPrice(place); price = placebean.getTotalReservationPrice(place);
......
...@@ -18,6 +18,7 @@ import fi.insomnia.bortal.beans.ProductBeanLocal; ...@@ -18,6 +18,7 @@ import fi.insomnia.bortal.beans.ProductBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.Bill; import fi.insomnia.bortal.model.Bill;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.web.annotations.SelectedUser; import fi.insomnia.bortal.web.annotations.SelectedUser;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.helpers.ProductShopItem; import fi.insomnia.bortal.web.helpers.ProductShopItem;
...@@ -46,6 +47,8 @@ public class ProductShopView extends GenericCDIView { ...@@ -46,6 +47,8 @@ public class ProductShopView extends GenericCDIView {
private boolean payInstant; private boolean payInstant;
private BigDecimal cash = BigDecimal.ZERO;
private transient ListDataModel<ProductShopItem> shoppingcart; private transient ListDataModel<ProductShopItem> shoppingcart;
@Inject @Inject
private BillListView billListView; private BillListView billListView;
...@@ -63,7 +66,7 @@ public class ProductShopView extends GenericCDIView { ...@@ -63,7 +66,7 @@ public class ProductShopView extends GenericCDIView {
public void initShopView() { public void initShopView() {
if (requirePermissions(ShopPermission.SHOP_TO_OTHERS) && shoppingcart == null) { if (requirePermissions(ShopPermission.SHOP_TO_OTHERS) && shoppingcart == null) {
shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productList(productBean.listUserShoppableProducts())); shoppingcart = new ListDataModel<ProductShopItem>(ProductShopItem.productGTList(productBean.findForStaffshop()));
logger.debug("Initialized shoppingcart to {}", shoppingcart); logger.debug("Initialized shoppingcart to {}", shoppingcart);
this.beginConversation(); this.beginConversation();
} }
...@@ -77,6 +80,17 @@ public class ProductShopView extends GenericCDIView { ...@@ -77,6 +80,17 @@ public class ProductShopView extends GenericCDIView {
return null; return null;
} }
public BigDecimal getAccountBalance()
{
BigDecimal ret = user.getAccountBalance();
ret = ret.add(getCash());
ret = ret.subtract(getTotalPrice());
logger.info("User accountbalance {}, cash{}, total {}. retBalance {}", new Object[] {
user.getAccountBalance(), cash, getTotalPrice(), ret
});
return ret;
}
public BigDecimal getTotalPrice() public BigDecimal getTotalPrice()
{ {
BigDecimal ret = BigDecimal.ZERO; BigDecimal ret = BigDecimal.ZERO;
...@@ -106,7 +120,34 @@ public class ProductShopView extends GenericCDIView { ...@@ -106,7 +120,34 @@ public class ProductShopView extends GenericCDIView {
} }
billbean.createBill(bill); billbean.createBill(bill);
addFaceMessage("productshop.billCreated"); addFaceMessage("productshop.billCreated");
cash = BigDecimal.ZERO;
shoppingcart = null;
return "redirBillList"; return "redirBillList";
}
public String commitShoppingCart()
{
EventUser retuser = null;
for (ProductShopItem shopitem : shoppingcart) {
if (shopitem.getCount().compareTo(BigDecimal.ZERO) > 0) {
retuser = productBean.createAccountEvent(shopitem.getProduct(), shopitem.getCount(), user).getUser();
}
}
if (cash != null && cash.compareTo(BigDecimal.ZERO) != 0)
{
Product credProd = productBean.findCreditProduct();
retuser = productBean.createAccountEvent(credProd, cash, user).getUser();
}
if (user != null)
{
user = retuser;
}
shoppingcart = null;
cash = BigDecimal.ZERO;
return null;
} }
public void setUser(EventUser user) { public void setUser(EventUser user) {
...@@ -136,6 +177,10 @@ public class ProductShopView extends GenericCDIView { ...@@ -136,6 +177,10 @@ public class ProductShopView extends GenericCDIView {
} }
public void setPayInstant(boolean payInstant) { public void setPayInstant(boolean payInstant) {
if (payInstant)
{
getCash();
}
this.payInstant = payInstant; this.payInstant = payInstant;
} }
...@@ -150,4 +195,16 @@ public class ProductShopView extends GenericCDIView { ...@@ -150,4 +195,16 @@ public class ProductShopView extends GenericCDIView {
public void setBillListView(BillListView billListView) { public void setBillListView(BillListView billListView) {
this.billListView = billListView; this.billListView = billListView;
} }
public BigDecimal getCash() {
if (payInstant) {
cash = getTotalPrice();
logger.info("Getting instantcash as {}", cash);
}
return cash;
}
public void setCash(BigDecimal cash) {
this.cash = cash;
}
} }
...@@ -42,6 +42,13 @@ public class ReaderView extends GenericCDIView { ...@@ -42,6 +42,13 @@ public class ReaderView extends GenericCDIView {
private UserCardWrapper neighborUser; private UserCardWrapper neighborUser;
public String createCardForUser() {
UserCardWrapper usr = userlist.getRowData();
ReaderEvent card = readerbean.createCard(event, usr.getUser());
return null;
}
public void initUserassocView() { public void initUserassocView() {
if (super.requirePermissions(UserPermission.CREATE_NEW) && event == null) { if (super.requirePermissions(UserPermission.CREATE_NEW) && event == null) {
event = readerbean.getEvent(eventid); event = readerbean.getEvent(eventid);
......
...@@ -20,7 +20,11 @@ public class UserCardWrapper implements Serializable { ...@@ -20,7 +20,11 @@ public class UserCardWrapper implements Serializable {
public UserCardWrapper(User u, UserBeanLocal userbean) { public UserCardWrapper(User u, UserBeanLocal userbean) {
user = userbean.getEventUser(u); user = userbean.getEventUser(u);
printedCards = new ListDataModel<PrintedCard>(user.getPrintedCards()); List<PrintedCard> cards = null;
if (user != null) {
cards = user.getPrintedCards();
}
printedCards = new ListDataModel<PrintedCard>(cards);
} }
public static ListDataModel<UserCardWrapper> initWrapper(List<User> users, UserBeanLocal userbean) public static ListDataModel<UserCardWrapper> initWrapper(List<User> users, UserBeanLocal userbean)
......
package fi.insomnia.bortal.web.cdiview.user; package fi.insomnia.bortal.web.cdiview.user;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
...@@ -16,13 +15,11 @@ import org.primefaces.model.UploadedFile; ...@@ -16,13 +15,11 @@ import org.primefaces.model.UploadedFile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.AccountEventBeanLocal;
import fi.insomnia.bortal.beans.CardTemplateBeanLocal; import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.EventBeanLocal; import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.RoleBeanLocal; import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission; import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.AccountEvent;
import fi.insomnia.bortal.model.EventUser; import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard; import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
...@@ -67,10 +64,6 @@ public class UserView extends GenericCDIView { ...@@ -67,10 +64,6 @@ public class UserView extends GenericCDIView {
@EJB @EJB
private CardTemplateBeanLocal cardBean; private CardTemplateBeanLocal cardBean;
private BigDecimal balance;
@EJB
private AccountEventBeanLocal acbean;
private List<AccountEvent> accountevents;
private List<Role> usersRoles; private List<Role> usersRoles;
@EJB @EJB
private RoleBeanLocal rolebean; private RoleBeanLocal rolebean;
...@@ -110,24 +103,6 @@ public class UserView extends GenericCDIView { ...@@ -110,24 +103,6 @@ public class UserView extends GenericCDIView {
return usersRoles; return usersRoles;
} }
public BigDecimal getAccountBalance()
{
if (balance == null)
{
balance = acbean.getAccountBalance(user);
}
return balance;
}
public List<AccountEvent> getAccountEvents()
{
if (accountevents == null)
{
accountevents = acbean.getAccountEvents(user);
}
return accountevents;
}
public String crop() public String crop()
{ {
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop()); logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
......
...@@ -4,19 +4,17 @@ import java.util.List; ...@@ -4,19 +4,17 @@ import java.util.List;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Named; import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.VotingBeanLocal; import fi.insomnia.bortal.beans.VotingBeanLocal;
import fi.insomnia.bortal.enums.apps.CompoPermission;
import fi.insomnia.bortal.model.Compo; import fi.insomnia.bortal.model.Compo;
import fi.insomnia.bortal.model.Role; import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.enums.apps.CompoPermission;
@ManagedBean
@Named @Named
@RequestScoped @RequestScoped
public class VotingCompoListView extends GenericCDIView { public class VotingCompoListView extends GenericCDIView {
...@@ -25,14 +23,14 @@ public class VotingCompoListView extends GenericCDIView { ...@@ -25,14 +23,14 @@ public class VotingCompoListView extends GenericCDIView {
@EJB @EJB
private VotingBeanLocal votbean; private VotingBeanLocal votbean;
private Role role; private Role role;
boolean curEntries; boolean curEntries;
boolean maxParts; boolean maxParts;
private static final Logger logger = LoggerFactory.getLogger(VotingCompoListView.class); private static final Logger logger = LoggerFactory.getLogger(VotingCompoListView.class);
public boolean isCurEntries() { public boolean isCurEntries() {
return curEntries; return curEntries;
} }
...@@ -49,14 +47,12 @@ public class VotingCompoListView extends GenericCDIView { ...@@ -49,14 +47,12 @@ public class VotingCompoListView extends GenericCDIView {
this.maxParts = maxParts; this.maxParts = maxParts;
} }
public List<Compo> getCompos() { public List<Compo> getCompos() {
return votbean.getCompoList(); return votbean.getCompoList();
} }
public void initView() { public void initView() {
if(requirePermissions(CompoPermission.VIEW_COMPOS) && role == null) { if (requirePermissions(CompoPermission.VIEW_COMPOS) && role == null) {
curEntries = true; curEntries = true;
maxParts = true; maxParts = true;
logger.info("Permission to view full compo listing."); logger.info("Permission to view full compo listing.");
......
...@@ -2,6 +2,7 @@ package fi.insomnia.bortal.web.helpers; ...@@ -2,6 +2,7 @@ package fi.insomnia.bortal.web.helpers;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -28,6 +29,24 @@ public class ProductShopItem { ...@@ -28,6 +29,24 @@ public class ProductShopItem {
setCount(BigDecimal.ZERO); setCount(BigDecimal.ZERO);
} }
/**
* Return products that
*
* @param findForStaffshop
* @return
*/
public static List<ProductShopItem> productGTList(List<Product> products) {
List<ProductShopItem> ret = new ArrayList<ProductShopItem>();
for (Product prod : products) {
if (prod.getPrice().compareTo(BigDecimal.ZERO) > 0)
{
ret.add(new ProductShopItem(prod));
}
}
return ret;
}
public static List<ProductShopItem> productList(List<Product> products) { public static List<ProductShopItem> productList(List<Product> products) {
List<ProductShopItem> ret = new ArrayList<ProductShopItem>(); List<ProductShopItem> ret = new ArrayList<ProductShopItem>();
for (Product prod : products) { for (Product prod : products) {
...@@ -49,7 +68,7 @@ public class ProductShopItem { ...@@ -49,7 +68,7 @@ public class ProductShopItem {
} }
this.count = count; this.count = count;
price = product.getPrice().abs().multiply(count); price = product.getPrice().abs().multiply(count);
discounts = product.getActiveDiscounts(count); discounts = product.getActiveDiscounts(count, Calendar.getInstance());
discountValues = new HashMap<Integer, BigDecimal>(); discountValues = new HashMap<Integer, BigDecimal>();
for (Discount d : discounts) for (Discount d : discounts)
{ {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!