
#!/bin/bash
# File	: chk_birthdays.sh
# By	: M. de Boer, 070719
# Subject	: Verjaardag controle script
# 0.3	: Met aanhef ($FN) & CC mail
# 0.4	: Met jaartallen
# 0.5	: Met $LOG
# 0.6	: Met SMS & GINNR. Omgezet naar ksh ivm interne export van VAR's
# 0.7	: VERSIONINFO in users-file
# 0.8	: DeltaDAY-loop (-2 .. +3) geintroduceerd dmv `date --date`
# 0.9	: If $TMP is empty
# 0.10	: Used of Reply-To: & using /usr/sbin/sendmail, used of $HOME/bin/ (removed $BASE)
# 0.11	: SENDEMPTY, MAILBCC, -x
# 0.12	: New footer
# 0.13	: NWlines at footer & --test for sending test mail
# 0.14	: dos2unix & SENDMAIL test & -F added
# 0.15	: BASEDIR <> $HOME ivm ~agrarix/verjaardagen
# 016	: Mail footer, lijst opvragen
# 0.17	: Changed name to chk_birthdays.sh, From:, ${SUBJECT} (mail) added. ${FROMNAME} removed
# 0.18	: Kortere footer, Geen (-2) eergisteren meer
# 0.19	: Eigen verjaardag met "Jij bent"
# 0.20	: DATEWINDOW & YRMON added
# 0.21	: /bin/bash in stead of /bin/sh for at stratoserver.net
# 0.22	: Added: grep -v # in cat ${USERLIST}
#(0.23),190624	: Mod agrarix.com -> agrarix.it
#
PGM="`basename $0|cut -d\. -f1`"
VERSION="0.23"
BASEDIR="$HOME/birthdays"
TMP="/tmp/${PGM}.$$"
YRMON="`date +%Y-%m`" 
LOG="${BASEDIR}/log/${PGM}-${YRMON}.log"
MAILFILE="${TMP}.mailfile"
MAILTO="maarten@agrarix.nl"
REPLYTO="birthdays@agrarix.nl"
FROM="Agrarix birthdays <birthdays@agrarix.nl>"
V=""  # VERBOSE
MAIL=""
DAY="`date +%d-%m`"
FN=""
CC=""
SMS=""
GINNR=""
SMSSTR=""
VERSIONINFO=""
SENDEMPTY=""
DOSEND=""
BCC="birthdays@agrarix.nl"
SENDTESTMAIL=""
DOS2UNIX=""
SENDMAIL="/usr/sbin/sendmail"
#FROMNAME="Verjaardagen service"
SUBJECT="Verjaardag(en)"

export MAIL

USAGE()
{
  echo "${PGM}"
  echo "  -h : This help"
  echo "  -d <DAY> (dd-mm) [${DAY}]"
  echo "  -m : send Mail"
  echo "  -s : send SMS"
  echo "  -v : Verbose"
  echo "  -V : Version"
  echo "  --test : send test mail"
}

while [ $# -gt 0 ]
do
  case "$1" in
    '-d')  if [ "$2" != "" ]; then
             DAY=$2
           else
             DAY="`date +%d-%m`"
           fi
           shift ;;
    '-m')  MAIL=1 ;;
    '-s')  SMS=1 ;;
    '-h')  USAGE ;;
    '-v')  V=1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=$VERSION" ; exit 2 ;;
    '--test')  SENDTESTMAIL=1 ;;
    *) echo "Option $1 not found." ; USAGE; exit 1 ;;
  esac 
  shift
done

if [ $V ] ; then
  echo "PGM=$PGM"
  echo "VERSION=$VERSION"
  echo "TMP=$TMP"
  echo "LOG=$LOG"
  echo "MAILFILE=$MAILFILE"
  echo "DAYFILE=$DAYFILE"
  echo "MAILTO=$MAILTO"
  echo "FROM=$FROM"
  echo "DAY=$DAY"
  echo "SMS=$SMS"
  echo "REPLYTO=$REPLYTO"
  echo "SENDTESTMAIL=$SENDTESTMAIL"
#  echo "FROMNAME=$FROMNAME"
  echo "BASEDIR=$BASEDIR"
fi

export GINNR SMSSTR

touch $LOG
echo "`date` $PGM (v$VERSION) running for $DAY" | tee -a $LOG

DOS2UNIX="`type -P dos2unix`"
if [ "${DOS2UNIX}" = "" ]; then
  echo "`date` No dos2unix found (cat will be used). " | tee -a $LOG
  DOS2UNIX="cat"
fi

if [ ! -x ${SENDMAIL} ]; then
  echo "`date` No sendmail found. Exiting ... " | tee -a $LOG
  exit 3
fi

