/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo Framework
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.mes.basic.print;
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.draw.LineSeparator;
import com.qcadoo.localization.api.TranslationService;
import com.qcadoo.mes.basic.PalletNumbersService;
import com.qcadoo.mes.basic.constants.PalletNumberHelperFields;
import com.qcadoo.model.api.Entity;
import com.qcadoo.report.api.ColorUtils;
import com.qcadoo.report.api.FontUtils;
import com.qcadoo.report.api.Footer;
import com.qcadoo.report.api.pdf.PdfPageNumbering;
import com.qcadoo.report.api.pdf.ReportPdfView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import static com.google.common.base.Preconditions.checkState;
@Component(value = "palletNumberHelperReportPdf")
public class PalletNumberHelperReportPdf extends ReportPdfView {
@Autowired
private TranslationService translationService;
@Autowired
private PalletNumbersService palletNumbersService;
@Override
protected String addContent(final Document document, final Map<String, Object> model, final Locale locale,
final PdfWriter writer) throws DocumentException, IOException {
checkState(model.get("id") != null, "Unable to generate report for unsaved offer! (missing id)");
Long palletNumberHelperId = Long.valueOf(model.get("id").toString());
Entity palletNumberHelper = palletNumbersService.getPalletNumberHelper(palletNumberHelperId);
if (palletNumberHelper != null) {
List<Entity> palletNumbers = palletNumberHelper.getManyToManyField(PalletNumberHelperFields.PALLET_NUMBERS);
addPalletNumbers(document, palletNumbersService.getNumbers(palletNumbers));
}
return translationService.translate("basic.palletNumberHelper.report.fileName", locale, palletNumberHelperId.toString());
}
private void addPalletNumbers(final Document document, final List<String> numbers) throws DocumentException {
int i = 0;
for (String number : numbers) {
if (i % 2 == 0) {
Paragraph firstNumberParagraph = new Paragraph(new Phrase(number, FontUtils.getDejavuBold140Dark()));
firstNumberParagraph.setLeading(0, 0);
Paragraph numberSmallParagraph = new Paragraph(new Phrase(buildSmallNumber(number),
FontUtils.getDejavuBold10Dark()));
numberSmallParagraph.setLeading(0, 0);
firstNumberParagraph.setAlignment(Element.ALIGN_CENTER);
firstNumberParagraph.setSpacingAfter(20F);
numberSmallParagraph.setAlignment(Element.ALIGN_CENTER);
numberSmallParagraph.setSpacingBefore(60F);
numberSmallParagraph.setSpacingAfter(100F);
if (i == 0) {
Paragraph newLineParagraph = new Paragraph(new Phrase("\n"));
newLineParagraph.setSpacingAfter(150F);
document.add(newLineParagraph);
}
document.add(firstNumberParagraph);
document.add(numberSmallParagraph);
LineSeparator lineSeparator = new LineSeparator(1, 100f, ColorUtils.getLineDarkColor(), Element.ALIGN_LEFT, 0);
document.add(lineSeparator);
}
if (i % 2 != 0) {
Paragraph secondNumberParagraph = new Paragraph(new Phrase(number, FontUtils.getDejavuBold140Dark()));
Paragraph numSmallParagraph = new Paragraph(new Phrase(buildSmallNumber(number), FontUtils.getDejavuBold10Dark()));
secondNumberParagraph.setSpacingBefore(160F);
secondNumberParagraph.setAlignment(Element.ALIGN_CENTER);
secondNumberParagraph.setSpacingAfter(20F);
numSmallParagraph.setAlignment(Element.ALIGN_CENTER);
numSmallParagraph.setSpacingBefore(60F);
numSmallParagraph.setSpacingAfter(0F);
secondNumberParagraph.setLeading(0, 0);
numSmallParagraph.setLeading(0, 0);
document.add(secondNumberParagraph);
document.add(numSmallParagraph);
if (i < numbers.size() - 1) {
document.newPage();
Paragraph newp = new Paragraph(new Phrase("\n", FontUtils.getDejavuBold10Dark()));
newp.setSpacingAfter(150F);
document.add(newp);
}
}
i++;
}
}
private String buildSmallNumber(String number) {
StringBuffer small = new StringBuffer();
small.append("*");
small.append(number);
small.append("*");
return small.toString();
}
@Override
protected final void addTitle(final Document document, final Locale locale) {
document.addTitle(translationService.translate("basic.palletNumber.report.title", locale));
}
@Override
protected void setPageEvent(final PdfWriter writer) {
writer.setPageEvent(new PdfPageNumbering(new Footer(), false, false));
}
}