Commit f2a619e2 by Antti Tönkyrä

Mass print stuff

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