-2

I have created the report It is working fine only for one input. If I want to print the multiple invoices. How can I generate by passing the parameters using the HashMap input and loop them

Main report:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="esr-design-40" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" >
<property name="com.jasperassistant.designer.GridHeight" value="12"/>
<property name="com.jasperassistant.designer.GridWidth" value="12"/>
<property name="com.jasperassistant.designer.SnapToGrid" value="false"/>
<property name="com.jasperassistant.designer.Grid" value="false"/>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="16"/>
<property name="ireport.y" value="0"/>
<scriptlet name="esrgenerator" class="dk.comtalk.billing.server.util.ESRGenerator"/>
<parameter name="printAmount" class="java.lang.String"/>
<parameter name="invoiceId" class="java.lang.Integer"/>
<parameter name="customerId" class="java.lang.String"/>
<parameter name="entityName" class="java.lang.String"/>
<parameter name="entityAddress" class="java.lang.String"/>
<parameter name="entityCity" class="java.lang.String"/>
<parameter name="entityProvince" class="java.lang.String"/>
<parameter name="entityPostalCode" class="java.lang.String"/>
<parameter name="customerName" class="java.lang.String"/>
<parameter name="customerAddress" class="java.lang.String"/>
<parameter name="customerCity" class="java.lang.String"/>
<parameter name="customerProvince" class="java.lang.String"/>
<parameter name="customerPostalCode" class="java.lang.String"/>
<parameter name="entityLogo" class="java.io.File"/>
<parameter name="countryCode" class="java.lang.String"/>
<parameter name="balance" class="java.lang.String"/>
<parameter name="carriedBalance" class="java.lang.String"/>
<parameter name="invoiceDueDate" class="java.lang.String"/>
<parameter name="totalWithTax" class="java.lang.String"/>
<parameter name="newStatusId" class="java.lang.Integer"/>
<parameter name="invoiceDate" class="java.lang.String"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["D:\\Ravi Workspace\\Openbrm\\open-brm-openbrm-2.0\\resources\\designs\\"]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[select count(*) from payment_invoice p where p.invoice_id=$P{invoiceId};]]>
</queryString>
<field name="payment_count" class="java.lang.Integer"/>
<group name="invoice_total">
    <groupFooter>
        <band/>
    </groupFooter>
