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.
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.
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
Seleccionamos la fecha y le damos en cerrar:
Presionamos mostrar reporte:
Conclusión
Como hemos visto hasta aquí termina nuestro tutorial quedan algunos detalles
los cuales son los siguientes:
- mejoras de los reporteadores
- incluir spring security para login
- mejorar reportes de ventas
- enviar un correo en la parte de ventas online
- cotizar el envio tal vez se pueda con dhl
- poner una plataforma de pago
- en el modulo caja hay que configurar tomcat con un usario con permisos para imprimir en impresora
- calcular el iva
- calcular el cambio en efectivo
- conectar a una terminal bancaria para pago en tarjeta
- conectar una impresora con el corte de papel automatico
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:
- Usuario: admin2
- Paaword: admin2
Referencias