0% found this document useful (0 votes)
5 views22 pages

5 Pagar

Uploaded by

Bikutoru Itachi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views22 pages

5 Pagar

Uploaded by

Bikutoru Itachi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

Pagar.

cs
Nos vamos al código del formulario Pagar.cs y escribmos las siguientes
líneas.

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GatoAbarrotero
{
public partial class frmPagar : Form
{
MySqlConnection conexion = new
MySqlConnection("server=localhost;User
id=admin;password=adminlara;database=puntodeventadb");
DataRow rowVenta;
private DataTable data = new DataTable();
public frmPagar(DataTable data)
{
InitializeComponent();
this.data = data;
}
}
}

A continuación hacemos doble click sobre el formulario.Esto es para


hacer modal el formulario

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GatoAbarrotero
{
public partial class frmPagar : Form
{
MySqlConnection conexion = new
MySqlConnection("server=localhost;User
id=admin;password=adminlara;database=puntodeventadb");
DataRow rowVenta;
private DataTable data = new DataTable();
public frmPagar(DataTable data)
{
InitializeComponent();
this.data = data;
}

private void FrmPagar_Load(object sender, EventArgs e)


{
this.FormBorderStyle = FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.StartPosition = FormStartPosition.CenterScreen;
// Remove the control box so the form will only display
client area.
this.ControlBox = false;
}

}
}

Antes de iniciar el evento de cobrar tenemos que imprimir el ticket fiscal


nos vamos ayudar con dos clases la primera se va
llamar RawPrinterHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace GatoAbarrotero
{
class RawPrinterHelper
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class DOCINFOA
{
[MarshalAs(UnmanagedType.LPStr)]
public string pDocName;
[MarshalAs(UnmanagedType.LPStr)]
public string pOutputFile;
[MarshalAs(UnmanagedType.LPStr)]
public string pDataType;
}
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA",
SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern bool
OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr
hPrinter, IntPtr pd);

[DllImport("winspool.Drv", EntryPoint = "ClosePrinter",


SetLastError = true, ExactSpelling = true, CallingConvention =
CallingConvention.StdCall)]
public static extern bool ClosePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA",


SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern bool StartDocPrinter(IntPtr hPrinter, Int32
level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter",


SetLastError = true, ExactSpelling = true, CallingConvention =
CallingConvention.StdCall)]
public static extern bool EndDocPrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter",


SetLastError = true, ExactSpelling = true, CallingConvention =
CallingConvention.StdCall)]
public static extern bool StartPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter",


SetLastError = true, ExactSpelling = true, CallingConvention =
CallingConvention.StdCall)]
public static extern bool EndPagePrinter(IntPtr hPrinter);

[DllImport("winspool.Drv", EntryPoint = "WritePrinter",


SetLastError = true, ExactSpelling = true, CallingConvention =
CallingConvention.StdCall)]
public static extern bool WritePrinter(IntPtr hPrinter, IntPtr
pBytes, Int32 dwCount, out Int32 dwWritten);

// SendBytesToPrinter()
// When the function is given a printer name and an unmanaged
array
// of bytes, the function sends those bytes to the print queue.
// Returns true on success, false on failure.
public static bool SendBytesToPrinter(string szPrinterName,
IntPtr pBytes, Int32 dwCount)
{
Int32 dwError = 0, dwWritten = 0;
IntPtr hPrinter = new IntPtr(0);
DOCINFOA di = new DOCINFOA();
bool bSuccess = false; // Assume failure unless you
specifically succeed.

di.pDocName = "My C#.NET RAW Document";


di.pDataType = "RAW";

// Open the printer.


if (OpenPrinter(szPrinterName.Normalize(), out hPrinter,
IntPtr.Zero))
{
// Start a document.
if (StartDocPrinter(hPrinter, 1, di))
{
// Start a page.
if (StartPagePrinter(hPrinter))
{
// Write your bytes.
bSuccess = WritePrinter(hPrinter, pBytes,
dwCount, out dwWritten);
EndPagePrinter(hPrinter);
}
EndDocPrinter(hPrinter);
}
ClosePrinter(hPrinter);
}
// If you did not succeed, GetLastError may give more
information
// about why not.
if (bSuccess == false)
{
dwError = Marshal.GetLastWin32Error();
}
return bSuccess;
}
public static bool SendStringToPrinter(string szPrinterName,
string szString)
{
IntPtr pBytes;
Int32 dwCount;
// How many characters are in the string?
dwCount = szString.Length;
// Assume that the printer is expecting ANSI text, and then
convert
// the string to ANSI text.
pBytes = Marshal.StringToCoTaskMemAnsi(szString);
// Send the converted ANSI string to the printer.
SendBytesToPrinter(szPrinterName, pBytes, dwCount);
Marshal.FreeCoTaskMem(pBytes);
return true;
}
}
}

