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;
}
}