Commit 1a4f03e3 by Tuomas Riihimäki

Added user export and initial accountevent moving

1 parent fe44ba6d
......@@ -30,7 +30,7 @@ public class ProductPBean {
@EJB
private PermissionBean permbean;
@EJB
private DiscountBean discountBean;
@EJB
......@@ -100,10 +100,8 @@ public class ProductPBean {
// discountinstancefacade.create(discInst);
accEventdiscounts.add(new DiscountInstance(ret, d));
}
if (user.getAccountEvents() == null) {
user.setAccountEvents(new ArrayList<AccountEvent>());
}
user.getAccountEvents().add(ret);
user.addAccountevent(ret);
accounteventfacade.create(ret);
logger.debug("create ac {} for user {}", ret, user.getUser());
// flush changes to db.
......
......@@ -7,6 +7,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Calendar;
......@@ -31,6 +32,7 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.enums.apps.SpecialPermission;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.facade.AccountEventFacade;
import fi.codecrew.moya.facade.ApprovalFacade;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.FeedbackFacade;
......@@ -41,6 +43,7 @@ import fi.codecrew.moya.facade.RoleFacade;
import fi.codecrew.moya.facade.UserApprovalFacade;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.facade.UserImageFacade;
import fi.codecrew.moya.model.AccountEvent;
import fi.codecrew.moya.model.Approval;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.Feedback;
......@@ -51,6 +54,7 @@ import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.LanEventPropertyKey;
import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.TournamentGame;
import fi.codecrew.moya.model.User;
......@@ -129,6 +133,10 @@ public class UserBean implements UserBeanLocal {
private GameIDFacade gameIDFacade;
@EJB
private ProductBeanLocal productbean;
@EJB
private ProductPBean productPrivateBean;
@EJB
private AccountEventFacade accountEventFacade;
@Override
@RolesAllowed(UserPermission.S_VIEW_ALL)
......@@ -791,4 +799,57 @@ public class UserBean implements UserBeanLocal {
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 @@
<h:commandButton value="#{i18n['usercart.downloadCsv']}">
<p:fileDownload value="#{userCartView.downloadCsv}" />
</h:commandButton>
<h:commandButton value="#{i18n['usercart.downloadExport']}">
<p:fileDownload value="#{userCartView.userExport}" />
</h:commandButton>
<h:commandButton action="#{userCartView.showOverview}" value="#{i18n['usercart.showoverview']}" />
</div>
</h:panelGroup>
......
......@@ -54,8 +54,6 @@ public class ProductShopView extends GenericCDIView {
@EJB
private transient EventBeanLocal eventbean;
public void cashChanged()
{
payInstant = false;
......@@ -81,10 +79,10 @@ public class ProductShopView extends GenericCDIView {
@Inject
private BillEditView billEditView;
@Inject
private ProductShopItemHelper psiHelper;
public ProductShopItemHelper getPsiHelper() {
return psiHelper;
}
......@@ -166,7 +164,7 @@ public class ProductShopView extends GenericCDIView {
public String add(Integer count) {
ProductShopItem item = shoppingcart.getRowData();
psiHelper.setProductShopItemCount(item, item.getCount().add(BigDecimal.valueOf(count)));
updateCartLimits(item);
......@@ -223,15 +221,15 @@ public class ProductShopView extends GenericCDIView {
if (l != null) {
hasLimits = true;
}
psiHelper.updateProductShopItemLimit(n,l);
psiHelper.updateProductShopItemLimit(n, l);
}
}
public String removeBought() {
ProductShopItem row = boughtItems.getRowData();
psiHelper.setProductShopItemCount(row, row.getCount().subtract(BigDecimal.ONE));
updateCartLimits(row);
return null;
......@@ -428,8 +426,8 @@ public class ProductShopView extends GenericCDIView {
public String readCode() {
ReaderEvent event = readerView.getReaderEvent();
if(event == null) {
if (event == null) {
return null;
}
......
......@@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
......@@ -41,6 +42,23 @@ public class UserCartView extends GenericCDIView {
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() {
StringBuilder sb = new StringBuilder();
......@@ -56,7 +74,7 @@ public class UserCartView extends GenericCDIView {
sb.append("Zip").append(CSV_SEPARATOR);
sb.append("City").append(CSV_SEPARATOR);
sb.append("Places").append(CSV_SEPARATOR);
sb.append("\n");
for (EventUser uc : usercart)
{
......
......@@ -39,7 +39,6 @@ import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.model.UserImage;
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.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
......@@ -277,7 +276,8 @@ public class UserView extends GenericCDIView {
canSave = getCurrentUser().equals(user) || permbean.hasPermission(UserPermission.MODIFY);
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 {
public String attachCodeToCard() {
return attachCodeToCard(readerView.getReaderEvent());
}
public String attachCodeToCard(ReaderEvent event ) {
if(event == null)
public String attachCodeToCard(ReaderEvent event) {
if (event == null)
return null;
// already attached
if (event.getPrintedCard() != null) {
super.addFaceMessage("usercard.alreadyassociated");
return null;
}
// still there, we can get real card and update it's barcodes
PrintedCard card = cardBean.checkPrintedCard(user);
readerbean.assocCodeToCard(event , card);
readerbean.assocCodeToCard(event, card);
return null;
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!