</group>
<title>
    <band height="430">
        <image>
            <reportElement x="8" y="0" width="185" height="48" />
            <imageExpression><![CDATA[$P{entityLogo}]]></imageExpression>
        </image>
        <textField>
            <reportElement x="57" y="120" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]> </textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="148" width="294" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="162" width="211" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="134" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="384" y="103" width="200" height="28" />
            <textElement>
                <font size="11" isBold="true"/>
            </textElement>
            <text><![CDATA[1. opomena za neizmireni racun]]></text>
        </staticText>
        <staticText>
            <reportElement x="405" y="173" width="179" height="14" />
            <text><![CDATA[Wangen b. Brüttisellen, 13.12.2015]]></text>
        </staticText>
        <staticText>
            <reportElement x="36" y="201" width="328" height="19" />
            <text><![CDATA[Postovani gospodine/postovana gospodjo,]]></text>
        </staticText>
        <staticText>
            <reportElement x="36" y="220" width="544" height="35" />
            <text><![CDATA[Dozvolite da Vas podsetimo da je, po podacima naseg knjigovodstva od danasnjeg dana, sledeci telefonski racun jos otvoren:]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="317" width="549" height="34" />
            <text><![CDATA[Ukoliko je Vasa uplata za ovde navedeni racun u medjuvremenu vec izvrsena, nemojte uzimati ovu opomenu u obzir. Ukoliko jos nije, molimo Vas da izvrsite uplatu izvrsite odmah.]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="351" width="557" height="69" />
            <text><![CDATA[Imajte u vidu da se kod opomena, uz regularni racun, placa administrativna taksa za obradu u visini od Fr. 20.00. Ev.deaktivacija servisa se, takodje, naplacuje, dodatnih Fr. 20.00. Molimo Vas stoga za postovanje nasih rokova uplate.

  Najlepse hvala.]]></text>
        </staticText>
        <subreport>
            <reportElement x="36" y="268" width="559" height="60" />
            <subreportParameter name="invoiceId">
                <subreportParameterExpression><![CDATA[$P{invoiceId}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "ageing-esr-40-srpski-subreport.jasper"]]></subreportExpression>
        </subreport>
    </band>
</title>
<pageHeader>
    <band height="117">
        <staticText>
            <reportElement x="36" y="101" width="576" height="16" />
            <text><![CDATA[Symphonica AG | Hegnaustrasse 17 | 8602 Wangen b. Brüttisellen | Telefon 0840 988 988 | Fax 043 536 05 43]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="8" width="243" height="26" />
            <text><![CDATA[S postovanjem,
     BALKATEL | Symphonica A.D.]]></text>
        </staticText>
    </band>
</pageHeader>
<summary>
    <band height="294">
        <textField>
            <reportElement x="5" y="56" width="123" height="14" />
            <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="5" y="68" width="153" height="14" />
            <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="5" y="81" width="226" height="14" />
            <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="5" y="26" width="100" height="15" />
            <text><![CDATA[6301 Zug]]></text>
        </staticText>
        <staticText>
            <reportElement x="179" y="26" width="100" height="15" />
            <text><![CDATA[6301 Zug]]></text>
        </staticText>
        <textField>
            <reportElement x="179" y="56" width="123" height="14" />
            <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="179" y="68" width="149" height="14" />
            <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="179" y="81" width="226" height="14" />
            <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="97" y="110" width="100" height="14" />
            <text><![CDATA[01-2653-5]]></text>
        </staticText>
        <staticText>
            <reportElement x="272" y="110" width="100" height="16" />
            <text><![CDATA[01-2653-5]]></text>
        </staticText>
        <textField>
            <reportElement x="169" y="236" width="640" height="30" />
            <textElement textAlignment="Left">
                <font fontName="SansSerif" size="13"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.generateCodeline($P{printAmount}.split("\\s+")[1],"01",">","971786","+","0126535",">",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="132" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="144" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="158" width="294" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="193" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="205" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="218" width="251" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="172" width="211" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="230" width="194" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="92" width="424" height="19" />
            <textElement>
                <font fontName="SansSerif" size="11" isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="172" width="186" height="16" />
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="132" y="142" width="47" height="15" />
            <textElement>
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="301" y="142" width="40" height="15" />
            <textElement>
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="2" y="142" width="105" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="173" y="142" width="105" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="11"/>
             </textElement>
            <textFieldExpression> <![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression>
        </textField>
    </band>
 </summary>
 </jasperReport>

File subreport.jrxml:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ageing-esr-40-srpski-subreport" pageWidth="595" pageHeight="70" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" >
<property name="com.jasperassistant.designer.GridHeight" value="12"/>
<property name="com.jasperassistant.designer.GridWidth" value="12"/>
<property name="com.jasperassistant.designer.SnapToGrid" value="false"/>
<property name="com.jasperassistant.designer.Grid" value="false"/>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="customerId" class="java.lang.String"/>
<parameter name="invoiceDate" class="java.lang.String"/>
<parameter name="invoiceId" class="java.lang.Integer"/>
<parameter name="invoiceDueDate" class="java.lang.String"/>
<parameter name="newStatusId" class="java.lang.Integer"/>
<parameter name="printAmount" class="java.lang.String"/>
<parameter name="balance" class="java.lang.String"/>
<title>
    <band height="30">
        <staticText>
            <reportElement x="2" y="14" width="65" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Racun od]]></text>
        </staticText>
        <staticText>
            <reportElement x="83" y="14" width="65" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Nacin pl.]]></text>
        </staticText>
        <staticText>
            <reportElement x="164" y="14" width="85" height="14" />
            <textElement textAlignment="Left">
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Broj racuna]]></text>
        </staticText>
        <staticText>
            <reportElement x="262" y="14" width="85" height="14" />
            <textElement textAlignment="Left">
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Rok istekao]]></text>
        </staticText>
        <staticText>
            <reportElement x="375" y="14" width="48" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Iznos]]></text>
        </staticText>
        <staticText>
            <reportElement x="437" y="14" width="58" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Otvoreno]]></text>
        </staticText>
        <staticText>
            <reportElement x="504" y="14" width="52" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Step.nap]]></text>
        </staticText>
    </band>