YRNOW="`date +%Y`"
cd $BASEDIR/users
for USER in `ls -1 *`
do
  echo ""
  GINNR=""
  SMSSTR=""
  touch $TMP $MAILFILE $DAYFILE
  USERFILE="$BASEDIR/lists/$USER"
  FN="`grep FULLNAME $USER | cut -d\= -f2`" > /dev/null
  CC="`grep MAILCC $USER | cut -d\= -f2`" > /dev/null
  BCC="`grep MAILBCC $USER | cut -d\= -f2`" > /dev/null
  GINNR="`grep GINNR $USER | cut -d\= -f2`" > /dev/null
  VERSIONINFO="`grep VERSIONINFO $USER | cut -d\= -f2`" > /dev/null
  SENDEMPTY="`grep SENDEMPTY $USER | cut -d\= -f2`" > /dev/null
  DATEWINDOW="`grep DATEWINDOW $USER | cut -d\= -f2`" > /dev/null

  if [ ${SENDTESTMAIL} ]; then
    DOSEND=1
    MAIL=1
    USER="agrarix@xs4all.nl"
    USER="maarten@agrarix.nl"
    CC=""
    BCC=""
  fi
  if [ "${DATEWINDOW}" = "" ]; then
    DATEWINDOW="-1 0 +1 +2"
  fi

  echo "User:${USER};Name:${FN};MailCC:${CC};MailBCC:${BCC};GINNR:${GINNR};VERSIONINFO=${VERSIONINFO};DATEWINDOW=${DATEWINDOW}" | tee -a ${LOG}

# HDR of MAILFILE
  echo "From: ${FROM}" >> $MAILFILE
  echo "To: ${USER}" >> $MAILFILE
  echo "Cc: ${CC}" >> $MAILFILE
  echo "Bcc: ${BCC}" >> $MAILFILE
  echo "Reply-to: ${REPLYTO}" >> $MAILFILE
  echo "Subject: ${SUBJECT}" >> $MAILFILE

  echo "Beste $FN," >> $MAILFILE
##Delta-DAY loop met DeltaDAY
#for DDAY in -2 -1 0 +1 +2 +3
for DDAY in ${DATEWINDOW}
do
  case $DDAY in
  -2) DAYSTR="werd eergisteren"; DSTR="2 days ago";;
  -1) DAYSTR="werd gisteren"; DSTR="yesterday";;
  0) DAYSTR="is vandaag"; DSTR="now" ;;
  +1) DAYSTR="wordt morgen"; DSTR="tomorrow" ;;
  +2) DAYSTR="wordt overmorgen"; DSTR="2 days" ;;
  +3) DAYSTR="wordt over overmorgen"; DSTR="3 days" ;;
  esac
  DAY="`date --date \"$DSTR\" +%d-%m`"
#  echo $DDAY $DAYSTR $DAY
  cat $USERFILE|grep -v ^#|grep $DAY|while read LINE
  do
    AGE=""
    NAME="`echo $LINE | cut -d\; -f2`" 
    # Test if yourself has birthday
    if [ "${NAME}" = "${FN}" ]; then
      NAME="Jij"
      DAYSTR="bent vandaag"
    fi
    YEAR="`echo $LINE | cut -d\; -f1|cut -d\- -f3`" 
    if [ "$YEAR" != "0000" ]; then
      AGE="`expr $YRNOW - $YEAR`"
      echo "$NAME $DAYSTR ($DAY) $AGE jaar." >> $TMP
      if [ "$GINNR" != "" ]; then
        SMSSTR="$SMSSTR $NAME $DAYSTR ($DAY) $AGE jaar." 
      fi
    else
      echo "$NAME $DAYSTR ($DAY) jarig." >> $TMP
      if [ "$GINNR" != "" ]; then
        SMSSTR="$SMSSTR $NAME $DAYSTR ($DAY) jarig." 
      fi
    fi
  done
done
## End DeltaDAY-loop

# If $TMP(file) is not empty (birthdays found) 
if [ -s $TMP ]; then
  cat $TMP >> $MAILFILE
  DOSEND="1"
else
  DOSEND=""
  if [ $SENDEMPTY ]; then  # Do send if empty
    DAY="`date +%d-%m`"
    echo "In deze periode (${DAY}) is er niemand jarig." >> $MAILFILE
    DOSEND="1"
  fi
fi  

# Footer
  echo "" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "---" >> ${MAILFILE}
  echo "Deze mail is verzorgd door Birthdays van Agrarix-IT." >> ${MAILFILE}
  echo "Meer informatie te vinden op http://www.agrarix.it" >> ${MAILFILE}
  echo "Afmelden door 'birthdays@agrarix.nl?subject=Unsubscribe-${USER}' te sturen." >> ${MAILFILE}


  echo "" >> ${MAILFILE}
  if [ ${VERSIONINFO} ]; then
    echo "By ${PGM} v${VERSION} @ `hostname`" >> $MAILFILE
  fi

  if [ $V ]; then
    echo "-------"
    cat ${MAILFILE}
    echo "-------"
    echo "DOSEND=${DOSEND}"
  fi

  if [ $MAIL ] && [ $DOSEND ]; then
    echo "Sending mailto:${USER} (From:${FROM} CC:$CC BCC:${BCC}) ..." | tee -a $LOG
#    cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t -F"${FROMNAME}"
    cat ${MAILFILE} | ${DOS2UNIX} | /usr/sbin/sendmail -t
  fi

  if [ "$SMSSTR" != "" ] && [ $SMS ]; then
    echo "SMS-ing:$SMSSTR|"| tee -a $LOG
    mailx -s "$SMSSTR" $GINNR < /dev/null
    SMSSTR=""
  fi

  rm ${TMP} ${MAILFILE} ${DAYFILE}
done

echo "`date` ${PGM} ready " | tee -a $LOG
echo "." 

