public List<Byte[]> CambiodePrecio(string idXbee)
        {
            try
            {
                List<byte[]> TramasDevolver = new List<byte[]> { };
                DataTable dtPrecios;
                using (ModeloDispensador modDIS = new ModeloDispensador())
                {
                    dtPrecios = modDIS.ObtenerPreciosActualizados();
                }
                int precioAcpm = Convert.ToInt32(dtPrecios.Rows[0][0]);
                int precioGasolina = Convert.ToInt32(dtPrecios.Rows[1][0]);
                int precioExtra = Convert.ToInt32(dtPrecios.Rows[2][0]);
                int precioGas = Convert.ToInt32(0);
                string TramaDevolver = "MM:" + UtilidadesTramas.ConcatenarCerosIzquiera(precioAcpm.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioGasolina.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioExtra.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioGas.ToString()) + "";
                //string TramaDevolver = "XP:" + UtilidadesTramas.ConcatenarCerosIzquiera(precioAcpm.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioGasolina.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioExtra.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precioGas.ToString()) + "";
                //string TramaDevolver = "XXX";
                TramasDevolver.Add(UtilidadesTramas.ObtenerByteDeString(TramaDevolver));

                return TramasDevolver;
            }
            catch (Exception e)
            {
                LocalLogManager.EscribeLog(e.Message, LocalLogManager.TipoImagen.TipoError);
                return null;
            }
        }
        public List <Byte[]> CambiodePrecio(string idXbee)
        {
            try
            {
                List <byte[]> TramasDevolver = new List <byte[]> {
                };
                DataTable dtPrecios;
                using (ModeloDispensador modDIS = new ModeloDispensador())
                {
                    dtPrecios = modDIS.ObtenerProductosDispensador(idXbee);
                }

                int precio1 = 0;
                int precio2 = 0;
                int precio3 = 0;
                int precio4 = 0;

                precio1 = (dtPrecios.Rows.Count > 0) ? getPrecioProducto(dtPrecios.Rows[0][0].ToString()) : 0;
                precio2 = (dtPrecios.Rows.Count > 1) ? getPrecioProducto(dtPrecios.Rows[1][0].ToString()) : 0;
                precio3 = (dtPrecios.Rows.Count > 2) ? getPrecioProducto(dtPrecios.Rows[2][0].ToString()) : 0;
                precio4 = (dtPrecios.Rows.Count > 3) ? getPrecioProducto(dtPrecios.Rows[3][0].ToString()) : 0;
                string TramaDevolver = "MM:" + UtilidadesTramas.ConcatenarCerosIzquiera(precio1.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precio2.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precio3.ToString()) + ":" + UtilidadesTramas.ConcatenarCerosIzquiera(precio4.ToString()) + "";

                TramasDevolver.Add(UtilidadesTramas.ObtenerByteDeString(TramaDevolver));

                return(TramasDevolver);
            }
            catch (Exception e)
            {
                LocalLogManager.EscribeLog(e.Message + "\n\n" + e.StackTrace, LocalLogManager.TipoImagen.TipoError);
                return(null);
            }
        }
 public int getPrecioProducto(string idProducto)
 {
     using (ModeloDispensador modDIS = new ModeloDispensador())
     {
         var res = modDIS.ObtenerPreciosActualizadosProducto(idProducto);
         if (res.Rows.Count > 0)
         {
             return(Convert.ToInt32(res.Rows[0][0]));
         }
         else
         {
             return(0);
         }
     }
 }
        public ResultadoTrama EnvioTotales(string[] data)
        {
            try
            {
                //desglosar mensaje
                string _FechaActual = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss");
                string cara = data[1];
                decimal galon_m1 = (Convert.ToDecimal(data[2])/1000);
                int dinero_m1 = Convert.ToInt32(data[3]);
                int ppu_m1 = Convert.ToInt32(data[4]);
                decimal galon_m2 = (Convert.ToDecimal(data[5])/1000);
                int dinero_m2 = Convert.ToInt32(data[6]);
                int ppu_m2 = Convert.ToInt32(data[7]);
                decimal galon_m3 = (Convert.ToDecimal(data[8])/1000);
                int dinero_m3 = Convert.ToInt32(data[9]);
                int ppu_m3 = Convert.ToInt32(data[10]);
                string idProducto;
                string usuarioIslero;
                string idXbeeDispensador;
                DataTable dtPosicion;
                DataTable dtVentasTotales;
                bool RealizoVentaTotal = false;
                string ventaGalones = "";
                string ventaDinero = "";
                bool esCredito = false;
                int ImprimeTiquete = 0;

                string serialFidelizado = "";
                string serialCredito = "";
                int descuentoCredito = 0;
                ////Capturo si es venta fidelizado
                //if (instancia.ListaFidelizadosCreditosPendientes.Count > 0)
                //{
                //    FidelizadoCreditoPendiente objFidelizado = instancia.ListaFidelizadosCreditosPendientes.Find(item => item.cara == cara && item.tipoSolicitud == ETipoSolicitudSerial.Fidelizado);
                //    if (objFidelizado != null)
                //    {
                //        serialFidelizado = objFidelizado.serial;
                //        instancia.ListaFidelizadosCreditosPendientes.Remove(objFidelizado);
                //    }
                //    FidelizadoCreditoPendiente objCredito = instancia.ListaFidelizadosCreditosPendientes.Find(item => item.cara == cara && item.tipoSolicitud == ETipoSolicitudSerial.Credito);
                //    if (objCredito != null)
                //    {
                //        esCredito = true;
                //        serialCredito = objCredito.serial;
                //        descuentoCredito = objCredito.descuento;
                //        instancia.ListaFidelizadosCreditosPendientes.Remove(objCredito);
                //    }
                //}

                //obtengo el id de la posición por la cara, y traigo el idProducto tambien
                //Obtengo el ultimo registro de ventas en la cara
                using (ModeloPOS modPOS = new ModeloPOS())
                {
                    dtPosicion = modPOS.ObtenerPosicionesPorCara(cara);

                    if (dtPosicion != null && dtPosicion.Rows.Count > 0)
                    {
                        idProducto = dtPosicion.Rows[0]["idProducto"].ToString();
                        idXbeeDispensador = dtPosicion.Rows[0]["idXbee"].ToString();
                        var DatosTurno = modPOS.ObtenerTurnoPorPosicionyEstado(dtPosicion.Rows[0]["idPosicion"].ToString());
                        if (DatosTurno != null && DatosTurno.Rows.Count>0)
                        {
                            usuarioIslero = DatosTurno.Rows[0]["idUsuario"].ToString();
                        }
                        else
                        {
                            return new ResultadoTrama(false, null, "No se pudo obtener los datos de un turno abierto para esta cara");
                        }
                    }
                    else
                    {
                        return new ResultadoTrama(false, null, "No se pudo obtener el id del producto de la posición");
                    }
                    dtVentasTotales = modPOS.ObtenerTotalesVentaPorCara(cara);

                    if (dtVentasTotales == null) return new ResultadoTrama(false, null, "Hubo error obteniendo los valores de las ventas totales");
                    if (dtVentasTotales.Rows.Count > 0)
                    {
                        //detectamos si en alguna de las mangueras hubo cambios para insertar en la tabla de ventas
                        if (Convert.ToDecimal(dtVentasTotales.Rows[0]["g1"]) != galon_m1)
                        {
                            RealizoVentaTotal = true;
                            decimal difGalon = (galon_m1 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g1"]));
                            int difDinero = (dinero_m1 - Convert.ToInt32(dtVentasTotales.Rows[0]["p1"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero = difDinero.ToString();
                            using (ModeloDispensador modDIS = new ModeloDispensador())
                            {
                                DataTable dtPosicionProductoCorrecto;
                                dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara,"1");
                                if (dtPosicionProductoCorrecto.Rows.Count == 0) return new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 1");
                                ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "1", difDinero.ToString(), difGalon.ToString(), ppu_m1.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado,serialCredito,descuentoCredito);
                            }
                        }
                        if (Convert.ToDecimal(dtVentasTotales.Rows[0]["g2"]) != galon_m2)
                        {
                            DataTable dtPosicionProductoCorrecto;
                            dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara, "2");
                            if (dtPosicionProductoCorrecto.Rows.Count == 0) return new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 2");
                            RealizoVentaTotal = true;
                            decimal difGalon = (galon_m2 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g2"]));
                            int difDinero = (dinero_m2 - Convert.ToInt32(dtVentasTotales.Rows[0]["p2"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero = difDinero.ToString();
                            using (ModeloDispensador modDIS = new ModeloDispensador())
                            {
                                ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "2", difDinero.ToString(), difGalon.ToString(), ppu_m2.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado, serialCredito, descuentoCredito);
                            }
                        }
                        if (Convert.ToDecimal(dtVentasTotales.Rows[0]["g3"]) != galon_m3)
                        {
                            DataTable dtPosicionProductoCorrecto;
                            dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara, "3");
                            if (dtPosicionProductoCorrecto.Rows.Count == 0) return new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 3");
                            RealizoVentaTotal = true;
                            decimal difGalon = (galon_m3 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g3"]));
                            int difDinero = (dinero_m3 - Convert.ToInt32(dtVentasTotales.Rows[0]["p3"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero = difDinero.ToString();
                            using (ModeloDispensador modDIS = new ModeloDispensador())
                            {
                                ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "3", difDinero.ToString(), difGalon.ToString(), ppu_m3.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado, serialCredito, descuentoCredito);
                            }
                        }
                    }
                    if (RealizoVentaTotal)
                    {
                        using (ModeloDispensador modDIS = new ModeloDispensador())
                        {
                            //Por ultimo guardamos en ventas totales
                            var resultGuardarTotales = modDIS.GuardaVentasTotales(data, _FechaActual, idXbeeDispensador);
                        }
                    }
                    else
                    {
                        return new ResultadoTrama(false, null, "No se guardo venta por que no se detectaron diferencias en galones ni dinero");
                    }
                }

                return new ResultadoTrama(true, null,"",_ventaGalones:ventaGalones,_ventaDinero:ventaDinero,_esCredito: esCredito,_imprimeTiquete:ImprimeTiquete);
            }
            catch (Exception e)
            {
                LocalLogManager.EscribeLog(e.Message, LocalLogManager.TipoImagen.TipoError);
                return new ResultadoTrama(false, null, e.Message);
            }
        }
        public ResultadoTrama EnvioTotales(string[] data)
        {
            try
            {
                //desglosar mensaje
                string  _FechaActual = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss");
                string  cara         = data[1];
                decimal galon_m1     = (Convert.ToDecimal(data[2]) / 1000);
                int     dinero_m1    = Convert.ToInt32(data[3]);
                int     ppu_m1       = 0;
                ppu_m1 = (data[4].ToString().Trim() != "") ? Convert.ToInt32(data[4]) : 0;
                decimal galon_m2  = (Convert.ToDecimal(data[5]) / 1000);
                int     dinero_m2 = Convert.ToInt32(data[6]);
                int     ppu_m2    = 0;
                ppu_m2 = (data[7].ToString().Trim() != "") ? Convert.ToInt32(data[7]) : 0;
                decimal galon_m3  = (Convert.ToDecimal(data[8]) / 1000);
                int     dinero_m3 = Convert.ToInt32(data[9]);
                int     ppu_m3    = Convert.ToInt32(data[10]);
                ppu_m3 = (data[10].ToString().Trim() != "") ? Convert.ToInt32(data[10]) : 0;
                string    idProducto;
                string    usuarioIslero;
                string    idXbeeDispensador;
                DataTable dtPosicion;
                DataTable dtVentasTotales;
                bool      RealizoVentaTotal  = false;
                bool      VentaMayorA9999999 = false;
                string    ventaGalones       = "";
                string    ventaDinero        = "";
                bool      esCredito          = false;
                int       ImprimeTiquete     = 0;

                string serialFidelizado = "";
                string serialCredito    = "";
                int    descuentoCredito = 0;

                //Obtengo el ultimo registro de ventas en la cara
                using (ModeloPOS modPOS = new ModeloPOS())
                {
                    dtPosicion = modPOS.ObtenerPosicionesPorCara(cara);

                    if (dtPosicion != null && dtPosicion.Rows.Count > 0)
                    {
                        idProducto        = dtPosicion.Rows[0]["idProducto"].ToString();
                        idXbeeDispensador = dtPosicion.Rows[0]["idXbee"].ToString();
                        var DatosTurno = modPOS.ObtenerTurnoPorPosicionyEstado(dtPosicion.Rows[0]["idPosicion"].ToString());
                        if (DatosTurno != null && DatosTurno.Rows.Count > 0)
                        {
                            usuarioIslero = DatosTurno.Rows[0]["idUsuario"].ToString();
                        }
                        else
                        {
                            return(new ResultadoTrama(false, null, "No se pudo obtener los datos de un turno abierto para esta cara"));
                        }
                    }
                    else
                    {
                        return(new ResultadoTrama(false, null, "No se pudo obtener el id del producto de la posición"));
                    }
                    dtVentasTotales = modPOS.ObtenerTotalesVentaPorCara(cara);


                    if (dtVentasTotales == null)
                    {
                        return(new ResultadoTrama(false, null, "Hubo error obteniendo los valores de las ventas totales"));
                    }
                    if (dtVentasTotales.Rows.Count > 0)
                    {
                        //detectamos si en alguna de las mangueras hubo cambios para insertar en la tabla de ventas
                        if (Convert.ToDecimal(dtVentasTotales.Rows[0]["g1"]) != galon_m1)
                        {
                            RealizoVentaTotal = true;
                            decimal difGalon  = (galon_m1 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g1"]));
                            int     difDinero = (dinero_m1 - Convert.ToInt32(dtVentasTotales.Rows[0]["p1"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero  = difDinero.ToString();
                            //validamos si es negativo
                            if (Convert.ToInt32(ventaDinero) > Convert.ToInt32(9999999))
                            {
                                VentaMayorA9999999 = true;
                            }
                            else
                            {
                                using (ModeloDispensador modDIS = new ModeloDispensador())
                                {
                                    DataTable dtPosicionProductoCorrecto;
                                    dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara, "1");
                                    if (dtPosicionProductoCorrecto.Rows.Count == 0)
                                    {
                                        return(new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 1"));
                                    }

                                    if (ppu_m1 != Convert.ToInt32(dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"]))
                                    {
                                        return(new ResultadoTrama(false, null, "ET_002 El valor del producto "
                                                                  + dtPosicionProductoCorrecto.Rows[0]["nomProducto"].ToString() + " en la cara " + cara
                                                                  + " es diferente al que llego en la venta\nppu venta: " + ppu_m1 + "\nppu parametrizado:" + dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"].ToString()));
                                    }

                                    ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "1", difDinero.ToString(), difGalon.ToString(), ppu_m1.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado, serialCredito, descuentoCredito);
                                }
                            }
                        }
                        if (dtVentasTotales.Rows[0]["g2"] != DBNull.Value && Convert.ToDecimal(dtVentasTotales.Rows[0]["g2"]) != galon_m2)
                        {
                            DataTable dtPosicionProductoCorrecto;
                            dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara, "2");
                            if (dtPosicionProductoCorrecto.Rows.Count == 0)
                            {
                                return(new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 2"));
                            }
                            if (ppu_m2 != Convert.ToInt32(dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"]))
                            {
                                return(new ResultadoTrama(false, null, "ET_002 El valor del producto "
                                                          + dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"].ToString()
                                                          + " es diferente al que llego en la venta\nppu venta: " + ppu_m2 + "\nppu parametrizado:" + dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"].ToString()));
                            }
                            RealizoVentaTotal = true;
                            decimal difGalon  = (galon_m2 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g2"]));
                            int     difDinero = (dinero_m2 - Convert.ToInt32(dtVentasTotales.Rows[0]["p2"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero  = difDinero.ToString();
                            //validamos si es negativo
                            if (Convert.ToInt32(ventaDinero) > Convert.ToInt32(9999999))
                            {
                                VentaMayorA9999999 = true;
                            }
                            else
                            {
                                using (ModeloDispensador modDIS = new ModeloDispensador())
                                {
                                    ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "2", difDinero.ToString(), difGalon.ToString(), ppu_m2.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado, serialCredito, descuentoCredito);
                                }
                            }
                        }
                        if (dtVentasTotales.Rows[0]["g3"] != DBNull.Value && Convert.ToDecimal(dtVentasTotales.Rows[0]["g3"]) != galon_m3)
                        {
                            DataTable dtPosicionProductoCorrecto;
                            dtPosicionProductoCorrecto = modPOS.ObtenerPosicionesPorCarayManguera(cara, "3");
                            if (dtPosicionProductoCorrecto.Rows.Count == 0)
                            {
                                return(new ResultadoTrama(false, null, "No se encontro producto en la cara " + cara + " manguera 3"));
                            }
                            if (ppu_m3 != Convert.ToInt32(dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"]))
                            {
                                return(new ResultadoTrama(false, null, "ET_002 El valor del producto "
                                                          + dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"].ToString()
                                                          + " es diferente al que llego en la venta\nppu venta: " + ppu_m3 + "\nppu parametrizado:" + dtPosicionProductoCorrecto.Rows[0]["precioVentaProducto"].ToString()));
                            }
                            RealizoVentaTotal = true;
                            decimal difGalon  = (galon_m3 - Convert.ToDecimal(dtVentasTotales.Rows[0]["g3"]));
                            int     difDinero = (dinero_m3 - Convert.ToInt32(dtVentasTotales.Rows[0]["p3"]));
                            ventaGalones = difGalon.ToString();
                            ventaDinero  = difDinero.ToString();
                            //validamos si es negativo
                            if (Convert.ToInt32(ventaDinero) > Convert.ToInt32(9999999))
                            {
                                VentaMayorA9999999 = true;
                            }
                            else
                            {
                                using (ModeloDispensador modDIS = new ModeloDispensador())
                                {
                                    ImprimeTiquete = modDIS.GuardaVenta(dtPosicionProductoCorrecto.Rows[0]["idProducto"].ToString(), cara, "3", difDinero.ToString(), difGalon.ToString(), ppu_m3.ToString(), _FechaActual, usuarioIslero, idXbeeDispensador, serialFidelizado, serialCredito, descuentoCredito);
                                }
                            }
                        }
                    }
                    if (RealizoVentaTotal == true && VentaMayorA9999999 == false)
                    {
                        using (ModeloDispensador modDIS = new ModeloDispensador())
                        {
                            //Por ultimo guardamos en ventas totales
                            var resultGuardarTotales = modDIS.GuardaVentasTotales(data, _FechaActual, idXbeeDispensador);
                        }
                    }
                    else
                    {
                        if (VentaMayorA9999999 == true)
                        {
                            return(new ResultadoTrama(false, null, "ET_001 Venta mayor a 9999999"));
                        }
                        else
                        {
                            return(new ResultadoTrama(false, null, "No se guardo venta por que no se detectaron diferencias en galones ni dinero"));
                        }
                    }
                }

                return(new ResultadoTrama(true, null, "", _ventaGalones: ventaGalones, _ventaDinero: ventaDinero, _esCredito: esCredito, _imprimeTiquete: ImprimeTiquete));
            }
            catch (Exception e)
            {
                LocalLogManager.EscribeLog(e.Message + "\n\n" + e.StackTrace, LocalLogManager.TipoImagen.TipoError);
                return(new ResultadoTrama(false, null, e.Message));
            }
        }