Commit 918c544e by Tuomas Riihimäki

Kauppaviilausta,

1 parent 56bce642
Showing with 1687 additions and 169 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"
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">
<display-name>LanBortalWeb</display-name> <display-name>LanBortalWeb</display-name>
<session-config> <session-config>
<session-timeout>30</session-timeout> <session-timeout>30</session-timeout>
...@@ -133,4 +136,8 @@ ...@@ -133,4 +136,8 @@
<servlet-name>PlaceGroupPdf</servlet-name> <servlet-name>PlaceGroupPdf</servlet-name>
<url-pattern>/PlaceGroupPdf</url-pattern> <url-pattern>/PlaceGroupPdf</url-pattern>
</servlet-mapping> </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']}:" />
...@@ -40,6 +43,14 @@ ...@@ -40,6 +43,14 @@
<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: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:outputLabel value="#{i18n['shop.accountBalance']}" />
<h:outputText value="#{productShopView.user.accountBalance}"> <h:outputText value="#{productShopView.accountBalance}">
<f:convertNumber /> <f:convertNumber />
</h:outputText> </h:outputText>
</h:panelGrid> <h:outputLabel value="#{i18n['shop.cash']}" />
<h:inputText value="#{productShopView.cash}">
<f:ajax render="@form" event="valueChange" />
<f:convertNumber />
</h:inputText>
</h:panelGrid>
<h:form id="shoppingcartform">
<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']}" />
......
...@@ -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!
......
...@@ -83,6 +83,8 @@ discount.products = Tuotteet ...@@ -83,6 +83,8 @@ 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
discount.validTo = Voimassa asti
editplace.header = Muokkaa paikkaa editplace.header = Muokkaa paikkaa
...@@ -138,6 +140,7 @@ imagefile.file = Kuvatiedosto ...@@ -138,6 +140,7 @@ imagefile.file = Kuvatiedosto
index.title = Etusivu index.title = Etusivu
invite.emailexists = J\u00E4rjestelm\u00E4ss\u00E4 on jo k\u00E4ytt\u00E4j\u00E4tunnus samalla s\u00E4hk\u00F6postiosoitteella.
invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty. invite.notFound = Kutsu virheellinen tai jo k\u00E4ytetty.
invite.successfull = Kutsu l\u00E4hetetty invite.successfull = Kutsu l\u00E4hetetty
invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n. invite.userCreateSuccessfull = K\u00E4ytt\u00E4j\u00E4tunnus luotu onnistuneesti. Voit nyt kirjautua sis\u00E4\u00E4n j\u00E4rjeselm\u00E4\u00E4n.
...@@ -359,6 +362,8 @@ role.savePermissions = Tallenna oikeudet ...@@ -359,6 +362,8 @@ role.savePermissions = Tallenna oikeudet
sendPicture.header = L\u00E4het\u00E4 kuva sendPicture.header = L\u00E4het\u00E4 kuva
shop.accountBalance = Tilin saldo shop.accountBalance = Tilin saldo
shop.cash = K\u00E4teispano
shop.totalPrice = Tuotteiden hinta
shop.user = Myyd\u00E4\u00E4n shop.user = Myyd\u00E4\u00E4n
sidebar.bill.list = Omat laskut sidebar.bill.list = Omat laskut
...@@ -423,6 +428,7 @@ submenu.user.listCardTemplates = Korttiryhm\u00E4t ...@@ -423,6 +428,7 @@ submenu.user.listCardTemplates = Korttiryhm\u00E4t
submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4 submenu.user.manageuserlinks = Hallitse k\u00E4ytt\u00E4ji\u00E4
submenu.user.rolelinks = Hallitse rooleja submenu.user.rolelinks = Hallitse rooleja
submenu.user.sendPicture = L\u00E4het\u00E4 kuva submenu.user.sendPicture = L\u00E4het\u00E4 kuva
submenu.user.shop = Kauppaan
submenu.user.userlinks = Muokkaa tietoja submenu.user.userlinks = Muokkaa tietoja
submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4 submenu.useradmin.create = Luo uusi k\u00E4ytt\u00E4j\u00E4
submenu.useradmin.createCardTemplate = Luo uusi korttipohja submenu.useradmin.createCardTemplate = Luo uusi korttipohja
...@@ -490,6 +496,7 @@ user.sex.FEMALE = Nainen ...@@ -490,6 +496,7 @@ user.sex.FEMALE = Nainen
user.sex.MALE = Mies user.sex.MALE = Mies
user.sex.UNDEFINED = M\u00E4\u00E4rittelem\u00E4tt\u00E4 user.sex.UNDEFINED = M\u00E4\u00E4rittelem\u00E4tt\u00E4
user.shop = Osta user.shop = Osta
user.shop.title = Osta k\u00E4ytt\u00E4j\u00E4lle
user.successfullySaved = Tiedot tallennettu onnistuneesti user.successfullySaved = Tiedot tallennettu onnistuneesti
user.superadmin = Superadmin user.superadmin = Superadmin
user.thisIsCurrentImage = Nykyinen kuva user.thisIsCurrentImage = Nykyinen kuva
...@@ -505,7 +512,7 @@ userimage.webcam = Ota kuva webkameralla ...@@ -505,7 +512,7 @@ userimage.webcam = Ota kuva webkameralla
userlist.header = Etsi k\u00E4ytt\u00E4ji\u00E4 userlist.header = Etsi k\u00E4ytt\u00E4ji\u00E4
userlist.search = Etsi userlist.search = Etsi
usertitle.managingUser = Hallitaan k\u00E4ytt\u00E4j\u00E4\u00E4 usertitle.managingUser = Kauppa
userview.loginstringFaulty = K\u00E4ytt\u00E4j\u00E4tunnus virheellinen. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n kaksi merkki\u00E4 pitk\u00E4. 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. userview.passwordTooShort = Salasana liian lyhyt. Pit\u00E4\u00E4 olla v\u00E4hint\u00E4\u00E4n {0} merkki\u00E4 pitk\u00E4.
......
...@@ -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 {
...@@ -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!