Sie sind auf Seite 1von 31

29-5-2016

Proyecto Final
Aplicaciones mviles para bases de
datos XA
Abigail Delgado Hernndez

Primeramente creamos nuestra base de datos en el BDMS de SQL Server agregando las siguientes tablas que son
pintura, venta y venta-detalle.

Ahora vamos a hacer las siguientes inserciones en la tabla de pintura


insert into pintura values
(1,'blanco',20,'agua',200,10),
(2,'verde',15,'aceite',150,10),
(3,'amarillo',15,'agua',150,10),
(4,'rojo',20,'aceite',200,10),
(5,'azul',15,'aceite',150,10),
(6,'morado',20,'agua',200,10),
(7,'naranja',15,'aceite',150,10),
(8,'cafe',20,'agua',200,10);

Comprobamos las inserciones con un select * from pintura

Ahora vamos a crear un nuevo proyecto en Android Studio con la siguiente ruta File/New/New Project y despus
de crearlo vamos a importar el driver JTDS que va a hacer posible la conexin remota con la base de datos en SQL
Server. La colocamos en la siguiente ruta.
Project/app/libs

Ahora vamos a ir a la siguiente ventana ubicada en File/Project Structure/Dependencies y vamos a agregar una nueva
dependencia seleccionando el driver JTDS que acabamos de importar.

Despus vamos a crear la clase de conexin donde vamos a establecer los valores de la conexin que se va a realizar
hacia la base de datos con la direccin ip especfica de la red en la que estemos conectados; en este caso es un punto
de acceso creado desde un telfono con la direccin IP: 192.168.43.109.
public class ConexionSQLServer {
public static Connection conectar_a_BD_Pinturas() throws SQLException {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
}catch (ClassNotFoundException e){}
return
DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.43.109:1433;databaseName=pin
turas;user=sa;password=root;");
}
}

