Private Sub cmdLiberarEmbarcaciones_Click()
Dim dbName As String
Dim conn As ADODB.Connection
Dim strUpdate As String
Dim strSelect As String
Dim NumEmbarcacion As String
Dim NumeroConfirmacion As String
Dim PaxALiberar As Integer
Dim PaxLibres As Integer
Dim PaxLibresNuevos As Integer
Dim PaxOcupados As Integer
Dim PaxOcupadosNuevos As Integer
Dim Capacidad As Integer
Dim ActualizaEmbarcacion As String
Dim ActualizaPaxLibres As String
Dim ActualizaPaxLibresFlujo As String
Dim ActualizaPaxOcupados As String
Dim ActualizaStatusFlujo As String
Dim TiempoUsoPromedio As Single
Dim TiempoUsoActual As Single
Dim TiempoUsoAcumulado As Single
Dim TiempoUsoParaServicio As Single
Dim ActualizaTiempoUsoActual As String
Dim ActualizaTiempoUsoAcumulado As String
Dim FechaMovimiento As String
Dim HoraMovimiento As String
Dim Usuario As String
Dim CodGuia As String
Dim Status As String
Dim EmbarcacionGuia As String
Dim TodasEmbarcacionesLibres As Boolean
Dim ActualizaGuia As String
Dim Servicio As String
Dim i As Integer
Dim j As Integer
Dim tFields() As String

    Usuario = RsvUsuario
Fecha y hora las cuales se van a insertar en la tabla Flujo Embarcaciones
    FechaMovimiento = Format(Now, "dd/mm/yyyy")
    HoraMovimiento = Format(Now, "HH:mm:ss")
    
    dbName = frmMain.Ap_Path & frmMain.dbName
        Set conn = New ADODB.Connection
    conn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & dbName & ";" & _
        "Persist Security Info=False"
    conn.Open
    Selecciona los registros de la tabla Flujo Embarcaciones Libera, donde la
