67 lines
1.9 KiB
Ruby
67 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# tools/adn/comando/cierre.rb — Subcomando para cierre de jornada laboral (DB-First)
|
|
# ==============================================================================
|
|
|
|
require 'date'
|
|
require 'time'
|
|
require_relative '../../bitacoras-db/core/bitacora_db'
|
|
|
|
module ADN
|
|
class SubcomandoCierre
|
|
module Color
|
|
RESET = "\e[0m"
|
|
BOLD = "\e[1m"
|
|
GREEN = "\e[32m"
|
|
CYAN = "\e[36m"
|
|
YELLOW = "\e[33m"
|
|
RED = "\e[31m"
|
|
DIM = "\e[2m"
|
|
end
|
|
|
|
def initialize(args, logger)
|
|
@args = args
|
|
@logger = logger
|
|
@fecha = Date.today
|
|
end
|
|
|
|
def ejecutar
|
|
if @args.empty? || !(@args.include?('jornada'))
|
|
puts "#{Color::YELLOW}Uso: ./tools/adn/run cierre de jornada [presencial|remoto]#{Color::RESET}"
|
|
return
|
|
end
|
|
|
|
modo = @args.include?('presencial') ? 'P' : 'R'
|
|
tipo_str = modo == 'P' ? 'Presencial' : 'Remoto'
|
|
hora_fin = Time.now.strftime('%H:%M')
|
|
|
|
@logger.info("Iniciando cierre de jornada #{tipo_str} (Modo DB-First)")
|
|
|
|
BitacorasDB::BitacoraDB.with_connection do |db|
|
|
# 1. Buscar la bitácora
|
|
bitacora = db.find_bitacora_by_fecha(@fecha)
|
|
unless bitacora
|
|
@logger.error("No existe bitácora en DB para hoy (#{@fecha}). ¿Iniciaste la jornada?")
|
|
return
|
|
end
|
|
|
|
# 2. Obtener nodo srv-ns8
|
|
nodo = db.find_nodo_by_nombre('srv-ns8')
|
|
|
|
# 3. Crear entrada de cierre
|
|
db.create_entrada(
|
|
inicio: hora_fin,
|
|
fin: hora_fin,
|
|
descripcion: "Cierre de jornada #{tipo_str.downcase}. Sincronización final y validación de backups.",
|
|
estado: '✅',
|
|
modo: modo,
|
|
bitacora_id: bitacora['id'],
|
|
nodo_id: nodo ? nodo['id'] : nil
|
|
)
|
|
|
|
@logger.exito("Cierre de jornada registrado en Base de Datos.")
|
|
end
|
|
end
|
|
end
|
|
end
|