C sharp - Ticket con Cortes de Control

   
Vista:

Ticket con Cortes de Control

Publicado por Paola (1 intervención) el 10/05/2016 17:14:15
Buenas!

Tengo que realizar un ticket con cortes de control por puesto y usuario, los datos los obtengo en el siguiente datatable:

idPuesto Terminal idUsuario Cajero Producto Cant. Total
2020 Puesto1 1 Pedro Leche 1 20
5050 Puesto2 3 Jose Jabon 2 30
5050 Puesto2 5 Luis Reposera 1 150
5050 Puesto2 5 Luis Silla 6 350

El ticket que debo mostrar es el siguiente:

Terminal: Puesto1

Cajero: Pedro
Total tx 1
Total $ 20
Subtotales
Leche tx 1
Leche $ 20
*****************************************
Terminal: Puesto2

Cajero: Jose
Total tx 2
Total $ 30
Subtotales
Jabon tx 2
Jabon $ 30
*****************************************
Cajero: Luis
Total tx 7
Total $ 500
Subtotales
Reposera tx 1
Reposera $ 150
Silla tx 6
Silla $ 350
*****************************************
Total trans 10
Total 550

Es decir, están separados por puesto y a su ves por cada usuario de ese puesto.
Total tx y total $ son la suma de los artículos por cada cajero.
Total trans y Total son la suma de todos los artículos y el total general.



Dictionary<int, string> PuestosEnCierres = new Dictionary<int, string>();

foreach (DataRow fila in (dtDetalle.Rows))

{
idPuesto = Convert.ToInt32(fila["idPuesto"]);
string Terminal = "";
if (!PuestosEnCierres.TryGetValue(idPuesto, out Terminal))
{
idUsuario = Convert.ToInt32(fila["idUsuario"]);
PuestosEnCierres.Add(idPuesto, Convert.ToString(fila["Terminal"]));
dtDetalle.DefaultView.RowFilter = ("idPuesto = " + idPuesto.ToString());
DataTable DatosUsuariosArticulos = dtDetalle.DefaultView.ToTable();

DetalleTicketPuesto = DetalleTicketPuesto.Replace("@terminal@", Convert.ToString(fila["Terminal"]));

for (int i = 0; i < DatosUsuariosArticulos.Rows.Count; i++)
{
if (idUsuario == Convert.ToInt32(DatosUsuariosArticulos.Rows[i]["idUsuario"]))
{
DetalleTicket = DetalleTicket.Replace("@cajero@", Convert.ToString(DatosUsuariosArticulos.Rows[i]["Cajero"]));
DetalleTicket = Environment.NewLine + DetalleTicket.Replace("@producto@", Convert.ToString(DatosUsuariosArticulos.Rows[i]["Producto"]));
DetalleTicket = Environment.NewLine + DetalleTicket.Replace("@cantidad@", Convert.ToInt32(DatosUsuariosArticulos.Rows[i]["Cantidad"]).ToString());
DetalleTicket = Environment.NewLine + DetalleTicket.Replace("@total@", Utilities.FormatNumber(Convert.ToDouble(DatosUsuariosArticulos.Rows[i]["Total"])));
CantUsr += Convert.ToInt32(DatosUsuariosArticulos.Rows[i]["Cantidad"]);
VtasUsr += Convert.ToDouble(DatosUsuariosArticulos.Rows[i]["Total"]);
}
else
{
DetalleTicket = DetalleTicket.Replace("@cant@", Convert.ToInt32(CantUsr).ToString());
DetalleTicket = DetalleTicket.Replace("@totalizado@", Utilities.FormatNumber(Convert.ToDouble(VtasUsr)));
DetalleTicket += ArmaDetalleTicket();
VtasUsr = 0;
CantUsr = 0;
}
idUsuario = Convert.ToInt32(DatosUsuariosArticulos.Rows[i]["idUsuario"]);
}

}
DetalleTicketPuesto += ArmaDetalleTicketPuesto();
}

DetalleTicketPuesto y DetalleTicket son rutinas internar que tienen la estructura del ticket.

De esta manera que lo estoy realizando no me hace los cortes correctos, por lo que necesito de su ayuda!

Muchas Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Wilfredo Patricio Castillo

Ticket con Cortes de Control

Eso lo obtienes de una base de datos, por lo tanto sin que te compliques tanto, haces un select agrupado por terminal, cajero y ordebado por producto si gustas.

Eso lo metes en una lista.
Recorres la lista primero por terminal, luego por cajero y vas acumulando los totales tanto en productos como en importes, al cambio de cajeron, imprimes totales por cajero, luego al cambio de terminal imprimes los totales acumulados por terminal, y al final un total general.

Está sencillo ese asunto.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar