Introducción
Se realizara una suite de contabilidad para que estudiante pueda practicar y realizar ejercicios y documentos de contabilidad.Requisitos
- eclipse
- mysql
- primefaces
- java 1.8
- tomcat 8.5
Desarrollo
Para iniciar esta suite vamos a realizar el balance general en forma de reporte.Abrimos nuestro eclipse y creamos un proyecto maven.File->New->MavenProject
Seleccionamos en Create a simple project y presionamos Next
LLenamos los siguientes campos:
- Group Id: mx.com.tutosoftware.studentaccounting
- Artifact Id: studentaccounting
- Packaging: war
- Name: Student Accounting
Una vez generado nuestro proyecto maven nos vamos al archivo pom.xml y pegamos el siguiente código esta para poder compilar con java 1.8.
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
Nos marcara un error que no encuentra el archivo web.xml pero lo solucionaremos de la siguiente manera, hacemos clic derecho en el proyecto y selecionamos Properties
Selecionamos Project Facets en el recuadro seleccionamos Dynamic Web Module 3.1 y Java Server Faces 2.2 y presionamos Apply posterriormente OK
Creamos una carpeta en src/main/webapp llamada WEB-INF.Nota:Si tienes eclipse 2019 te genera el archivo web.xml modificalo por el que esta en el código y luego maven->Update Project...
En el directorio WEB-INF creamos el archivo web.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>studentaccounting</display-name> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>cupertino</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" version="2.2"> </faces-config>
<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>mx.com.tutosoftware.studentaccounting</groupId> <artifactId>studentaccounting</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>Student Accounting</name> <repositories> <repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org/</url> <layout>default</layout> </repository> </repositories> <dependencies> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.2.10</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>2.2.10</version> </dependency> <!-- http://repo1.maven.org/maven --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.sun.el</groupId> <artifactId>el-ri</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>1.0.10</version> </dependency> <!-- https://mvnrepository.com/artifact/com.lowagie/itext --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
En el paquete mx.com.tutosoftware.studentaccounting.bean creamos la clase Reporte esta clase es la que genera el datatable dinámico de nuestro reporte y escribimos:
package mx.com.tutosoftware.studentaccounting.bean; import java.io.Serializable; public class Reporte implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String cuenta; private String concepto; private double cantidad; private double renglon1; private double renglon3; private double renglon4; public Reporte(String cuenta, String concepto, double cantidad, double renglon1, double renglon3) { super(); this.cuenta = cuenta; this.concepto = concepto; this.cantidad = cantidad; this.renglon1 = renglon1; this.renglon3 = renglon3; } public String getCuenta() { return cuenta; } public void setCuenta(String cuenta) { this.cuenta = cuenta; } public String getConcepto() { return concepto; } public void setConcepto(String concepto) { this.concepto = concepto; } public double getCantidad() { return cantidad; } public void setCantidad(double cantidad) { this.cantidad = cantidad; } public double getRenglon1() { return renglon1; } public void setRenglon1(double renglon1) { this.renglon1 = renglon1; } public double getRenglon3() { return renglon3; } public void setRenglon3(double renglon3) { this.renglon3 = renglon3; } public double getRenglon4() { return renglon4; } public void setRenglon4(double renglon4) { this.renglon4 = renglon4; } }
package mx.com.tutosoftware.studentaccounting.bean; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import org.primefaces.event.RowEditEvent; @ManagedBean @SessionScoped public class Balance implements Serializable { private static final long serialVersionUID = 1L; private String empresa; private Date fecha; private String fechaBalance; private String tipoCuenta; private String nombreCuenta; private static ArrayList<Reporte> reportes = new ArrayList<Reporte>(); public String getEmpresa() { return empresa; } public void setEmpresa(String empresa) { this.empresa = empresa; } public Date getFecha() { return fecha; } public void setFecha(Date fecha) { this.fecha = fecha; } public String getFechaBalance() { return fechaBalance; } public void setFechaBalance(String fechaBalance) { this.fechaBalance = fechaBalance; } public String getTipoCuenta() { return tipoCuenta; } public void setTipoCuenta(String tipoCuenta) { this.tipoCuenta = tipoCuenta; } public String getNombreCuenta() { return nombreCuenta; } public void setNombreCuenta(String nombreCuenta) { this.nombreCuenta = nombreCuenta; } public ArrayList<Reporte> getReportes() { return reportes; } public void mostrarFecha() { Calendar cal= Calendar.getInstance(); cal.setTime(fecha); int dia=cal.get(Calendar.DAY_OF_MONTH); int mes=cal.get(Calendar.MONTH)+1; int year=cal.get(Calendar.YEAR); String mesString; switch (mes) { case 1: mesString = "Enero"; break; case 2: mesString = "Febrero"; break; case 3: mesString = "Marzo"; break; case 4: mesString = "Abril"; break; case 5: mesString = "Mayo"; break; case 6: mesString = "Junio"; break; case 7: mesString = "Julio"; break; case 8: mesString = "Agosto"; break; case 9: mesString = "Septiembre"; break; case 10: mesString = "Octubre"; break; case 11: mesString = "Noviembre"; break; case 12: mesString = "Diciembre"; break; default: mesString = "Invalid month"; break; } fechaBalance="Balance General al "+dia+" de "+mesString+" "+year; } public void agregarReporte() { Reporte reporte1 = new Reporte(this.tipoCuenta,this.nombreCuenta,0.0,0.0,0.0); reportes.add(reporte1); this.nombreCuenta=""; } public void limpiarReporte() { fechaBalance = " "; empresa = ""; reportes.clear(); } public void onEdit(RowEditEvent event) { FacesMessage msg = new FacesMessage("Cuenta editada",((Reporte) event.getObject()).getConcepto()); FacesContext.getCurrentInstance().addMessage(null, msg); } public void onCancel(RowEditEvent event) { FacesMessage msg = new FacesMessage("Cuenta cancelada"); FacesContext.getCurrentInstance().addMessage(null, msg); reportes.remove((Reporte) event.getObject()); } }
package mx.com.tutosoftware.studentaccounting.bean; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import org.primefaces.model.DefaultOrganigramNode; import org.primefaces.model.OrganigramNode; @ManagedBean @ViewScoped public class BalanceDiagram implements Serializable { /** * */ private static final long serialVersionUID = 1L; private OrganigramNode rootNode; @PostConstruct public void init() { rootNode = new DefaultOrganigramNode("root", "Balance General", null); rootNode.setCollapsible(false); rootNode.setDroppable(true); OrganigramNode activo = addDivision(rootNode, "Activo"); OrganigramNode activoCirculante = addDivision(activo, "Activo Circulante"); addDivision(activoCirculante, "Caja", "Bancos","Clientes","Almacén" ,"Documentos por cobrar"); OrganigramNode activoFijo = addDivision(activo, "Activo Fijo"); addDivision(activoFijo, "Equipo de oficina", "Edificios","Terrenos","Equipo de reparto" ,"Patentes y marcas","Depósitos en garantía","Deudores hipotecarios" ,"Aciones,bonos y valores","Papelería y artículos de escritorio" ,"Propagenda y publicidad"); OrganigramNode cargosDiferidos = addDivision(activo, "Cargos Diferidos"); addDivision(cargosDiferidos, "Primas de seguros adelantados", "Gastos de instalación" ,"Rentas anticipadas","Intereses pagados por anticipado"); OrganigramNode pasivo = addDivision(rootNode,"Pasivo"); OrganigramNode pasivoCirculante = addDivision(pasivo, "Pasivo Circulante o Flotante"); addDivision(pasivoCirculante, "Proveedores", "Acreedores Diversos","Impuestos por pagar","Documentos por pagar"); OrganigramNode pasivoFijo = addDivision(pasivo, "Pasivo Fijo o Consolidado"); addDivision(pasivoFijo,"Documentos por pagar a largo plazo","Acreedores hipotecarios"); OrganigramNode creditosDiferidos = addDivision(pasivo, "Créditos diferidos"); addDivision(creditosDiferidos,"Rentas cobradas por adelantado","Intereses cobrados anticipadamente"); OrganigramNode capital = addDivision(rootNode,"Capital"); addDivision(capital,"Ventas","Costo de ventas","Gastos de administración" ,"Gastos y productos financieros","Otros gastos y productos" ,"Impuestos sobre la renta","Pérdidas y ganancias","Capital"); } protected OrganigramNode addDivision(OrganigramNode parent, String name, String... cuentas) { OrganigramNode divisionNode = new DefaultOrganigramNode("division", name, parent); divisionNode.setDroppable(true); divisionNode.setDraggable(true); divisionNode.setSelectable(true); if (cuentas != null) { for (String cuenta : cuentas) { OrganigramNode employeeNode = new DefaultOrganigramNode("employee", cuenta, divisionNode); employeeNode.setDraggable(true); employeeNode.setSelectable(true); } } return divisionNode; } public OrganigramNode getRootNode() { return rootNode; } public void setRootNode(OrganigramNode rootNode) { this.rootNode = rootNode; } }