</title>
<pageHeader>
    <band height="19">
        <textField>
            <reportElement x="495" y="3" width="34" height="12" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression class="java.lang.Integer"><![CDATA[$P{newStatusId}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="356" y="3" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="262" y="3" width="100" height="14" />
            <textFieldExpression><![CDATA[$P{invoiceDueDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="164" y="3" width="75" height="14" />
            <textFieldExpression class="java.lang.Integer"><![CDATA[$P{invoiceId}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="83" y="3" width="77" height="14" />
            <textElement>
                <font size="10" isBold="false"/>
            </textElement>
            <text><![CDATA[Racun]]></text>
        </staticText>
        <textField>
            <reportElement x="2" y="3" width="75" height="14" />
            <textFieldExpression><![CDATA[$P{invoiceDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="423" y="2" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
    </band>
</pageHeader>
<summary>
    <band height="20">
        <staticText>
            <reportElement x="266" y="0" width="163" height="15" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Ukupno CHF. . . . . . . . . . . . . . . .]]></text>
        </staticText>
        <textField>
            <reportElement x="423" y="0" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
    </band>
</summary>
</jasperReport>

By using this JAVA code I can print only one Invoice details

public static JasperPrint generateAgeingESRFile(InvoiceDTO invoice, Integer userId, Integer entityId , Integer newStatusId) throws FileNotFoundException,
        SessionInternalError {

    try {

     ContactDTOEx to=null;
     ContactDTOEx from=null;

        // This is needed for JasperRerpots to work, for some twisted XWindows issue
        System.setProperty("java.awt.headless", "true");
    /*
        String designFile = com.sapienter.jbilling.common.Util.getSysProp("base_dir")
                            + "designs/" + "ageing-esr-" + entityId + ".jasper";
    */

        String design = "ageing-esr-" + entityId;

    String designFile = getAgeingESRDesignFile(design, invoice);

        File compiledDesign = new File(designFile);
        LOG.debug("Generating paper esr with design file : " + designFile +  "The Ageing Step is " + newStatusId);
        FileInputStream stream = new FileInputStream(compiledDesign);
        Locale locale = (new UserBL(userId).getLocale());

    ContactBL contact = new ContactBL();
        contact.setInvoice(invoice.getId());
        to = contact.getDTO();

        entityId = invoice.getBaseUser().getEntity().getId();
        Date lastStatusChangeDate = invoice.getBaseUser().getLastStatusChange();
        contact.setEntity(entityId);
        from = contact.getDTO();

    //LOG.debug("The ageing step is " + newStatusId);
        // add all the invoice data


    HashMap<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("invoiceNumber", invoice.getPublicNumber());
        parameters.put("invoiceId", invoice.getId());
    parameters.put("newStatusId", newStatusId);
    parameters.put("totalWithTax", Util.formatMoney(invoice.getTotal(),
        invoice.getUserId(), invoice.getCurrency().getId(), false));
        parameters.put("customerId", invoice.getUserId().toString());
        parameters.put("invoiceDate", Util.formatDate(invoice.getCreateDatetime(), invoice.getUserId()));
        parameters.put("invoiceDueDate", Util.formatDate(invoice.getDueDate(), invoice.getUserId()));
        parameters.put("invoiceGeneratedDate", Util.formatDate(invoice.getCreateTimestamp(), invoice.getUserId()));
        parameters.put("statusChangeDate", Util.formatDate(lastStatusChangeDate, invoice.getUserId()));

    parameters.put("entityName", printable(from.getOrganizationName()));
        parameters.put("entityAddress", printable(from.getAddress1()));
        parameters.put("entityAddress2", printable(from.getAddress2()));
        parameters.put("entityPostalCode", printable(from.getPostalCode()));
        parameters.put("entityCity", printable(from.getCity()));
        parameters.put("entityProvince", printable(from.getStateProvince()));
        parameters.put("entityPhoneCountryCode", printable(from.getPhoneCountryCode().toString()));
    parameters.put("entityPhoneAreaCode", printable(from.getPhoneAreaCode().toString()));
    parameters.put("entityPhoneContry", printable(from.getPhoneNumber().toString()));

        parameters.put("customerOrganization", printable(to.getOrganizationName()));
        parameters.put("customerName", printable(to.getFirstName(), to.getLastName()));
        parameters.put("customerAddress", printable(to.getAddress1()));
        parameters.put("customerAddress2", printable(to.getAddress2()));
        parameters.put("customerPostalCode", printable(to.getPostalCode()));
        parameters.put("customerCity", printable(to.getCity()));
        parameters.put("customerProvince", printable(to.getStateProvince()));
        parameters.put("countryCode", printable(to.getCountryCode()));            
        parameters.put("carriedBalance", Util.formatMoney(invoice.getCarriedBalance(),
        invoice.getUserId(), invoice.getCurrency().getId(), false));

    Collection invoicePaymentMaps = invoice.getPaymentMap();
    List list = new ArrayList(invoicePaymentMaps);
    if(list==null || list.isEmpty()){
    LOG.debug("invoicePaymentMaps is null, so pass totalWithTax as param ");
    parameters.put("printAmount", Util.formatMoney(invoice.getTotal(),
            invoice.getUserId(), invoice.getCurrency().getId(), false));
    }else{
    LOG.debug("invoicePaymentMaps is not null, so pass balance as param ");
    parameters.put("printAmount", Util.formatMoney(invoice.getBalance(),
            invoice.getUserId(), invoice.getCurrency().getId(), false));
   }

        // the logo is a file
        File logo = new File(com.sapienter.jbilling.common.Util
                .getSysProp("base_dir")
                + "logos/entity-" + entityId + ".jpg");
        parameters.put("entityLogo", logo);

        BigDecimal taxTotal = new BigDecimal(0);
        int taxItemIndex = 0;
        // set report locale
        parameters.put(JRParameter.REPORT_LOCALE, locale);

        // at last, generate the report
        JasperPrint report = null;
        report = JasperFillManager.fillReport(stream, parameters, new JREmptyDataSource());

        stream.close();

        return report;
} catch (Exception e) {
        LOG.error("Exception generating ESR receipt", e);
        return null;
    }
}  

enter image description here:

0

1 Answer 1

0

Looks like you need data in tabular format, here are my inputs

  1. Create a table in your jasper report( from pallete , if you are using iReport) with headers as Racun od, Nacin Pl etc
  2. Create a parameter in your report say "Invoices" and parameter class as java.util.List
  3. Create a POJO, InvoiceDTO in your case and put all the attributes (that you want to get printed on the report), also create getters.
  4. Create a list of InvoiceDTO.
  5. In your table(made in Step 1), add a single row. Every header(attribute of InvoiceDTO) will represent a column. Add Text Field in that row for every column.
  6. Represent every Text Field as $F{name of the attribute in the InvoiceDTO}
  7. Create a map like this in java code : Map map = new HashMap<>(); map.put("Invoices", your list of InvoiceDto);

  8. Put this line of code in java : JasperFillManager.fillReport(stream, map, new JREmptyDataSource());

Sign up to request clarification or add additional context in comments.

3 Comments

I have added this in my code List<InvoiceDTO> invoiceList = new ArrayList<InvoiceDTO>(); invoiceList.add(invoice); JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(invoiceList); JasperPrint report = null; parameters.put("invoiceList",invoiceList); report = JasperFillManager.fillReport(stream, parameters, new JREmptyDataSource());
How I need to use invoiceList parameter and print in jrxml.Please suggest me.
@Hari, I have edited my post on the basis of your comments.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.