Search in sources :

Example 6 with HeaderAlignment

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);
    }
}
Also used : HeaderAlignment(com.qcadoo.report.api.pdf.HeaderAlignment) Paragraph(com.lowagie.text.Paragraph)

Example 7 with HeaderAlignment

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);
}
Also used : MaterialRequirementEntry(com.qcadoo.mes.materialRequirements.print.MaterialRequirementEntry) WarehouseDateKey(com.qcadoo.mes.materialRequirements.print.WarehouseDateKey) Phrase(com.lowagie.text.Phrase) Date(java.util.Date) PdfPTable(com.lowagie.text.pdf.PdfPTable) HeaderAlignment(com.qcadoo.report.api.pdf.HeaderAlignment) List(java.util.List) Map(java.util.Map)

Example 8 with HeaderAlignment

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);
        }
    }
}
Also used : Entity(com.qcadoo.model.api.Entity) PdfPTable(com.lowagie.text.pdf.PdfPTable) HeaderAlignment(com.qcadoo.report.api.pdf.HeaderAlignment) Map(java.util.Map)

Example 9 with HeaderAlignment

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);
    }
}
Also used : PdfPTable(com.lowagie.text.pdf.PdfPTable) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) HeaderAlignment(com.qcadoo.report.api.pdf.HeaderAlignment) SimpleDateFormat(java.text.SimpleDateFormat)

Example 10 with HeaderAlignment

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;
}
Also used : Entity(com.qcadoo.model.api.Entity) HeaderAlignment(com.qcadoo.report.api.pdf.HeaderAlignment)

Aggregations

HeaderAlignment (com.qcadoo.report.api.pdf.HeaderAlignment)23 PdfPTable (com.lowagie.text.pdf.PdfPTable)16 Entity (com.qcadoo.model.api.Entity)16 Map (java.util.Map)7 PdfPCell (com.lowagie.text.pdf.PdfPCell)5 ArrayList (java.util.ArrayList)5 Phrase (com.lowagie.text.Phrase)4 Date (java.util.Date)4 Paragraph (com.lowagie.text.Paragraph)3 ColumnAlignment (com.qcadoo.mes.columnExtension.constants.ColumnAlignment)3 HashMap (java.util.HashMap)3 List (java.util.List)3 Lists (com.google.common.collect.Lists)2 Maps (com.google.common.collect.Maps)2 Document (com.lowagie.text.Document)2 DocumentException (com.lowagie.text.DocumentException)2 Element (com.lowagie.text.Element)2 TranslationService (com.qcadoo.localization.api.TranslationService)2 ProductFields (com.qcadoo.mes.basic.constants.ProductFields)2 DataDefinitionService (com.qcadoo.model.api.DataDefinitionService)2