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

Reply via email to