Tambin vamos a crear el archive datosPinturas.java con el siguiente cdigo donde vamos establecer los setters y
getters de los datos que van a ser almacenados en la base de datos.
public class datosPinturas {
private int idPintura;
private int idPedido;
private String color;
private String tipo;
private int litros;
private int cantidad;
private int precio;
private int subtotal;
private Object fecha;
private int IdVenta;
private int total;
public datosPinturas(){
}
public int getIdPintura() {
return idPintura;
}
public void setIdPintura(int idPintura) {
this.idPintura = idPintura;
}
public int getIdPedido() {
return idPedido;
}
public void setIdPedido(int idPedido) {
this.idPedido = idPedido;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}

public String getTipo() {


return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public int getLitros() {
return litros;
}
public void setLitros(int litros) {
this.litros = litros;
}
public int getCantidad() {
return cantidad;
}
public void setCantidad(int cantidad) {
this.cantidad = cantidad;
}
public int getPrecio() {
return precio;
}
public void setPrecio(int precio) {
this.precio = precio;
}
public int getSubtotal() {
return subtotal;
}
public void setSubtotal(int subtotal) {
this.subtotal = subtotal;
}
public Object getFecha() {
return fecha;
}
public void setFecha(Object fecha) {
this.fecha = fecha;
}
public int getIdVenta() {
return IdVenta;
}
public void setIdVenta(int idVenta) {
IdVenta = idVenta;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {

this.total = total;

}}

Ahora vamos a crear la clase tabla.java la cual nos va a servir para pintar los resultados de una consulta en un objecto
tabla. Establecemos los mtodos agregarFila, agregarCabecera y obtenerAnchoPixeles.
class Tabla {
private TableLayout tabla;
private ArrayList<TableRow> filas;
private Activity actividad;
private Resources rs;
private int FILAS,COLUMNAS;
public Tabla(Activity actividad, TableLayout tabla){
this.actividad = actividad;
this.tabla = tabla;
rs = this.actividad.getResources();
FILAS = COLUMNAS = 0;
filas = new ArrayList<TableRow>();
}
public void agregarCabecera(int recursocabecera){
TableRow.LayoutParams layoutCelda;
TableRow fila = new TableRow(actividad);
TableRow.LayoutParams layoutFila = new
TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CON
TENT);
fila.setLayoutParams(layoutFila);
String [] arrayCabecera = rs.getStringArray(recursocabecera);
COLUMNAS = arrayCabecera.length;
for (int i = 0; i <arrayCabecera.length ; i++) {
TextView texto = new TextView(actividad);
layoutCelda = new
TableRow.LayoutParams(obtenerAnchoPixelesTexto(arrayCabecera[i]),TableRow.LayoutParams.
WRAP_CONTENT);
texto.setText(arrayCabecera[i]);
texto.setGravity(Gravity.CENTER_HORIZONTAL);
texto.setLayoutParams(layoutCelda);
fila.addView(texto);
}
tabla.addView(fila);
filas.add(fila);
FILAS++;
}
public void agrgarFilaTabla(ArrayList<String> elementos){
TableRow.LayoutParams layoutCelda;
TableRow.LayoutParams layoutFila = new
TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CON
TENT);
TableRow fila = new TableRow(actividad);
fila.setLayoutParams(layoutFila);
for (int i = 0; i <elementos.size() ; i++) {
TextView texto = new TextView(actividad);
texto.setText(String.valueOf(elementos.get(i)));
texto.setGravity(Gravity.CENTER_HORIZONTAL);
layoutCelda = new
TableRow.LayoutParams(obtenerAnchoPixelesTexto(texto.getText().toString()),TableRow.Lay
outParams.WRAP_CONTENT);
texto.setLayoutParams(layoutCelda);

fila.addView(texto);
}
tabla.addView(fila);
filas.add(fila);
FILAS++;
}
private int obtenerAnchoPixelesTexto(String texto){
Paint p = new Paint();
Rect bounds = new Rect();
p.setTextSize(50);
p.getTextBounds(texto, 0, texto.length(), bounds);
return bounds.width();
}

Tambin vamos crear la clase Querys en la cual vamos a definir los querys que van a mostrarse en las tablas de la
aplicacin.
public class Querys {
public static void ejecutaQuery(String query) throws SQLException {
Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = conectar.createStatement();
s.executeUpdate(query);
s.close();
conectar.close();
}
public static ArrayList selpintutas() throws SQLException {
ArrayList datos = new ArrayList();
Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = conectar.createStatement();
ResultSet rs = s.executeQuery("select idVenta from venta order by idVenta");
int idVenta = 0;
while (rs.next()) {
idVenta = rs.getInt("idVenta");
}
ResultSet r = s.executeQuery("select color,tipo,litros,cantidad,precio,subtotal
\n" +
" from pintura p, venta v, venta_detalle vd\n" +
"where p.idPintura=vd.idPintura and v.idVenta=vd.idVenta and
v.idVenta="+idVenta);
while (r.next()){
datosPinturas dat = new datosPinturas();
//dat.setIdPedido(r.getInt("Venta"));
//dat.setIdPintura(r.getInt("idPintura"));
dat.setColor(r.getString("color"));
dat.setTipo(r.getString("tipo"));
dat.setLitros(r.getInt("litros"));
dat.setCantidad(r.getInt("cantidad"));
dat.setPrecio(r.getInt("precio"));
dat.setSubtotal(r.getInt("subtotal"));
datos.add(dat);
}
s.close();
conectar.close();
return datos;
}
public static ArrayList reporte_general() throws SQLException {

ArrayList datos = new ArrayList();


Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = conectar.createStatement();
ResultSet rs = s.executeQuery("select idVenta from venta order by idVenta");
int idVenta = 0;
while (rs.next()) {
idVenta = rs.getInt("idVenta");
}
ResultSet r = s.executeQuery("select idVenta,total,fecha from venta;");
while (r.next()){
datosPinturas datG = new datosPinturas();
datG.setIdVenta(r.getInt("idVenta"));
datG.setFecha(r.getObject("fecha"));
datG.setTotal(r.getInt("total"));
datos.add(datG);
}
s.close();
conectar.close();
return datos;
}
}

Dentro del archivo activity_main ponemos el siguiente cdigo para crear los elementos que van a estar presentes
en la primera interfaz de nuestra aplicacin.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="proyecto.db.proyecto.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Iniciar Venta"
android:id="@+id/b_iniciar_venta"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="141dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Registros de Venta"
android:id="@+id/b_reporte"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

Lo que nos va a generar la siguiente interfaz con nicamente dos botones. El boton INICIAR VENTA va a inicar
una venta. El botn REGISTROS DE VENTA nos va a mandar a una interfaz donde en una tabla se van a mostrar
las ventas realizadas.

Ahora vamos al archivo java llamado MainActivity.java y ponemos el siguiente cdigo donde establecemos las
acciones que har al momento de presionar alguno de los botones.
public class MainActivity extends AppCompatActivity {
private Button botonIniciaVenta;
private Button botonReportes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
botonIniciaVenta = (Button) findViewById(R.id.b_iniciar_venta);
botonReportes = (Button) findViewById(R.id.b_reporte);
botonIniciaVenta.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int idVenta_ant = 0;
int idVenta_act = 0;
try {
Connection c = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = c.createStatement();
ResultSet r = s.executeQuery("select idVenta from venta order by
idVenta");
while (r.next()) {
idVenta_ant = r.getInt("idventa");
}
idVenta_act = idVenta_ant + 1;
Querys.ejecutaQuery("insert into venta values (" + idVenta_act +
"," + 0 + ",GETDATE())");
Toast.makeText(getApplicationContext(),
"Venta " + idVenta_act + " Iniciada",
Toast.LENGTH_LONG).show();
Intent i = new Intent(getApplicationContext(), venta.class);
startActivity(i);
} catch (SQLException e) {
}
}
});
botonReportes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), Reportes.class);
startActivity(i);
}
});
}
}

