details: /erp/devel/pi/rev/596e719c242e
changeset: 7475:596e719c242e
user: Adrián Romero <adrianromero <at> openbravo.com>
date: Fri Jun 04 13:29:54 2010 +0200
summary: Fixes issue 0012423: Expenses Report is not printable
The change set includes a new PDF report using jasper and the required
modifications in the report servlet and html to provide a new button to launch
the new report
diffstat:
src/org/openbravo/erpCommon/ad_reports/ReportExpense.html | 26 +
src/org/openbravo/erpCommon/ad_reports/ReportExpense.java | 68 +-
src/org/openbravo/erpCommon/ad_reports/ReportExpense.jrxml | 1424 ++++++++++++
3 files changed, 1516 insertions(+), 2 deletions(-)
diffs (truncated from 1563 to 300 lines):
diff -r ad0c67047804 -r 596e719c242e
src/org/openbravo/erpCommon/ad_reports/ReportExpense.html
--- a/src/org/openbravo/erpCommon/ad_reports/ReportExpense.html Fri Jun 04
12:32:34 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_reports/ReportExpense.html Fri Jun 04
13:29:54 2010 +0200
@@ -429,6 +429,32 @@
</button>
</div>
</td>
+
+ <td class="Button_LeftAlign_ContentCell" colspan="2">
+ <div>
+ <button type="button"
+ class="ButtonLink"
+ onclick="openServletNewWindow('PDF', true,
'ReportExpense.html', 'ReportExpense', null, false, '700', '1024', true);return
false;"
+ onfocus="buttonEvent('onfocus', this);
window.status='Export Results to PDF Format'; return true;"
+ onblur="buttonEvent('onblur', this);"
+ onkeyup="buttonEvent('onkeyup', this);"
+ onkeydown="buttonEvent('onkeydown', this);"
+ onkeypress="buttonEvent('onkeypress', this);"
+ onmouseup="buttonEvent('onmouseup', this);"
+ onmousedown="buttonEvent('onmousedown', this);"
+ onmouseover="buttonEvent('onmouseover', this);
window.status='Export Results to PDF Format'; return true;"
+ onmouseout="buttonEvent('onmouseout', this);">
+ <table class="Button">
+ <tr>
+ <td class="Button_left"><img class="Button_Icon
Button_Icon_pdf" alt="Export Results to PDF Format" title="Export Results to
PDF Format" src="../../../../../web/images/blank.gif" border="0" /></td>
+ <td class="Button_text">PDF Format</td>
+ <td class="Button_right"></td>
+ </tr>
+ </table>
+ </button>
+ </div>
+ </td>
+
<td class="ContentCell">
</td>
<td class="TitleCell"></td>
diff -r ad0c67047804 -r 596e719c242e
src/org/openbravo/erpCommon/ad_reports/ReportExpense.java
--- a/src/org/openbravo/erpCommon/ad_reports/ReportExpense.java Fri Jun 04
12:32:34 2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_reports/ReportExpense.java Fri Jun 04
13:29:54 2010 +0200
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -71,7 +72,7 @@
strUserCurrencyId);
printPageDataHtml(request, response, vars, strDateFrom, strDateTo,
strcBpartnerId,
strPartner, strProject, strExpense, strCurrencyId);
- } else if (vars.commandIn("FIND")) {
+ } else if (vars.commandIn("FIND") || vars.commandIn("PDF")) {
String strDateFrom = vars.getRequestGlobalVariable("inpDateFrom",
"ReportExpense|dateFrom");
String strDateTo = vars.getRequestGlobalVariable("inpDateTo",
"ReportExpense|dateTo");
String strcBpartnerId = vars.getRequestGlobalVariable("inpcBPartnerId",
@@ -82,7 +83,13 @@
setHistoryCommand(request, "DIRECT");
String strCurrencyId = vars.getGlobalVariable("inpCurrencyId",
"ReportExpense|currency",
strUserCurrencyId);
- printPageDataHtml(request, response, vars, strDateFrom, strDateTo,
strcBpartnerId,
+ String strOutput = "html";
+ if (vars.commandIn("PDF")){
+ strOutput = "pdf";
+ printPageDataPDF(request, response, vars, strDateFrom, strDateTo,
strcBpartnerId,
+ strPartner, strProject, strExpense, strCurrencyId, strOutput);
+
+ } else printPageDataHtml(request, response, vars, strDateFrom,
strDateTo, strcBpartnerId,
strPartner, strProject, strExpense, strCurrencyId);
} else
pageError(response);
@@ -141,6 +148,63 @@
}
}
+private void printPageDataPDF(HttpServletRequest request, HttpServletResponse
response,
+ VariablesSecureApp vars, String strDateFrom, String strDateTo, String
strcBpartnerId,
+ String strPartner, String strProject, String strExpense, String
strCurrencyId, String strOutput) throws IOException,
+ ServletException {
+ if (log4j.isDebugEnabled())
+ log4j.debug("Output: PDF");
+ String discard[] = { "sectionPartner" };
+
+ ReportExpenseData[] data1 = null;
+
+ // Checks if there is a conversion rate for each of the transactions of
+ // the report
+ String strConvRateErrorMsg = "";
+ OBError myMessage = null;
+ myMessage = new OBError();
+ if (vars.commandIn("DEFAULT") && strDateFrom.equals("") &&
strDateTo.equals("")
+ && strcBpartnerId.equals("") && strPartner.equals("")) {
+ printPageDataSheet(response, vars, strDateFrom, strDateTo,
strcBpartnerId, strPartner,
+ strProject, strExpense, strCurrencyId);
+ } else {
+ String strBaseCurrencyId = Utility.stringBaseCurrencyId(this,
vars.getClient());
+ try {
+ data1 = ReportExpenseData.select(this, strCurrencyId,
strBaseCurrencyId,
+ vars.getLanguage(), Utility.getContext(this, vars, "#User_Client",
"ReportExpense"),
+ Utility.getContext(this, vars, "#AccessibleOrgTree",
"ReportExpense"), strDateFrom,
+ DateTimeData.nDaysAfter(this, strDateTo, "1"), strcBpartnerId,
strPartner, strProject,
+ (strExpense.equals("time") ? "Y" : ""),
(strExpense.equals("expense") ? "N" : ""));
+ } catch (ServletException ex) {
+ myMessage = Utility.translateError(this, vars, vars.getLanguage(),
ex.getMessage());
+ }
+ }
+ strConvRateErrorMsg = myMessage.getMessage();
+ // If a conversion rate is missing for a certain transaction, an error
+ // message window pops-up.
+ if (!strConvRateErrorMsg.equals("") && strConvRateErrorMsg != null) {
+ advisePopUp(request, response, "ERROR", Utility.messageBD(this,
"NoConversionRateHeader",
+ vars.getLanguage()), strConvRateErrorMsg);
+ } else { // Launch the report as usual, calling the JRXML file
+ if (data1 == null || data1.length == 0) {
+ discard[0] = "selEliminar";
+ data1 = ReportExpenseData.set();
+ }
+ String strReportName =
"@basedesign@/org/openbravo/erpCommon/ad_reports/ReportExpense.jrxml";
+
+ if (strOutput.equals("pdf"))
+ response.setHeader("Content-disposition",
+ "inline; filename=ReportProjectBuildingSiteJR.pdf");
+
+ HashMap<String, Object> parameters = new HashMap<String, Object>();
+ String strSubTitle = Utility.messageBD(this, "From", vars.getLanguage())
+ " " + strDateFrom
+ + " " + Utility.messageBD(this, "To", vars.getLanguage()) + " " +
strDateTo;
+ parameters.put("REPORT_SUBTITLE", strSubTitle);
+
+ renderJR(vars, response, strReportName, strOutput, parameters, data1,
null);
+ }
+ }
+
private void printPageDataSheet(HttpServletResponse response,
VariablesSecureApp vars,
String strDateFrom, String strDateTo, String strcBpartnerId, String
strPartner,
String strProject, String strExpense, String strCurrencyId) throws
IOException,
diff -r ad0c67047804 -r 596e719c242e
src/org/openbravo/erpCommon/ad_reports/ReportExpense.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/erpCommon/ad_reports/ReportExpense.jrxml Fri Jun
04 13:29:54 2010 +0200
@@ -0,0 +1,1424 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Created with iReport - A designer for JasperReports -->
+<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
+<jasperReport
+ name="ReportExpense"
+ columnCount="1"
+ printOrder="Vertical"
+ orientation="Landscape"
+ pageWidth="842"
+ pageHeight="595"
+ columnWidth="782"
+ columnSpacing="0"
+ leftMargin="30"
+ rightMargin="30"
+ topMargin="20"
+ bottomMargin="20"
+ whenNoDataType="NoPages"
+ isTitleNewPage="false"
+ isSummaryNewPage="false">
+ <property name="ireport.scriptlethandling" value="0" />
+ <property name="ireport.encoding" value="UTF-8" />
+ <import value="java.util.*" />
+ <import value="net.sf.jasperreports.engine.*" />
+ <import value="net.sf.jasperreports.engine.data.*" />
+
+ <style
+ name="default"
+ isDefault="false"
+ vAlign="Middle"
+ fontName="Bitstream Vera Sans"
+ fontSize="10"
+ >
+ </style>
+ <style
+ name="Report_Title"
+ isDefault="false"
+ fontName="Bitstream Vera Sans"
+ fontSize="18"
+ >
+ <box leftPadding="5"></box>
+ </style>
+ <style
+ name="Report_Subtitle"
+ isDefault="false"
+ forecolor="#555555"
+ fontName="Bitstream Vera Sans"
+ fontSize="14"
+ >
+ <box leftPadding="5"></box>
+ </style>
+ <style
+ name="Total_Field"
+ isDefault="false"
+ mode="Opaque"
+ forecolor="#000000"
+ backcolor="#CCCCCC"
+ vAlign="Middle"
+ >
+ <box leftPadding="5"></box>
+ </style>
+ <style
+ name="Detail_Header"
+ isDefault="false"
+ mode="Opaque"
+ forecolor="#FFFFFF"
+ backcolor="#555555"
+ vAlign="Middle"
+ >
+ <box leftPadding="5">
<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#FFFFFF"/>
+ <rightPen lineWidth="1.0"
lineStyle="Solid" lineColor="#FFFFFF"/>
+</box>
+ </style>
+ <style
+ name="GroupHeader_DarkGray"
+ isDefault="false"
+ mode="Opaque"
+ forecolor="#FFFFFF"
+ backcolor="#555555"
+ vAlign="Middle"
+ fontName="Bitstream Vera Sans"
+ fontSize="14"
+ >
+ <box leftPadding="5"></box>
+ </style>
+ <style
+ name="GroupHeader_Gray"
+ isDefault="false"
+ mode="Opaque"
+ backcolor="#999999"
+ >
+ </style>
+ <style
+ name="Detail_Line"
+ isDefault="false"
+ >
+
+ <conditionalStyle>
+ <conditionExpression><![CDATA[new
Boolean($V{PROJECTNAME_COUNT}.intValue()%2==0)]]></conditionExpression>
+ <style
+ name="Detail_Line"
+ isDefault="false"
+ mode="Opaque"
+ backcolor="#CCCCCC"
+ >
+ </style>
+ </conditionalStyle>
+ </style>
+ <style
+ name="Total_Gray"
+ isDefault="false"
+ mode="Opaque"
+ forecolor="#000000"
+ backcolor="#CCCCCC"
+ >
+ </style>
+
+ <parameter name="ATTACH" isForPrompting="false"
class="java.lang.String"/>
+ <parameter name="BASE_WEB" isForPrompting="false"
class="java.lang.String"/>
+ <parameter name="BASE_DESIGN" isForPrompting="false"
class="java.lang.String"/>
+ <parameter name="LANGUAGE" isForPrompting="false"
class="java.lang.String">
+ <defaultValueExpression
><![CDATA["en_US"]]></defaultValueExpression>
+ </parameter>
+ <parameter name="USER_CLIENT" isForPrompting="false"
class="java.lang.String">
+ <defaultValueExpression
><![CDATA["(1000000)"]]></defaultValueExpression>
+ </parameter>
+ <parameter name="USER_ORG" isForPrompting="false"
class="java.lang.String">
+ <defaultValueExpression
><![CDATA["(0)"]]></defaultValueExpression>
+ </parameter>
+ <parameter name="REPORT_TITLE" isForPrompting="false"
class="java.lang.String">
+ <defaultValueExpression ><![CDATA["REPORT
TITLE"]]></defaultValueExpression>
+ </parameter>
+ <parameter name="REPORT_SUBTITLE" isForPrompting="false"
class="java.lang.String"/>
+ <parameter name="NUMBERFORMAT" isForPrompting="false"
class="java.text.DecimalFormat"/>
+ <parameter name="LOCALE" isForPrompting="false"
class="java.util.Locale"/>
+ <queryString><![CDATA[SELECT C_CURRENCY_ISOSYM('102') AS CONVISOSYM,
CBE.NAME AS EMPLOYEE, (CASE S_L.ISTIMEREPORT WHEN 'Y' THEN S_L.QTY ELSE 0 END)
*
+
C_CURRENCY_CONVERT(C_CALCULATECOST_CATSALARY(C_CALCULATE_CATSALARY(s.c_bpartner_id,
(CASE WHEN S_L.DATEEXPENSE IS NULL THEN S.DATEREPORT ELSE S_L.DATEEXPENSE
END)), (CASE WHEN S_L.DATEEXPENSE IS NULL THEN S.DATEREPORT ELSE
S_L.DATEEXPENSE END)),
+ '100', '102', (CASE WHEN S_L.DATEEXPENSE IS NULL THEN S.DATEREPORT
ELSE S_L.DATEEXPENSE END), NULL, S_L.AD_CLIENT_ID, S_L.AD_ORG_ID) AS COST,
+ CBC.NAME AS NAME, (P.VALUE || ' - ' ||P.NAME) AS DESCR,
M_PRODUCT.NAME AS PRODUCTNAME, C_UOM.NAME AS UOMNAME,
+ (CASE S_L.ISTIMEREPORT WHEN 'N' THEN S_L.QTY ELSE 0 END) AS QTY,
(CASE S_L.ISTIMEREPORT WHEN 'Y' THEN S_L.QTY ELSE 0 END) AS HORAS,
+ (CASE WHEN S_L.DATEEXPENSE IS NULL THEN S.DATEREPORT ELSE
S_L.DATEEXPENSE END) AS DATEEXPENSE,
+ (CASE WHEN S_L.ISTIMEREPORT ='N' THEN
C_CURRENCY_CONVERT(COALESCE(S_L.EXPENSEAMT,0), S_L.C_CURRENCY_ID, '102', (CASE
WHEN S_L.DATEEXPENSE IS NULL THEN S.DATEREPORT ELSE S_L.DATEEXPENSE END), NULL,
S_L.AD_CLIENT_ID, S_L.AD_ORG_ID) ELSE 0 END) AS INVOICEPRICE,
+ AD_MESSAGE_GET2(S.PROCESSED,'140') AS PROCESSED, (CASE WHEN
S_L.DESCRIPTION IS NULL THEN S.DESCRIPTION ELSE S_L.DESCRIPTION END) AS
DESCRIPTION, S_L.S_TIMEEXPENSELINE_ID, S.DOCUMENTNO
+ FROM S_TIMEEXPENSE S, C_BPARTNER CBE, M_PRODUCT, C_UOM,
S_TIMEEXPENSELINE S_L
+ LEFT JOIN C_PROJECT P ON S_L.C_PROJECT_ID = P.C_PROJECT_ID
+ LEFT JOIN C_BPARTNER CBC ON S_L.C_BPARTNER_ID = CBC.C_BPARTNER_ID
+ WHERE S.S_TIMEEXPENSE_ID = S_L.S_TIMEEXPENSE_ID
+ AND s.C_BPARTNER_ID=CBE.C_BPARTNER_ID
+ AND S_L.M_PRODUCT_ID = M_PRODUCT.M_PRODUCT_ID
+ AND S_L.C_UOM_ID = C_UOM.C_UOM_ID
+ AND S.AD_CLIENT_ID IN ('1')
+ AND S.AD_ORG_ID IN ('1')
+ AND 1=1
+ ORDER BY NAME, DESCR, EMPLOYEE, PRODUCTNAME, DATEEXPENSE
DESC]]></queryString>
+
+ <field name="convisosym" class="java.lang.String"/>
+ <field name="employee" class="java.lang.String"/>
+ <field name="cost" class="java.math.BigDecimal"/>
+ <field name="name" class="java.lang.String"/>
+ <field name="descr" class="java.lang.String"/>
+ <field name="productname" class="java.lang.String"/>
+ <field name="uomname" class="java.lang.String"/>
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
lucky parental unit. See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits