public DynamicReport buildReport() throws Exception {

    DynamicReportBuilder drb = new DynamicReportBuilder();
    Integer margin = new Integer(20);
    drb.setTitle("November" + getYear() + " sales report") // defines the title of the report
        .setSubtitle(
            "The items in this report correspond "
                + "to the main products: DVDs, Books, Foods and Magazines")
        .setTitleHeight(new Integer(30))
        .setSubtitleHeight(new Integer(20))
        .setDetailHeight(new Integer(15))
        .setLeftMargin(margin)
        .setRightMargin(margin)
        .setTopMargin(margin)
        .setBottomMargin(margin)
        .setColumnsPerPage(new Integer(1))
        .setColumnSpace(new Integer(5));

    Style style1 = new Style("style1");
    style1.setFont(Font.ARIAL_MEDIUM_BOLD);
    style1.setHorizontalAlign(HorizontalAlign.CENTER);
    drb.addStyle(style1);

    Style style2 = Style.createBlankStyle("style2", "style1");
    style2.setTextColor(Color.BLUE);
    drb.addStyle(style2);

    AbstractColumn columnState =
        ColumnBuilder.getNew()
            .setColumnProperty("state", String.class.getName())
            .setTitle("State")
            .setWidth(new Integer(85))
            .setStyle(style1)
            .build();

    AbstractColumn columnBranch =
        ColumnBuilder.getNew()
            .setColumnProperty("branch", String.class.getName())
            .setTitle("Branch")
            .setWidth(new Integer(85))
            .setStyle(style2)
            .build();

    drb.addColumn(columnBranch);
    drb.addColumn(columnState);

    DJGroup g1 =
        new GroupBuilder()
            .setCriteriaColumn((PropertyColumn) columnBranch)

            //		.setGroupLayout(GroupLayout.DEFAULT)
            .setGroupLayout(GroupLayout.DEFAULT_WITH_HEADER)
            .build();
    drb.addGroup(g1);

    drb.setUseFullPageWidth(true);

    DynamicReport dr = drb.build();
    return dr;
  }
 private static AbstractColumn geraColuna(Field campo, ColunaRelatorio colunaRelatorio) {
   ColumnBuilder colunaBuilder = ColumnBuilder.getNew();
   colunaBuilder.setColumnProperty(campo.getName(), campo.getType());
   colunaBuilder.setTitle(colunaRelatorio.titulo());
   colunaBuilder.setWidth(colunaRelatorio.largura());
   colunaBuilder.setStyle(getEstiloColuna(colunaRelatorio));
   if (campo.getType() == Boolean.class) {
     colunaBuilder.setCustomExpression(getExpressaoCampoBoleano(campo.getName()));
   }
   if (campo.getType() == Date.class) {
     colunaBuilder.setPattern("dd/MM/yyyy");
   }
   if (campo.getType().getSuperclass() == Entidade.class) {
     colunaBuilder.setCustomExpression(getExpressaoCampoEntidade(campo, colunaRelatorio));
   }
   return colunaBuilder.build();
 }
  @FXML
  private void eventReporteVentas(ActionEvent event) throws JRException, ParseException {

    Style titleStyle = new Style();
    titleStyle.setFont(new Font(18, Font._FONT_VERDANA, true));
    titleStyle.setHorizontalAlign(HorizontalAlign.CENTER);
    Style amountStyle = new Style();
    amountStyle.setHorizontalAlign(HorizontalAlign.RIGHT);
    Style oddRowStyle = new Style();
    oddRowStyle.setBorder(Border.NO_BORDER());
    // Color veryLightGrey = new Color(230,230,230);
    // oddRowStyle.setBackgroundColor(veryLightGrey);
    oddRowStyle.setTextColor(new Color(112, 112, 112));
    oddRowStyle.setFont(new Font(12, Font._FONT_ARIAL, true));
    oddRowStyle.setTransparency(ar.com.fdvs.dj.domain.constants.Transparency.OPAQUE);
    oddRowStyle.setPaddingTop(2);
    oddRowStyle.setPaddingBottom(2);
    // Style HeaderStyle = new Style();
    // HeaderStyle.setFont(new Font(12,Font._FONT_ARIAL,true));

    int cont = 0;
    int cont3 = 0;
    String selecCampo = "";
    for (int i = 0; i < cb.length; i++) {
      if (cb[i].isSelected()) {
        cont++;
      }
    }
    for (int i = 0; i < group.length; i++) {
      if (group[i].isSelected()) {
        cont3++;
      }
    }

    int ancho = 580 / (cont + 1);
    ArrayList<AbstractColumn> colum = new ArrayList<>();
    AbstractColumn nombres[];
    int pun = 0;

    String fecha1 = checkInDatePicker.getValue().toString();
    String fecha2 = checkInDatePicker2.getValue().toString();

    SimpleDateFormat formateador = new SimpleDateFormat("yyyy-MM-dd");
    Date fechaDate1 = formateador.parse(fecha1);
    Date fechaDate2 = formateador.parse(fecha2);
    System.out.println("fecha1: " + fecha1);
    System.out.println("Fecha2: " + fecha2);

    if (cont != 0) {
      if (fechaDate1.before(fechaDate2) || fechaDate1.equals(fechaDate2)) {
        nombres = new AbstractColumn[cont];

        for (int i = 0; i < cb.length; i++) {
          if (cb[i].isSelected()) {
            if (i == 4 || i == 6) {
              nombres[pun] =
                  ColumnBuilder.getNew()
                      .setColumnProperty(cb[i].getId(), Integer.class.getName())
                      .setTitle(cb[i].getText())
                      .setWidth(ancho)
                      .setPattern("$ 0.00") // defines a pattern to apply to the values swhown (uses
                      // TextFormat)
                      // .setStyle(amountStyle)		//special style for this column (align right)
                      .setHeaderStyle(oddRowStyle)
                      .build();
              pun++;

            } else {
              nombres[pun] =
                  ColumnBuilder.getNew()
                      .setColumnProperty(cb[i].getId(), String.class.getName())
                      .setTitle(cb[i].getText())
                      .setWidth(ancho)
                      .setHeaderStyle(oddRowStyle)
                      .build();
              pun++;
            }
            if (cont3 != 0 && i == 6) {
              if (selecCampo.equals("")) {
                selecCampo = " sum(ventas.`total`) AS 'ventas.total' ";
              } else {
                selecCampo += " , sum(ventas.`total`) AS 'ventas.total' ";
              }
            } else {

              if (selecCampo.equals("")) {
                selecCampo = camposQuery[i];
              } else {
                selecCampo += "," + camposQuery[i];
              }
            }
          }
        }
        DynamicReportBuilder drb = new DynamicReportBuilder();
        DynamicReport dr = null;
        for (int i = 0; i < pun; i++) {
          drb.addColumn(nombres[i]);
        }
        Calendar c = Calendar.getInstance();
        String dia = Integer.toString(c.get(Calendar.DATE)) + "/";
        dia += Integer.toString(c.get(Calendar.MONTH) + 1) + "/";
        dia += Integer.toString(c.get(Calendar.YEAR));
        drb
            // .addGroups(2)
            .addImageBanner("./img/umaiSystem.png", 70, 70, ImageBanner.ALIGN_RIGHT)
            .setTitle("Reporte de ventas ")
            .setTitleStyle(titleStyle)
            .setSubtitle("Fecha de creacion: " + dia)
            .setDetailHeight(15)
            .setMargins(30, 20, 30, 15)
            .setPrintBackgroundOnOddRows(false)
            .setUseFullPageWidth(true)
            .setColumnsPerPage(1);

        String grupos = "";
        int cont2 = 0;
        for (int i = 0; i < group.length; i++) {
          if (group[i].isSelected()) {
            if (grupos.equals("")) {
              grupos = group[i].getId();
            } else {
              grupos += "," + group[i].getId();
            }

            cont2++;
          }
        }
        String Rango = " where ventas.fechaVenta Between '" + fecha1 + "' and '" + fecha2 + "'  ";

        String sql;
        if (cont2 != 0) {
          sql =
              " SELECT "
                  + selecCampo
                  + " FROM\n"
                  + "  `ventas` ventas  INNER JOIN `clientes` ON clientes.`idCli` = ventas.`idCli`\n"
                  + "     INNER JOIN `usuarios` usuarios ON ventas.`idUsu` = usuarios.`idUsu` "
                  + Rango
                  + " GROUP BY "
                  + grupos
                  + " ORDER BY ventas.idVenta ";
        } else {
          sql =
              " SELECT "
                  + selecCampo
                  + " FROM\n"
                  + "  `ventas` ventas  INNER JOIN `clientes` ON clientes.`idCli` = ventas.`idCli`\n"
                  + "  INNER JOIN `usuarios` usuarios ON ventas.`idUsu` = usuarios.`idUsu` "
                  + Rango
                  + " ORDER BY ventas.idVenta ";
        }
        System.out.println("sql: " + sql);

        Connection conexion = null;
        // conexion=Helpers.db.db.conn;
        conexion = Helpers.db.getDbCon().conn;

        drb.setQuery(sql, DJConstants.QUERY_LANGUAGE_SQL);
        dr = drb.build(); // Finally build the report!
        //       JasperPrint jp=DynamicJasperHelper.generateJasperPrint(dr,new
        // ClassicLayoutManager(),ds);
        JasperPrint jp =
            DynamicJasperHelper.generateJasperPrint(dr, new ClassicLayoutManager(), conexion, null);

        JasperViewer.viewReport(jp, false); // finally display the report report
        System.out.println(sql);
      } else {
        AlertBox.display("Error", "Rango de fechas no valido");
      }
    } else {
      AlertBox.display("Error", "Debe seleccionar minimo 1 campo");
    }
  }
  public DynamicReport buildReport() throws Exception {

    Style detailStyle = new Style();
    Style headerStyle = new Style();
    headerStyle.setFont(Font.ARIAL_MEDIUM_BOLD);
    headerStyle.setBorder(Border.PEN_2_POINT());
    headerStyle.setHorizontalAlign(HorizontalAlign.CENTER);
    headerStyle.setVerticalAlign(VerticalAlign.MIDDLE);

    Style titleStyle = new Style();
    titleStyle.setFont(new Font(18, Font._FONT_VERDANA, true));
    Style importeStyle = new Style();
    importeStyle.setHorizontalAlign(HorizontalAlign.RIGHT);
    Style oddRowStyle = new Style();
    oddRowStyle.setBorder(Border.NO_BORDER());
    oddRowStyle.setBackgroundColor(Color.LIGHT_GRAY);
    oddRowStyle.setTransparency(Transparency.OPAQUE);

    DynamicReportBuilder drb = new DynamicReportBuilder();
    int margin = 20;
    drb.setTitleStyle(titleStyle)
        .setTitle("November" + getYear() + " sales report") // defines the title of the report
        .setSubtitle(
            "The items in this report correspond "
                + "to the main products: DVDs, Books, Foods and Magazines")
        .setDetailHeight(new Integer(15))
        .setLeftMargin(margin)
        .setMargins(margin, margin, margin, margin)
        //				.setPrintBackgroundOnOddRows(true)
        .setPrintColumnNames(false)
        .setOddRowBackgroundStyle(oddRowStyle);

    AbstractColumn columnState =
        ColumnBuilder.getNew()
            .setColumnProperty("state", String.class.getName())
            .setTitle("State")
            .setWidth(new Integer(85))
            .setStyle(detailStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnBranch =
        ColumnBuilder.getNew()
            .setColumnProperty("branch", String.class.getName())
            .setTitle("Branch")
            .setWidth(new Integer(85))
            .setStyle(detailStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnaProductLine =
        ColumnBuilder.getNew()
            .setColumnProperty("productLine", String.class.getName())
            .setTitle("Product Line")
            .setWidth(new Integer(85))
            .setStyle(detailStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnaItem =
        ColumnBuilder.getNew()
            .setColumnProperty("item", String.class.getName())
            .setTitle("Item")
            .setWidth(new Integer(85))
            .setStyle(detailStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnCode =
        ColumnBuilder.getNew()
            .setColumnProperty("id", Long.class.getName())
            .setTitle("ID")
            .setWidth(new Integer(40))
            .setStyle(importeStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnaQuantity =
        ColumnBuilder.getNew()
            .setColumnProperty("quantity", Long.class.getName())
            .setTitle("Quantity")
            .setWidth(new Integer(80))
            .setStyle(importeStyle)
            .setHeaderStyle(headerStyle)
            .build();

    AbstractColumn columnAmount =
        ColumnBuilder.getNew()
            .setColumnProperty("amount", Float.class.getName())
            .setTitle("Amount")
            .setWidth(new Integer(90))
            .setPattern("$ 0.00")
            .setStyle(importeStyle)
            .setHeaderStyle(headerStyle)
            .build();

    GroupBuilder gb1 = new GroupBuilder();

    //		 define the criteria column to group by (columnState)
    DJGroup g1 =
        gb1.setCriteriaColumn((PropertyColumn) columnState)
            .addFooterVariable(
                columnAmount,
                DJCalculation
                    .SUM) // tell the group place a variable footer of the column "columnAmount"
                          // with the SUM of allvalues of the columnAmount in this group.
            .addFooterVariable(
                columnaQuantity, DJCalculation.SUM) // idem for the columnaQuantity column
            .setGroupLayout(
                GroupLayout
                    .DEFAULT_WITH_HEADER) // tells the group how to be shown, there are
                                          // manyposibilities, see the GroupLayout for more.
            .build();

    GroupBuilder gb2 =
        new GroupBuilder(); // Create another group (using another column as criteria)
    DJGroup g2 =
        gb2.setCriteriaColumn(
                (PropertyColumn)
                    columnBranch) // and we add the same operations for the columnAmount and
            .addFooterVariable(columnAmount, DJCalculation.SUM) // columnaQuantity columns
            .addFooterVariable(columnaQuantity, DJCalculation.SUM)
            .build();

    drb.addColumn(columnState);
    drb.addColumn(columnBranch);
    drb.addColumn(columnaProductLine);
    drb.addColumn(columnaItem);
    drb.addColumn(columnCode);
    drb.addColumn(columnaQuantity);
    drb.addColumn(columnAmount);

    drb.addGroup(g1); // add group g1
    //		drb.addGroup(g2); // add group g2

    drb.setUseFullPageWidth(true);

    DJChartBuilder cb = new DJChartBuilder();
    DJChart chart =
        cb.setType(DJChart.BAR_CHART)
            .setOperation(DJChart.CALCULATION_SUM)
            .setColumnsGroup(g1)
            .addColumn(columnAmount)
            .addColumn(columnaQuantity)
            .setPosition(DJChartOptions.POSITION_HEADER)
            .setShowLabels(true)
            .build();

    drb.addChart(chart); // add chart

    DynamicReport dr = drb.build();

    return dr;
  }
  public DynamicReport buildReport() throws Exception {

    /** Creates the DynamicReportBuilder and sets the basic options for the report */
    FastReportBuilder drb = new FastReportBuilder();
    Style tStyle = new Style();
    Style headerStyle = new Style();
    headerStyle.setBackgroundColor(Color.cyan);

    Font font = new Font();
    font.setFontName("Arial");
    font.setFontSize(10);
    headerStyle.setFont(font);
    headerStyle.setHorizontalAlign(HorizontalAlign.LEFT);
    tStyle.setFont(Font.ARIAL_BIG_BOLD);
    tStyle.setTextColor(Color.BLUE);

    AbstractColumn columnName =
        ColumnBuilder.getNew()
            .setColumnProperty("name", String.class.getName())
            .setTitle("Orientation")
            .setStyle(headerStyle)
            .build();

    AbstractColumn columnEntryDate =
        ColumnBuilder.getNew()
            .setColumnProperty("entryDate", String.class.getName())
            .setTitle("")
            .setStyle(headerStyle)
            .build();

    /*drb.addColumn("State", "state", String.class.getName(),30)
    .addColumn("Branch", "branch", String.class.getName(),30)
    .addColumn("Product Line", "productLine", String.class.getName(),50)
    .addColumn("Item", "item", String.class.getName(),50)
    .addColumn("Item Code", "id", Long.class.getName(),30,true)
    .addColumn("Quantity", "quantity", Long.class.getName(),60,true)
    .addColumn("Amount", "amount", Float.class.getName(),70,true)*/
    drb.addColumn(columnName)
        .addColumn(columnEntryDate)
        // .addColumn("Student Name","name", String.class.getName(),40)
        // .addColumn("Entry Date","entryDate", String.class.getName(),30)
        // .addGroups(0)
        .addImageBanner(
            System.getProperty("user.dir") + "/WebContent/generated/reports/images/logo.jpg",
            new Integer(120),
            new Integer(76),
            ImageBanner.ALIGN_LEFT,
            ImageScaleMode.FILL)
        .setTitle("Class List")
        .setTitleStyle(tStyle)
        .setSubtitle("Boynton Beach on " + valid8r.convertDate(new Date().toString()))
        .setPrintBackgroundOnOddRows(true)
        .setUseFullPageWidth(true);

    drb.addGlobalFooterVariable(
        drb.getColumn(1),
        DJCalculation.COUNT,
        null,
        new DJValueFormatter() {

          public String getClassName() {
            return String.class.getName();
          }

          public Object evaluate(Object value, Map fields, Map variables, Map parameters) {
            return (value == null ? "0" : value.toString()) + " Students";
          }
        });

    DynamicReport dr = drb.build();

    return dr;
  }