123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # Modalità "query"
- # Variabili e funzioni di supporto
- # a modalità query
- # Controlla che l'id in ingresso esista
- # e lo converte nel nome dell'operatore corrispondente
- # (se non esiste, ferma il programma esce con un errore)
- id_to_name_check(){
- case "$1" in
- 0)
- echo "$ID_0_150"
- ;;
- 1)
- echo "$ID_1_150"
- ;;
- 2)
- echo "$ID_2_150"
- ;;
- *)
- echoerr "Illegal operator ID specified. Choose between 0,1,2."
- esac
- return 0
- }
- # Prendendo in ingresso l'id di un operatore
- # restituisce il numero totale di ore di lavoro
- get_operator_total(){
- OPERATOR_NAME=$(id_to_name_check "$1") || exit 1
- awk -F\; -v pattern="$OPERATOR_NAME" '
- BEGIN { counter=0 }
- $0 ~ pattern { counter+=$3; }
- END{ print counter }' "$SHIFT_FILE"
- return 0
- }
- # Grand total mode
- print_gtotal(){
- echo -e "\nHere it comes the operators' grand total:"
- for i in {0..2}
- do
- printf "%-30s%10s/120h\n" "$(id_to_name_check $i):" "$(get_operator_total $i)"
- done
- }
- # Prendendo in stdin una lista di entrate
- # restituisce le date corrispondente.
- get_dates(){
- cut -f1 -d';' | cut -f1 -d':' 2>/dev/null
- return 0
- }
- # Prendendo come primo argomento il nome di un
- # operatore restituisce una lista delle date
- # nelle quali un suo turno è stato registrato.
- get_operator_dates(){
- grep "$1" "$SHIFT_FILE" | get_dates | uniq 2>/dev/null
- return 0
- }
- # Mostra a schermo le date relativi ai turni
- # dell'operatore richiesto in linea di comando
- # se questo esiste
- show_operator_dates(){
- check_operator "$QUERY_OPERATOR" ||\
- echoerr "\"$QUERY_OPERATOR\" is not an LCM operator."
- local OPERATOR_DATES="$(get_operator_dates "$QUERY_OPERATOR")"
- [ -n "$OPERATOR_DATES" ] ||\
- { echo -e "\nNo dates for \"$QUERY_OPERATOR\"."; exit 0; }
- ifpaginate "Shifts dates for \"$QUERY_OPERATOR\":\n\n$OPERATOR_DATES"
- return 0
- }
- # Controlla che il primo argomento sia
- # una data e nel caso l'assegna alla variabile
- # corretta
- ifformat_date(){
- local DATE="$(check_date "$1")"
- if [ -n "$DATE" ]
- then
- QUERY_DATE="$DATE"
- else
- return 1
- fi
- return 0
- }
- # Prende come primo argomento una data e printa
- # la lista delle entrate per la stessa, se presenti.
- get_entries_by_date(){
- grep "$1" "$SHIFT_FILE" 2>/dev/null ||\
- return 1
- return 0
- }
- # Prendendo come primo argomento un'entrata
- # restituisce l'operatore corrispondente.
- get_operator_from_entry(){
- cut -f2 -d';' <<< "$1" 2>/dev/null
- return 0
- }
- # Prendendo come primo argomento un'entrata
- # restituisce la durata del turno corrispondente.
- get_shift_duration_from_entry(){
- cut -f3 -d';' <<< "$1" 2>/dev/null
- return 0
- }
- # Prendendo come primo argomento un'entrata
- # restituisce il commento corrispondente.
- get_comment_from_entry(){
- local COMMENT="$(cut -f4 -d';' <<< "$1" 2>/dev/null)"
- if [ -z "$COMMENT" ]
- then
- COMMENT="[No comment]"
- else
- COMMENT="\"$(base64 -d <<<"$COMMENT")\""
- fi
- echo "$COMMENT"
- return 0
- }
- # Prende un'entrata come primo argomento
- # e la printa in formato leggibile per
- # esseri umani.
- entry_to_human(){
- echo "operator: $(get_operator_from_entry "$1")"
- echo "shift duration: $(get_shift_duration_from_entry "$1")h"
- echo -e "comment: $(get_comment_from_entry "$1")\n"
- return 0
- }
- # Mostra a schermo le entrate relative alla data
- # richiesta se presenti.
- show_entries_by_date(){
- ifformat_date "$QUERY_DATE" ||\
- echoerr "\"$QUERY_DATE\" is not a valid date."
- local DATE_ENTRIES="$(get_entries_by_date "$QUERY_DATE")"
- [ -n "$DATE_ENTRIES" ] ||\
- { echo -e "\nNo entries for \"$QUERY_DATE\"."; exit 0; }
- local DATE_ENTRIES_HUMAN="$(for i in $DATE_ENTRIES; do entry_to_human "$i"; done)"
- ifpaginate "Entries for \"$QUERY_DATE\":\n\n$DATE_ENTRIES_HUMAN"
- return 0
- }
|