Ahora creamos una nueva actividad con nombre activity_venta con el siguiente cdigo para generar los elementos
que va a tener esta interfaz.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context="proyecto.db.proyectofinal.venta">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="IDPintura"
android:id="@+id/textId"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/listaPinturas"
android:layout_alignStart="@+id/listaPinturas" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Color"
android:id="@+id/listaPinturas"
android:layout_marginTop="61dp"
android:layout_below="@+id/textId"
android:layout_alignRight="@+id/textLitros"
android:layout_alignEnd="@+id/textLitros" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lista"
android:layout_alignTop="@+id/listaPinturas"
android:layout_toRightOf="@+id/textId"
android:layout_toEndOf="@+id/textId" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Precio"
android:id="@+id/textPrecio"
android:layout_alignTop="@+id/textLitros"
android:layout_alignLeft="@+id/b_finalizar"
android:layout_alignStart="@+id/b_finalizar" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Litros"
android:id="@+id/textLitros"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Cantidad"
android:id="@+id/textCantidad"
android:layout_marginTop="48dp"
android:layout_below="@+id/textLitros"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/c_cantidad"
android:layout_alignBottom="@+id/textCantidad"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Registrar"
android:id="@+id/b_registrar"
android:layout_marginBottom="50dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Finalizar Venta"
android:id="@+id/b_finalizar"
android:layout_alignTop="@+id/b_registrar"
android:layout_alignRight="@+id/c_cantidad"
android:layout_alignEnd="@+id/c_cantidad" />
</RelativeLayout>

Segn los elementos establecidos en este archivo nos genera la siguiente interfaz. Donde tenemos una lista varios
campos de texto y dos botones. La lista tendr los diferentes colores que estn disponibles para nuestra aplicacin.
En las etiquetas de litros y precio se van a llenar automticamente segn se seleccione el color de la lista. Y tenemos
un campo de texto donde vamos a establecer la cantidad requerida para esta venta.

