use of com.qcadoo.report.api.pdf.HeaderAlignment in project mes by qcadoo.
the class MaterialRequirementPdfService method buildPdfContent.
@Override
protected void buildPdfContent(final Document document, final Entity materialRequirement, final Locale locale) throws DocumentException {
String documentTitle = translationService.translate("materialRequirements.materialRequirement.report.title", locale);
String documentAuthor = translationService.translate("qcadooReport.commons.generatedBy.label", locale);
pdfHelper.addDocumentHeader(document, "", documentTitle, documentAuthor, materialRequirement.getDateField(MaterialRequirementFields.DATE));
addPanel(document, materialRequirement, locale);
document.add(new Paragraph(translationService.translate("materialRequirements.materialRequirement.report.paragrah", locale), FontUtils.getDejavuBold11Dark()));
Map<String, HeaderAlignment> orderHeadersWithAlignments = Maps.newLinkedHashMap();
orderHeadersWithAlignments.put(translationService.translate("orders.order.number.label", locale), HeaderAlignment.LEFT);
orderHeadersWithAlignments.put(translationService.translate("orders.order.name.label", locale), HeaderAlignment.LEFT);
orderHeadersWithAlignments.put(translationService.translate("orders.order.product.label", locale), HeaderAlignment.LEFT);
orderHeadersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.order.plannedQuantity", locale), HeaderAlignment.RIGHT);
orderHeadersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.product.unit", locale), HeaderAlignment.LEFT);
addOrderSeries(document, materialRequirement, orderHeadersWithAlignments);
document.add(new Paragraph(translationService.translate("materialRequirements.materialRequirement.report.paragrah2", locale), FontUtils.getDejavuBold11Dark()));
if (materialRequirement.getBooleanField(MaterialRequirementFields.INCLUDE_WAREHOUSE) || materialRequirement.getBooleanField(MaterialRequirementFields.INCLUDE_START_DATE_ORDER)) {
addGroupedDataSeries(document, materialRequirement, locale);
} else {
Map<String, HeaderAlignment> productHeadersWithAlignments = Maps.newLinkedHashMap();
productHeadersWithAlignments.put(translationService.translate("basic.product.number.label", locale), HeaderAlignment.LEFT);
productHeadersWithAlignments.put(translationService.translate("basic.product.name.label", locale), HeaderAlignment.LEFT);
productHeadersWithAlignments.put(translationService.translate("technologies.technologyOperationComponent.quantity.label", locale), HeaderAlignment.RIGHT);
productHeadersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.product.unit", locale), HeaderAlignment.LEFT);
addDataSeries(document, materialRequirement, productHeadersWithAlignments);
}
}
use of com.qcadoo.report.api.pdf.HeaderAlignment in project mes by qcadoo.
the class MaterialRequirementPdfService method addGroupedDataSeries.
private void addGroupedDataSeries(final Document document, final Entity materialRequirement, final Locale locale) throws DocumentException {
Map<WarehouseDateKey, List<MaterialRequirementEntry>> entriesMap = materialRequirementDataService.getGroupedData(materialRequirement);
boolean includeWarehouse = materialRequirement.getBooleanField(MaterialRequirementFields.INCLUDE_WAREHOUSE);
boolean includeStartDateOrder = materialRequirement.getBooleanField(MaterialRequirementFields.INCLUDE_START_DATE_ORDER);
boolean showCurrentStockLevel = materialRequirement.getBooleanField(MaterialRequirementFields.SHOW_CURRENT_STOCK_LEVEL);
List<Integer> defaultOrderHeaderColumnWidth = Lists.newArrayList();
Map<String, HeaderAlignment> headersWithAlignments = Maps.newLinkedHashMap();
if (includeWarehouse) {
defaultOrderHeaderColumnWidth.add(20);
headersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.warehouse", locale), HeaderAlignment.LEFT);
}
if (includeStartDateOrder) {
defaultOrderHeaderColumnWidth.add(20);
headersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.startDateOrder", locale), HeaderAlignment.LEFT);
}
defaultOrderHeaderColumnWidth.add(30);
headersWithAlignments.put(translationService.translate("basic.product.number.label", locale), HeaderAlignment.LEFT);
defaultOrderHeaderColumnWidth.add(30);
headersWithAlignments.put(translationService.translate("basic.product.name.label", locale), HeaderAlignment.LEFT);
defaultOrderHeaderColumnWidth.add(19);
headersWithAlignments.put(translationService.translate("technologies.technologyOperationComponent.quantity.label", locale), HeaderAlignment.RIGHT);
defaultOrderHeaderColumnWidth.add(9);
headersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.product.unit", locale), HeaderAlignment.LEFT);
if (showCurrentStockLevel) {
defaultOrderHeaderColumnWidth.add(23);
headersWithAlignments.put(translationService.translate("materialRequirements.materialRequirement.report.currentStock", locale), HeaderAlignment.RIGHT);
}
List<String> headers = Lists.newLinkedList(headersWithAlignments.keySet());
int[] defaultOrderHeaderColumnWidthInt = new int[defaultOrderHeaderColumnWidth.size()];
for (int i = 0; i < defaultOrderHeaderColumnWidth.size(); i++) {
defaultOrderHeaderColumnWidthInt[i] = defaultOrderHeaderColumnWidth.get(i);
}
PdfPTable table = pdfHelper.createTableWithHeader(headersWithAlignments.size(), headers, true, defaultOrderHeaderColumnWidthInt, headersWithAlignments);
List<WarehouseDateKey> keys = Lists.newArrayList(entriesMap.keySet());
if (includeWarehouse) {
keys.sort(Comparator.comparing(WarehouseDateKey::getWarehouseNumber).thenComparing(WarehouseDateKey::getDate));
} else {
keys.sort(Comparator.comparing(WarehouseDateKey::getDate));
}
Map<Long, Map<Long, BigDecimal>> quantitiesInStock = Maps.newHashMap();
if (showCurrentStockLevel) {
List<MaterialRequirementEntry> entries = Lists.newArrayList();
for (WarehouseDateKey key : keys) {
if (Objects.nonNull(key.getWarehouseId())) {
entries.addAll(entriesMap.get(key));
}
}
quantitiesInStock = materialRequirementDataService.getQuantitiesInStock(entries);
}
String actualWarehouse = "";
Date actualDate = null;
int keyIndex = 0;
for (WarehouseDateKey key : keys) {
keyIndex += 1;
List<MaterialRequirementEntry> materials = entriesMap.get(key);
Map<String, MaterialRequirementEntry> neededProductQuantities = getNeededProductQuantities(materials);
List<String> materialKeys = Lists.newArrayList(neededProductQuantities.keySet());
materialKeys.sort(Comparator.naturalOrder());
int index = 0;
for (String materialKey : materialKeys) {
index += 1;
MaterialRequirementEntry material = neededProductQuantities.get(materialKey);
table.getDefaultCell().disableBorderSide(PdfCell.BOTTOM);
table.getDefaultCell().disableBorderSide(PdfCell.TOP);
if (index == materialKeys.size() && keyIndex == keys.size()) {
table.getDefaultCell().enableBorderSide(PdfCell.BOTTOM);
}
boolean fillDateIfWarehouseChanged = false;
if (includeWarehouse) {
if (!actualWarehouse.equals(key.getWarehouseNumber())) {
table.getDefaultCell().enableBorderSide(PdfCell.TOP);
table.addCell(new Phrase(key.getWarehouseNumber(), FontUtils.getDejavuRegular7Dark()));
actualWarehouse = key.getWarehouseNumber();
fillDateIfWarehouseChanged = true;
} else {
table.addCell(new Phrase("", FontUtils.getDejavuRegular7Dark()));
}
}
if (includeStartDateOrder) {
Date date = key.getDate();
if (Objects.isNull(actualDate) || !actualDate.equals(date) || fillDateIfWarehouseChanged) {
if (Objects.isNull(date)) {
actualDate = null;
table.getDefaultCell().enableBorderSide(PdfCell.TOP);
table.addCell(new Phrase("", FontUtils.getDejavuRegular7Dark()));
} else {
actualDate = new Date(date.getTime());
table.getDefaultCell().enableBorderSide(PdfCell.TOP);
table.addCell(new Phrase(DateUtils.toDateString(actualDate), FontUtils.getDejavuRegular7Dark()));
}
} else {
table.addCell(new Phrase("", FontUtils.getDejavuRegular7Dark()));
}
}
table.getDefaultCell().enableBorderSide(PdfCell.BOTTOM);
table.getDefaultCell().enableBorderSide(PdfCell.TOP);
table.addCell(new Phrase(material.getNumber(), FontUtils.getDejavuRegular7Dark()));
table.addCell(new Phrase(material.getName(), FontUtils.getDejavuRegular7Dark()));
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(new Phrase(numberService.format(material.getPlannedQuantity()), FontUtils.getDejavuBold7Dark()));
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
String unit = material.getUnit();
if (Objects.isNull(unit)) {
table.addCell(new Phrase("", FontUtils.getDejavuRegular7Dark()));
} else {
table.addCell(new Phrase(unit, FontUtils.getDejavuRegular7Dark()));
}
if (showCurrentStockLevel) {
if (Objects.nonNull(key.getWarehouseId())) {
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(new Phrase(numberService.format(materialRequirementDataService.getQuantity(quantitiesInStock, material)), FontUtils.getDejavuBold7Dark()));
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
} else {
table.addCell(new Phrase(numberService.format(BigDecimal.ZERO), FontUtils.getDejavuRegular7Dark()));
}
}
}
}
document.add(table);
}
use of com.qcadoo.report.api.pdf.HeaderAlignment in project mes by qcadoo.
the class MaterialRequirementCoverageReportPdfService method createProductsTable.
public void createProductsTable(final Document document, final Entity materialRequirementCoverage, final Locale locale) throws DocumentException {
List<Entity> columnsForCoverages = orderSuppliesService.getColumnsForCoverages();
if (!columnsForCoverages.isEmpty()) {
List<Entity> coverageProducts = materialRequirementCoverage.getHasManyField(MaterialRequirementCoverageFields.COVERAGE_PRODUCTS);
coverageProducts = filterCoverageProducts(materialRequirementCoverage, coverageProducts);
Map<Entity, Map<String, String>> coverageProductsColumnValues = materialRequirementCoverageColumnFetcher.getCoverageProductsColumnValues(coverageProducts);
List<Entity> filteredColumnsForCoverages = columnExtensionService.filterEmptyColumns(columnsForCoverages, coverageProducts, coverageProductsColumnValues);
if (!filteredColumnsForCoverages.isEmpty()) {
List<String> columnsName = Lists.newArrayList();
for (Entity entity : filteredColumnsForCoverages) {
columnsName.add(entity.getStringField(ColumnForCoveragesFields.IDENTIFIER));
}
Map<String, HeaderAlignment> alignments = prepareHeaderAlignment(filteredColumnsForCoverages, locale);
PdfPTable productsTable = pdfHelper.createTableWithHeader(filteredColumnsForCoverages.size(), prepareProductsTableHeader(document, filteredColumnsForCoverages, locale), false, pdfHelper.getReportColumnWidths(REPORT_WIDTH, parameterService.getReportColumnWidths(), columnsName), alignments);
for (Entity coverageProduct : coverageProducts) {
for (Entity columnForCoverages : filteredColumnsForCoverages) {
String identifier = columnForCoverages.getStringField(ColumnForCoveragesFields.IDENTIFIER);
String alignment = columnForCoverages.getStringField(ColumnForCoveragesFields.ALIGNMENT);
String value = coverageProductsColumnValues.get(coverageProduct).get(identifier);
prepareProductColumnAlignment(productsTable.getDefaultCell(), ColumnAlignment.parseString(alignment));
productsTable.addCell(new Phrase(value, FontUtils.getDejavuRegular7Dark()));
}
}
document.add(productsTable);
}
}
}
use of com.qcadoo.report.api.pdf.HeaderAlignment in project mes by qcadoo.
the class TrackingRecordPdfView method createUsedBatchesTable.
private void createUsedBatchesTable(final Document document, final Locale locale, final Entity trackingRecord) throws DocumentException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", locale);
String usedBatchesHeader = translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches", locale);
document.add(new Paragraph(usedBatchesHeader, FontUtils.getDejavuBold11Dark()));
EntityList usedBatches = trackingRecord.getHasManyField("usedBatchesSimple");
if (usedBatches.isEmpty()) {
String usedBatchesEmpty = translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatchesEmpty", locale);
document.add(new Paragraph(usedBatchesEmpty, FontUtils.getDejavuRegular10Dark()));
document.add(Chunk.NEWLINE);
} else {
List<String> usedBatchesTableHeader = new ArrayList<String>();
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.batchNumber", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productNumber", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productName", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.quantity", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productUnit", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.enteredDate", locale));
usedBatchesTableHeader.add(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.enteredBy", locale));
Map<String, HeaderAlignment> alignments = Maps.newHashMap();
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.batchNumber", locale), HeaderAlignment.LEFT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productNumber", locale), HeaderAlignment.LEFT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productName", locale), HeaderAlignment.LEFT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.quantity", locale), HeaderAlignment.RIGHT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.productUnit", locale), HeaderAlignment.LEFT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.enteredDate", locale), HeaderAlignment.LEFT);
alignments.put(translationService.translate("advancedGenealogy.trackingRecordSimpleDetails.report.usedBatches.column.enteredBy", locale), HeaderAlignment.LEFT);
PdfPTable usedBatchesTable = pdfHelper.createTableWithHeader(7, usedBatchesTableHeader, false, alignments);
for (Entity usedBatch : usedBatches) {
Entity batch = usedBatch.getBelongsToField(L_BATCH);
String usedBatchNumber = batch.getStringField(L_NUMBER);
String usedBatchProductNumber = batch.getBelongsToField(L_PRODUCT).getStringField(L_NUMBER);
String usedBatchProductName = batch.getBelongsToField(L_PRODUCT).getStringField(L_NAME);
String usedBatchProductUnit = batch.getBelongsToField(L_PRODUCT).getStringField(L_UNIT);
String usedBatchQuantity = (usedBatch.getField(L_QUANTITY) == null) ? " " : numberService.format(usedBatch.getField(L_QUANTITY));
Date usedEnteredDate = (Date) usedBatch.getField(L_DATE_AND_TIME);
String usedBatchEnteredDate = dateFormat.format(usedEnteredDate);
String usedBatchEnteredBy = usedBatch.getStringField(L_WORKER);
usedBatchesTable.addCell(new Phrase(usedBatchNumber, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.addCell(new Phrase(usedBatchProductNumber, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.addCell(new Phrase(usedBatchProductName, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
usedBatchesTable.addCell(new Phrase(usedBatchQuantity, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
usedBatchesTable.addCell(new Phrase(usedBatchProductUnit, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.addCell(new Phrase(usedBatchEnteredDate, FontUtils.getDejavuRegular7Dark()));
usedBatchesTable.addCell(new Phrase(usedBatchEnteredBy, FontUtils.getDejavuRegular7Dark()));
}
usedBatchesTable.setSpacingAfter(20);
usedBatchesTable.setSpacingBefore(20);
document.add(usedBatchesTable);
}
}
use of com.qcadoo.report.api.pdf.HeaderAlignment in project mes by qcadoo.
the class MaterialRequirementCoverageReportPdfService method prepareHeaderAlignment.
private Map<String, HeaderAlignment> prepareHeaderAlignment(List<Entity> filteredColumnsForDeliveries, Locale locale) {
Map<String, HeaderAlignment> alignments = Maps.newHashMap();
for (Entity column : filteredColumnsForDeliveries) {
String alignment = column.getStringField(ColumnForDeliveriesFields.ALIGNMENT);
HeaderAlignment headerAlignment = HeaderAlignment.RIGHT;
if (ColumnAlignment.LEFT.equals(ColumnAlignment.parseString(alignment))) {
headerAlignment = HeaderAlignment.LEFT;
} else if (ColumnAlignment.RIGHT.equals(ColumnAlignment.parseString(alignment))) {
headerAlignment = HeaderAlignment.RIGHT;
}
alignments.put(prepareHeaderTranslation(column.getStringField(ColumnForDeliveriesFields.NAME), locale), headerAlignment);
}
return alignments;
}
Aggregations