Commit 00e96261 by Tuomas Riihimäki

Merge branch 'master' into devel

2 parents 24c4582b 8c69555d
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.io.OutputStream; import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
...@@ -17,26 +18,21 @@ import org.slf4j.Logger; ...@@ -17,26 +18,21 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beanutil.PdfPrinter; import fi.codecrew.moya.beanutil.PdfPrinter;
import fi.codecrew.moya.facade.BillFacade;
import fi.codecrew.moya.facade.BillLineFacade;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.beans.BillBeanLocal;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.LoggingBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.SecurityLogType;
import fi.codecrew.moya.bortal.views.BillSummary; import fi.codecrew.moya.bortal.views.BillSummary;
import fi.codecrew.moya.enums.apps.BillPermission; import fi.codecrew.moya.enums.apps.BillPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission; import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.facade.BillFacade;
import fi.codecrew.moya.facade.BillLineFacade;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.model.AccountEvent; import fi.codecrew.moya.model.AccountEvent;
import fi.codecrew.moya.model.Bill; import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.BillLine; import fi.codecrew.moya.model.BillLine;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent; import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEventPropertyKey;
import fi.codecrew.moya.model.Product; import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.ProductFlag; import fi.codecrew.moya.model.ProductFlag;
import fi.codecrew.moya.util.MailMessage; import fi.codecrew.moya.util.MailMessage;
import fi.codecrew.moya.utilities.I18n;
/** /**
* Session Bean implementation class BillBean * Session Bean implementation class BillBean
...@@ -255,8 +251,12 @@ public class BillBean implements BillBeanLocal { ...@@ -255,8 +251,12 @@ public class BillBean implements BillBeanLocal {
} }
MailMessage msg = new MailMessage(); MailMessage msg = new MailMessage();
msg.setSubject(I18n.get("bill.billMarkedPaidMail.subject", user.getEvent().getName()));
msg.setMessage(I18n.get("bill.billMarkedPaidMail.message", (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString())); String subject = MessageFormat.format(eventbean.getPropertyString(LanEventPropertyKey.BILL_PAID_MAIL_SUBJECT), user.getEvent().getName());
String content = MessageFormat.format(eventbean.getPropertyString(LanEventPropertyKey.BILL_PAID_MAIL_CONTENT), (bill.getBillNumber() == null) ? "----" : bill.getBillNumber().toString());
logger.info("Bill mail subject: {}, content {}", subject, content);
msg.setSubject(subject);
msg.setMessage(content);
msg.setTo(bill.getUser().getUser()); msg.setTo(bill.getUser().getUser());
utilbean.sendMail(msg); utilbean.sendMail(msg);
eventUserFacade.flush(); eventUserFacade.flush();
......
...@@ -5,7 +5,6 @@ import javax.ejb.LocalBean; ...@@ -5,7 +5,6 @@ import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import fi.codecrew.moya.facade.UserFacade; import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.beans.BootstrapBeanLocal;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
@Stateless @Stateless
...@@ -23,7 +22,7 @@ public class BootstrapBean implements BootstrapBeanLocal { ...@@ -23,7 +22,7 @@ public class BootstrapBean implements BootstrapBeanLocal {
if (adminUser == null) { if (adminUser == null) {
adminUser = new User(); adminUser = new User();
adminUser.setLogin("admin"); adminUser.setLogin("admin");
adminUser.setSuperadmin(true); // adminUser.setSuperadmin(true);
adminUser.resetPassword("admin"); adminUser.resetPassword("admin");
userFacade.create(adminUser); userFacade.create(adminUser);
} }
......
...@@ -21,8 +21,6 @@ import fi.codecrew.moya.facade.CompoFacade; ...@@ -21,8 +21,6 @@ import fi.codecrew.moya.facade.CompoFacade;
import fi.codecrew.moya.facade.EventMapFacade; import fi.codecrew.moya.facade.EventMapFacade;
import fi.codecrew.moya.facade.PlaceFacade; import fi.codecrew.moya.facade.PlaceFacade;
import fi.codecrew.moya.facade.UserFacade; import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.TestDataBeanLocal;
import fi.codecrew.moya.model.Bill; import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.Compo; import fi.codecrew.moya.model.Compo;
import fi.codecrew.moya.model.CompoEntry; import fi.codecrew.moya.model.CompoEntry;
...@@ -143,7 +141,7 @@ public class TestDataBean implements TestDataBeanLocal { ...@@ -143,7 +141,7 @@ public class TestDataBean implements TestDataBeanLocal {
u.setTown("Adminila"); u.setTown("Adminila");
u.setPostalTown("Adminila "); u.setPostalTown("Adminila ");
u.setZip("6666"); u.setZip("6666");
u.setSuperadmin(true); // u.setSuperadmin(true);
userFacade.create(u); userFacade.create(u);
return u; return u;
......
...@@ -2,8 +2,6 @@ package fi.codecrew.moya.beans; ...@@ -2,8 +2,6 @@ package fi.codecrew.moya.beans;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
...@@ -32,13 +30,16 @@ import org.slf4j.LoggerFactory; ...@@ -32,13 +30,16 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.SpecialPermission; import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.UserPermission; import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.ApprovalFacade;
import fi.codecrew.moya.facade.EventUserFacade; import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.FeedbackFacade; import fi.codecrew.moya.facade.FeedbackFacade;
import fi.codecrew.moya.facade.GroupMembershipFacade; import fi.codecrew.moya.facade.GroupMembershipFacade;
import fi.codecrew.moya.facade.PlaceGroupFacade; import fi.codecrew.moya.facade.PlaceGroupFacade;
import fi.codecrew.moya.facade.RoleFacade; import fi.codecrew.moya.facade.RoleFacade;
import fi.codecrew.moya.facade.UserApprovalFacade;
import fi.codecrew.moya.facade.UserFacade; import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.facade.UserImageFacade; import fi.codecrew.moya.facade.UserImageFacade;
import fi.codecrew.moya.model.Approval;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Feedback; import fi.codecrew.moya.model.Feedback;
import fi.codecrew.moya.model.GroupMembership; import fi.codecrew.moya.model.GroupMembership;
...@@ -49,6 +50,7 @@ import fi.codecrew.moya.model.PlaceGroup; ...@@ -49,6 +50,7 @@ import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.model.PrintedCard; import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
import fi.codecrew.moya.model.UserApproval;
import fi.codecrew.moya.model.UserImage; import fi.codecrew.moya.model.UserImage;
import fi.codecrew.moya.util.MailMessage; import fi.codecrew.moya.util.MailMessage;
import fi.codecrew.moya.util.UserSearchQuery; import fi.codecrew.moya.util.UserSearchQuery;
...@@ -118,6 +120,10 @@ public class UserBean implements UserBeanLocal { ...@@ -118,6 +120,10 @@ public class UserBean implements UserBeanLocal {
private PlaceGroupFacade pgfacade; private PlaceGroupFacade pgfacade;
@EJB @EJB
private FeedbackFacade feedbackFacade; private FeedbackFacade feedbackFacade;
@EJB
private ApprovalFacade approvalFacade;
@EJB
private UserApprovalFacade userApprovalFacade;
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
...@@ -166,7 +172,7 @@ public class UserBean implements UserBeanLocal { ...@@ -166,7 +172,7 @@ public class UserBean implements UserBeanLocal {
LanEvent event = eventBean.getCurrentEvent(); LanEvent event = eventBean.getCurrentEvent();
Set<Role> checkedRoles = new HashSet<Role>(); Set<Role> checkedRoles = new HashSet<Role>();
addRecursive(checkedRoles, event.getDefaultRole());
if (u != null) if (u != null)
{ {
addRecursive(checkedRoles, rolefacade.findForUser(u)); addRecursive(checkedRoles, rolefacade.findForUser(u));
...@@ -229,7 +235,6 @@ public class UserBean implements UserBeanLocal { ...@@ -229,7 +235,6 @@ public class UserBean implements UserBeanLocal {
throw new EJBAccessException("No permission to upload image as another user"); throw new EJBAccessException("No permission to upload image as another user");
} }
ByteArrayInputStream imagestream = new ByteArrayInputStream(image); ByteArrayInputStream imagestream = new ByteArrayInputStream(image);
BufferedImage bimage; BufferedImage bimage;
try { try {
...@@ -237,46 +242,41 @@ public class UserBean implements UserBeanLocal { ...@@ -237,46 +242,41 @@ public class UserBean implements UserBeanLocal {
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
int maxImageWidth = 1000; int maxImageWidth = 1000;
int maxImageHeight = 1000; int maxImageHeight = 1000;
if(bimage.getWidth() > maxImageWidth || bimage.getHeight() > maxImageHeight) { if (bimage.getWidth() > maxImageWidth || bimage.getHeight() > maxImageHeight) {
int w = bimage.getWidth(); int w = bimage.getWidth();
int h = bimage.getHeight(); int h = bimage.getHeight();
if(w > h) { if (w > h) {
h = (int) (((double) h/ (double) w)* (double) maxImageWidth); h = (int) (((double) h / (double) w) * (double) maxImageWidth);
w = maxImageWidth; w = maxImageWidth;
} else { } else {
w = (int) (((double) w/ (double) h)* (double) maxImageHeight); w = (int) (((double) w / (double) h) * (double) maxImageHeight);
h = maxImageHeight; h = maxImageHeight;
} }
logger.info("scaling image to {} x {}", w, h); logger.info("scaling image to {} x {}", w, h);
BufferedImage resized = new BufferedImage(w, h, bimage.getType()); BufferedImage resized = new BufferedImage(w, h, bimage.getType());
Graphics2D g = resized.createGraphics(); Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(bimage, 0, 0, w, h, 0, 0, bimage.getWidth(), bimage.getHeight(), null); g.drawImage(bimage, 0, 0, w, h, 0, 0, bimage.getWidth(), bimage.getHeight(), null);
g.dispose(); g.dispose();
bimage = resized; bimage = resized;
} }
ByteArrayOutputStream naamaout = new ByteArrayOutputStream(); ByteArrayOutputStream naamaout = new ByteArrayOutputStream();
try { try {
ImageIO.write(bimage, "png", naamaout); ImageIO.write(bimage, "png", naamaout);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
UserImage userimage = null; UserImage userimage = null;
userimage = new UserImage(user.getUser()); userimage = new UserImage(user.getUser());
...@@ -329,7 +329,7 @@ public class UserBean implements UserBeanLocal { ...@@ -329,7 +329,7 @@ public class UserBean implements UserBeanLocal {
user.setEvent(eventBean.getCurrentEvent()); user.setEvent(eventBean.getCurrentEvent());
// Tallennetaan olio kantaan... // Tallennetaan olio kantaan...
eventUserFacade.create(user); eventUserFacade.create(user);
em.flush(); em.flush();
} }
...@@ -577,12 +577,12 @@ public class UserBean implements UserBeanLocal { ...@@ -577,12 +577,12 @@ public class UserBean implements UserBeanLocal {
PrintedCard tmpCard = barcodeBean.getPrintedCard(barcode); PrintedCard tmpCard = barcodeBean.getPrintedCard(barcode);
EventUser user = null; EventUser user = null;
if(tmpCard == null) { if (tmpCard == null) {
user = barcodeBean.getUser(barcode); user = barcodeBean.getUser(barcode);
} else { } else {
user = tmpCard.getUser(); user = tmpCard.getUser();
} }
return user; return user;
} }
...@@ -627,4 +627,14 @@ public class UserBean implements UserBeanLocal { ...@@ -627,4 +627,14 @@ public class UserBean implements UserBeanLocal {
fb.setTimestamp(Calendar.getInstance()); fb.setTimestamp(Calendar.getInstance());
feedbackFacade.create(fb); feedbackFacade.create(fb);
} }
@Override
public UserApproval setUserApproval(EventUser user, String approvalName, boolean approvalValue, String notes) {
Approval approval = approvalFacade.findOrCreate(approvalName);
UserApproval ret = userApprovalFacade.findOrCreateApproval(user, approval);
ret.setApprovalValue(approvalValue);
ret.setNotes(notes);
return ret;
}
} }
\ No newline at end of file
package fi.codecrew.moya.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.Approval;
import fi.codecrew.moya.model.Approval_;
@Stateless
@LocalBean
public class ApprovalFacade extends IntegerPkGenericFacade<Approval> {
@EJB
private EventBeanLocal eventbean;
public ApprovalFacade() {
super(Approval.class);
}
public Approval findOrCreate(String approvalName) {
Approval ret = find(approvalName);
if (ret == null)
{
ret = new Approval();
ret.setEvent(eventbean.getCurrentEvent());
ret.setName(approvalName);
ret.setDescription("Automagically created");
create(ret);
}
return ret;
}
public Approval find(String approvalName)
{
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Approval> cq = cb.createQuery(Approval.class);
Root<Approval> root = cq.from(Approval.class);
cq.where(cb.equal(root.get(Approval_.event), eventbean.getCurrentEvent()),
cb.equal(root.get(Approval_.name), approvalName)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
}
package fi.codecrew.moya.facade;
import java.util.Date;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.codecrew.moya.model.Approval;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.UserApproval;
import fi.codecrew.moya.model.UserApproval_;
@Stateless
@LocalBean
public class UserApprovalFacade extends IntegerPkGenericFacade<UserApproval> {
public UserApprovalFacade() {
super(UserApproval.class);
}
public UserApproval findOrCreateApproval(EventUser user, Approval approval) {
UserApproval ret = findApproval(user, approval);
if (ret == null)
{
ret = new UserApproval();
ret.setUser(user);
ret.setApproval(approval);
ret.setApprovalTime(new Date());
create(ret);
}
return ret;
}
public UserApproval findApproval(EventUser user, Approval approval) {
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<UserApproval> cq = cb.createQuery(UserApproval.class);
Root<UserApproval> root = cq.from(UserApproval.class);
cq.where(cb.equal(root.get(UserApproval_.approval), approval),
cb.equal(root.get(UserApproval_.user), user)
);
return super.getSingleNullableResult(getEm().createQuery(cq));
}
}
...@@ -5,12 +5,13 @@ import java.util.List; ...@@ -5,12 +5,13 @@ import java.util.List;
import javax.ejb.Local; import javax.ejb.Local;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership; import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
import fi.codecrew.moya.model.UserApproval;
import fi.codecrew.moya.model.UserImage; import fi.codecrew.moya.model.UserImage;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.utilities.SearchQuery; import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchResult; import fi.codecrew.moya.utilities.SearchResult;
...@@ -83,4 +84,6 @@ public interface UserBeanLocal { ...@@ -83,4 +84,6 @@ public interface UserBeanLocal {
void submitFeedback(String feedback); void submitFeedback(String feedback);
UserApproval setUserApproval(EventUser user, String approvalName, boolean approvalValue, String notes);
} }
package fi.codecrew.moya.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "approvals", uniqueConstraints = @UniqueConstraint(columnNames = { Approval.EVENT_ID_COL, Approval.NAME_COL }))
public class Approval extends GenericEntity {
private static final long serialVersionUID = -8794234662985671285L;
protected static final String EVENT_ID_COL = "event_id";
protected static final String NAME_COL = "approval_name";
@Column(nullable = false, name = NAME_COL)
private String name;
@JoinColumn(nullable = false, name = EVENT_ID_COL)
private LanEvent event;
@Lob
private String description;
@Lob
private String notes;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public LanEvent getEvent() {
return event;
}
public void setEvent(LanEvent event) {
this.event = event;
}
}
...@@ -104,9 +104,6 @@ public class EventUser extends GenericEntity { ...@@ -104,9 +104,6 @@ public class EventUser extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
@Column(name = "createtime", nullable = false, updatable = false) @Column(name = "createtime", nullable = false, updatable = false)
private Date eventuserCreated; private Date eventuserCreated;
public EventUser getCreator() { public EventUser getCreator() {
return creator; return creator;
...@@ -393,10 +390,6 @@ public class EventUser extends GenericEntity { ...@@ -393,10 +390,6 @@ public class EventUser extends GenericEntity {
return user.checkPassword(plainPassword); return user.checkPassword(plainPassword);
} }
public void setSuperadmin(boolean superadmin) {
user.setSuperadmin(superadmin);
}
public boolean isSuperadmin() { public boolean isSuperadmin() {
return user.isSuperadmin(); return user.isSuperadmin();
} }
...@@ -446,5 +439,4 @@ public class EventUser extends GenericEntity { ...@@ -446,5 +439,4 @@ public class EventUser extends GenericEntity {
} }
} }
...@@ -92,8 +92,6 @@ public interface IUser { ...@@ -92,8 +92,6 @@ public interface IUser {
public abstract boolean checkPassword(String plainPassword); public abstract boolean checkPassword(String plainPassword);
public abstract void setSuperadmin(boolean superadmin);
public abstract boolean isSuperadmin(); public abstract boolean isSuperadmin();
public abstract void setPostalTown(String postalTown); public abstract void setPostalTown(String postalTown);
......
...@@ -3,9 +3,12 @@ package fi.codecrew.moya.model; ...@@ -3,9 +3,12 @@ package fi.codecrew.moya.model;
public enum LanEventPropertyKey { public enum LanEventPropertyKey {
EVENT_LOGO(Type.DATA, null), EVENT_LOGO(Type.DATA, null),
INVITEMAIL_SUBJECT(Type.TEXT, "Invitation to Moya Online Youth Accumulator"), INVITEMAIL_SUBJECT(Type.TEXT, "Invitation to Moya Online Youth Accumulator"),
INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to an event by {1}.\n\nYou can register to intranet at: {0}\n\nAfter registering to the intranet you can buy a ticket to Stream demoparty reduced price and invite your friends to join the party with you. More information can be found in the intranet. Remember also to visit our website at http://www.streamparty.org and join us at #streamparty in IRCNet. If you have any questions about this mail, registering to intranet, or anything else regarding Stream demoparty, please send us email to info@streamparty.org\n\n-- \nStream organizing\ninfo@streamparty.org"), INVITEMAIL_CONTENT(Type.TEXT, "You have been invited to an event by {1}.\n\nYou can register to intranet at: {0}."),
BILL_PAID_MAIL_SUBJECT(Type.TEXT, "[{0}] Lasku merkitty maksetuksi"),
BILL_PAID_MAIL_CONTENT(Type.TEXT, "Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirtyä lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan!"),
PORTAL_EMAIL_ADDRESS(Type.TEXT, "moya@codecrew.fi"), PORTAL_EMAIL_ADDRESS(Type.TEXT, "moya@codecrew.fi"),
PORTAL_EMAIL_NAME(Type.TEXT, "Moya Online Youth Accumulator"), PORTAL_EMAIL_NAME(Type.TEXT, "Moya Online Youth Accumulator"),
ADMIN_MAIL(Type.TEXT, "moya@codecrew.fi"), ADMIN_MAIL(Type.TEXT, "moya@codecrew.fi"),
EVENT_LAYOUT(Type.TEXT, "template1"), EVENT_LAYOUT(Type.TEXT, "template1"),
SHOP_DEFAULT_CASH(Type.BOOL, null), SHOP_DEFAULT_CASH(Type.BOOL, null),
......
...@@ -103,14 +103,14 @@ public class User extends GenericEntity implements IUser { ...@@ -103,14 +103,14 @@ public class User extends GenericEntity implements IUser {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar confirmTime; private Calendar confirmTime;
@Column(name = "superadmin") @Column(name = "superadmin", updatable = false)
private boolean superadmin = false; private boolean superadmin = false;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL) @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@OrderBy @OrderBy
@PrivateOwned @PrivateOwned
private List<UserImage> userImageList; private List<UserImage> userImageList;
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY) @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@OrderBy() @OrderBy()
private List<LicenseCode> licenseCodes; private List<LicenseCode> licenseCodes;
...@@ -310,11 +310,6 @@ public class User extends GenericEntity implements IUser { ...@@ -310,11 +310,6 @@ public class User extends GenericEntity implements IUser {
} }
@Override @Override
public void setSuperadmin(boolean superadmin) {
this.superadmin = superadmin;
}
@Override
public boolean isSuperadmin() { public boolean isSuperadmin() {
return superadmin; return superadmin;
} }
...@@ -359,12 +354,11 @@ public class User extends GenericEntity implements IUser { ...@@ -359,12 +354,11 @@ public class User extends GenericEntity implements IUser {
} }
return isAnon; return isAnon;
} }
public List<LicenseCode> getLicenseCodes() { public List<LicenseCode> getLicenseCodes() {
if(licenseCodes == null) if (licenseCodes == null)
licenseCodes = new ArrayList<LicenseCode>(); licenseCodes = new ArrayList<LicenseCode>();
return licenseCodes; return licenseCodes;
} }
......
package fi.codecrew.moya.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "user_approvals", uniqueConstraints = @UniqueConstraint(columnNames = { UserApproval.APPROVAL_ID_COL, UserApproval.USER_ID_COL }))
public class UserApproval extends GenericEntity {
private static final long serialVersionUID = -5275823003990286642L;
protected static final String USER_ID_COL = "user_id";
protected static final String APPROVAL_ID_COL = "approval_id";
@ManyToOne()
@JoinColumn(nullable = false, updatable = false, name = APPROVAL_ID_COL)
private Approval approval;
@ManyToOne()
@JoinColumn(nullable = false, updatable = false, name = USER_ID_COL)
private EventUser user;
@Column(nullable = false, updatable = false)
private boolean approvalValue = false;
@Column(nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date approvalTime = new Date();
@Column(nullable = false, updatable = false)
private String approvalText = "";
private String notes;
public Approval getApproval() {
return approval;
}
public void setApproval(Approval approval) {
this.approval = approval;
}
public boolean isApprovalValue() {
return approvalValue;
}
public void setApprovalValue(boolean approvalValue) {
this.approvalValue = approvalValue;
}
public Date getApprovalTime() {
return approvalTime;
}
public void setApprovalTime(Date approvalTime) {
this.approvalTime = approvalTime;
}
public EventUser getUser() {
return user;
}
public void setUser(EventUser user) {
this.user = user;
}
public String getApprovalText() {
return approvalText;
}
public void setApprovalText(String approvalText) {
this.approvalText = approvalText;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
}
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
<h:message for="propval" /> <h:message for="propval" />
</h:form> </h:form>
<h:form rendered="#{!empty eventPropertyView.property}" enctype="multipart/form-data"> <h:form rendered="#{!empty eventPropertyView.property}" enctype="#{eventPropertyView.property.key.data?'multipart/form-data':''}">
<h:panelGrid columns="3"> <h:panelGrid columns="3">
<h:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" /> <h:outputLabel for="key" value="#{i18n['lanEventProperty.key']}" />
<h:outputText value="#{eventPropertyView.property.key}" id="key" /> <h:outputText value="#{eventPropertyView.property.key}" id="key" />
......
<?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" 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"> <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:p="http://primefaces.org/ui">
<composite:interface> <composite:interface>
...@@ -78,14 +79,24 @@ ...@@ -78,14 +79,24 @@
</h:column> </h:column>
</h:dataTable> </h:dataTable>
<hr /> <hr />
<div> <div>
<h:outputText value="#{i18n['productshop.total']} " /> <h:outputText value="#{i18n['productshop.total']} " />
<h:outputText value="#{productShopView.cartPrice}"> <h:outputText value="#{productShopView.cartPrice}">
<f:convertNumber maxFractionDigits="2" minFractionDigits="2" /> <f:convertNumber maxFractionDigits="2" minFractionDigits="2" />
</h:outputText> </h:outputText>
</div> </div>
<h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" /> <h:panelGrid columns="3" >
<h:outputText for="allowStats" value="#{i18n['bill.allowStatistics']}" />
<h:selectBooleanCheckbox id="allowStats" value="#{productShopView.allowStatistics}" />
<h:message for="allowStats" />
</h:panelGrid>
<p:inputTextarea cols="50" rendered="#{productShopView.gatherBillInfo}" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}" />
<div> <h:commandButton action="#{cc.attrs.commitaction}" id="commitbutton-botton" value="#{cc.attrs.commitValue}" /></div>
</composite:implementation> </composite:implementation>
</html> </html>
......
...@@ -17,14 +17,8 @@ ...@@ -17,14 +17,8 @@
<ui:define name="content"> <ui:define name="content">
<h:form id="billshopform"> <h:form id="billshopform">
<products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" /> <products:shop commitaction="#{productShopView.commitBillCart()}" items="#{productShopView.shoppingcart}" commitValue="#{i18n['productshop.commit']}" />
<h:panelGrid columns="3" rendered="#{productShopView.checkAllowStats}">
<h:outputText for="allowStats" value="#{i18n['bill.allowStatistics']}" />
<h:selectBooleanCheckbox id="allowStats" value="#{productShopView.allowStatistics}" />
<h:message for="allowStats" />
</h:panelGrid>
<p:inputTextarea rendered="#{productShopView.gatherBillInfo}" value="#{productShopView.otherInfo}" label="#{i18n['otherInfo']}"/>
</h:form> </h:form>
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -18,6 +18,8 @@ accountEvent.seller = Myyj\u00E4 ...@@ -18,6 +18,8 @@ accountEvent.seller = Myyj\u00E4
accountEvent.total = Yhteens\u00E4 accountEvent.total = Yhteens\u00E4
accountEvent.unitPrice = Yksikk\u00F6hinta accountEvent.unitPrice = Yksikk\u00F6hinta
bill.allowStatistics = Tietoni saa julkaista tilastoissa
actionlog.create.header = Luo uusi ActionMessage actionlog.create.header = Luo uusi ActionMessage
actionlog.create.message = Viesti actionlog.create.message = Viesti
actionlog.create.role = Kohderooli actionlog.create.role = Kohderooli
...@@ -59,7 +61,7 @@ bill.address = Maksajan osoite ...@@ -59,7 +61,7 @@ bill.address = Maksajan osoite
bill.billAmount = Laskun summa bill.billAmount = Laskun summa
bill.billIsPaid = Lasku on maksettu bill.billIsPaid = Lasku on maksettu
bill.billLines = Tuotteet bill.billLines = Tuotteet
bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan! bill.billMarkedPaidMail.message = Laskusi numero {0} on merkitty maksetuksi. Voit nyt siirty\u00E4 lippukauppaan varamaan haluamasi paikat. Tervetuloa tapahtumaan\!
bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi bill.billMarkedPaidMail.subject = Lasku merkitty maksetuksi
bill.billNumber = Numero bill.billNumber = Numero
bill.billPaidDate = Maksup\u00E4iv\u00E4 bill.billPaidDate = Maksup\u00E4iv\u00E4
...@@ -128,10 +130,10 @@ cart.total = Yhteens\u00E4 ...@@ -128,10 +130,10 @@ cart.total = Yhteens\u00E4
checkout.cancel.errorMessage = Virhe peruutuksen vahvistuksessa\u2026 Ilmoita t\u00E4st\u00E4 osoitteeseen code@codecrew.fi checkout.cancel.errorMessage = Virhe peruutuksen vahvistuksessa\u2026 Ilmoita t\u00E4st\u00E4 osoitteeseen code@codecrew.fi
checkout.cancel.successMessage = Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi. checkout.cancel.successMessage = Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.reject.errorMessage = Virhe hyl\u00E4tyn maksun k\u00E4sittelyss\u00E4. Raportoi t\u00E4m\u00E4 virhe osoitteeseen: code@codecrew.fi checkout.reject.errorMessage = Virhe hyl\u00E4tyn maksun k\u00E4sittelyss\u00E4. Raportoi t\u00E4m\u00E4 virhe osoitteeseen\: code@codecrew.fi
checkout.reject.successMessage = Maksu hyl\u00E4tty. Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi. checkout.reject.successMessage = Maksu hyl\u00E4tty. Voit yritt\u00E4\u00E4 maksua uudelleen omista laskuistasi.
checkout.return.errorDelayed = Virhe viiv\u00E4stetyn maksun vahvistuksessa. Ota yhteytt\u00E4 code@codecrew.fi checkout.return.errorDelayed = Virhe viiv\u00E4stetyn maksun vahvistuksessa. Ota yhteytt\u00E4 code@codecrew.fi
checkout.return.errorMessage = Virhe maksun onnistuneen maksun vahvistuksessa. Raportoi t\u00E4m\u00E4 virhe yll\u00E4pidolle: code@codecrew.fi checkout.return.errorMessage = Virhe maksun onnistuneen maksun vahvistuksessa. Raportoi t\u00E4m\u00E4 virhe yll\u00E4pidolle\: code@codecrew.fi
checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvistet\u00E4\u00E4n my\u00F6hemp\u00E4n\u00E4 ajankohtana, yleens\u00E4 noin tunnin sis\u00E4ll\u00E4. checkout.return.successDelayed = Viiv\u00E4stetty maksu onnistunut. Maksu vahvistet\u00E4\u00E4n my\u00F6hemp\u00E4n\u00E4 ajankohtana, yleens\u00E4 noin tunnin sis\u00E4ll\u00E4.
checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu. Voit siirty\u00E4 eteenp\u00E4in tilauksessasi. checkout.return.successMessage = Maksu vahvistettu. Tuotteet on maksettu. Voit siirty\u00E4 eteenp\u00E4in tilauksessasi.
...@@ -167,7 +169,7 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot ...@@ -167,7 +169,7 @@ editplacegroup.header = Paikkaryhm\u00E4n tiedot
entry.edit = Muokkaa entry.edit = Muokkaa
error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon: error.contact = Jos t\u00E4m\u00E4 toistuu, ota seuraava koodi talteen ja ota yhteys Infoon\:
error.error = Olet kohdannut virheen. error.error = Olet kohdannut virheen.
event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli event.defaultRole = K\u00E4ytt\u00E4jien oletusrooli
...@@ -182,7 +184,7 @@ event.startTime = Aloitusp\u00E4iv\u00E4 ...@@ -182,7 +184,7 @@ event.startTime = Aloitusp\u00E4iv\u00E4
eventdomain.domainname = Domain eventdomain.domainname = Domain
eventdomain.remove = Poista eventdomain.remove = Poista
eventmap.active = Aktiivinen\u0009 eventmap.active = Aktiivinen\t
eventmap.buyable.like = Paikat eventmap.buyable.like = Paikat
eventmap.buyable.lock = Lukitse paikat eventmap.buyable.lock = Lukitse paikat
eventmap.buyable.release = Vapauta paikat eventmap.buyable.release = Vapauta paikat
...@@ -303,7 +305,7 @@ generic.sure.yes = Kyll\u00E4 ...@@ -303,7 +305,7 @@ generic.sure.yes = Kyll\u00E4
global.cancel = Peruuta global.cancel = Peruuta
global.copyright = Codecrew Ry global.copyright = Codecrew Ry
global.eventname = Tapahtumanimi global.eventname = Tapahtumanimi
global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4! global.notAuthorizedExecute = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia suorittaa t\u00E4t\u00E4 toimenpidett\u00E4\!
global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle. global.notauthorized = Sinulla ei ole riitt\u00E4vi\u00E4 oikeuksia t\u00E4lle sivulle.
global.save = Tallenna global.save = Tallenna
...@@ -446,7 +448,7 @@ page.bill.placemap.header = Paikkakartta ...@@ -446,7 +448,7 @@ page.bill.placemap.header = Paikkakartta
page.bill.show.header = Laskun tiedot page.bill.show.header = Laskun tiedot
page.checkout.cancel.header = Maksu peruutettu. page.checkout.cancel.header = Maksu peruutettu.
page.checkout.delayed.header = Viiv\u00E4stetty maksu page.checkout.delayed.header = Viiv\u00E4stetty maksu
page.checkout.reject.header = Maksu hyl\u00E4tty! page.checkout.reject.header = Maksu hyl\u00E4tty\!
page.checkout.return.header = Maksu vahvistettu page.checkout.return.header = Maksu vahvistettu
page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi page.place.insertToken.header = Sy\u00F6t\u00E4 paikkakoodi
page.place.mygroups.header = Paikkaryhm\u00E4t page.place.mygroups.header = Paikkaryhm\u00E4t
...@@ -475,7 +477,7 @@ passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et o ...@@ -475,7 +477,7 @@ passwordreset.mailBody = Voit vaihtaa salasanasi osoitteessa {0}\n\nJos et o
passwordreset.mailSubject = [{0}] Salasanan vaihtaminen passwordreset.mailSubject = [{0}] Salasanan vaihtaminen
passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4. passwordreset.usernotfound = Annettua k\u00E4ytt\u00E4j\u00E4tunnusta ei l\u00F6ydy. Huomioi ett\u00E4 isot ja pienet kirjaimet ovat merkitsevi\u00E4.
permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia! permissiondenied.alreadyLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia\!
permissiondenied.header = P\u00E4\u00E4sy kielletty permissiondenied.header = P\u00E4\u00E4sy kielletty
permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle. permissiondenied.notLoggedIn = Sinulla ei ole riitt\u00E4v\u00E4sti oikeuksia t\u00E4lle sivulle.
...@@ -523,7 +525,7 @@ placegroup.printPdf = Tulosta paikkakoodit ...@@ -523,7 +525,7 @@ placegroup.printPdf = Tulosta paikkakoodit
placegroupview.groupCreator = Varaaja placegroupview.groupCreator = Varaaja
placegroupview.header = Omat paikat placegroupview.header = Omat paikat
placegroupview.noMemberships = Ei omia paikkoja placegroupview.noMemberships = Ei omia paikkoja
placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui! placegroupview.placeReleaseFailed = Paikan vapauttaminen ep\u00E4onnistui\!
placegroupview.placeReleased = Paikka {0} vapautettu placegroupview.placeReleased = Paikka {0} vapautettu
placegroupview.releasePlace = Vapauta placegroupview.releasePlace = Vapauta
placegroupview.reservationName = Paikka placegroupview.reservationName = Paikka
...@@ -534,7 +536,7 @@ placetoken.commit = Liit\u00E4 ...@@ -534,7 +536,7 @@ placetoken.commit = Liit\u00E4
placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi placetoken.pageHeader = Lis\u00E4\u00E4 konepaikkakoodi
placetoken.placelist = Omat paikat placetoken.placelist = Omat paikat
placetoken.token = Paikkakoodi placetoken.token = Paikkakoodi
placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt! Tarkista koodi. placetoken.tokenNotFound = Paikkakoodia ei l\u00F6ytynyt\! Tarkista koodi.
placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n. placetoken.topText = Voit yhdist\u00E4\u00E4 paikan omaan k\u00E4ytt\u00E4j\u00E4tunnukseesi sy\u00F6tt\u00E4m\u00E4ll\u00E4 paikkakoodin allaolevaan kentt\u00E4\u00E4n.
poll.answer = Vastaa kyselyyn poll.answer = Vastaa kyselyyn
...@@ -761,7 +763,7 @@ svm.failure.errorMessage = Verkkomaksuvirhe. ...@@ -761,7 +763,7 @@ svm.failure.errorMessage = Verkkomaksuvirhe.
svm.failure.successMessage = Maksuvirhe onnistunut. ( Maksu mahdollisesti merkitty jo maksetuksi ) svm.failure.successMessage = Maksuvirhe onnistunut. ( Maksu mahdollisesti merkitty jo maksetuksi )
svm.pending.errorMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse. svm.pending.errorMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.pending.successMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse. svm.pending.successMessage = Maksukuittausta odotetaan. Kuittauksesta l\u00E4hetet\u00E4\u00E4n ilmoitus s\u00E4hk\u00F6postitse.
svm.success.errorMessage = Verkkomaksua ei voitu verifioida! Virheest\u00E4 on raportoitu eteenp\u00E4in. svm.success.errorMessage = Verkkomaksua ei voitu verifioida\! Virheest\u00E4 on raportoitu eteenp\u00E4in.
svm.success.successMessage = Verkkomaksu onnistui. svm.success.successMessage = Verkkomaksu onnistui.
template.loggedInAs = Kirjautunut tunnuksella template.loggedInAs = Kirjautunut tunnuksella
...@@ -891,10 +893,10 @@ usertitle.managingUser = Kauppa ...@@ -891,10 +893,10 @@ usertitle.managingUser = Kauppa
userview.invalidEmail = Virheeliinen s\u00E4hk\u00F6postiosoite userview.invalidEmail = Virheeliinen s\u00E4hk\u00F6postiosoite
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.oldPasswordError = V\u00E4\u00E4r\u00E4 salasana! userview.oldPasswordError = V\u00E4\u00E4r\u00E4 salasana\!
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.
userview.passwordsChanged = Salasana vaihdettu userview.passwordsChanged = Salasana vaihdettu
userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen. userview.passwordsDontMatch = Salasanat eiv\u00E4t ole samat\! Ole hyv\u00E4 ja sy\u00F6t\u00E4 salasanat uudelleen.
userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4. userview.userExists = K\u00E4ytt\u00E4j\u00E4tunnus on jo olemassa. Sinulla saattaa jo olla tunnus j\u00E4rjestelm\u00E4ss\u00E4.
viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen. viewexpired.body = Ole hyv\u00E4 ja kirjaudu sis\u00E4\u00E4n uudelleen.
......
...@@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory; ...@@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.beans.BillBeanLocal; import fi.codecrew.moya.beans.BillBeanLocal;
import fi.codecrew.moya.beans.EventBeanLocal; import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.beans.ProductBeanLocal; import fi.codecrew.moya.beans.ProductBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.ShopPermission; import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.model.Bill; import fi.codecrew.moya.model.Bill;
import fi.codecrew.moya.model.EventUser; import fi.codecrew.moya.model.EventUser;
...@@ -46,6 +47,8 @@ public class ProductShopView extends GenericCDIView { ...@@ -46,6 +47,8 @@ public class ProductShopView extends GenericCDIView {
@EJB @EJB
private transient BillBeanLocal billbean; private transient BillBeanLocal billbean;
@EJB
private transient UserBeanLocal userbean;
@EJB @EJB
private transient EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
...@@ -273,6 +276,7 @@ public class ProductShopView extends GenericCDIView { ...@@ -273,6 +276,7 @@ public class ProductShopView extends GenericCDIView {
} }
Bill bill = new Bill(eventbean.getCurrentEvent(), user); Bill bill = new Bill(eventbean.getCurrentEvent(), user);
bill.setNotes(otherInfo);
bill.setOurReference(eventbean.getCurrentEvent().getName()); bill.setOurReference(eventbean.getCurrentEvent().getName());
for (ProductShopItem shopitem : shoppingcart) { for (ProductShopItem shopitem : shoppingcart) {
...@@ -281,6 +285,10 @@ public class ProductShopView extends GenericCDIView { ...@@ -281,6 +285,10 @@ public class ProductShopView extends GenericCDIView {
} }
} }
billbean.createBill(bill); billbean.createBill(bill);
if (isCheckAllowStats())
{
userbean.setUserApproval(bill.getUser(), "bill_allow_stats", allowStatistics, "Automagically created");
}
addFaceMessage("productshop.billCreated"); addFaceMessage("productshop.billCreated");
cash = BigDecimal.ZERO; cash = BigDecimal.ZERO;
shoppingcart = null; shoppingcart = null;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!