Commit f2a619e2 by Antti Tönkyrä

Mass print stuff

1 parent d2632cb9
......@@ -23,6 +23,7 @@ import fi.insomnia.bortal.facade.EventUserFacade;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.util.MassPrintResult;
import fi.insomnia.bortal.utilities.BarcodeUtils;
/**
......@@ -45,27 +46,33 @@ public class CardPrintBean implements CardPrintBeanLocal {
//TODO: Roles?
public byte[] getUserCardsAsPrintablePdf(List<Integer> userIdList) throws Exception {
public MassPrintResult getUserCardsAsPrintablePdf(List<Integer> userIdList) throws Exception {
ArrayList<EventUser> listOfEventUsers = new ArrayList<EventUser>();
for(Integer userId : userIdList) {
listOfEventUsers.add(eventUserFacade.find(userId));
}
byte[] pdfData = constructPdf(listOfEventUsers);
return pdfData;
return constructPdf(listOfEventUsers);
}
public byte[] getUserCardAsPrintablePdf(Integer userId) throws Exception {
public MassPrintResult getUserCardAsPrintablePdf(Integer userId) throws Exception {
ArrayList<EventUser> listOfEventUsers = new ArrayList<EventUser>();
listOfEventUsers.add(eventUserFacade.find(userId));
byte[] pdfData = constructPdf(listOfEventUsers);
return pdfData;
return constructPdf(listOfEventUsers);
}
private byte[] constructPdf(List<EventUser> users) throws Exception {
public void acceptMassPrintResult(MassPrintResult mpr) {
for(EventUser eu : mpr.getAffectedUsers()) {
PrintedCard printedCard = cardTemplateBean.checkPrintedCard(eu);
printedCard.setPrintCount(printedCard.getPrintCount()+1);
System.out.println("Print count "+printedCard.getPrintCount());
}
}
private MassPrintResult constructPdf(List<EventUser> users) throws Exception {
// double[] pageSize = new double[] { cardBackground.getWidth(),
// cardBackground.getHeight() };
......@@ -78,13 +85,14 @@ public class CardPrintBean implements CardPrintBeanLocal {
double pagex = 155.52; // 54,0 mm
double pagey = 243.84; // 85,5 mm
int numCards = 0;
MassPrintResult mpr = new MassPrintResult();
for(EventUser user : users) {
PrintedCard printedCard = cardTemplateBean.checkPrintedCard(user);
if(printedCard == null) continue;
else numCards++;
if(printedCard == null)
continue;
CardTemplate cardTemplate = printedCard.getTemplate();
......@@ -154,14 +162,15 @@ public class CardPrintBean implements CardPrintBeanLocal {
barCodeImage.setPosition(0.0, 243.5);
barCodeImage.scaleBy(0.7);
barCodeImage.drawOn(page);
mpr.getAffectedUsers().add(user);
}
pdf.flush();
outputStream.close();
if(numCards == 0) throw new Exception("No cards generated");
return outputStream.toByteArray();
if(mpr.getAffectedUsers().size() == 0) throw new Exception("No cards generated");
mpr.setPdf(outputStream.toByteArray());
return mpr;
}
private ByteArrayInputStream convertBufferedImageToPng(BufferedImage img)
......
......@@ -4,8 +4,11 @@ import java.util.List;
import javax.ejb.Local;
import fi.insomnia.bortal.util.MassPrintResult;
@Local
public interface CardPrintBeanLocal {
public byte[] getUserCardsAsPrintablePdf(List<Integer> userIdList) throws Exception;
public byte[] getUserCardAsPrintablePdf(Integer userId) throws Exception;
public MassPrintResult getUserCardsAsPrintablePdf(List<Integer> userIdList) throws Exception;
public MassPrintResult getUserCardAsPrintablePdf(Integer userId) throws Exception;
public void acceptMassPrintResult(MassPrintResult mpr);
}
......@@ -123,6 +123,15 @@
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>card/massprint</display-name>
<from-view-id>/card/massprint.xhtml</from-view-id>
<navigation-case>
<from-outcome>accepted</from-outcome>
<to-view-id>/useradmin/list.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
<navigation-rule>
<display-name>voting/create</display-name>
<from-view-id>/voting/create.xhtml</from-view-id>
<navigation-case>
......
......@@ -14,10 +14,12 @@
<h1>#{i18n['card.massprint.title']}</h1>
</ui:define>
<ui:define name="content">
<h:form>
<p:commandButton rendered="#{cardMassPrintView.file!=null}" id="downloadLink" value="Download" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)" icon="ui-icon-arrowthichk-s">
<h:form rendered="#{cardMassPrintView.file!=null}">
<p:commandButton id="downloadLink" value="Download" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)" icon="ui-icon-arrowthichk-s">
<p:fileDownload value="#{cardMassPrintView.streamedFile}" />
</p:commandButton>
<p:commandButton value="Accept printout" action="#{cardMassPrintView.acceptPrintout()}" rendered="#{cardMassPrintView.waitForAcceptance}" />
</h:form>
</ui:define>
</ui:composition>
......
......@@ -13,6 +13,8 @@ import org.primefaces.model.StreamedContent;
import fi.insomnia.bortal.beans.CardPrintBeanLocal;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.util.MassPrintResult;
import fi.insomnia.bortal.web.cdiview.GenericCDIView;
import fi.insomnia.bortal.web.cdiview.user.UserCartView;
import java.io.File;
......@@ -25,7 +27,7 @@ import java.util.List;
@Named
@ConversationScoped
public class CardMassPrintView implements Serializable {
public class CardMassPrintView extends GenericCDIView implements Serializable {
private static final long serialVersionUID = -1017243588290663967L;
@Inject private UserCartView userCartView;
......@@ -33,6 +35,9 @@ public class CardMassPrintView implements Serializable {
private File file;
private StreamedContent streamedFile;
private MassPrintResult mpr = null;
private boolean waitForAcceptance = true;
public CardMassPrintView() {
// TODO Auto-generated constructor stub
......@@ -48,10 +53,11 @@ public class CardMassPrintView implements Serializable {
file = null;
try {
byte[] printout = cardPrintBean.getUserCardsAsPrintablePdf(userIdList);
mpr = cardPrintBean.getUserCardsAsPrintablePdf(userIdList);
waitForAcceptance = true;
file = File.createTempFile("cardprintout",null);
FileOutputStream fostream = new FileOutputStream(file);
fostream.write(printout);
fostream.write(mpr.getPdf());
fostream.close();
setStreamedFile(new DefaultStreamedContent(new FileInputStream(this.file)));
......@@ -60,6 +66,17 @@ public class CardMassPrintView implements Serializable {
}
}
public String acceptPrintout() {
if(mpr != null && waitForAcceptance) {
waitForAcceptance = false;
cardPrintBean.acceptMassPrintResult(mpr);
}
userCartView.setUsercart(new ArrayList<EventUser>());
return "accepted";
}
public UserCartView getUserCartView() {
return userCartView;
}
......@@ -83,4 +100,12 @@ public class CardMassPrintView implements Serializable {
public void setStreamedFile(StreamedContent streamedFile) {
this.streamedFile = streamedFile;
}
public boolean isWaitForAcceptance() {
return waitForAcceptance;
}
public void setWaitForAcceptance(boolean waitForAcceptance) {
this.waitForAcceptance = waitForAcceptance;
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!