public int GuardarTienda(MadeInHouse.Dictionary.DynamicGrid anaquel, MadeInHouse.Dictionary.DynamicGrid deposito)
        {
            Evaluador eva = new Evaluador();
            if (String.IsNullOrEmpty(TxtAlturaAnq) || String.IsNullOrEmpty(TxtNumColumnsAnq) || String.IsNullOrEmpty(TxtNumRowsAnq) ||
                 String.IsNullOrEmpty(TxtAlturaDto) || String.IsNullOrEmpty(TxtNumColumnsDto) || String.IsNullOrEmpty(TxtNumRowsDto) ||
                !eva.esNumeroEntero(TxtNumColumnsAnq) || !eva.esNumeroEntero(TxtNumColumnsDto) || !eva.esNumeroEntero(TxtNumRowsAnq) || !eva.esNumeroEntero(TxtNumRowsDto) ||
                !eva.esNumeroEntero(TxtAlturaAnq) || !eva.esNumeroEntero(TxtAlturaDto) ||
                int.Parse(TxtAlturaDto) <= 0 || int.Parse(TxtAlturaAnq) <= 0 || int.Parse(TxtNumColumnsAnq) <= 0 || int.Parse(TxtNumColumnsDto) <= 0 ||
                int.Parse(TxtNumRowsAnq) <= 0 || int.Parse(TxtNumRowsDto) <= 0  )
            {
                System.Windows.MessageBox.Show("Debes ingresar un numero entero para el numero de filas , columnas y altura");
                return 1;
            }

            int exito = 0;

            DBConexion db = new DBConexion();
            db.conn.Open();
            SqlTransaction trans = db.conn.BeginTransaction(IsolationLevel.Serializable);
            db.cmd.Transaction = trans;
            pxaSQL = new ProductoSQL(db);

                /*Agrega una tienda*/
                Tienda tienda = new Tienda();
                tienda.Estado = 1;
                tienda.Nombre = txtNombre;
                tienda.Direccion = txtDir;
                tienda.Telefono = txtTelef;
                tienda.Administrador = txtAdmin;
                Ubigeo seleccionado = new Ubigeo();
                UbigeoSQL uSQL = new UbigeoSQL(db);
                seleccionado = uSQL.buscarUbigeo(selectedDpto, selectedProv, selectedDist);
                tienda.IdUbigeo = seleccionado.IdUbigeo;
                tienda.FechaReg = DateTime.Today;
                TiendaSQL gw = new TiendaSQL(db);
                int idTienda=-1;

                if (accion == 1)
                    idTienda = gw.AgregarTienda(tienda);
                else if (accion == 2)
                {
                    tienda.IdTienda = this.idTienda;
                    exito = gw.ActualizarTienda(tienda);
                }
               if (idTienda > 0 || exito>0)
                {

                    /*Se agregan las dos partes de la tienda*/
                    AlmacenSQL aSQL = new AlmacenSQL(db);

                    /*anaquel*/
                    Almacenes ana = new Almacenes();
                    ana.CodAlmacen = "ANA00" + tienda.IdTienda.ToString();
                    ana.IdTienda = tienda.IdTienda;
                    ana.Nombre = "Anaquel de "+ txtNombre;
                    ana.Telefono = tienda.Telefono;
                    ana.Direccion = tienda.Direccion;
                    ana.NroColumnas = int.Parse(TxtNumColumnsAnq);
                    ana.NroFilas = int.Parse(TxtNumRowsAnq);
                    ana.Altura = int.Parse(TxtAlturaAnq);
                    ana.Tipo = 2;
                    int idAnaquel=-1;
                    if (accion == 1)
                        idAnaquel = aSQL.Agregar(ana);
                    else if (accion == 2)
                    {
                        ana.IdAlmacen = this.idAnaquel;
                        exito = aSQL.Actualizar(ana);
                    }
                    if (idAnaquel > 0 || exito>0)
                    {

                        /*deposito*/
                        Almacenes dto = new Almacenes();
                        dto.CodAlmacen = "DTO00" + tienda.IdTienda.ToString();
                        dto.IdTienda = tienda.IdTienda;
                        dto.Nombre = "Deposito de " + txtNombre;
                        dto.Telefono = tienda.Telefono;
                        dto.Direccion = tienda.Direccion;
                        dto.NroColumnas = int.Parse(TxtNumColumnsDto);
                        dto.NroFilas = int.Parse(TxtNumRowsDto);
                        dto.Altura = int.Parse(TxtAlturaDto);
                        dto.Tipo = 1;
                        int idDeposito=-1;
                        if (accion == 1)
                            idDeposito = aSQL.Agregar(dto);
                        else if (accion == 2)
                        {
                            dto.IdAlmacen = this.idDeposito;
                            exito = aSQL.Actualizar(dto);
                        }

                        if (idDeposito > 0 || exito>0)
                        {
                            if (accion == 1)
                            {
                                /*Productos de la tienda*/
                                for (int i = 0; i < LstProductos.Count; i++)
                                {
                                    LstProductos[i].IdAlmacen = idDeposito;
                                    LstProductos[i].IdTienda = idTienda;
                                     exito = pxaSQL.AgregarProductoxAlmacen(LstProductos[i]);

                                    if (exito <= 0) break;
                                }
                            }
                            else if (accion == 2)
                            {
                                DataTable productoxAlmacenDT= pxaSQL.CrearProductoxAlmacenDT();
                                pxaSQL.AgregarFilasToDT(productoxAlmacenDT, LstProductos);
                                exito = pxaSQL.ActualizarProductoxAlmacen(productoxAlmacenDT,trans);
                            }

                            if (exito > 0)
                            {
                               DataTable zonaxAlmacenData = CrearZonasDT();
                                AgregarFilasToZonasDT(zonaxAlmacenData, anaquel.listaZonas, (accion==1) ? idAnaquel :this.idAnaquel );
                                AgregarFilasToZonasDT(zonaxAlmacenData, deposito.listaZonas, (accion==1) ? idDeposito : this.idDeposito );

                                if (accion==1)
                                    exito = aSQL.AgregarZonasMasivo(zonaxAlmacenData, trans);
                                else if (accion==2)
                                    exito = aSQL.ActualizarZonasMasivo(zonaxAlmacenData, trans);

                                if (exito > 0)
                                {

                                    UbicacionSQL ubSQL = new UbicacionSQL(db);

                                    /*Ubicaciones del anaquel*/
                                    DataTable ubicacionesData = CrearUbicacionesDT();
                                    AgregarFilasToUbicacionesDT(ubicacionesData, anaquel.Ubicaciones, (accion == 1) ? idAnaquel : this.idAnaquel);
                                    AgregarFilasToUbicacionesDT(ubicacionesData, deposito.Ubicaciones, (accion == 1) ? idDeposito : this.idDeposito);

                                    if (accion == 1)
                                        exito = ubSQL.AgregarMasivo(ubicacionesData, trans);
                                    else if (accion == 2)
                                        exito = ubSQL.ActualizarUbicacionMasivo(ubicacionesData, trans);

                                    if (exito > 0)
                                    {
                                        trans.Commit();
                                        if (accion == 1)
                                        {
                                            //1: Agregar, 2: Editar, 3: Eliminar, 4: Recuperar, 5: Desactivar
                                            DataObjects.Seguridad.LogSQL.RegistrarActividad("Registrar Tienda", tienda.IdTienda+"", 1);
                                            System.Windows.MessageBox.Show("Se creó la tienda correctamente");
                                        }
                                        else if (accion == 2)
                                        {
                                            //1: Agregar, 2: Editar, 3: Eliminar, 4: Recuperar, 5: Desactivar
                                            DataObjects.Seguridad.LogSQL.RegistrarActividad("Actualizar Tienda",tienda.IdTienda+"" , 2);
                                            System.Windows.MessageBox.Show("Se editó la tienda correctamente");
                                        }
                                        return 1;
                                    }
                                    else
                                    {
                                        System.Windows.MessageBox.Show("ERROR");
                                    }
                                }
                                else
                                {
                                    System.Windows.MessageBox.Show("ERROR");
                                }
                            }
                            else
                            {
                                System.Windows.MessageBox.Show("ERROR");
                            }
                        }
                        else
                        {
                            System.Windows.MessageBox.Show("ERROR");
                        }
                    }
                    else
                    {
                        System.Windows.MessageBox.Show("ERROR");
                    }
                }
                else
                {
                    System.Windows.MessageBox.Show("ERROR");
                }

                trans.Rollback();
                return -1;

               // System.Windows.MessageBox.Show("Se creo correctamente la tienda con id: " + idTienda.ToString() + " con anaquel id: " + idAnaquel.ToString() + " y con deposito id :" + idDeposito.ToString());
        }
        public void SelectedItemChanged(object sender, MadeInHouse.Dictionary.DynamicGrid almacen, MadeInHouse.Dictionary.DynamicGrid ubicacionCol)
        {
            SelectedProduct = ((sender as DataGrid).SelectedItem as ProductoCant);
            ubicacionCol.SelectedProduct = SelectedProduct;

            if (SelectedProduct != null)
            {
                almacen.UbicarProducto(SelectedProduct.IdProducto);
            }
        }
        public List<int> ObtenerListaZonas(MadeInHouse.Dictionary.DynamicGrid objeto)
        {
            List<int> lista = new List<int>();

            bool encontrado = false;
            for (int i = 0; i < objeto.Ubicaciones.Count; i++)
            {

                for (int j = 0; j < objeto.Ubicaciones[i].Count; j++)
                {

                        for (int k = 0; k < lista.Count; k++)
                        {
                            if (lista[k] == objeto.Ubicaciones[i][j][0].IdTipoZona)
                            {
                                encontrado = true;
                                break;
                            }
                        }
                        if (!encontrado)
                            lista.Add(objeto.Ubicaciones[i][j][0].IdTipoZona);
                        encontrado = false;

                }
            }
            return lista;
        }
        public void Distribuir(int tipo, MadeInHouse.Dictionary.DynamicGrid dg)
        {
            Evaluador eva = new Evaluador();

            if (tipo == 0)
            {
                if (String.IsNullOrEmpty(TxtAlturaAnq) || String.IsNullOrEmpty(TxtNumColumnsAnq) || String.IsNullOrEmpty(TxtNumRowsAnq) ||
                   !eva.esNumeroEntero(TxtNumColumnsAnq) || !eva.esNumeroEntero(TxtNumRowsAnq) || !eva.esNumeroEntero(TxtAlturaAnq)
                )
                {
                    System.Windows.MessageBox.Show("Debes ingresar un numero entero para el numero de filas , columnas y altura");
                    return;
                }
                else if (int.Parse(TxtAlturaAnq) <= 0 ||  int.Parse(TxtNumColumnsAnq) <= 0 ||
                        int.Parse(TxtNumRowsAnq) <= 0  )
                    {
                    System.Windows.MessageBox.Show("Debes ingresar un numero entero para el numero de filas , columnas y altura");
                    return;
                    }

                NumColumnsAnq = Int32.Parse(TxtNumColumnsAnq);
                NumRowsAnq = Int32.Parse(TxtNumRowsAnq);
                AlturaAnq = Int32.Parse(TxtAlturaAnq);
                dg.RecreateGridCells();

                if (accion == 2)
                {
                    dg.cargarGrid(lstZonasAnq);
                }

            }
            else
            {

                if (String.IsNullOrEmpty(TxtAlturaAnq) || String.IsNullOrEmpty(TxtNumColumnsDto) || String.IsNullOrEmpty(TxtNumRowsDto)
                     || !eva.esNumeroEntero(TxtAlturaDto) || !eva.esNumeroEntero(TxtNumColumnsDto) || !eva.esNumeroEntero(TxtNumRowsDto))
                {
                    System.Windows.MessageBox.Show("Debes ingresar un numero entero para el numero de filas , columnas y altura");
                    return;
                }
                else if (int.Parse(TxtAlturaDto) <= 0 || int.Parse(TxtNumColumnsAnq) <= 0 ||
                    int.Parse(TxtNumRowsDto) <= 0)
                {
                    System.Windows.MessageBox.Show("Debes ingresar un numero entero para el numero de filas , columnas y altura");
                    return;
                }

                NumColumnsDto = Int32.Parse(TxtNumColumnsDto);
                NumRowsDto = Int32.Parse(TxtNumRowsDto);
                AlturaDto = Int32.Parse(TxtAlturaDto);
                dg.RecreateGridCells();

                if (accion == 2)
                {
                    dg.cargarGrid(lstZonasDto);
                }
            }
        }
        public void Distribuir(int tipo, MadeInHouse.Dictionary.DynamicGrid dg)
        {
            NumColumns = Int32.Parse(TxtNumColumns);
            NumRows = Int32.Parse(TxtNumRows);
            Altura = Int32.Parse(TxtAltura);

            if (accion == 2)
            {
                dg.cargarGrid(lstZonas);
            }
        }
        public int GuardarAlmacen(MadeInHouse.Dictionary.DynamicGrid deposito)
        {
            int exito = 1;

            DBConexion db = new DBConexion();
            db.conn.Open();
            SqlTransaction trans = db.conn.BeginTransaction(IsolationLevel.Serializable);
            db.cmd.Transaction = trans;

            Almacenes central = new Almacenes();
            central.Estado = 1;
            central.CodAlmacen = "CENTRAL001";
            central.Nombre = TxtNombre;
            central.Direccion = TxtDir;
            central.Telefono = TxtTelefono;
            central.Administrador = txtAdmin;
            Ubigeo seleccionado = new Ubigeo();
            UbigeoSQL uSQL = new UbigeoSQL(db);
            seleccionado = uSQL.buscarUbigeo(selectedDpto, selectedProv, selectedDist);
            central.IdUbigeo = seleccionado.IdUbigeo;
            central.FechaReg = DateTime.Today;
            AlmacenSQL aSQL = new AlmacenSQL(db);
            if (TxtNumColumns != null) central.NroColumnas = int.Parse(TxtNumColumns);
            else return -1;
            central.NroFilas = int.Parse(TxtNumRows);

            if (TxtAltura != null) central.Altura = int.Parse(TxtAltura);
            else return -1;
            central.Tipo = 3;
            int idAlmacen = aSQL.Agregar(central);
            central.IdAlmacen = idAlmacen;
            central.CodAlmacen = "CENTRAL001";
            int up = aSQL.Actualizar(central);

            if (idAlmacen > 0 && up > 0)
            {
                DataTable zonaxAlmacenData = CrearZonasDT();
                AgregarFilasToZonasDT(zonaxAlmacenData, deposito.listaZonas, idAlmacen);
                /*Agrego las zonas por almacen*/

                exito = aSQL.AgregarZonasMasivo(zonaxAlmacenData, trans);

                if (exito > 0)
                {
                    UbicacionSQL ubSQL = new UbicacionSQL(db);

                    /*Ubicaciones del anaquel*/
                    DataTable ubicacionesData = CrearUbicacionesDT();
                    AgregarFilasToUbicacionesDT(ubicacionesData, deposito.Ubicaciones, idAlmacen);
                    exito = ubSQL.AgregarMasivo(ubicacionesData, trans);

                    trans.Commit();
                    _windowManager.ShowDialog(new AlertViewModel(_windowManager, "Se creó el almacen central correctamente"));
                    return 1;
                }
                else
                {
                    _windowManager.ShowDialog(new AlertViewModel(_windowManager, "ERROR"));
                }
            }
            else
            {
                _windowManager.ShowDialog(new AlertViewModel(_windowManager, "ERROR"));
            }

            trans.Rollback();
            return -1;
        }
        public void SelectedItemChanged(object sender, MadeInHouse.Dictionary.DynamicGrid anaquel)
        {
            SelectedProduct = ((sender as DataGrid).SelectedItem as ProductoxTienda);

            if (SelectedProduct != null)
            {
                ProductoCant pc = new ProductoCant();
                pc.IdProducto = SelectedProduct.IdProducto;
                anaquel.SelectedProduct = pc;
                anaquel.UbicarSector(SelectedProduct.IdProducto, 4);
                TxtStockActual =  anaquel.StockActual.ToString();
                TxtCapacidad = anaquel.CapacidadActual.ToString();
                //(sender as DataGrid).SelectedItem = null;

            }
        }
        public void Recargar(MadeInHouse.Dictionary.DynamicGrid dg)
        {
            AlmacenSQL aSQL = new AlmacenSQL();
            Almacenes anaquel = aSQL.BuscarAlmacen(-1, idTienda, 2);

            idAnaquel = anaquel.IdAlmacen;

            NumColumns = anaquel.NroColumnas;
            NumRows = anaquel.NroFilas;
            Altura = anaquel.Altura;
            dg.RecreateGridCells();

            TipoZonaSQL tzSQL = new TipoZonaSQL();
            LstZonasAnq = tzSQL.ObtenerZonasxAlmacen(idAnaquel, 2);
            CmbZonas = lstZonasAnq;
            ProductoSQL pSQL = new ProductoSQL();
            LstProductos = pSQL.BuscarProductoxTienda(idTienda);
            TxtStockActual = "";
            TxtCapacidad = "";
        }
 public Boolean validar(MadeInHouse.Models.Compras.Servicio s)
 {
     if ((s.Descripcion == null) || (s.Nombre == null))
     {
         _windowManager.ShowDialog(new AlertViewModel(_windowManager, "Tiene campos incompletos , rellenar porfavor"));
         return false;
     }
     else
     {
         return true;
     }
 }
        public void SelectedItemChanged(object sender, MadeInHouse.Dictionary.DynamicGrid anaquel)
        {
            SelectedProduct = ((sender as DataGrid).SelectedItem as ProductoCant);
            anaquel.SelectedProduct = SelectedProduct;
            if (selectedZona > 0)
            {
                if (SelectedProduct != null)
                {

                    anaquel.UbicarSector(SelectedProduct.IdProducto);
                    TxtCapacidad = anaquel.CapacidadActual;
                    TxtVolOcupado = anaquel.VolOcupadoActual + "%";
                    TxtStockActual = anaquel.StockActual;
                    Atendido = SelectedProduct.Atendido;
                    //(sender as DataGrid).SelectedItem = null;

                }
            }
            else
            {
                (sender as DataGrid).SelectedItem = null;
            }
        }
        public void BuscarProductos(MadeInHouse.Dictionary.DynamicGrid almacen, MadeInHouse.Dictionary.DynamicGrid ubicacionCol)
        {
            if (TxtProducto == null || TxtProducto == "")
            {
                _windowManager.ShowWindow(new ProductoBuscarViewModel(_windowManager, this, 7, idTienda));
            }

            else
            {

                ProductoCant pc = new ProductoCant();
                //Buscar producto del textBox Inicial:
                if (productoSeleccionado == null)
                {
                    ProductoSQL prodSQL = new ProductoSQL();
                    List<Producto> lstProd;
                    lstProd = prodSQL.BuscarProducto(TxtProducto);
                    if (lstProd == null)
                        _windowManager.ShowDialog(new AlertViewModel(_windowManager, "Producto no existente con ese código"));
                    else
                    {
                        pc.Nombre = lstProd[0].Nombre;
                        pc.IdProducto = lstProd[0].IdProducto;
                        pc.CodigoProd = TxtProducto;
                        productoSeleccionado = null;
                    }
                }
                else
                {
                    pc.Nombre = ProductoSeleccionado.Nombre;
                    pc.IdProducto = ProductoSeleccionado.IdProducto;
                    pc.CodigoProd = ProductoSeleccionado.CodigoProd;
                    productoSeleccionado = null;
                }

                ubicacionCol.SelectedProduct = pc;
                almacen.UbicarProducto(pc.IdProducto);
                pc = null;
            }
        }