Commit 1a4f03e3 by Tuomas Riihimäki

Added user export and initial accountevent moving

1 parent fe44ba6d
...@@ -30,7 +30,7 @@ public class ProductPBean { ...@@ -30,7 +30,7 @@ public class ProductPBean {
@EJB @EJB
private PermissionBean permbean; private PermissionBean permbean;
@EJB @EJB
private DiscountBean discountBean; private DiscountBean discountBean;
@EJB @EJB
...@@ -100,10 +100,8 @@ public class ProductPBean { ...@@ -100,10 +100,8 @@ public class ProductPBean {
// discountinstancefacade.create(discInst); // discountinstancefacade.create(discInst);
accEventdiscounts.add(new DiscountInstance(ret, d)); accEventdiscounts.add(new DiscountInstance(ret, d));
} }
if (user.getAccountEvents() == null) {
user.setAccountEvents(new ArrayList<AccountEvent>()); user.addAccountevent(ret);
}
user.getAccountEvents().add(ret);
accounteventfacade.create(ret); accounteventfacade.create(ret);
logger.debug("create ac {} for user {}", ret, user.getUser()); logger.debug("create ac {} for user {}", ret, user.getUser());
// flush changes to db. // flush changes to db.
......
...@@ -7,6 +7,7 @@ import java.io.ByteArrayInputStream; ...@@ -7,6 +7,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
...@@ -31,6 +32,7 @@ import org.slf4j.LoggerFactory; ...@@ -31,6 +32,7 @@ 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.AccountEventFacade;
import fi.codecrew.moya.facade.ApprovalFacade; 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;
...@@ -41,6 +43,7 @@ import fi.codecrew.moya.facade.RoleFacade; ...@@ -41,6 +43,7 @@ import fi.codecrew.moya.facade.RoleFacade;
import fi.codecrew.moya.facade.UserApprovalFacade; 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.AccountEvent;
import fi.codecrew.moya.model.Approval; 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;
...@@ -51,6 +54,7 @@ import fi.codecrew.moya.model.LanEvent; ...@@ -51,6 +54,7 @@ import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEventPropertyKey; import fi.codecrew.moya.model.LanEventPropertyKey;
import fi.codecrew.moya.model.PlaceGroup; import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.model.PrintedCard; import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.Role; import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.TournamentGame; import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
...@@ -129,6 +133,10 @@ public class UserBean implements UserBeanLocal { ...@@ -129,6 +133,10 @@ public class UserBean implements UserBeanLocal {
private GameIDFacade gameIDFacade; private GameIDFacade gameIDFacade;
@EJB @EJB
private ProductBeanLocal productbean; private ProductBeanLocal productbean;
@EJB
private ProductPBean productPrivateBean;
@EJB
private AccountEventFacade accountEventFacade;
@Override @Override
@RolesAllowed(UserPermission.S_VIEW_ALL) @RolesAllowed(UserPermission.S_VIEW_ALL)
...@@ -791,4 +799,57 @@ public class UserBean implements UserBeanLocal { ...@@ -791,4 +799,57 @@ public class UserBean implements UserBeanLocal {
return ret; return ret;
} }
/**
* Transfers account saldo from previous event. Creates negative
* accountevent for source user and positive for dst user. There are few
* requirements.
* <ul>
* <li>User must be the same.
* <li>Organisation must be the same.
* </ul>
*
* @param source
* @param dst
* @return Saldo transferred. Zero if no transfer was made, Null if there
* was error..
*/
public BigDecimal transferAccountSaldoFromPreviousEvent(EventUser source, EventUser dst)
{
if (source == null || dst == null)
return null;
source = eventUserFacade.reload(source);
dst = eventUserFacade.reload(dst);
if (!source.getEvent().getOrganiser().equals(dst.getEvent().getOrganiser())) {
logger.warn("Can not transfer funds between organisations!");
return null;
}
if (!source.getUser().equals(dst.getUser())) {
logger.warn("Can not transfer accountenvets! Users should be the same!!! Source {}, dst {}", source.getUser(), dst.getUser());
return null;
}
Calendar time = Calendar.getInstance();
EventUser seller = permbean.getCurrentUser();
Product credprod = productbean.findCreditProduct();
BigDecimal price = credprod.getPrice().negate();
BigDecimal srcBalance = source.getAccountBalance();
// This should always
BigDecimal count = srcBalance.divide(price);
AccountEvent srcacc = new AccountEvent(source, credprod, price, count.negate(), time);
srcacc.setDescription("Credits transferred to: '" + dst.getEvent().getName() + "'");
srcacc.setSeller(seller);
source.addAccountevent(srcacc);
accountEventFacade.create(srcacc);
AccountEvent dstacc = new AccountEvent(source, credprod, price, count, time);
dstacc.setDescription("Credits transferred from: '" + source.getEvent().getName() + "'");
dstacc.setSeller(seller);
dst.addAccountevent(dstacc);
accountEventFacade.create(dstacc);
return srcBalance;
}
} }
\ No newline at end of file
...@@ -62,6 +62,9 @@ ...@@ -62,6 +62,9 @@
<h:commandButton value="#{i18n['usercart.downloadCsv']}"> <h:commandButton value="#{i18n['usercart.downloadCsv']}">
<p:fileDownload value="#{userCartView.downloadCsv}" /> <p:fileDownload value="#{userCartView.downloadCsv}" />
</h:commandButton> </h:commandButton>
<h:commandButton value="#{i18n['usercart.downloadExport']}">
<p:fileDownload value="#{userCartView.userExport}" />
</h:commandButton>
<h:commandButton action="#{userCartView.showOverview}" value="#{i18n['usercart.showoverview']}" /> <h:commandButton action="#{userCartView.showOverview}" value="#{i18n['usercart.showoverview']}" />
</div> </div>
</h:panelGroup> </h:panelGroup>
......
...@@ -54,8 +54,6 @@ public class ProductShopView extends GenericCDIView { ...@@ -54,8 +54,6 @@ public class ProductShopView extends GenericCDIView {
@EJB @EJB
private transient EventBeanLocal eventbean; private transient EventBeanLocal eventbean;
public void cashChanged() public void cashChanged()
{ {
payInstant = false; payInstant = false;
...@@ -81,10 +79,10 @@ public class ProductShopView extends GenericCDIView { ...@@ -81,10 +79,10 @@ public class ProductShopView extends GenericCDIView {
@Inject @Inject
private BillEditView billEditView; private BillEditView billEditView;
@Inject @Inject
private ProductShopItemHelper psiHelper; private ProductShopItemHelper psiHelper;
public ProductShopItemHelper getPsiHelper() { public ProductShopItemHelper getPsiHelper() {
return psiHelper; return psiHelper;
} }
...@@ -166,7 +164,7 @@ public class ProductShopView extends GenericCDIView { ...@@ -166,7 +164,7 @@ public class ProductShopView extends GenericCDIView {
public String add(Integer count) { public String add(Integer count) {
ProductShopItem item = shoppingcart.getRowData(); ProductShopItem item = shoppingcart.getRowData();
psiHelper.setProductShopItemCount(item, item.getCount().add(BigDecimal.valueOf(count))); psiHelper.setProductShopItemCount(item, item.getCount().add(BigDecimal.valueOf(count)));
updateCartLimits(item); updateCartLimits(item);
...@@ -223,15 +221,15 @@ public class ProductShopView extends GenericCDIView { ...@@ -223,15 +221,15 @@ public class ProductShopView extends GenericCDIView {
if (l != null) { if (l != null) {
hasLimits = true; hasLimits = true;
} }
psiHelper.updateProductShopItemLimit(n,l); psiHelper.updateProductShopItemLimit(n, l);
} }
} }
public String removeBought() { public String removeBought() {
ProductShopItem row = boughtItems.getRowData(); ProductShopItem row = boughtItems.getRowData();
psiHelper.setProductShopItemCount(row, row.getCount().subtract(BigDecimal.ONE)); psiHelper.setProductShopItemCount(row, row.getCount().subtract(BigDecimal.ONE));
updateCartLimits(row); updateCartLimits(row);
return null; return null;
...@@ -428,8 +426,8 @@ public class ProductShopView extends GenericCDIView { ...@@ -428,8 +426,8 @@ public class ProductShopView extends GenericCDIView {
public String readCode() { public String readCode() {
ReaderEvent event = readerView.getReaderEvent(); ReaderEvent event = readerView.getReaderEvent();
if(event == null) { if (event == null) {
return null; return null;
} }
......
...@@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory; ...@@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
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.LanEvent;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named @Named
...@@ -41,6 +42,23 @@ public class UserCartView extends GenericCDIView { ...@@ -41,6 +42,23 @@ public class UserCartView extends GenericCDIView {
private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
public StreamedContent getUserExport()
{
StringBuilder sb = new StringBuilder();
DefaultStreamedContent ret = null;
if (usercart.size() > 0) {
LanEvent event = usercart.get(0).getEvent();
for (EventUser uc : usercart) {
sb.append(uc.getUser().getId()).append(";");
}
ret = new DefaultStreamedContent(new ByteArrayInputStream(sb.toString().getBytes(UTF8)));
ret.setContentType("text/csv");
ret.setName(event.getName() + "userexport.dat");
}
return ret;
}
public StreamedContent getDownloadCsv() { public StreamedContent getDownloadCsv() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
...@@ -56,7 +74,7 @@ public class UserCartView extends GenericCDIView { ...@@ -56,7 +74,7 @@ public class UserCartView extends GenericCDIView {
sb.append("Zip").append(CSV_SEPARATOR); sb.append("Zip").append(CSV_SEPARATOR);
sb.append("City").append(CSV_SEPARATOR); sb.append("City").append(CSV_SEPARATOR);
sb.append("Places").append(CSV_SEPARATOR); sb.append("Places").append(CSV_SEPARATOR);
sb.append("\n"); sb.append("\n");
for (EventUser uc : usercart) for (EventUser uc : usercart)
{ {
......
...@@ -39,7 +39,6 @@ import fi.codecrew.moya.model.Role; ...@@ -39,7 +39,6 @@ import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User; import fi.codecrew.moya.model.User;
import fi.codecrew.moya.model.UserImage; import fi.codecrew.moya.model.UserImage;
import fi.codecrew.moya.util.MassPrintResult; import fi.codecrew.moya.util.MassPrintResult;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.annotations.LoggedIn; import fi.codecrew.moya.web.annotations.LoggedIn;
import fi.codecrew.moya.web.annotations.SelectedUser; import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView; import fi.codecrew.moya.web.cdiview.GenericCDIView;
...@@ -277,7 +276,8 @@ public class UserView extends GenericCDIView { ...@@ -277,7 +276,8 @@ public class UserView extends GenericCDIView {
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY); canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
this.beginConversation(); this.beginConversation();
logger.debug("Accountevents for user {}", user.getAccountEvents().size()); if (user.getAccountEvents() != null)
logger.debug("Accountevents for user {}", user.getAccountEvents().size());
} }
...@@ -351,23 +351,22 @@ public class UserView extends GenericCDIView { ...@@ -351,23 +351,22 @@ public class UserView extends GenericCDIView {
public String attachCodeToCard() { public String attachCodeToCard() {
return attachCodeToCard(readerView.getReaderEvent()); return attachCodeToCard(readerView.getReaderEvent());
} }
public String attachCodeToCard(ReaderEvent event ) {
public String attachCodeToCard(ReaderEvent event) {
if(event == null)
if (event == null)
return null; return null;
// already attached // already attached
if (event.getPrintedCard() != null) { if (event.getPrintedCard() != null) {
super.addFaceMessage("usercard.alreadyassociated"); super.addFaceMessage("usercard.alreadyassociated");
return null; return null;
} }
// still there, we can get real card and update it's barcodes // still there, we can get real card and update it's barcodes
PrintedCard card = cardBean.checkPrintedCard(user); PrintedCard card = cardBean.checkPrintedCard(user);
readerbean.assocCodeToCard(event , card); readerbean.assocCodeToCard(event, card);
return null; return null;
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!