public static IGuiaFactura GetGuiaFactura()
        {
            GuiaFactura guiaFactura = new GuiaFactura();

            return((IGuiaFactura)guiaFactura);
        }
        public bool GuardarTraspaso()
        {
            using (SqlConnection conexion = new SqlConnection())
            {
                SqlTransaction transaccion = null;
                conexion.ConnectionString = Config.ConnectionString;
                try
                {
                    conexion.Open();
                    transaccion = conexion.BeginTransaction();

                    /* Dejar log del traspaso. */
                    Config.Conexion.EjecutarSinResultados(transaccion, "GuiaPasajeACtaCteINS", Utiles.BaseDatos.IntToSql(this.GuiaID), Utiles.BaseDatos.IntToSql(this.FacturaID), this.ClienteIDNuevo, Utiles.BaseDatos.IntToSql(this.clienteIDAnt), Utiles.BaseDatos.StrToSql(this.PersonaSolicitante), Utiles.BaseDatos.StrToSql(this.Observaciones), this.UsuarioID, Utiles.BaseDatos.IntToSql((int)NegociosSisPackInterface.SisPack.TipoOperacionGuiaPasajeID.Traspaso), Utiles.BaseDatos.IntToSql(AgenciaID), Impreso);

                    if (this.GuiaID == 0 && this.FacturaID == 0)
                    {
                        throw new Exception("No se puede realizar el traspaso, no se obtienen los datos de la guía/factura correctamente.");
                    }

                    /* Modificar datos en base. */
                    if (this.GuiaID > 0)
                    {
                        /* Remito en tabla GuiaFactura. */
                        GuiaFactura guiaCliente = new GuiaFactura();
                        guiaCliente.GuiaID = this.GuiaID;
                        if (this.AgenteGuiaPagoID == (int)NegociosSisPackInterface.SisPack.TipoAgenteGuia.Destinatario)
                        {
                            guiaCliente.DestinatarioCliente = this.ClienteIDNuevo;
                        }
                        else if (this.AgenteGuiaPagoID == (int)NegociosSisPackInterface.SisPack.TipoAgenteGuia.Remitente)
                        {
                            guiaCliente.RemitenteCliente = this.ClienteIDNuevo;
                        }
                        else
                        {
                            throw new Exception("No se puede realizar el traspaso, la guía no tiene un agente de pago correcto.");
                        }

                        guiaCliente.ModificarCliente(transaccion);
                        guiaCliente = null;
                    }
                    else
                    {
                        /* Remito en tabla Factura. */
                        Factura factura = new Factura();
                        factura.FacturaID = this.FacturaID;
                        factura.ClienteID = this.ClienteIDNuevo;
                        factura.ModificarCliente(transaccion);
                        factura = null;
                    }

                    // decremento el crédito de las autorizaciones (si existen)
                    DsAutorizacionesCreditoCliente ds = new DsAutorizacionesCreditoCliente();
                    SqlParameter pClienteID           = new SqlParameter("@ClienteID", this.ClienteIDNuevo);
                    Config.Conexion.LlenarTypeDataSet(ds.Datos, System.Data.CommandType.StoredProcedure, "AutorizacionClienteCreditoSEL", pClienteID);

                    double importe = 0;
                    bool   parar   = false;
                    if (ds.Datos.Rows.Count > 0)
                    {
                        // recorro cada autorizacion y la decremento
                        foreach (DsAutorizacionesCreditoCliente.DatosRow dr in ds.Datos.Rows)
                        {
                            importe = Convert.ToDouble(Config.Conexion.EjecutarResultadoUnico(transaccion, "DecrementarCreditoAutorizacionClienteUPD", dr.AutorizacionClienteID, importe, this.GuiaID));
                            if (importe < 0)
                            {
                                parar = true;
                                break;
                            }
                        }

                        if (!parar)
                        {
                            Config.Conexion.EjecutarSinResultados(transaccion, "DecrementarCreditoUPD", Utiles.BaseDatos.IntToSql(this.ClienteIDNuevo), Utiles.BaseDatos.DoubleToSql(this.ImporteGuia));
                        }
                    }
                    else
                    {
                        Config.Conexion.EjecutarSinResultados(transaccion, "DecrementarCreditoUPD", Utiles.BaseDatos.IntToSql(this.ClienteIDNuevo), Utiles.BaseDatos.DoubleToSql(this.ImporteGuia));
                    }

                    Config.Conexion.EjecutarSinResultados(transaccion, "DecrementarCreditoUPD", Utiles.BaseDatos.IntToSql(this.ClienteIDAnt), Utiles.BaseDatos.DoubleToSql(this.ImporteGuia * -1));

                    transaccion.Commit();
                    return(true);
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                    throw ex;
                }
            }
        }