Вы находитесь на странице: 1из 33

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


de la conexin que se
especfica de la red en
acceso creado desde un

la clase de conexin donde vamos a establecer los valores


va a realizar hacia la base de datos con la direccin ip
la que estemos conectados; en este caso es un punto de
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");
}
where idVenta="+idVenta);

Querys.ejecutaQuery("update venta set total="+total + "


Querys.ejecutaQuery("update pintura set existencias

="+NuevaExistencia +" where color='"+color+"'");

Toast.LENGTH_LONG).show();
}

} catch (SQLException e) {
Toast.makeText(getApplicationContext(),
"Ya tienes ese producto en tu compra",
}

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

idVenta");

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

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

idVenta="+idVenta);

int total=0;
while (rs1.next()){
total = rs1.getInt("total");
}
if(total==0){
Querys.ejecutaQuery("delete from venta where

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

Вам также может понравиться