#!/bin/bash day_name=$(LC_TIME=es_ES.UTF-8 date -d "$year-$month-$day" +%A) fecha_es=$(LC_TIME=es_ES.UTF-8 date -d "$year-$month-$day" +"%A %d de %B de %Y") # Definir lista de personas (en orden) con 7 nombres (sin Aguedo) persons=("Juan" "Jobran" "Luis" "Jesus" "Jose" "Gabriel" "Jonathan") # Detectar carpeta de escritorio válida (prioriza "Escritorio" si existe, si no "Desktop") if [ -d "$HOME/Escritorio" ]; then DESKTOP_DIR="$HOME/Escritorio" elif [ -d "$HOME/Desktop" ]; then DESKTOP_DIR="$HOME/Desktop" else # No existe ninguna, crear "Escritorio" DESKTOP_DIR="$HOME/Escritorio" mkdir -p "$DESKTOP_DIR" echo "No se encontró carpeta de escritorio, se ha creado '$DESKTOP_DIR'." fi # Crear carpeta asignacion A="$DESKTOP_DIR/asignacion" mkdir -p "$A" # Definir archivo de salida OUTPUT_FILE="$A/asignacion_caja.txt" echo "Hola! Este script te dirá qué días te toca buscar la caja de comida este mes." read -p "Por favor, ingresa tu nombre: " name # Validar mes while true; do read -p "Ingresa el número del mes (1-12): " month if [[ "$month" =~ ^[0-9]+$ ]] && (( month >= 1 && month <= 12 )); then break else echo "Error: Debes ingresar un número válido entre 1 y 12 para el mes." fi done # Validar año while true; do read -p "Ingresa el año actual (2025): " year if [[ "$year" =~ ^[0-9]{4}$ ]] && (( year >= 1900 && year <= 3000 )); then break else echo "Error: Debes ingresar un año válido de 4 dígitos (por ejemplo, 2023)." fi done # Verificar nombre con mensaje específico index=-1 for i in "${!persons[@]}"; do if [[ "${persons[$i],,}" == "${name,,}" ]]; then index=$i break fi done if [ $index -eq -1 ]; then echo "Error: Debes ingresar un nombre válido de las personas que trabajan en la oficina de sistemas y usan el servicio del comedor." exit 1 fi # Fecha actual current_year=$(date +%Y) current_month=$(date +%m) current_day=$(date +%d) show_individual=1 if (( year < current_year )) || { (( year == current_year )) && (( month < 10#$current_month )); }; then show_individual=0 fi days_in_month() { case $1 in 1|3|5|7|8|10|12) echo 31 ;; 4|6|9|11) echo 30 ;; 2) if (( ($2 % 400 == 0) || (($2 % 4 == 0) && ($2 % 100 != 0)) )); then echo 29 else echo 28 fi ;; *) echo 30 ;; esac } total_days=$(days_in_month $month $year) # PRE-CALCULAR días laborales y asignados para evitar múltiples llamadas declare -a laboral_days declare -a asignacion_personas laboral_count=0 for (( day=1; day<=total_days; day++ )); do wd=$(date -d "$year-$month-$day" +%u) if (( wd >= 1 && wd <= 5 )); then laboral_days[laboral_count]=$day assign_index=$(( laboral_count % 7 )) asignacion_personas[laboral_count]=${persons[$assign_index]} ((laboral_count++)) fi done # Crear o sobreescribir archivo echo "Asignación de búsqueda de caja para $month/$year" > "$OUTPUT_FILE" echo "--------------------------------------------" >> "$OUTPUT_FILE" assigned_days=() for (( i=0; i<laboral_count; i++ )); do day=${laboral_days[i]} assigned_person=${asignacion_personas[i]} # Nombre del día en español, solo llamar una vez por día day_name=$(LC_TIME=es_ES.UTF-8 date -d "$year-$month-$day" +%A) # Filtrar fechas desde hoy en adelante para archivo y asignación individual if (( year > current_year )) || \ { (( year == current_year )) && (( month > 10#$current_month )); } || \ { (( year == current_year )) && (( month == 10#$current_month )) && (( day >= 10#$current_day )); }; then echo "$day_name $day/$month/$year : $assigned_person" >> "$OUTPUT_FILE" # Mostrar solo asignación individual para el usuario si corresponde if [[ $assigned_person == "${persons[$index]}" && show_individual -eq 1 ]]; then assigned_days+=("$day_name $day/$month/$year") fi fi done if (( show_individual == 1 )); then echo echo "¡Hola, $name! 🎉 Aquí están los días que te toca buscar la caja de comida este mes:" if [ ${#assigned_days[@]} -eq 0 ]; then echo "¡Nada esta vez! Pero recuerda estar listo para la próxima ronda. 😉" else for d in "${assigned_days[@]}"; do echo " - $d" done fi else echo echo "Tu asignación individual no se mostrará porque el mes seleccionado ($month/$year) ya pasó." fi echo echo "Además, se ha creado o actualizado el archivo con la asignación completa en:" echo " $OUTPUT_FILE" echo echo "¡Gracias por colaborar con el equipo! 💪🍱" exit 0