Establecemos el archivo venta.java con el cual vamos a vincular esta interfaz y colocamos el siguiente cdigo. Dentro
de esta clase establecemos la insercin a la tabla de venta detalle donde vamos a ingresar el id del producto que
est seleccionado en la lista y tambin establece la cantidad de pinturas que va a comprar. Tenemos los botones de
Registrar y Finalizar venta donde va a pasar a otra interfaz si presiona el botn de finalizar y va a guardar la pintura
seleccionada con el botn de registrar.

public class venta extends AppCompatActivity {


private TextView idPintuta;
private TextView precio;
private EditText cantidad;
private Button botonRegistrar;
private Button botonFinalizar;
private Spinner listaPinturas;
private TextView litros;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_venta);
idPintuta = (TextView) findViewById(R.id.textId);
precio = (TextView) findViewById(R.id.textPrecio);

cantidad = (EditText) findViewById(R.id.c_cantidad);


litros = (TextView) findViewById(R.id.textLitros);
botonRegistrar = (Button) findViewById(R.id.b_registrar);
botonFinalizar = (Button) findViewById(R.id.b_finalizar);
listaPinturas = (Spinner) findViewById(R.id.lista);
ArrayAdapter spinner_adapter = ArrayAdapter.createFromResource(this,
R.array.pinturas, android.R.layout.simple_spinner_item);
spinner_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
listaPinturas.setAdapter(spinner_adapter);
listaPinturas.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
int precio_int = 0;
int litros_int = 0;
int idPintura = 0;
String color = listaPinturas.getSelectedItem().toString();
try {
Connection c1 = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s1 = c1.createStatement();
ResultSet r1 = s1.executeQuery("select idPintura,precio,litros from
pintura where color='" + color + "'");
while (r1.next()) {
idPintura = r1.getInt("idPintura");
precio_int = r1.getInt("precio");
litros_int = r1.getInt("litros");
}
idPintuta.setText("IDPintura = " + idPintura);
precio.setText("Precio = " + precio_int + "");
litros.setText("Litros = " + litros_int + "");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
botonFinalizar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
botonRegistrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//String p = precio.getText().toString();
int ca=0;
String c=null;
try {

c = cantidad.getText().toString();
ca = Integer.parseInt(c);
}
catch (NumberFormatException e){
}
int pr = 0;
int idVenta = 0;
int idPintura = 0;
int subtotal = 0;
int existencias = 0;
int NuevaExistencia = 0;
String color = listaPinturas.getSelectedItem().toString();
try {
Connection co = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = co.createStatement();
ResultSet r = s.executeQuery("select idVenta from venta order by
idVenta");
while (r.next()) {
idVenta = r.getInt("idVenta");
}
ResultSet r2 = s.executeQuery("select idPintura,precio,existencias
from pintura where color='" + color +"'");
while(r2.next()){
pr = r2.getInt("precio");
idPintura = r2.getInt("idPintura");
existencias = r2.getInt("existencias");
}
if(ca <= existencias && existencias>0) {
NuevaExistencia = existencias - ca;
subtotal = pr * ca;
if (ca==0 ||c.matches("")) {
Toast.makeText(getApplicationContext(), "Agrega una
cantidad", Toast.LENGTH_LONG).show();
} else {
try {
Querys.ejecutaQuery("insert into venta_detalle values
(" + idVenta + "," + idPintura+ "," + cantidad.getText() +","+ subtotal + ")");
Toast.makeText(getApplicationContext(),
"Datos Guardados Correctamente",
Toast.LENGTH_LONG).show();
Connection conec =
ConexionSQLServer.conectar_a_BD_Pinturas();
Statement st = conec.createStatement();
ResultSet rs = st.executeQuery("select sum(subtotal) as
subtotal from venta_detalle where idVenta="+idVenta);
int total = 0;
while(rs.next()){
total = rs.getInt("subtotal");
}
Querys.ejecutaQuery("update venta set total="+total + "
where idVenta="+idVenta);
Querys.ejecutaQuery("update pintura set existencias
="+NuevaExistencia +" where color='"+color+"'");
} catch (SQLException e) {

Toast.makeText(getApplicationContext(),
"Ya tienes ese producto en tu compra",
Toast.LENGTH_LONG).show();
}
}
}if(existencias==0){
Toast.makeText(getApplicationContext(), "Ya no hay ms pinturas
de este color", Toast.LENGTH_LONG).show();
}else if(ca>existencias){
Toast.makeText(getApplicationContext(),
"La cantidad debe ser menor a "+(existencias+1),
Toast.LENGTH_LONG).show();
}
} catch (SQLException e) {
e.printStackTrace();
}

}
});
botonFinalizar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), SegundaActivity.class);
startActivity(i);
}
});
}
}

