Reporte de ventas

Este la parte que falta de nuestro diagrama de casos usos que esta al inicio del tutorial, los reportes los vamos a realizar con jasperreports ya se pretende realizar un reporte por tipo de ventas online y ventas caja por detealle y total este sera parametrizado por día del año.

Comenzemos a posiscionarnos en nuestro proyecto padre productmarket y nos vamos al archivo pom.xml vamos agregar las librerías necesarias para que se ejecuten nuestro reportes agregando las sigueintes líneas:
<jasperreports.version>6.5.1</jasperreports.version>
<jackson-core.version>2.8.5</jackson-core.version>
<groovy-all.version>2.4.5</groovy-all.version>

 <dependency>
          <groupId>net.sf.jasperreports</groupId>
          <artifactId>jasperreports</artifactId>
         <version>${jasperreports.version}</version>
         <exclusions>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
        </exclusion>
      </exclusions>
         </dependency>
        
        
      <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson-core.version}</version>
     </dependency>
       
       <dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>${groovy-all.version}</version>
    </dependency>


Nuestro archivo pom.xml final quedaría de la siguente forma:
 
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tutosoftware.productmarket</groupId>
  <artifactId>productmarket</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>ProductMarket</name>
  <properties>
		<pmc.version>0.0.1-SNAPSHOT</pmc.version>
		<spring.version>4.3.7.RELEASE</spring.version>
		<hibernate.version>5.2.9.Final</hibernate.version>
		<apachetiles.version>3.0.7</apachetiles.version>
		<mysql.version>5.1.34</mysql.version>
		<jstl.version>1.2</jstl.version>
		<jsp-api.version>2.1</jsp-api.version>
		<servlet-api.version>3.1.0</servlet-api.version>
		<hibernatevalidator.version>5.3.4.Final</hibernatevalidator.version>
		<jasperreports.version>6.5.1</jasperreports.version>
		<jackson-core.version>2.8.5</jackson-core.version>
		<groovy-all.version>2.4.5</groovy-all.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
  <dependencyManagement>
  <dependencies>
  
      <dependency>
				<groupId>com.tutosoftware.productmarket</groupId>
				<artifactId>productmarket-core</artifactId>
				<version>${pmc.version}</version>
			</dependency>
  
  
  
  
  
   <!-- Spring 4 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
       
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>${apachetiles.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-api</artifactId>
            <version>${apachetiles.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${apachetiles.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${apachetiles.version}</version>
        </dependency>
       
       
   
       
       
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
       
       <dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>${spring.version}</version>
			</dependency>
       
       
       
       
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
         <!-- bean validation  dependencies -->
        <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>${hibernatevalidator.version}</version>
    </dependency>
        
         <!-- Hibernate  dependencies -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        
         <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
          <!-- mysql  dependencie -->
        
        <dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>${mysql.version}</version>
	   </dependency>
        
         <!-- Servlet and JSP -->
        <dependency>
				<groupId>javax.servlet.jsp</groupId>
				<artifactId>jsp-api</artifactId>
				<version>${jsp-api.version}</version>
				<scope>provided</scope>
			</dependency>
			
			
         <dependency>
	     <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	   <version>${servlet-api.version}</version>
        </dependency>
			
			
			
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>jstl</artifactId>
				<version>${jstl.version}</version>
			</dependency>
        
        
           <dependency>
          <groupId>net.sf.jasperreports</groupId>
          <artifactId>jasperreports</artifactId>
         <version>${jasperreports.version}</version>
         <exclusions>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId> 
          <artifactId>jackson-core</artifactId>
        </exclusion>
      </exclusions>
         </dependency>
        
        
           <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson-core.version}</version>
     </dependency>
       
       <dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>${groovy-all.version}</version>
    </dependency>
        
        
        
        
        
        
        
        
        </dependencies>
  </dependencyManagement>
   <build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
			        <verbose>true</verbose>
			        <fork>true</fork>
			        <executable>${JAVA_HOME}/bin/javac</executable>
			        <compilerVersion>1.8</compilerVersion>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
		  		<version>2.4.2</version>
		        <configuration>
		          <jvm>${JAVA_HOME}/bin/java</jvm>
		          <forkMode>once</forkMode>
		        </configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-enforcer-plugin</artifactId>
				<version>1.3.1</version>
				<inherited>true</inherited>
				<executions>
					<execution>
						<id>enforce</id>
						<configuration>
							<rules>
								<DependencyConvergence />
								<requireJavaVersion>
									<version>1.8</version>
								</requireJavaVersion>
							</rules>
						</configuration>
						<goals>
							<goal>enforce</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
		
		
		<pluginManagement>
		    <plugins>
		      <plugin>
		        <groupId>org.eclipse.m2e</groupId>
		        <artifactId>lifecycle-mapping</artifactId>
		        <version>1.0.0</version>
		        <configuration>
		          <lifecycleMappingMetadata>
		            <pluginExecutions>
		              <pluginExecution>
		                <pluginExecutionFilter>
		                  <groupId>org.apache.maven.plugins</groupId>
		                  <artifactId>maven-enforcer-plugin</artifactId>
		                  <versionRange>[1.0.0,)</versionRange>
		                  <goals>
		                    <goal>enforce</goal>
		                  </goals>
		                </pluginExecutionFilter>
		                <action>
		                  <ignore />
		                </action>
		              </pluginExecution>
		            </pluginExecutions>
		          </lifecycleMappingMetadata>
		        </configuration>
		      </plugin>
		    </plugins>
		</pluginManagement>
	</build>
   <modules>
   	<module>productmarket-admin</module>
   	<module>productmarket-core</module>
   	<module>productmarket-caja</module>
   	<module>productmarket-ventaonline</module>
   </modules>
</project>
 

Ahora nos vamos a nuestro proyecto productmarket-admin y en el archivo pom.xml agregamos la depedencias quedando de la siguiente forma:
  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.tutosoftware.productmarket</groupId>
    <artifactId>productmarket</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>productmarket-admin</artifactId>
  <packaging>war</packaging>
  <name>Productmarket Admin</name>
  <build>
		<finalName>productmarketadmin</finalName>
		<plugins>	
			<plugin>            
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
					<webResources>
						<resource>
							<!-- this is relative to the pom.xml directory -->
							<directory>src/main/webapp/WEB-INF</directory>
							<targetPath>WEB-INF</targetPath>
						</resource>
					</webResources>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
	<dependency>
				<groupId>com.tutosoftware.productmarket</groupId>
				<artifactId>productmarket-core</artifactId>
	</dependency>
	
	
	
   <!-- Spring 4 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
         <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-beans</artifactId>
         </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        
         <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
       </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-api</artifactId>
           </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
           </dependency>
        <!-- Hibernate  dependencies -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>
        
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
        </dependency>
        
       <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
       </dependency>
        
          <!-- mysql  dependencie -->
        
        <dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	   </dependency>
        
         <!-- Servlet and JSP -->
        <dependency>
				<groupId>javax.servlet.jsp</groupId>
				<artifactId>jsp-api</artifactId>
			</dependency>
			
			
         <dependency>
	     <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
        </dependency>
			
		<dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>jstl</artifactId>
       </dependency>	
			

			
		<dependency>
          <groupId>net.sf.jasperreports</groupId>
          <artifactId>jasperreports</artifactId>
         </dependency>
        
       
     <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
     </dependency>
       
       <dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
</dependency>
        
        </dependencies>
</project>
  

Ahora nos vamos al directorio src/main/webapp/WEB-INF/views/tiles modificamos el archivo tiles.xml aqui vamos a agregar las vistas de los reportes quedando de la siguiente manera:
 
  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>  
 
   <!-- Base Definition -->
   <definition name="base-definitionlogin" 
       template="/WEB-INF/views/tiles/adminLogin.jsp">  
       <put-attribute name="title" value="" />  
       <put-attribute name="header" value="/WEB-INF/views/tiles/headerLogin.jsp" />  
        <put-attribute name="body" value="" />  
       <put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />  
   </definition>  
   
   
   
   
   <definition name="base-definition" 
       template="/WEB-INF/views/tiles/admin.jsp">  
       <put-attribute name="title" value="" />  
       <put-attribute name="header" value="/WEB-INF/views/tiles/header.jsp" />  
       <put-attribute name="menu" value="/WEB-INF/views/tiles/menu.jsp" />  
       <put-attribute name="body" value="" />  
       <put-attribute name="footer" value="/WEB-INF/views/tiles/footer.jsp" />  
   </definition>  
 
  <definition name="login" extends="base-definitionlogin">  
       <put-attribute name="title" value="Bienvenido" />  
       <put-attribute name="body" value="/WEB-INF/views/login.jsp" />  
   </definition>  
 
 
 
   <!-- Home Page -->
   <definition name="home" extends="base-definition">  
       <put-attribute name="title" value="Bienvenido" />  
       <put-attribute name="body" value="/WEB-INF/views/home.jsp" />  
   </definition>  

   <!-- Product Page -->
   <definition name="agregarUsuario" extends="base-definition">  
       <put-attribute name="title" value="Agregar usuario" />  
       <put-attribute name="body" value="/WEB-INF/views/agregarUsuario.jsp" />  
   </definition>  
      
       <definition name="verUsuarios" extends="base-definition">  
       <put-attribute name="title" value="Ver usuarios" />  
       <put-attribute name="body" value="/WEB-INF/views/verUsuarios.jsp" />  
   </definition>
      
      <definition name="modificarUsuario" extends="base-definition">  
       <put-attribute name="title" value="Ver usuarios" />  
       <put-attribute name="body" value="/WEB-INF/views/modificarUsuario.jsp" />  
   </definition>
      
     <definition name="agregarProducto" extends="base-definition">  
       <put-attribute name="title" value="Agregar producto" />  
       <put-attribute name="body" value="/WEB-INF/views/agregarProducto.jsp" />  
   </definition> 
   <definition name="verProductos" extends="base-definition">  
       <put-attribute name="title" value="Ver productos" />  
       <put-attribute name="body" value="/WEB-INF/views/verProductos.jsp" />  
   </definition> 
   
   
   <definition name="modificarProducto" extends="base-definition">  
       <put-attribute name="title" value="Actualizar producto" />  
       <put-attribute name="body" value="/WEB-INF/views/modificarProducto.jsp" />  
   </definition>
 
 
 <definition name="buscarReporteVentasOnlineDetalle" extends="base-definition">  
       <put-attribute name="title" value="buscar reporte" />  
       <put-attribute name="body" value="/WEB-INF/views/buscarReporteVentasOnlineDetalle.jsp" />  
   </definition>
 
 <definition name="reporteVentasOnlineDetalle" extends="base-definition">  
       <put-attribute name="title" value="Reporte ventas detalle online" />  
       <put-attribute name="body" value="/WEB-INF/views/reporteVentasOnlineDetalle.jsp" />  
   </definition>
   
   
   <definition name="buscarReporteVentasOnline" extends="base-definition">  
       <put-attribute name="title" value="buscar reporte" />  
       <put-attribute name="body" value="/WEB-INF/views/buscarReporteVentasOnline.jsp" />  
   </definition>
 
 <definition name="reporteVentasOnline" extends="base-definition">  
       <put-attribute name="title" value="Reporte ventas detalle online" />  
       <put-attribute name="body" value="/WEB-INF/views/reporteVentasOnline.jsp" />  
   </definition>
 
 <definition name="buscarReporteVentasDetalle" extends="base-definition">  
       <put-attribute name="title" value="buscar reporte" />  
       <put-attribute name="body" value="/WEB-INF/views/buscarReporteVentasDetalle.jsp" />  
   </definition>
 
 <definition name="reporteVentasDetalle" extends="base-definition">  
       <put-attribute name="title" value="Reporte ventas detalle online" />  
       <put-attribute name="body" value="/WEB-INF/views/reporteVentasDetalle.jsp" />  
   </definition>
   
   <definition name="buscarReporteVentas" extends="base-definition">  
       <put-attribute name="title" value="buscar reporte" />  
       <put-attribute name="body" value="/WEB-INF/views/buscarReporteVentas.jsp" />  
   </definition>
 
 <definition name="reporteVentas" extends="base-definition">  
       <put-attribute name="title" value="Reporte ventas detalle online" />  
       <put-attribute name="body" value="/WEB-INF/views/reporteVentas.jsp" />  
   </definition>
</tiles-definitions>
 
 
 
  

En el directorio src/main/webapp/WEB-INF/views/tiles vamos a modificar el archivo admin.jsp agregandole unas líneas de javascript y jquery ya que vamos a modificar el menú el archivo queda de la siguiente forma:
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;UTF-8">
<link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/style.css" />
<link type="text/css" rel="stylesheet" href="css/materialize.min.css"  media="screen,projection"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
 <script type="text/javascript" src="js/materialize.min.js"></script>
<title><tiles:getAsString name="title" /></title>
 <script type="text/javascript">
 $( document ).ready(function(){
	 $(".usuario-button").dropdown();
	 $(".producto-button").dropdown();
	 $(".reporte-button").dropdown();
 });
 
 </script>
</head>
<body>
       <div class="container">

       <header id="header">
            <tiles:insertAttribute name="header" />
        </header>
     
        <section id="sidemenu">
            <tiles:insertAttribute name="menu" />
        </section>
             
        <section id="site-content">
            <tiles:insertAttribute name="body" />
        </section>
         
        <footer id="footer">
            <tiles:insertAttribute name="footer" />
        </footer>
        
        </div>

</body>
</html>
 
 
  

Ahora modificamos el archivo menu.jsp que esta en el ditectorio src/main/webapp/WEB-INF/views/tiles quedando de la siguiente forma:
 <!-- Dropdown Structure -->
<ul id="dropdown1" class="dropdown-content">
   <li><a href="agregarUsuario.html">Agregar Usuario</a></li>
       <li><a href="verUsuarios.html">Ver Usuarios</a></li>
</ul>
<ul id="dropdown2" class="dropdown-content">
 <li><a href="agregarProducto.html">Agregar Producto</a></li>
  <li><a href="verProductos.html">Ver Productos</a></li>  
</ul>

<ul id="dropdown3" class="dropdown-content">
  <li><a href="ventasOnlineDetalle.html">Reporte Ventas Online Detalle</a></li>
  <li><a href="ventasOnline.html">Reporte Ventas Online</a></li>
  <li><a href="ventasDetalle.html">Reporte Ventas Detalle</a></li>
  <li><a href="ventas.html">Reporte Ventas(Caja)</a></li>
</ul>




<nav>
<div class="nav-wrapper">
    <a href="#!" class="brand-logo">ProductMarket</a>
    <ul class="right hide-on-med-and-down">
      <li><a class="usuario-button" href="#!" data-activates="dropdown1">Usuarios<i class="material-icons right">arrow_drop_down</i></a></li>
      <li><a class="producto-button" href="#!" data-activates="dropdown2">Productos<i class="material-icons right">arrow_drop_down</i></a></li>
      <li><a class="reporte-button" href="#!" data-activates="dropdown3">Reportes de Ventas<i class="material-icons right">arrow_drop_down</i></a></li>
      <li><a href="salir.html">Salir</a></li>
    
    </ul>
  </div>
</nav>
  

Ahora descargamos el siguiente zip y lo descomprimimos y pegamos el archivo materialize.min.js en el directorio src/main/webapp/js ya que a la hora de elegir nuestra fecha de reporteo nos aparecera en español.
Descargar materialize.min.js

En src/main/webapp creamos el directorio jasper aquí es donde se alojaran todos nuestro reportes.Ahora descargamos los reportes y los pegamos en el directorio jasper si quieres ver como estan constituidos abrir el archivo .jrxml con ireport y podra ver su codigo xml.Ya que este tutorial es de spring mvc y no de jasperreports eso tal vez lo expliquemos en otra sección.
Descargar archivo .jasper y .jrxml

Ahora vamos a crear las vistas nos vamos al directorio src/main/webapp/WEB-INF/views y creamos el jsp buscarReporteVentas.jsp y escribimos el siguiente código:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
 <c:when test="${userObj.nombreUsuario != null}">

<style type="text/css">
		
		span.campoConError {
			color: red;
		}
		
	</style>	
<h2>Generar Reporte Ventas Totales</h2>
<form action="reporteVentas.html">
<div class="row">
 <div class="input-field col s5">
 
 <input type="text" name="fecha" id="fecha" class="datepicker">
 <label for="fecha">Seleccionar fecha</label>
</div>
</div>

<div class="row">
                        <div class="input-field col">
                            <input type="submit" value="Mostrar Reporte" class="btn waves-effect"/>
                            
                        </div>
                    </div>
                    
                    <p><span class="red accent-4">${vacio}</span></p>	



 </form> 
<script>
$('.datepicker').pickadate({
    selectMonths: true, // Creates a dropdown to control month
    selectYears: 15, // Creates a dropdown of 15 years to control year,
    today: 'Hoy',
    clear: 'Limpiar',
    close: 'Cerrar',
    format: 'yyyy-mm-dd' ,
    closeOnSelect: true // Close upon selecting a date,
  });



</script>




 </c:when>    
    <c:otherwise>
      <c:redirect  url="salir.html"></c:redirect>  
    </c:otherwise>
</c:choose>

 

Los tres pantallas siguientes son similares, ya que por falta de tiempo no pude realizar una vista mas compleja para realizar los cuatro reportes en una sola pero buscarReporteVentasDetalle.jsp queda de la siguiente forma.
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
 <c:when test="${userObj.nombreUsuario != null}">

<style type="text/css">
		
		span.campoConError {
			color: red;
		}
		
	</style>	
<h2>Generar Reporte VentasDetalle</h2>
<form action="reporteVentasDetalle.html">
<div class="row">
 <div class="input-field col s5">
 
 <input type="text" name="fecha" id="fecha" class="datepicker">
 <label for="fecha">Seleccionar fecha</label>
</div>
</div>

<div class="row">
                        <div class="input-field col">
                            <input type="submit" value="Mostrar Reporte" class="btn waves-effect"/>
                            
                        </div>
                    </div>
                    
                    <p><span class="red accent-4">${vacio}</span></p>	



 </form> 
<script>
$('.datepicker').pickadate({
    selectMonths: true, // Creates a dropdown to control month
    selectYears: 15, // Creates a dropdown of 15 years to control year,
    today: 'Hoy',
    clear: 'Limpiar',
    close: 'Cerrar',
    format: 'yyyy-mm-dd' ,
    closeOnSelect: true // Close upon selecting a date,
  });



</script>




 </c:when>    
    <c:otherwise>
      <c:redirect  url="salir.html"></c:redirect>  
    </c:otherwise>
</c:choose>
 
 
 

buscarReporteVentasOnline.jsp queda de esta menera:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
 <c:when test="${userObj.nombreUsuario != null}">

<style type="text/css">
		
		span.campoConError {
			color: red;
		}
		
	</style>	
<h2>Generar Reporte VentasOnlineTotales</h2>
<form action="reporteVentasOnline.html">
<div class="row">
 <div class="input-field col s5">
 
 <input type="text" name="fecha" id="fecha" class="datepicker">
 <label for="fecha">Seleccionar fecha</label>
</div>
</div>

<div class="row">
                        <div class="input-field col">
                            <input type="submit" value="Mostrar Reporte" class="btn waves-effect"/>
                            
                        </div>
                    </div>
                    
                    <p><span class="red accent-4">${vacio}</span></p>	



 </form> 
<script>
$('.datepicker').pickadate({
    selectMonths: true, // Creates a dropdown to control month
    selectYears: 15, // Creates a dropdown of 15 years to control year,
    today: 'Hoy',
    clear: 'Limpiar',
    close: 'Cerrar',
    format: 'yyyy-mm-dd' ,
    closeOnSelect: true // Close upon selecting a date,
  });



</script>




 </c:when>    
    <c:otherwise>
      <c:redirect  url="salir.html"></c:redirect>  
    </c:otherwise>
</c:choose>
 

y buscarReporteVentasOnlineDetalle.jsp es igual:
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:choose>
 <c:when test="${userObj.nombreUsuario != null}">

<style type="text/css">
		
		span.campoConError {
			color: red;
		}
		
	</style>	
<h2>Generar Reporte VentasOnlineDetalle</h2>
<form action="reporteVentasOnlineDetalle.html">
<div class="row">
 <div class="input-field col s5">
 
 <input type="text" name="fecha" id="fecha" class="datepicker">
 <label for="fecha">Seleccionar fecha</label>
</div>
</div>

<div class="row">
                        <div class="input-field col">
                            <input type="submit" value="Mostrar Reporte" class="btn waves-effect"/>
                            
                        </div>
                    </div>
                    
                    <p><span class="red accent-4">${vacio}</span></p>	



 </form> 
<script>
$('.datepicker').pickadate({
    selectMonths: true, // Creates a dropdown to control month
    selectYears: 15, // Creates a dropdown of 15 years to control year,
    today: 'Hoy',
    clear: 'Limpiar',
    close: 'Cerrar',
    format: 'yyyy-mm-dd' ,
    closeOnSelect: true // Close upon selecting a date,
  });



</script>




 </c:when>    
    <c:otherwise>
      <c:redirect  url="salir.html"></c:redirect>  
    </c:otherwise>
</c:choose>
 
 
 

Ahora creamos los jsp reporteVentas.jsp,reporteVentasDetalle.jsp,reporteVentasOnline.jsp y reporteVentasOnlineDetalle.jsp sin ninguna etiqueta vacios ya que seran las vistas que mostrarán en reporte las ventas en pdf.
Nos vamos a src/main/java y en paquete com.tutosoftware.productmarket.controller creamos el clase controller VentasController.java en este algo que quiero comentar sobre esta clase,por falta de tiempo y manejo de reportes en jasperreports me vi obligado a utlizar jdbc para conectar el reporteador, y además rompi con el paradigma de patrones de diseño, entonces como dice mi jefe se los dejo de tarea arreglarlos para que funcione con dao,servicios y hibernate pero aqui le dejo el código para que prueben las pantallas y discupen mi falta de experienca con el manejo de jasperreports lo hice funcionar pero no de la manera correcta pero basta de excusas y aqui les dejo el código:
package com.tutosoftware.productmarket.controller;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

import javax.naming.NamingException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;



@Controller
public class VentasController {
	public VentasController(){
		
	}
	
	@RequestMapping("/ventasOnlineDetalle")
	public  ModelAndView mostrarFormularioVentasOnlineDetalle(ModelMap model) {
		
		
		
		return new ModelAndView("buscarReporteVentasOnlineDetalle");
	}
	
	
	@RequestMapping("/ventasOnline")
	public  ModelAndView mostrarFormularioVentasOnline(ModelMap model) {
		
		
		
		return new ModelAndView("buscarReporteVentasOnline");
	}
	
	
	
	
	
	
	@RequestMapping("/ventasDetalle")
	public  ModelAndView mostrarFormularioVentasDetalle(ModelMap model) {
		
		
		
		return new ModelAndView("buscarReporteVentasDetalle");
	}
	
	
	@RequestMapping("/ventas")
	public  ModelAndView mostrarFormularioVentas(ModelMap model) {
		
		
		
		return new ModelAndView("buscarReporteVentas");
	}
	
	
	
	@RequestMapping("/reporteVentasOnlineDetalle")
	public  ModelAndView mostrarReporteVentasOnlineDetalle(@RequestParam("fecha") String fecha,ModelMap model,
			HttpServletRequest request, HttpServletResponse response)
					throws ParseException  {
		
		String reportFileName = "ventasonlinedetalle";
		
		if(fecha.trim().length() != 0 ){
			Connection conn = null;
			try {
				try {
				 
					 Class.forName("com.mysql.jdbc.Driver");
				 	} catch (ClassNotFoundException e) {
				 		System.out.println("Please include Classpath Where your MySQL Driver is located");
				 		e.printStackTrace(); 
				 	}  

				 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/productmarketdb","admin","adminlara");

				 
			 if (conn != null)
			 {
				 System.out.println("Database Connected");
			 }
			 else
			 {
				 System.out.println(" connection Failed ");
			 }
				
				
			 HashMap<String,Object> parametros = new HashMap<String,Object>();

				parametros.put("fecha",fecha);
				
				
				  
				   
				
			        
					JasperReport jasperReport = getCompiledFile(reportFileName,request);

				

					generateReportPDF(response,parametros, jasperReport, conn); // For PDF report

				    

			   } catch (Exception sqlExp) {

				   System.out.println( "Exception::" + sqlExp.toString());

			   } finally {

		    		try {

		    		if (conn != null) {
			    		conn.close();
			    		conn = null;
		    		}

		    		} catch (SQLException expSQL) {

		    			System.out.println("SQLExp::CLOSING::" + expSQL.toString());

		    		}

			       }

			
			

			
			
			
			
			
			
			
			
			return new ModelAndView("reporteVentasOnlineDetalle");
		}else{
			model.put("vacio","Introduce fecha");
			return new ModelAndView("buscarReporteVentasOnlineDetalle");
		}
		
		
		
	}
	
	@RequestMapping("/reporteVentasOnline")
	public  ModelAndView mostrarReporteVentasOnline(@RequestParam("fecha") String fecha,ModelMap model,
			HttpServletRequest request, HttpServletResponse response)
					throws ParseException  {
		
		String reportFileName = "ventasonline";
		
		if(fecha.trim().length() != 0 ){
			Connection conn = null;
			try {
				try {
				 
					 Class.forName("com.mysql.jdbc.Driver");
				 	} catch (ClassNotFoundException e) {
				 		System.out.println("Please include Classpath Where your MySQL Driver is located");
				 		e.printStackTrace(); 
				 	}  

				 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/productmarketdb","admin","adminlara");

				 
			 if (conn != null)
			 {
				 System.out.println("Database Connected");
			 }
			 else
			 {
				 System.out.println(" connection Failed ");
			 }
				
				
			 HashMap<String,Object> parametros = new HashMap<String,Object>();

				parametros.put("fecha",fecha);
				
				
				  
				   
				
			        
					JasperReport jasperReport = getCompiledFile(reportFileName,request);

				

					generateReportPDF(response,parametros, jasperReport, conn); // For PDF report

				    

			   } catch (Exception sqlExp) {

				   System.out.println( "Exception::" + sqlExp.toString());

			   } finally {

		    		try {

		    		if (conn != null) {
			    		conn.close();
			    		conn = null;
		    		}

		    		} catch (SQLException expSQL) {

		    			System.out.println("SQLExp::CLOSING::" + expSQL.toString());

		    		}

			       }

			
			

			
			
			
			
			
			
			
			
			return new ModelAndView("reporteVentasOnline");
		}else{
			model.put("vacio","Introduce fecha");
			return new ModelAndView("buscarReporteVentasOnline");
		}
		
		
		
	}
	@RequestMapping("/reporteVentasDetalle")
	public  ModelAndView mostrarReporteVentasDetalle(@RequestParam("fecha") String fecha,ModelMap model,
			HttpServletRequest request, HttpServletResponse response)
					throws ParseException  {
		
		String reportFileName = "ventadetalle";
		
		if(fecha.trim().length() != 0 ){
			Connection conn = null;
			try {
				try {
				 
					 Class.forName("com.mysql.jdbc.Driver");
				 	} catch (ClassNotFoundException e) {
				 		System.out.println("Please include Classpath Where your MySQL Driver is located");
				 		e.printStackTrace(); 
				 	}  

				 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/productmarketdb","admin","adminlara");

				 
			 if (conn != null)
			 {
				 System.out.println("Database Connected");
			 }
			 else
			 {
				 System.out.println(" connection Failed ");
			 }
				
				
			 HashMap<String,Object> parametros = new HashMap<String,Object>();

				parametros.put("fecha",fecha);
				
				
				  
				   
				
			        
					JasperReport jasperReport = getCompiledFile(reportFileName,request);

				

					generateReportPDF(response,parametros, jasperReport, conn); // For PDF report

				    

			   } catch (Exception sqlExp) {

				   System.out.println( "Exception::" + sqlExp.toString());

			   } finally {

		    		try {

		    		if (conn != null) {
			    		conn.close();
			    		conn = null;
		    		}

		    		} catch (SQLException expSQL) {

		    			System.out.println("SQLExp::CLOSING::" + expSQL.toString());

		    		}

			       }

			
			

			
			
			
			
			
			
			
			
			return new ModelAndView("reporteVentasDetalle");
		}else{
			model.put("vacio","Introduce fecha");
			return new ModelAndView("buscarReporteVentasDetalle");
		}
		
		
		
	}
	@RequestMapping("/reporteVentas")
	public  ModelAndView mostrarReporteVentas(@RequestParam("fecha") String fecha,ModelMap model,
			HttpServletRequest request, HttpServletResponse response)
					throws ParseException  {
		
		String reportFileName = "ventas";
		
		if(fecha.trim().length() != 0 ){
			Connection conn = null;
			try {
				try {
				 
					 Class.forName("com.mysql.jdbc.Driver");
				 	} catch (ClassNotFoundException e) {
				 		System.out.println("Please include Classpath Where your MySQL Driver is located");
				 		e.printStackTrace(); 
				 	}  

				 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/productmarketdb","admin","adminlara");

				 
			 if (conn != null)
			 {
				 System.out.println("Database Connected");
			 }
			 else
			 {
				 System.out.println(" connection Failed ");
			 }
				
				
			 HashMap<String,Object> parametros = new HashMap<String,Object>();

				parametros.put("fecha",fecha);
				
				
				  
				   
				
			        
					JasperReport jasperReport = getCompiledFile(reportFileName,request);

				

					generateReportPDF(response,parametros, jasperReport, conn); // For PDF report

				    

			   } catch (Exception sqlExp) {

				   System.out.println( "Exception::" + sqlExp.toString());

			   } finally {

		    		try {

		    		if (conn != null) {
			    		conn.close();
			    		conn = null;
		    		}

		    		} catch (SQLException expSQL) {

		    			System.out.println("SQLExp::CLOSING::" + expSQL.toString());

		    		}

			       }

			
			

			
			
			
			
			
			
			
			
			return new ModelAndView("reporteVentas");
		}else{
			model.put("vacio","Introduce fecha");
			return new ModelAndView("buscarReporteVentas");
		}
		
		
		
	}
	private JasperReport getCompiledFile(String fileName,HttpServletRequest request) throws JRException {
		System.out.println("path " + request.getSession().getServletContext().getRealPath("/jasper/" + fileName + ".jasper"));
		File reportFile = new File(request.getSession().getServletContext().getRealPath("/jasper/" + fileName + ".jasper"));
		// If compiled file is not found, then compile XML template
		if (!reportFile.exists()) {
		           JasperCompileManager.compileReportToFile(request.getSession().getServletContext().getRealPath("/jasper/" + fileName + ".jrxml"),request.getSession().getServletContext().getRealPath("/jasper/" + fileName + ".jasper"));
		    }
	    	JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportFile.getPath());
		   return jasperReport;
		}
	
	
	private void generateReportPDF (HttpServletResponse resp, Map<String,Object> parameters, JasperReport jasperReport, Connection conn)throws JRException, NamingException, SQLException, IOException {
		byte[] bytes = null;
		bytes = JasperRunManager.runReportToPdf(jasperReport,parameters,conn);
		resp.reset();
		resp.resetBuffer();
		resp.setContentType("application/pdf");
		resp.setContentLength(bytes.length);
		ServletOutputStream ouputStream = resp.getOutputStream();
		ouputStream.write(bytes, 0, bytes.length);
		ouputStream.flush();
		ouputStream.close();
	} 

}



 

Corremos nuestro proyecto nos logueamos y elegimos en el menu la opcion de Reporte ventas online detalle
java project
Seleccionamos la fecha y le damos en cerrar:
java project
Presionamos mostrar reporte:
java project

Conclusión

Como hemos visto hasta aquí termina nuestro tutorial quedan algunos detalles los cuales son los siguientes:
Todo esto se propondría para una segunda versión ya un poco mejorada por eso la intención de utlizar git.

Código

El código lo puedes descargar de https://github.com/josmarlara/productmarket.git donde obtendrás el proyecto completo realizado en eclipse,java 1.8 con tomcat versión 8.

Ejemplo

Hoy 28/01/2021 lo logramos subir a la web si estas viendo este ejemplo el modulo administrador puedes acceder con:
http://45.90.109.169:8080/productmarketadmin/

El modulo de ventas online:
http://45.90.109.169:8080/productmarketonline/

El modulo de punto de venta
http://45.90.109.169:8080/productmarketcaja/

Referencias



Regresar Inicio