casilla de verificacin: Libera, sea verdadera
         strSelect = "SELECT [Flujo Embarcaciones Libera].Embarcacion, [Flujo Embarcaciones Libera].NConfirmacion, [Flujo Embarcaciones Libera].PaxAsignados, [Flujo Embarcaciones Libera].CodGuia  FROM [Flujo Embarcaciones Libera] where [Flujo Embarcaciones Libera].Libera = True"
            rcd.Open strSelect, db1, adOpenStatic, adLockOptimistic
            rcd.MoveFirst
            For i = 1 To rcd.RecordCount
            NumEmbarcacion = rcd.Fields(0)
            NumeroConfirmacion = rcd.Fields(1)
            PaxALiberar = rcd.Fields(2)
            CodGuia = rcd.Fields(3)
            PaxLibres = DLookup("Libres", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
            Capacidad = DLookup("Capacidad", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
            PaxOcupados = DLookup("Ocupados", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
Calcula los pasajeros libres y ocupados nuevos para la embarcacin a liberar
            PaxLibresNuevos = PaxLibres + PaxALiberar
            PaxOcupadosNuevos = PaxOcupados  PaxALiberar
Si los pasajeros libres nuevos es la misma que la capacidad de la embarcacin, calcular el tiempo de uso actual y acumulado de dicha embarcacin
            If PaxLibresNuevos = Capacidad Then
            Servicio = DLookup("Actividad", "Reservaciones", "NConfirmacion ='" & NumeroConfirmacion & "'")
            TiempoUsoPromedio = DLookup("TiempoUsoPromedio", "Servicios", "IIdent='" & Servicio & "'")
            TiempoUsoActual = DLookup("TiempoUsoActual", "Embarcaciones", "NumEmbarcacion= " & NumEmbarcacion)
            TiempoUsoAcumulado = DLookup("TiempoUsoAcumulado", "Embarcaciones", "NumEmbarcacion= " & NumEmbarcacion)
            TiempoUsoParaServicio = DLookup("TiempoUsoParaServicio", "Embarcaciones", "NumEmbarcacion = " & NumEmbarcacion)
            TiempoUsoActual = TiempoUsoActual + TiempoUsoPromedio
            TiempoUsoAcumulado = TiempoUsoAcumulado + TiempoUsoPromedio
Si el tiempo de uso actual es igual o mayor al tiempo de uso para servicio
para la embarcacin, entonces pasar dicha embarcacin a Status 2
            If TiempoUsoActual >= TiempoUsoParaServicio Then
                ActualizaEmbarcacion = "Update Embarcaciones set Status = 2 where NumEmbarcacion = " & NumEmbarcacion
                db1.Execute ActualizaEmbarcacion
            Else
si no entonces pasar la embarcacin a status 5
                ActualizaEmbarcacion = "Update Embarcaciones set Status = 5 where NumEmbarcacion = " & NumEmbarcacion
                db1.Execute ActualizaEmbarcacion
            End If
Actualiza los pasajeros ocupados, libres, tiempo de uso actual, tiempo de uso acumulado de la embarcacin
            ActualizaPaxOcupados = "Update Embarcaciones set Ocupados = " & PaxOcupadosNuevos & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaPaxOcupados
            ActualizaPaxLibres = "Update Embarcaciones set Libres = " & PaxLibresNuevos & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaPaxLibres
            ActualizaTiempoUsoActual = "Update Embarcaciones set TiempoUsoActual =" & TiempoUsoActual & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaTiempoUsoActual
            ActualizaTiempoUsoAcumulado = "Update Embarcaciones set TiempoUsoAcumulado = " & TiempoUsoAcumulado & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaTiempoUsoAcumulado
            Else
Si no se han liberado todos los pasajeros de la embarcacin, entonces nicamente actualiza los pasajeros ocupados y libres de la embarcacin.
            ActualizaPaxOcupados = "Update Embarcaciones set Ocupados = " & PaxOcupadosNuevos & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaPaxOcupados
            ActualizaPaxLibres = "Update Embarcaciones set Libres = " & PaxLibresNuevos & " where NumEmbarcacion = " & NumEmbarcacion
            db1.Execute ActualizaPaxLibres
            End If
            rcd.MoveNext
            Next i
            rcd.Close
        Inserta en la tabla Flujo Embarcaciones las embarcaciones que
pasaron a Status 5
            conn.Execute "Insert into [Flujo Embarcaciones] (Embarcacion,FechaStatus,HoraStatus,NConfirmacion,Status,PaxLiberados,CodGuia,Usuario) Select Embarcacion,'" & FechaMovimiento & "' As FechaMovimiento, '" & HoraMovimiento & "' As HoraMovimiento, '" & NumeroConfirmacion & "' As NConfirmacion, 5 As Status, PaxAsignados, '" & CodGuia & "' As CodigoGuia, '" & Usuario & "' As Usuario from [Flujo Embarcaciones Libera] where [Flujo Embarcaciones Libera].Libera = True"
            Selecciona el Cdigo del Gua de la tabla Flujo Embarcaciones
Libera y los agrupa por el Cdigo de Gua             
            strSelect = "SELECT CodGuia FROM [Flujo Embarcaciones Libera] where [Flujo Embarcaciones Libera].Libera = True Group by CodGuia"
            rcd.Open strSelect, db1, adOpenStatic, adLockOptimistic
            rcd.MoveFirst
            For i = 1 To rcd.RecordCount
                CodGuia = rcd.Fields(0)
Asume que todas las embarcaciones del Gua estn libres
                TodasEmbarcacionesLibres = True
Selecciona los status de las embarcaciones del Gua
                strSelect = "Select Status FROM Embarcaciones WHERE Guia = '" & CodGuia & "'"
                rcd2.Open strSelect, db1, adOpenStatic, adLockOptimistic
                rcd2.MoveFirst
                For j = 1 To rcd2.RecordCount
                    Status = rcd2.Fields(0)
                    If Status = 10 Then
Se encontr una embarcacin que no se ha liberado
                        TodasEmbarcacionesLibres = False
                        Exit For
                    End If
                rcd2.MoveNext
                Next j
                rcd2.Close
Si todas las embarcaciones del gua, se han liberado, entonces, buscar la
embarcacin del Guia, y pasarla a Status 6
                If TodasEmbarcacionesLibres = True Then
                    EmbarcacionGuia = DLookup("NumEmbarcacion", "Embarcaciones", "Guia = '" & CodGuia & "' AND Status = 8")
                    ActualizaEmbarcacion = "Update Embarcaciones set Status = 6 where NumEmbarcacion = " & EmbarcacionGuia
                    db1.Execute ActualizaEmbarcacion
Inserta en la tabla flujo de embarcaciones, la embarcacin del gua que paso
a status 6
                    conn.Execute "Insert into [Flujo Embarcaciones] (Embarcacion,FechaStatus,HoraStatus,NConfirmacion,Status,CodGuia,Usuario) VALUES (" & EmbarcacionGuia & ",'" & FechaMovimiento & "', '" & HoraMovimiento & "','" & NumeroConfirmacion & "',6,'" & CodGuia & "','" & Usuario & "')"
Cambia el campo que indica si el gua est en tour a falso
                    ActualizaGuia = "Update Guias Set EnTour = False where CodGuia = '" & CodGuia & "'"
                    db1.Execute ActualizaGuia
                End If
            rcd.MoveNext
            Next i
    Descarga el formulario Liberar Embarcaciones
Muestra el formulario Buscar Reservacin A Pagar
           Unload frmLiberaEmbarcaciones
           frmBuscaReservacionAPagar.Show
End Sub