Creamos una nueva actividad llamada activity_segunda la cual ser llamada justo despus de presionar el botn de
finalizar venta. Colocamos el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context="proyecto.db.proyecto.SegundaActivity">
<ScrollView
android:id="@+id/scrollvertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:layout_weight="1"
android:layout_above="@+id/text_total"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="106dp">

<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/scrollhorizontal"
android:scrollbars="horizontal"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ticket de venta"
android:id="@+id/textTicket"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/scrollvertical"
android:layout_toEndOf="@+id/scrollvertical" />
<TableLayout
android:id="@+id/tabla"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TableLayout>
</LinearLayout>
</HorizontalScrollView>
</ScrollView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Total venta "
android:id="@+id/text_total"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true" />
<Button
android:id="@+id/bot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Men Principal"
android:layout_marginTop="65dp"
android:layout_below="@+id/text_total"
android:layout_toRightOf="@+id/text_total" />
</RelativeLayout>

Con este cdigo generamos la siguiente interfaz con los siguientes elementos. Donde se van a mostrar las ventas de
las diferentes pinturas que han sido agregadas a esta venta. Y tambin va a asignar en el campo de texto el total de
la venta actual.

Ahora vamos a vincular este archivo XML con un archivo java llamndolo SegundaActivity.java en este archivo vamos
a establecer la consulta que va a mostrar como si fuera un ticket de venta. Llamando a la clase tabla para poder
pintar la consulta en una tabla. El botn men principal nos manda a la actividad MainActivity.
public class SegundaActivity extends AppCompatActivity {
private Button boton;
private TextView texto_total;
private TextView Ticket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_segunda);
boton = (Button) findViewById(R.id.bot);
texto_total = (TextView) findViewById(R.id.text_total);
Tabla tabla = new Tabla(this, (TableLayout) findViewById(R.id.tabla));
tabla.agregarCabecera(R.array.cabecera_tabla);
ArrayList pinturas = new ArrayList();
try {
pinturas = Querys.selpintutas();
for (int i = 0; i < pinturas.size(); i++) {
datosPinturas dat = new datosPinturas();
dat = (datosPinturas) pinturas.get(i);

ArrayList<String> elementos = new ArrayList<String>();


//elementos.add(dat.getIdPedido() + "");
//elementos.add(dat.getIdPintura() + "");
elementos.add(dat.getColor());
elementos.add(dat.getTipo());
elementos.add(dat.getLitros() + "");
elementos.add(dat.getCantidad() + "");
elementos.add(dat.getPrecio() + "");
elementos.add(dat.getSubtotal() + "");
//elementos.add(dat.getFecha()+"");
//tabla.agregarFilaTabla(elementos);
tabla.agrgarFilaTabla(elementos);
}
Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement s = conectar.createStatement();
ResultSet rs = s.executeQuery("select idVenta from venta order by
idVenta");
int idVenta = 0;
while (rs.next()) {
idVenta = rs.getInt("idVenta");
}
ResultSet rs2 = s.executeQuery("select total from venta where
idVenta="+idVenta);
int total = 0;
while(rs2.next()){
total = rs2.getInt("total");
}
texto_total.setText("Total Venta "+idVenta+ " = $"+total );
} catch (SQLException e) {
}
boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), MainActivity.class);
startActivity(i);
try {
int idVenta=0;
Connection conec = ConexionSQLServer.conectar_a_BD_Pinturas();
Statement st = conec.createStatement();
ResultSet rs = st.executeQuery("select idVenta from venta order by
idVenta");
while(rs.next()){
idVenta = rs.getInt("idVenta");
}
ResultSet rs1 = st.executeQuery("select total from venta where
idVenta="+idVenta);
int total=0;
while (rs1.next()){
total = rs1.getInt("total");
}
if(total==0){
Querys.ejecutaQuery("delete from venta where
idVenta="+idVenta);
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}); }}

Ahora vamos a crear una nueva actividad donde vamos a tener los reportes de usuario. La actividad se llamar
activity_reportes y tendr el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context="proyecto.db.proyecto.Reportes"
android:weightSum="1">
<ScrollView
android:id="@+id/scrollvertical"
android:layout_width="match_parent"
android:layout_height="52dp"
android:scrollbars="vertical"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_above="@+id/bot"
android:layout_alignParentTop="true">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/scrollhorizontal"
android:scrollbars="horizontal"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Ventas Generales"
android:id="@+id/textVentas"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/scrollvertical"
android:layout_toEndOf="@+id/scrollvertical" />
<TableLayout
android:id="@+id/tabla"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TableLayout>
</LinearLayout>
</HorizontalScrollView>
</ScrollView>
<Button
android:id="@+id/bot"

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Men Principal"
android:layout_gravity="bottom"
android:layout_weight="6.16"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>

Segn el cdigo nos genera la siguiente interfaz donde tenemos el botn men principal y una tabla donde se van a
mostrar las ventas generales y sus respectivas fechas y totales.

Ahora creamos la clase reportes.java donde vamos a referenciar la clase de activity_reportes. Colocamos el siguiente
cdigo. Aqu vamos a colocar el cdigo para establecer las acciones que va a realizar esta interfaz al momento de
llamarse y de presionar el botn.
public class Reportes extends AppCompatActivity {
private TextView texto;
private Button boton_menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reportes);
Tabla tabla = new Tabla(this, (TableLayout) findViewById(R.id.tabla));
tabla.agregarCabecera(R.array.cabecera_tabla_reportes);

boton_menu = (Button) findViewById(R.id.bot);


ArrayList pinturas = new ArrayList();
try {
pinturas = Querys.reporte_general();
for (int i = 0; i < pinturas.size(); i++) {
datosPinturas dat = new datosPinturas();
dat = (datosPinturas) pinturas.get(i);
ArrayList<String> elementos = new ArrayList<String>();
elementos.add(dat.getIdVenta()+"");
elementos.add(dat.getFecha().toString());
elementos.add(dat.getTotal() + "");
tabla.agrgarFilaTabla(elementos);
}
} catch (SQLException e) {
}
boton_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), MainActivity.class);
startActivity(i);
}
});
}
}

