private static CotizacionDirecta GetFromComnpleteDataReader(IDataRecord reader)
        {
            try {
                var cot = new CotizacionDirecta();
                cot.Id       = cot.Id32 = Convert.ToInt32(reader["id"]);
                cot.Producto = reader["producto"].ToString();

                cot.Usuario =
                    Usuarios.clsUsuarioADO.ObtenerTransaccionUsuarioPorId(Convert.ToInt32(reader["idUsuario"])).
                    ObjetoTransaccion as clsUsuario;

                cot.Cliente = new clsClienteMaster(true);
                cot.Cliente = clsClienteMasterADO.ObtenerClienteMasterPorId(Convert.ToInt64(reader["idcliente"]));

                cot.NombreCliente  = reader["nombreCliente"].ToString();
                cot.FechaSolicitud = Convert.ToDateTime(reader["fechaSolicitud"]); //fecha solicitud

                cot.IncoTerm = new clsIncoTerm();
                cot.IncoTerm =
                    Parametros.clsParametrosClientesDAO.ObtenerIncoTermPorId(Convert.ToInt16(reader["idincoterms"]));

                cot.Commodity     = reader["commodity"].ToString();
                cot.GastosLocales = 0;

                if (!String.IsNullOrEmpty(reader["gastosLocales"].ToString()))
                {
                    cot.GastosLocales = Convert.ToDecimal(reader["gastosLocales"]);
                }

                cot.Observaciones      = reader["Observaciones"].ToString();
                cot.ObservacionesFijas = reader["ObservacionesFijas"].ToString();

                if (!string.IsNullOrEmpty(reader["copiadode"].ToString()))
                {
                    cot.CopiadoDe = Convert.ToInt32(reader["copiadode"]);
                }

                var listEstados =
                    (List <Estado>)ClsCotizacionDirectaEstadoDao.ListarEstadosCotizacionDirecta().ObjetoTransaccion;
                cot.Estado =
                    listEstados.Find(estado => estado.Id == Convert.ToInt32(reader["COTIZACION_Directa_ESTADOS_id"]));

                cot.GastosLocalesList =
                    ClsGastosLocalesDao.ObtieneGastosLocales(cot.Id32).ObjetoTransaccion as List <GastoLocal>;

                cot.Opciones = ClsOpcionDao.ObtieneOpciones(cot.Id32).ObjetoTransaccion as List <Opcion>;

                return(cot);
            } catch (Exception ex) {
                Log.EscribirLog(ex.Message);
                //throw;
                return(null);
            }
        }
        public static ResultadoTransaccion Modificar(CotizacionDirecta cotizacionDirecta)
        {
            var            Res   = new ResultadoTransaccion();
            SqlTransaction trans = null;

            var cotizacionDB = ObtieneCotizacionDirecta(cotizacionDirecta.Id32).ObjetoTransaccion as CotizacionDirecta;
            //Abrir Conexion
            var conn = BaseDatos.Conexion();

            try {
                SqlCommand command = new SqlCommand("SP_A_COTIZACION_SOLICITUD_COTIZACIONES", conn);

                command.Transaction = conn.BeginTransaction();
                trans = command.Transaction;

                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@id", cotizacionDirecta.Id32);
                command.Parameters.AddWithValue("@Producto", cotizacionDirecta.Producto);
                command.Parameters.AddWithValue("@idUsuario", cotizacionDirecta.Usuario.Id32);
                command.Parameters.AddWithValue("@idCliente", cotizacionDirecta.Cliente.Id32);
                command.Parameters.AddWithValue("@nombreCliente", cotizacionDirecta.NombreCliente);
                command.Parameters.AddWithValue("@fechaSolicitud", cotizacionDirecta.FechaSolicitud);
                command.Parameters.AddWithValue("@idIncoterms", cotizacionDirecta.IncoTerm.Id32);
                command.Parameters.AddWithValue("@commodity", cotizacionDirecta.Commodity);
                command.Parameters.AddWithValue("@puertoEmbarque", "");
                command.Parameters.AddWithValue("@navieraReferencia", "");
                command.Parameters.AddWithValue("@tarifaReferencia", "");
                command.Parameters.AddWithValue("@Observaciones", cotizacionDirecta.Observaciones);
                command.Parameters.AddWithValue("@mercaderia", "");
                command.Parameters.AddWithValue("@gastosLocales", cotizacionDirecta.GastosLocales);
                command.Parameters.AddWithValue("@proveedorCarga", "");
                command.Parameters.AddWithValue("@credito", "");
                command.Parameters.AddWithValue("@fechaEstimadaEmbarque", "");
                command.Parameters.AddWithValue("@conAgenciamento", false);

                command.CommandType = CommandType.StoredProcedure;
                command.ExecuteScalar();

                ModificarOpciones(cotizacionDirecta, command);

                //Marcamos las opciones que el usuario marco para borrar.
                foreach (var opcion in cotizacionDB.Opciones)
                {
                    var op = cotizacionDirecta.Opciones.Find(foo => foo.Id32 == opcion.Id32);
                    if (op == null)
                    {
                        EliminaOpcion(opcion, command);
                    }
                }

                ClsGastosLocalesDao.Eliminar(cotizacionDirecta, command);
                ClsGastosLocalesDao.CrearGastosLocales(cotizacionDirecta, command);

                //Ejecutar transaccion
                trans.Commit();
                Res.Estado      = Entidades.Enums.Enums.EstadoTransaccion.Aceptada;
                Res.Descripcion = "Se modificó la cotización correctamente";
            } catch (Exception ex) {
                if (trans != null)
                {
                    trans.Rollback();
                }
                Log.EscribirLog(ex.Message);
                Res.Descripcion  = ex.Message;
                Res.ArchivoError = NombreClase;
                Res.MetodoError  = MethodBase.GetCurrentMethod().Name;
            } finally {
                conn.Close();
            }
            return(Res);
        }
        public static ResultadoTransaccion Crear(CotizacionDirecta cotizacionDirecta)
        {
            ResultadoTransaccion res   = new ResultadoTransaccion();
            SqlTransaction       trans = null;
            //Abrir Conexion
            var conn = BaseDatos.Conexion();

            try {
                SqlCommand command = new SqlCommand("SP_N_COTIZACION_SOLICITUD_COTIZACIONES", conn);

                command.Transaction = conn.BeginTransaction();
                trans = command.Transaction;

                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("@idUsuario", cotizacionDirecta.Usuario.Id32);
                command.Parameters.AddWithValue("@Producto", cotizacionDirecta.Producto);
                //command.Parameters.AddWithValue("@Producto", "FCL");
                command.Parameters.AddWithValue("@idCliente", cotizacionDirecta.Cliente.Id32);
                command.Parameters.AddWithValue("@nombreCliente", cotizacionDirecta.NombreCliente);
                command.Parameters.AddWithValue("@fechaSolicitud", cotizacionDirecta.FechaSolicitud);
                command.Parameters.AddWithValue("@idIncoterms", cotizacionDirecta.IncoTerm.Id32);
                command.Parameters.AddWithValue("@gastosLocales", cotizacionDirecta.GastosLocales);
                command.Parameters.AddWithValue("@ObservacionesFijas", cotizacionDirecta.ObservacionesFijas);
                command.Parameters.AddWithValue("@Observaciones", cotizacionDirecta.Observaciones);
                command.Parameters.AddWithValue("@commodity", cotizacionDirecta.Commodity);
                command.Parameters.AddWithValue("@COTIZACION_TIPOS_id", 1);
                command.Parameters.AddWithValue("@COTIZACION_Directa_ESTADOS_id", 1);
                command.Parameters.AddWithValue("@conAgenciamento", false);
                command.Parameters.AddWithValue("@CopiadoDe", cotizacionDirecta.CopiadoDe);

                command.CommandType = CommandType.StoredProcedure;

                var outParam = command.Parameters.Add("@Id", SqlDbType.BigInt);
                outParam.Direction = ParameterDirection.Output;
                command.ExecuteScalar();

                cotizacionDirecta.Id   = Convert.ToInt16(outParam.Value);
                cotizacionDirecta.Id32 = Convert.ToInt32(outParam.Value);

                CrearOpcion(cotizacionDirecta, command);
                ClsGastosLocalesDao.CrearGastosLocales(cotizacionDirecta, command);
                command.Transaction.Commit();

                res.Accion            = Entidades.Enums.Enums.AccionTransaccion.Consultar;
                res.ObjetoTransaccion = cotizacionDirecta;
                res.Descripcion       = "La cotización se guardó Exitosamente";
            } catch (Exception ex) {
                cotizacionDirecta.Id = cotizacionDirecta.Id32 = 0;
                foreach (var o in cotizacionDirecta.Opciones)
                {
                    o.Id = o.Id32 = 0;
                    foreach (var d in o.Detalles)
                    {
                        d.Id = d.Id32 = 0;
                    }
                }

                if (trans != null)
                {
                    trans.Rollback();
                }
                Log.EscribirLog(ex.Message);

                res.Descripcion  = ex.Message;
                res.ArchivoError = NombreClase;
                res.MetodoError  = MethodBase.GetCurrentMethod().Name;
            } finally {
                conn.Close();
            }
            return(res);
        }