/// <returns>Retorna un booleano indicando si la operación se realizó con éxito.</returns>
        public bool GuardarDistribucion(IUsuarios usuario)
        {
            using (SqlConnection conexion = new SqlConnection())
            {
                conexion.ConnectionString = Config.ConnectionString;
                SqlTransaction transaccion;
                try
                {
                    //   conexion.Open();
                    //  transaccion = conexion.BeginTransaction();

                    conexion.Open();
                    //transaccion ;
                    SqlCommand command = conexion.CreateCommand();


                    // Start a local transaction.
                    transaccion = conexion.BeginTransaction();

                    // Must assign both transaction object and connection
                    // to Command object for a pending local transaction
                    command.Connection  = conexion;
                    command.Transaction = transaccion;

                    //Reviso si estoy agregando o modificando un registro existente
                    if (this.AgenciaCodigoPostalDistribID == 0)
                    {
                        this.AgenciaCodigoPostalDistribID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "AgenciaCodigoPostalDistribINS", Utiles.BaseDatos.IntToSql(this.AgenciaOrigenID), Utiles.BaseDatos.IntToSql(this.AgenciaOperativaID), Utiles.BaseDatos.IntToSql(this.TarifarioRetiroEntregaID)));

                        if (this.Localidades.Count > 0)
                        {
                            for (int i = 0; i < Localidades.Count; i++)
                            {
                                LocalidadAgenciaCodigoPostal localidad = new LocalidadAgenciaCodigoPostal();
                                localidad.AgenciaCodigoPostalDistribID = this.AgenciaCodigoPostalDistribID;
                                localidad.CodigoPostalID   = this.Localidades[i].CodigoPostalID;
                                localidad.LocalidadID      = this.Localidades[i].LocalidadID;
                                localidad.AgenciaOrigen    = this.AgenciaOrigenID;
                                localidad.AgenciaOperativo = this.AgenciaOperativaID;

                                if (localidad.GuardarDistribucion(usuario, transaccion) == false)
                                {
                                    transaccion.Rollback();
                                    return(false);
                                }
                                ;
                            }
                        }

                        if (this.UnidadesVentas.Count > 0)
                        {
                            for (int i = 0; i < UnidadesVentas.Count; i++)
                            {
                                UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                                unidadVenta.AgenciaCodigoPostalDistribID = this.AgenciaCodigoPostalDistribID;
                                unidadVenta.UnidadVentaID     = this.UnidadesVentas[i].UnidadVentaID;
                                unidadVenta.CategoriaUVentaID = this.UnidadesVentas[i].CategoriaUVentaID;
                                if (unidadVenta.GuardarDistribucion(usuario, transaccion) == false)
                                {
                                    transaccion.Rollback();
                                    return(false);
                                }
                            }
                        }
                    }

                    else
                    {
                        // Estoy Modificando un registro
                        Config.Conexion.EjecutarSinResultados(transaccion, "AgenciaCodigoPostalDistribUPD", Utiles.BaseDatos.IntToSql(this.AgenciaCodigoPostalDistribID), Utiles.BaseDatos.IntToSql(this.AgenciaOrigenID), Utiles.BaseDatos.IntToSql(this.AgenciaOperativaID), Utiles.BaseDatos.IntToSql(this.TarifarioRetiroEntregaID), usuario.UsuarioID);

                        if (this.Localidades.Count > 0)
                        {
                            for (int i = 0; i < Localidades.Count; i++)
                            {
                                LocalidadAgenciaCodigoPostal localidad = new LocalidadAgenciaCodigoPostal();
                                localidad.AgenciaCodigoPostalDistribID = this.AgenciaCodigoPostalDistribID;
                                localidad.CodigoPostalID   = this.Localidades[i].CodigoPostalID;
                                localidad.LocalidadID      = this.Localidades[i].LocalidadID;
                                localidad.AgenciaOrigen    = this.AgenciaOrigenID;
                                localidad.AgenciaOperativo = this.AgenciaOperativaID;

                                if (localidad.GuardarDistribucion(usuario, transaccion) == false)
                                {
                                    transaccion.Rollback();
                                    return(false);
                                }
                                ;
                            }
                        }
                        if (this.UnidadesVentas.Count > 0)
                        {
                            for (int i = 0; i < UnidadesVentas.Count; i++)
                            {
                                UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                                unidadVenta.AgenciaCodigoPostalDistribID = this.AgenciaCodigoPostalDistribID;
                                unidadVenta.UnidadVentaID     = this.UnidadesVentas[i].UnidadVentaID;
                                unidadVenta.CategoriaUVentaID = this.UnidadesVentas[i].CategoriaUVentaID;


                                if (unidadVenta.GuardarDistribucion(usuario, transaccion) == false)
                                {
                                    transaccion.Rollback();
                                    return(false);
                                }
                            }
                        }
                    }


                    transaccion.Commit();
                    CacheDataManager.RemoveCacheValue(SisPack.CacheObjetos.LocalidadEntrega.ToString());
                    try
                    {
                        CargarCache();
                    }
                    catch (Exception ex)
                    {
                        //throw ex;
                    }
                }
                catch (Exception ex)
                {
                    //transaccion.Rollback();
                    //transaccion.Rollback();
                    throw ex;
                }
                finally
                {
                    conexion.Close();
                }
                return(true);
            }
        }
        /// <returns>Retorna un booleano indicando si la operación se realizó con éxito.</returns>
        public bool Guardar(IUsuarios usuario)
        {
            using (SqlConnection conexion = new SqlConnection())
            {
                SqlTransaction transaccion = null;
                conexion.ConnectionString = Config.ConnectionString;
                try
                {
                    conexion.Open();
                    transaccion = conexion.BeginTransaction();

                    // Reviso si estoy agregando o modificando un registro existente
                    if (this.AgenciaCodigoPostalID == 0)
                    {
                        this.AgenciaCodigoPostalID = Convert.ToInt32(Config.Conexion.EjecutarResultadoUnico(transaccion, "AgenciaCodigoPostalINS", Utiles.BaseDatos.IntToSql(this.AgenciaTerminalID), Utiles.BaseDatos.IntToSql(this.AgenciaDomicilioID), Utiles.BaseDatos.IntToSql(this.PuntoRecepcionTerminalID), Utiles.BaseDatos.IntToSql(this.PuntoRecepcionDomicilioID), Utiles.BaseDatos.IntToSql(this.TarifarioRetiroEntregaID), Utiles.BaseDatos.IntToSql(this.AgenciaReferenciaID)));

                        if (this.Localidades.Count > 0)
                        {
                            for (int i = 0; i < Localidades.Count; i++)
                            {
                                LocalidadAgenciaCodigoPostal localidad = new LocalidadAgenciaCodigoPostal();
                                localidad.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                                localidad.CodigoPostalID        = this.Localidades[i].CodigoPostalID;
                                localidad.LocalidadID           = this.Localidades[i].LocalidadID;
                                localidad.Guardar(usuario, transaccion);
                            }
                        }
                        /*SFE: Comento lo de categoria, ahora voy a guardar la categoria, no la unidad de venta.*/
                        /*DM 01/11/2012 me fijo si tengo unidaddes de venta o categorias de UV*/
                        //if (categoriaUnVta)
                        //{
                        //    UnidadVenta uv = new UnidadVenta();
                        //    for (int i = 0; i < UnidadesVentas.Count; i++)
                        //    {
                        //        /*DM 01/11/2012  Busco las UV pertenecientes a una categoria*/
                        //        DsUnidadesVenta datos =
                        //            uv.GetUnidadesVentByCategoria(UnidadesVentas[i].UnidadVentaID);
                        //        for (int j = 0; j < datos.Tables[0].Rows.Count; j++)
                        //        {
                        //            UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                        //            unidadVenta.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                        //            unidadVenta.UnidadVentaID = (int)datos.Tables[0].Rows[j]["UnidadVentaID"];
                        //            unidadVenta.Guardar(usuario, transaccion);
                        //        }
                        //    }
                        //}
                        //else
                        //{
                        if (this.UnidadesVentas.Count > 0)
                        {
                            for (int i = 0; i < UnidadesVentas.Count; i++)
                            {
                                UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                                unidadVenta.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                                unidadVenta.UnidadVentaID         = this.UnidadesVentas[i].UnidadVentaID;
                                unidadVenta.CategoriaUVentaID     = this.UnidadesVentas[i].CategoriaUVentaID;
                                unidadVenta.Guardar(usuario, transaccion);
                            }
                        }
                        //}
                    }
                    else
                    {
                        // Estoy Modificando un registro
                        Config.Conexion.EjecutarSinResultados(transaccion, "AgenciaCodigoPostalUPD", Utiles.BaseDatos.IntToSql(this.AgenciaCodigoPostalID), Utiles.BaseDatos.IntToSql(this.AgenciaDomicilioID), Utiles.BaseDatos.IntToSql(this.AgenciaTerminalID), Utiles.BaseDatos.IntToSql(this.PuntoRecepcionTerminalID), Utiles.BaseDatos.IntToSql(this.PuntoRecepcionDomicilioID), Utiles.BaseDatos.IntToSql(this.TarifarioRetiroEntregaID), usuario.UsuarioID, Utiles.BaseDatos.IntToSql(this.AgenciaReferenciaID));

                        if (this.Localidades.Count > 0)
                        {
                            for (int i = 0; i < Localidades.Count; i++)
                            {
                                LocalidadAgenciaCodigoPostal localidad = new LocalidadAgenciaCodigoPostal();
                                localidad.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                                localidad.CodigoPostalID        = this.Localidades[i].CodigoPostalID;
                                localidad.LocalidadID           = this.Localidades[i].LocalidadID;
                                localidad.Guardar(usuario, transaccion);
                            }
                        }
                        /*SFE: Comento lo de categoria, ahora voy a guardar la categoria, no la unidad de venta.*/
                        /*DM 01/11/2012 me fijo si tengo unidaddes de venta o categorias de UV*/
                        //if (categoriaUnVta)
                        //{
                        //    if (this.UnidadesVentas.Count > 0)
                        //    {
                        //        UnidadVenta uv = new UnidadVenta();
                        //        for (int i = 0; i < UnidadesVentas.Count; i++)
                        //        {
                        //            /*DM 01/11/2012  Busco las UV pertenecientes a una categoria*/
                        //            DsUnidadesVenta datos =
                        //                uv.GetUnidadesVentByCategoria(UnidadesVentas[i].UnidadVentaID);

                        //            for (int j = 0; j < datos.Tables[0].Rows.Count; j++)
                        //            {
                        //                UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                        //                unidadVenta.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                        //                unidadVenta.UnidadVentaID = (int)datos.Tables[0].Rows[j]["UnidadVentaID"];
                        //                unidadVenta.Guardar(usuario, transaccion);
                        //            }
                        //        }
                        //    }
                        //}
                        //else
                        //{
                        if (this.UnidadesVentas.Count > 0)
                        {
                            for (int i = 0; i < UnidadesVentas.Count; i++)
                            {
                                UnidadVentaAgenciaCodigoPostal unidadVenta = new UnidadVentaAgenciaCodigoPostal();
                                unidadVenta.AgenciaCodigoPostalID = this.AgenciaCodigoPostalID;
                                unidadVenta.UnidadVentaID         = this.UnidadesVentas[i].UnidadVentaID;
                                unidadVenta.CategoriaUVentaID     = this.UnidadesVentas[i].CategoriaUVentaID;
                                unidadVenta.Guardar(usuario, transaccion);
                            }
                        }
                        //}
                    }
                    transaccion.Commit();
                    CacheDataManager.RemoveCacheValue(SisPack.CacheObjetos.LocalidadEntrega.ToString());
                    try
                    {
                        CargarCache();
                    }
                    catch (Exception ex)
                    {
                        //throw ex;
                    }
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                    throw ex;
                }
                finally
                {
                    conexion.Close();
                }
                return(true);
            }
        }