Antes de ejecutar nuestra aplicacin necesitamos las actividades dentro del archivo AndroidManifest para que
pueda reconocerlas como tal. Colocamos el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="proyecto.db.proyecto">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".venta"></activity>
<activity android:name=".SegundaActivity"></activity>
<activity android:name=".Reportes"></activity>
</application>
</manifest>

Para poder crear las cabeceras de las tablas que vamos a mostrar debemos crear los siguientes String-Array dentro
del archivo Strings.xml
Vamos a crear dos String Array con los siguientes elementos que van a ponerse como nombres de columnas al
momento de mandar la consulta a la tabla. Las tablas que van a ocupar estas caberas son de las actividades
activity_reportes y activity_segunda.
<resources>
<string name="app_name">Proyecto</string>
<string-array name="cabecera_tabla">
<item> Color</item>
<item> Tipo</item>
<item> Lts</item>
<item> Cantidad</item>
<item> Precio</item>
<item> SubTotal</item>
</string-array>
<string-array name="cabecera_tabla_reportes">
<item> Venta</item>
<item> Fecha</item>
<item> Total</item>
</string-array>
</resources>

Como en la actividad de activity_venta tenemos un objeto spinner vamos a llenarlo con los nombres de pinturas
disponibles. En este caso ser necesario crear String Array donde vamos a poner los elementos de la lista que se van
a mostrar en el objecto Spinner. Colocamos el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pinturas">
<item>blanco</item>
<item>verde</item>
<item>amarillo</item>
<item>rojo</item>
<item>azul</item>
<item>morado</item>
<item>naranja</item>
</string-array>
</resources>

Antes de ejecutar nuestra aplicacion debemos verificar nuestra direccion ip. Lo haremos por medio de un ipconfig
en la consola de Windows.

Ahora ejecutamos nuestra aplicacin.


Primero tenemos la siguiente interfaz donde tenemos estos dos botones. Vamos a presionar el botn de inicar una
venta, como no hay ninguna venta registrada nos va a aparecer lo siguiente.

Vamos a seleccionar una pintura de la lista y los valores de los campos litros y precio van a cambiar. Despus vamos
a presionar el botn de Registrar y nos va a mandar el siguiente mensaje. Vamos a seleccionar otro elemento
diferente de la lista y colocamos nuevamente una cantidad.

Ahora vamos a provocar un error en la aplicacin mandando un 0 como cantidad y aparecer el siguiente mensaje.
Tambin vamos a dejar el espacio en blanco y vamos a presionar el botn.

Ya que agregamos dos pinturas a la venta vamos a presionar el botn de finalizar venta. Nos mandar a la siguiente
interfaz donde nos muestra el ticket de venta con las pinturas que elegimos y el total de la venta.

Ahora desde la interfaz principal vamos a elegir la opcin de Registros de venta. Solamente hemos realizado una
venta con un total de $1000 y se muestra en la siguiente tabla. Ahora vamos a presionar el botn de men principal.

Vamos a agregar otra venta el sistema detecta que ahora est en curso la venta 2. Y agregamos una pintura a esta
venta. Pero ahora vamos a poner una cantidad de 11. En la base de datos todas las pinturas en su campo de
existencias tienen por default 10. Por lo que estara violando esta regla. Nos manda este mensaje.

Ahora vamos a colocar la cantidad de para el color blanco. Debe de aceptarla porque 8 son la cantidad de existencias
de ese color. Despus presionamos el botn finalizar venta.

Nuevamente vamos al menu principal y seleccionamos la opcion de registros de venta. Tenemos las 2 ventas
registradas en esta tabla, la venta 1 con un total de $1000 y la venta 2 con un total de $1600

En la base de datos haremos las siguientes consultas para verificar los resultados de la aplicacin.
Ticket de Venta 1

Total de la venta 1

Ticket Venta 2

Total venta 2

Ahora hacemos un select * from pintura en la base de datos para ver las existencias de los productos despus de
haber hecho 2 ventas.

Conclusiones:
Esta aplicacin agrega ventas segn los productos seleccionados agregndolos a la tabla de ventas detalle. Tambin
controla posibles y comunes errores de usuario al momento de ingresar un elemento a la venta como pueden ser:
Dejar el campo cantidad vaco o poner una cantidad de 0. Tambin tiene la funcionalidad de no registrar ninguna
venta que no tenga una pintura ingresado, esto lo hace con una condicin que pregunta el total de esa venta y si la
venta es igual a 0 (no tiene pinturas agregadas) la va a eliminar. Cuando termina de agregar los productos a la venta
puede verificarlos en su ticket de venta. Esta aplicacin tambin cuenta con una funcin de reportes de ventas
generales que puede ser til para el usuario donde se muestran las fechas y totales de cada venta realizada.

Das könnte Ihnen auch gefallen