Ticket con Cortes de Control
Publicado por Paola (6 intervenciones) 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!!
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


0