La segunda clase seva a llamar Ticket.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace GatoAbarrotero
{
class Ticket
{
string ticket = "";
string parte1, parte2;
string impresora = "POS-58"; // nombre exacto de la impresora
como esta en el panel de control
int max, cort;
public void LineasGuion()
{
ticket = "----------------------------------------\n"; //
agrega lineas separadoras -
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime linea
}
public void LineasAsterisco()
{
ticket = "****************************************\n"; //
agrega lineas separadoras *
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime linea
}
public void LineasIgual()
{
ticket = "========================================\n"; //
agrega lineas separadoras =
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime linea
}
public void LineasTotales()
{
ticket = " -----------\n"; ; //
agrega lineas de total
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime linea
}
public void EncabezadoVenta()
{
ticket = "Articulo Can P.Unit Importe\n"; //
agrega lineas de encabezados
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void TextoIzquierda(string par1)
// agrega texto a la izquierda
{
max = par1.Length;
if (max > 40) // **********
{
cort = max - 40;
parte1 = par1.Remove(40, cort); // si es mayor que
40 caracteres, lo corta
}
else { parte1 = par1; } // **********
ticket = parte1 + "\n";
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void TextoDerecha(string par1)
{
ticket = "";
max = par1.Length;
if (max > 40) // **********
{
cort = max - 40;
parte1 = par1.Remove(40, cort); // si es mayor
que 40 caracteres, lo corta
}
else { parte1 = par1; } // **********
max = 40 - par1.Length; // obtiene la
cantidad de espacios para llegar a 40
for (int i = 0; i < max; i++)
{
ticket += " "; // agrega
espacios para alinear a la derecha
}
ticket += parte1 + "\n"; //Agrega el texto
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void TextoCentro(string par1)
{
ticket = "";
max = par1.Length;
if (max > 40) // **********
{
cort = max - 40;
parte1 = par1.Remove(40, cort); // si es mayor
que 40 caracteres, lo corta
}
else { parte1 = par1; } // **********
max = (int)(40 - parte1.Length) / 2; // saca la
cantidad de espacios libres y divide entre dos
for (int i = 0; i < max; i++) // **********
{
ticket += " "; // Agrega
espacios antes del texto a centrar
} // **********
ticket += parte1 + "\n";
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void TextoExtremos(string par1, string par2)
{
max = par1.Length;
if (max > 18) // **********
{
cort = max - 18;
parte1 = par1.Remove(18, cort); // si par1 es
mayor que 18 lo corta
}
else { parte1 = par1; } // **********
ticket = parte1; // agrega el
primer parametro
max = par2.Length;
if (max > 18) // **********
{
cort = max - 18;
parte2 = par2.Remove(18, cort); // si par2 es
mayor que 18 lo corta
}
else { parte2 = par2; }
max = 40 - (parte1.Length + parte2.Length);
for (int i = 0; i < max; i++) // **********
{
ticket += " "; // Agrega
espacios para poner par2 al final
} // **********
ticket += parte2 + "\n"; // agrega el
segundo parametro al final
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void AgregaTotales(string par1, double total)
{
max = par1.Length;
if (max > 25) // **********
{
cort = max - 25;
parte1 = par1.Remove(25, cort); // si es mayor
que 25 lo corta
}
else { parte1 = par1; } // **********
ticket = parte1;
parte2 = total.ToString("c");
max = 40 - (parte1.Length + parte2.Length);
for (int i = 0; i < max; i++) // **********
{
ticket += " "; // Agrega
espacios para poner el valor de moneda al final
} // **********
ticket += parte2 + "\n";
RawPrinterHelper.SendStringToPrinter(impresora, ticket); //
imprime texto
}
public void AgregaArticulo(string par1, int cant, double precio,
double total)
{
if (cant.ToString().Length <= 3 &&
precio.ToString("c").Length <= 10 && total.ToString("c").Length <= 11) //
valida que cant precio y total esten dentro de rango
{
max = par1.Length;
if (max > 16) //
**********
{
cort = max - 16;
parte1 = par1.Remove(16, cort); // corta a
16 la descripcion del articulo
}
else { parte1 = par1; } //
**********
ticket = parte1; // agrega
articulo
max = (3 - cant.ToString().Length) + (16 -
parte1.Length);
for (int i = 0; i < max; i++) //
**********
{
ticket += " "; // Agrega
espacios para poner el valor de cantidad
}
ticket += cant.ToString(); // agrega
cantidad
max = 10 - (precio.ToString("c").Length);
for (int i = 0; i < max; i++) //
**********
{
ticket += " "; // Agrega
espacios
} //
**********
ticket += precio.ToString("c"); // agrega precio
max = 11 - (total.ToString().Length);
for (int i = 0; i < max; i++) //
**********
{
ticket += " "; // Agrega
espacios
} //
**********
ticket += total.ToString("c") + "\n"; // agrega precio
RawPrinterHelper.SendStringToPrinter(impresora, ticket);
// imprime texto
}
else
{
MessageBox.Show("Valores fuera de rango");
RawPrinterHelper.SendStringToPrinter(impresora, "Error,
valor fuera de rango\n"); // imprime texto
}
}
public void CortaTicket()
{
string corte = "\x1B" + "m"; // caracteres
de corte
string avance = "\x1B" + "d" + "\x09"; // avanza 9
renglones
RawPrinterHelper.SendStringToPrinter(impresora, avance); //
avanza
RawPrinterHelper.SendStringToPrinter(impresora, corte); //
corta
}
public void AbreCajon()
{
string cajon0 = "\x1B" + "p" + "\x00" + "\x0F" + "\x96";
// caracteres de apertura cajon 0

// string cajon1 = "\x1B" + "p" + "\x01" + "\x0F" + "\x96";


// caracteres de apertura cajon 1
RawPrinterHelper.SendStringToPrinter(impresora, cajon0); //
abre cajon0
//RawPrinterHelper.SendStringToPrinter(impresora, cajon1); //
abre cajon1
}
}
}

Nos volvemos al formulario Pagar.cs[diseño] y hacemos doble click en


el botón Cobrar

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GatoAbarrotero
{
public partial class frmPagar : Form
{
MySqlConnection conexion = new
MySqlConnection("server=localhost;User
id=admin;password=adminlara;database=puntodeventadb");
DataRow rowVenta;
private DataTable data = new DataTable();
public frmPagar(DataTable data)
{
InitializeComponent();
this.data = data;
}

private void FrmPagar_Load(object sender, EventArgs e)


{
this.FormBorderStyle = FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.StartPosition = FormStartPosition.CenterScreen;
// Remove the control box so the form will only display
client area.
this.ControlBox = false;
}

private void BtnCobrar_Click(object sender, EventArgs e)


{
decimal cambio;
string llaveUnica = Guid.NewGuid().ToString();
DateTime theDate = DateTime.Now;
string fecha = theDate.ToString("yyyy-MM-dd H:mm:ss");

int idVenta;
try
{
conexion.Open();
string insertarQuery = "INSERT INTO ventastotales
(idventa,llaveventa,total,fecha) VALUES(null,?llaveventa,?total,?fecha)";
MySqlCommand cmd = new MySqlCommand(insertarQuery,
conexion);
cmd.Parameters.Add("?llaveventa", MySqlDbType.VarChar,
100).Value = llaveUnica;
cmd.Parameters.Add("?total", MySqlDbType.Decimal,
60).Value = txtTotal.Text;
cmd.Parameters.Add("?fecha", MySqlDbType.DateTime,
60).Value = fecha;
cmd.ExecuteNonQuery();
conexion.Close();
}
catch
{

MessageBox.Show("Inserción fallida");
}
try
{
conexion.Open();
string selectQuery = "SELECT idventa FROM ventastotales
WHERE llaveventa ='" + llaveUnica + "' ";
MySqlCommand cmd = new MySqlCommand(selectQuery,
conexion);
MySqlDataAdapter selecionnar = new MySqlDataAdapter();
selecionnar.SelectCommand = cmd;
DataTable datosVentas = new DataTable();
selecionnar.Fill(datosVentas);
rowVenta = datosVentas.Rows[0];
idVenta = Convert.ToInt32(rowVenta["idventa"]);

//MessageBox.Show(Dt.Rows.Count.ToString());

foreach (DataRow row in data.Rows)


{
int cantidad = Convert.ToInt32(row["Cantidad"]);
decimal totalVenta = cantidad *
Convert.ToDecimal(row["PrecioU"]);
string insertarQuery = "INSERT INTO ventasdetalle
(idventa,cantidad,total,codigoBarras) " +
"VALUES(@idventa,@cantidad,@total,@codigo)";
MySqlCommand cmd2 = new MySqlCommand(insertarQuery,
conexion);
cmd2.Parameters.AddWithValue("@idventa", idVenta);
cmd2.Parameters.AddWithValue("@cantidad", cantidad);
cmd2.Parameters.AddWithValue("@total", totalVenta);
cmd2.Parameters.AddWithValue("@codigo",
row[1].ToString());
cmd2.ExecuteNonQuery();

Ticket Ticket1 = new Ticket();


//Ticket1.AbreCajon(); //abre el cajon
Ticket1.TextoCentro("GATO ABARROTERO");
Ticket1.TextoCentro("Venta No." + idVenta);
Ticket1.TextoCentro("FECHA:" + fecha);// imprime en el
centro "Venta mostrador"
Ticket1.LineasGuion(); // imprime una linea de guiones
Ticket1.EncabezadoVenta(); // imprime encabezados
foreach (DataRow row in data.Rows)
{
int cantidad = Convert.ToInt32(row["Cantidad"]);
double totalVenta = cantidad *
Convert.ToDouble(row["PrecioU"]);
String producto = row["Producto"].ToString();
double precio = Convert.ToDouble(row["PrecioU"]);
Ticket1.AgregaArticulo(producto, cantidad, precio,
totalVenta); //imprime una linea de descripcion
}

Ticket1.LineasTotales(); // imprime linea

Ticket1.AgregaTotales("Total",
Convert.ToDouble(txtTotal.Text)); // imprime linea con total

//Ticket1.CortaTicket(); // corta el ticket

conexion.Close();

}
catch (MySqlException E)
{
MessageBox.Show(E.ToString());
}

cambio = Convert.ToDecimal(txtEfectivo.Text) -
Convert.ToDecimal(txtTotal.Text);
txtCambio.Text = Convert.ToString(cambio);

}
}

Hacemos doble click en el Button Cerrar escribimos:

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GatoAbarrotero
{
public partial class frmPagar : Form
{
MySqlConnection conexion = new
MySqlConnection("server=localhost;User
id=admin;password=adminlara;database=puntodeventadb");
DataRow rowVenta;
private DataTable data = new DataTable();
public frmPagar(DataTable data)
{
InitializeComponent();
this.data = data;
}

private void FrmPagar_Load(object sender, EventArgs e)


{
this.FormBorderStyle = FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.StartPosition = FormStartPosition.CenterScreen;
// Remove the control box so the form will only display
client area.
this.ControlBox = false;
}

private void BtnCobrar_Click(object sender, EventArgs e)


{
decimal cambio;
string llaveUnica = Guid.NewGuid().ToString();
DateTime theDate = DateTime.Now;
string fecha = theDate.ToString("yyyy-MM-dd H:mm:ss");

int idVenta;
try
{
conexion.Open();
string insertarQuery = "INSERT INTO ventastotales
(idventa,llaveventa,total,fecha) VALUES(null,?llaveventa,?total,?fecha)";
MySqlCommand cmd = new MySqlCommand(insertarQuery,
conexion);
cmd.Parameters.Add("?llaveventa", MySqlDbType.VarChar,
100).Value = llaveUnica;
cmd.Parameters.Add("?total", MySqlDbType.Decimal,
60).Value = txtTotal.Text;
cmd.Parameters.Add("?fecha", MySqlDbType.DateTime,
60).Value = fecha;
cmd.ExecuteNonQuery();
conexion.Close();
}
catch
{

MessageBox.Show("Inserción fallida");
}
try
{
conexion.Open();
string selectQuery = "SELECT idventa FROM ventastotales
WHERE llaveventa ='" + llaveUnica + "' ";
MySqlCommand cmd = new MySqlCommand(selectQuery,
conexion);
MySqlDataAdapter selecionnar = new MySqlDataAdapter();
selecionnar.SelectCommand = cmd;
DataTable datosVentas = new DataTable();
selecionnar.Fill(datosVentas);
rowVenta = datosVentas.Rows[0];
idVenta = Convert.ToInt32(rowVenta["idventa"]);

//MessageBox.Show(Dt.Rows.Count.ToString());

foreach (DataRow row in data.Rows)


{
int cantidad = Convert.ToInt32(row["Cantidad"]);
decimal totalVenta = cantidad *
Convert.ToDecimal(row["PrecioU"]);
string insertarQuery = "INSERT INTO ventasdetalle
(idventa,cantidad,total,codigoBarras) " +
"VALUES(@idventa,@cantidad,@total,@codigo)";
MySqlCommand cmd2 = new MySqlCommand(insertarQuery,
conexion);
cmd2.Parameters.AddWithValue("@idventa", idVenta);
cmd2.Parameters.AddWithValue("@cantidad", cantidad);
cmd2.Parameters.AddWithValue("@total", totalVenta);
cmd2.Parameters.AddWithValue("@codigo",
row[1].ToString());
cmd2.ExecuteNonQuery();

Ticket Ticket1 = new Ticket();


//Ticket1.AbreCajon(); //abre el cajon
Ticket1.TextoCentro("GATO ABARROTERO");
Ticket1.TextoCentro("Venta No." + idVenta);
Ticket1.TextoCentro("FECHA:" + fecha);// imprime en el
centro "Venta mostrador"
Ticket1.LineasGuion(); // imprime una linea de guiones
Ticket1.EncabezadoVenta(); // imprime encabezados
foreach (DataRow row in data.Rows)
{
int cantidad = Convert.ToInt32(row["Cantidad"]);
double totalVenta = cantidad *
Convert.ToDouble(row["PrecioU"]);
String producto = row["Producto"].ToString();
double precio = Convert.ToDouble(row["PrecioU"]);
Ticket1.AgregaArticulo(producto, cantidad, precio,
totalVenta); //imprime una linea de descripcion
}

Ticket1.LineasTotales(); // imprime linea

Ticket1.AgregaTotales("Total",
Convert.ToDouble(txtTotal.Text)); // imprime linea con total

//Ticket1.CortaTicket(); // corta el ticket

conexion.Close();

}
catch (MySqlException E)
{
MessageBox.Show(E.ToString());
}

cambio = Convert.ToDecimal(txtEfectivo.Text) -
Convert.ToDecimal(txtTotal.Text);
txtCambio.Text = Convert.ToString(cambio);

private void BtnCerrar_Click(object sender, EventArgs e)


{
frmPuntoVenta puntoVenta = new frmPuntoVenta();
puntoVenta.Show();
this.Hide();
}

}
}

Ahora nos vamos al formulario Menu.cs y copiamos un Button y en el


texto ponemos Punto de Venta y lo nombramos btnPunto

Hacemos doble click sobre el botónPunto de venta


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GatoAbarrotero
{
public partial class frmMenu : Form
{
public frmMenu()
{
InitializeComponent();
}

private void BtnProductos_Click(object sender, EventArgs e)


{
this.Hide();
frmAgregarProducto agregarProdcuto = new
frmAgregarProducto();
agregarProdcuto.Show();

private void BtnCodigo_Click(object sender, EventArgs e)


{
this.Hide();
frmCodigoBarras codigo = new frmCodigoBarras();
codigo.Show();
}

private void BtnPunto_Click(object sender, EventArgs e)


{
this.Hide();
frmPuntoVenta punto = new frmPuntoVenta();
punto.Show();
}

}
}

Probando
Corremos la aplicación:

Escaneamos algunos productos:

Presionamos pagar
Nos pagan 500 pesos en efectivo y presionamos Cobrar

You might also like