
#!/bin/bash
# File	: chk_reminders.sh
# By	: M. de Boer, 070719
# Subject	: Reminder controle script
# 0.1	: Vanuit chk_bthdays
#	: Met grep -v \^# aanpassingen bij lists/* & users/*
# 0.2	: Nieuwe FROMNAME
# 0.3	: From:, ${SUBJECT} added, $FROM removed, renamed to chk_reminders.sh
# 0.4	: Allen nog gisteren (-1)
# 0.5	: /bin/bash in stead of /bin/sh for at stratoserver.net
# 0.6	: Add planning/
# 0.7	: Some ${MAILFILE} mod.s
# 0.8	: Mod USAGE. CHKDATE
# 0.9	: Mod signature
# 0.10	: Mod signature
# 0.11	: Mod ViJoS tekst
# 0.12	: Add list of previous plannings from PLAN-file
# 0.13	: Add planning URL
#0.14,171014	: Add seizoen & upd WWWPLANNING
#(0.15),171015	: Added PDF-link
#(0.16),180325	: Added Agrarix-IT
#(0.17).180928	: Added FILTER
#(0.18),190307	: Mod. output of mail to std
#(0.19),190624	: Mod. agrarix.com -> agrarix.it
#(0.20),190710	: Added; de-select "??" -> (not mailen)
#(0.21),190920	: Added time & locations of Öud papier ophalen"
# http://www.vijos.nl/download/Oud_papier_wijk_vijos_1e_woensdag.pdf
# Oud_papier_wijk_vijos_2e_zaterdag.pdf
# Oud_papier_wijk_vijos_3e_woensdag.pdf
#(0.22),210104	: Some mod's
#(0.23),210127	: Mod's about "avondklok"
#(0.24),210510	: Add REMARKS
#(0.25),210512	: Add FOOTER
#(0.26),210610	: Add RCFILE, VERSION -> VER, Add _PLANNING, Update USAGE, remove SMS, GIN
#(0.27),210705	: Added REMARKS.<Day> 
#(0.28),210916	: Add --2month
#(0.29),240407	: Mod. RCFILE, Add V's
#(0.30),240407	: Add -u UFILTER
PGM="`basename $0|cut -d\. -f1`"
VER="0.30"
BASEDIR="${HOME}/reminders"
TMP="/tmp/${PGM}.$$"
LOG="${BASEDIR}/log/${PGM}.log"
MAILFILE="${TMP}.mailfile"
MAILTO="maarten@agrarix.nl"
REPLYTO="reminders@agrarix.nl"
FROM="Agrarix-IT - reminders <reminders@agrarix.it>"
V=""  # VERBOSE
MAIL=""
CHKDATE=""
FN=""
CC=""
VERSIONINFO=""
SENDEMPTY=""
DOSEND=""
BCC="reminders@agrarix.nl"
SENDTESTMAIL=""
DOS2UNIX=""
SENDMAIL="/usr/sbin/sendmail"
#FROMNAME="Agrarix herinnering"
SUBJECT="Herinnering(en)"
PLANNING=""
DATE_STR="now"
FILTER="[?]*"
WWWPLANNING="http://oud-papier.vijos.nl"
WWWDOWNLOAD="http://www.vijos.nl/download"
FOOTER="${BASEDIR}/etc/footer.txt"
RCFILE="${BASEDIR}/etc/${PGM}.rc"
BCC_PLANNING="planning@agrarix.nl"
REPLYTO_PLANNING="planning@agrarix.nl"
DATADIR="${BASEDIR}/data"
REMARKS_FILE="${DATADIR}/remarks.txt"
FUSER="[?]*"

export MAIL

USAGE()
{
  echo "Usage: ${PGM} <options>"
  echo "  Version: ${VER}"
  echo "  options          :"
  echo "  -h               : this Help"
  echo "  -d <DATE> (yyyy-mm-dd)"
  echo "  -f <name_filter> : Filter a name"
  echo "  -m               : send Mail"
  echo "  -p               : check Planning"
  echo "  -r               : change Rcfile (${RCFILE})"
  echo "  -s               : send Sms"
  echo "  -u               : User (filter)"
  echo "  -v               : Verbose"
  echo "  -V               : Version"
  echo "  --day            : 1 day upfront"
  echo "  --week           : 1 week upfront"
  echo "  --month          : 1 month upfront"
  echo "  --2month         : 2 month upfront"
  echo "  --test           : send test mail"
}
if [ -f ${RCFILE} ]; then
  echo "   ${RCFILE} found. Using it."|tee -a ${LOG}
  . ${RCFILE}
  sleep 1
fi
while [ $# -gt 0 ]
do
  case "$1" in
    '-d')  DATE_STR=${2}; shift ;;
    '-f')  FILTER=${2}; shift ;;
    '-r')  RCFILE=${2}; shift ;;
    '-u')  UFILTER=${2}; shift ;;
    '-m')  MAIL=1 ;;
    '-p')  PLANNING=1 ;;
    '--day')  DATE_STR="+1 day" ;;
    '--week')  DATE_STR="+1 week" ;;
    '--month')  DATE_STR="+1 month" ;;
    '--2month')  DATE_STR="+2 month" ;;
    '-h')  USAGE; exit 1 ;;
    '-v')  V=1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=$VER" ; exit 2 ;;
    '--test')  SENDTESTMAIL=1 ;;
    *) echo "Option ${1} not found." ; USAGE; exit 1 ;;
  esac 
  shift
done

echo "  DATE_STR=${DATE_STR}"
CHKDATE="`date --date \"${DATE_STR}\" +%d-%m-%Y`"

if [ ${V} ] ; then
  echo "PGM=${PGM}"
  echo "VER=${VER}"
  echo "TMP=${TMP}"
  echo "LOG=${LOG}"
  echo "FILTER=${FILTER}"
  echo "MAILFILE=${MAILFILE}"
  echo "DAYFILE=${DAYFILE}"
  echo "MAILTO=${MAILTO}"
  echo "FROM=${FROM}"
  echo "CHKDATE=${CHKDATE}"
  echo "DATE_STR=${DATE_STR}"
  echo "REPLYTO=${REPLYTO}"
  echo "SENDTESTMAIL=${SENDTESTMAIL}"
#  echo "FROMNAME=$FROMNAME"
  echo "BASEDIR=${BASEDIR}"
  echo "PLANNING=${PLANNING}"
  echo "RCFILE=${RCFILE}"
  echo "DATADIR=${DATADIR}"
  echo "UFILTER=${UFILTER}"
  sleep 1
fi

touch ${LOG} 
echo "`date` ${PGM} (v${VER}) running for ${CHKDATE}" | tee -a $LOG

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

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

touch ${TMP} ${MAILFILE} 

if [ ${PLANNING} ]; then
  echo "  PLANNING"
  BCC="${BCC_PLANNING}"
  REPLYTO="${REPLYTO_PLANNING}"
  cd $BASEDIR/planning
#  if [ "${DATE_STR}" = "" ]; then
#    CHKDATE="`date +%d-%m-%Y`"
#  fi
  for PLAN in `ls -1 *`
  do
    echo "  CHKDATE=${CHKDATE} -> ${PLAN}" | tee -a ${LOG}
# Added FILTER
    cat "${PLAN}" |grep -v \^#|grep ${CHKDATE}|grep "${FILTER}"|grep -v '??'| while read LINE
    do
# Per line (date; e-mail-address;)
# Get (first)name
      FN="`echo ${LINE}|cut -d\; -f2|cut -d\< -f1`"
# Get User-e-mailaddress
      USER="`echo ${LINE}|cut -d\; -f2|cut -d\< -f2|cut -d\> -f1`"
# Get PLAN-filename without '_' for subject text
      PLAN2="`echo ${PLAN} | sed 's/_/ /g'`"
      echo "  USER=${USER} FN=${FN}"

  echo "From: ${FROM}" > ${MAILFILE}
  echo "To: ${USER}" >> ${MAILFILE}
  echo "Cc: ${CC}" >> ${MAILFILE}
  echo "Bcc: ${BCC}" >> ${MAILFILE}
  echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
  echo "Subject: Herinnering; ${PLAN2}" >> ${MAILFILE}

  echo "Beste $FN," >> ${MAILFILE}
  echo "Op ${CHKDATE} sta je op de planning voor ${PLAN2}." >> ${MAILFILE}

# Add all (#cnt) planningdates
  CNT="`grep ${USER} ${PLAN}|grep -v ^#|awk -F\; '{print $1}'|wc -l`"
  echo "Alle, ${CNT}, datum(s) in dit seizoen (van sep. t/m aug.):" >> ${MAILFILE}
  grep ${USER} ${PLAN}|grep -v ^#|awk -F\; '{print $1}' >> ${MAILFILE}

  echo "" >> ${MAILFILE}

# If remarks.txt -file, then use
  if [ -f ${REMARKS_FILE} ]; then
    cat ${REMARKS_FILE} >> ${MAILFILE}
    echo "" >> ${MAILFILE}
  fi
# If remarks.<Day>
  REMARKS_DAY_FILE="${DATADIR}/remarks.`date --date \"${DATE_STR}\" +%a`"
  if [ -f ${REMARKS_DAY_FILE} ]; then
    cat ${REMARKS_DAY_FILE} >> ${MAILFILE}
    echo "" >> ${MAILFILE}
  fi

  
#  echo "LETOP: Sinds jan-2021 zijn er op zaterdag nog maar 2 wagens beschikbaar. Daarom wordt de (2e) za-ochtend wijk in tweeen verdeeld." >> ${MAILFILE}
#  echo "LETOP: Tentijde van de avondklok start men op de woensdagavonden EERDER. N.l. al om 17:30. Zodat men ruim voor 21:00 klaar is." >> ${MAILFILE}

  echo "Kan je niet? AUB zelf ruilen. Hierbij de link van de planning voor de komende periode: ${WWWPLANNING}/" >> ${MAILFILE}
  echo "Misschien kan daarmee geruild worden." >> ${MAILFILE}
#  echo "${WWWPLANNING}/${PLAN}/" >> ${MAILFILE}
  echo "Gelieve dat even door te geven. Dat kan met een reply op deze mail." >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Gegevens over tijd, locatie & wijk:" >> ${MAILFILE}
  echo "Wijk1; 1e wo-avond v.d maand in de Hilversumse Meent. Starten om 19:00 in de Meent bij de bushalte op de Noordermeent tov de Pluimenmeent. Wijk = http://www.vijos.nl/download/Oud_papier_wijk_vijos_1e_woensdag.pdf" >> ${MAILFILE}
  echo "Wijk2; 2e za-ochtend v.d maand in Bussum Zuid. Starten om 09:00 vanaf de Ceintuurbaan 45 (ViJoS). Wijk = http://www.vijos.nl/download/Oud_papier_wijk_vijos_2e_zaterdag.pdf" >> ${MAILFILE}
  echo "Wijk3; 3e wo-avond v.d maand in Bussum Zuid. Starten om 19:00 vanaf de Ceintuurbaan 45 (ViJoS). Wijk = http://www.vijos.nl/download/Oud_papier_wijk_vijos_3e_woensdag.pdf" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Zoals eerder is geschreven, zijn wij nu in het bezit van nieuwe veiligheidshesjes met het ViJoS logo erop." >> ${MAILFILE}
  echo "De hesjes kunnen gebruikt worden bij de begeleiding van optredens en bij het krantenlopen. " >> ${MAILFILE}
  echo "Voor het krantenlopen op de woensdagavond, kun je maandags al een hesje meenemen. We verzoeken je het hesje op de donderdag weer terug te hangen, zodat de volgende hier weer gebruik van kan maken." >> ${MAILFILE}
  echo "De hesjes dienen te allen tijden retour naar ViJoS te gaan en zullen daar bewaart worden. " >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "Evert Jansen / Ronald Volkrijk," >> ${MAILFILE}
  echo "ViJoS oud papier ophaal planner" >> ${MAILFILE}
  echo "" >> ${MAILFILE}
  echo "" >> ${MAILFILE}

  if [ -f ${FOOTER} ]; then
    cat ${FOOTER} >> ${MAILFILE}
  else
    echo "---" >> ${MAILFILE}
    echo "Deze mail is verzorgd door Reminders van Agrarix-IT." >> ${MAILFILE}
  fi

      DOSEND=1
      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
#      else
####### Do not send, but display
#        cat ${MAILFILE} 
      fi

    done  # cat $PLAN

  done  # PLAN

else  # $PLANNING

  cd ${BASEDIR}/users
#  for USER in `ls -1 *`
  ls -1 *|grep ${UFILTER}|while read USER
  do
    echo ""
    if [ ${V} ]; then
      echo "    USER=${USER}"
      sleep 1
    fi  # V
    touch $TMP ${MAILFILE} $DAYFILE
    USERFILE="$BASEDIR/lists/$USER"
    FN="`grep -v \^# ${USER}|grep FULLNAME| cut -d\= -f2`" > /dev/null
    CC="`grep -v \^# ${USER}|grep MAILCC| cut -d\= -f2`" > /dev/null
    BCC="`grep -v \^# ${USER}|grep MAILBCC| cut -d\= -f2`" > /dev/null
    VERSIONINFO="`grep -v \^# ${USER}|grep VERSIONINFO| cut -d\= -f2`" > /dev/null
    SENDEMPTY="`grep -v \^# ${USER}|grep SENDEMPTY| cut -d\= -f2`" > /dev/null
    echo "User:${USER}, Name:${FN}, MailCC:${CC}, MailBCC:${BCC} | VERSIONINFO=${VERSIONINFO}" | tee -a ${LOG}

    if [ ${SENDTESTMAIL} ]; then
      DOSEND=1
      MAIL=1
      USER="agrarix@freedom.nl"
      CC=""
      BCC=""
    fi  # $SENDTESTMAIL

# 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}

# If date is not set by -d (DATE_STR="") then use Delta-DAY-loop
    if [ "${DATE_STR}" = "" ]; then
## Delta-DAY loop met DeltaDAY
#for DDAY in -2 -1 0 +1 +2 +3
      for DDAY in -1 0 +1 +2 +3
      do
        case $DDAY in
#        -2) DAYSTR="voor eergisteren"; DATE_STR="2 days ago";;
        -1) DAYSTR="voor gisteren"; DATE_STR="yesterday";;
        0) DAYSTR="voor vandaag"; DATE_STR="now" ;;
        +1) DAYSTR="voor morgen"; DATE_STR="tomorrow" ;;
        +2) DAYSTR="voor overmorgen"; DATE_STR="2 days" ;;
        +3) DAYSTR="voor over-overmorgen"; DATE_STR="3 days" ;;
        esac
        CHKDATE="`date --date \"${DATE_STR}\" +%d-%m-%Y`"
        if [ ${V} ]; then
          echo "    CHKDATE=${CHKDATE} (DATE_STR=${DATE_STR})"
          sleep 1
        fi
#  echo $DDAY $DAYSTR $CHKDATE
        cat ${USERFILE} | grep -v \^#|grep $CHKDATE | while read LINE
        do
          ACTION="`echo $LINE | cut -d\; -f2`" 
          if [ ${V} ]; then
            echo "- ${ACTION} ${DAYSTR} (${CHKDATE})." |tee -a ${TMP}
            sleep 1
          else
            echo "- ${ACTION} ${DAYSTR} (${CHKDATE})." >> ${TMP}
          fi  # V
        done  # while read LINE
      done  # for DDAY ...
## End DeltaDAY-loop
    else
      CHKDATE="`date --date \"${DATE_STR}\" +%d-%m-%Y`"
      if [ ${V} ]; then
        echo "    CHKDATE=${CHKDATE} (DATE_STR=${DATE_STR})"
        sleep 1
      fi
#  echo $DDAY $DAYSTR $CHKDATE
      cat ${USERFILE} | grep -v \^#|grep $CHKDATE | while read LINE
      do
        ACTION="`echo $LINE | cut -d\; -f2`" 
        if [ ${V} ]; then
          echo "- ${ACTION} ${DAYSTR} (${CHKDATE})." |tee -a ${TMP}
          sleep 1
        else
          echo "- ${ACTION} ${DAYSTR} (${CHKDATE})." >> ${TMP}
        fi  # V
      done  # while read LINE
    fi  # DATE_STR = ""

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

# Footer
    echo "" >> ${MAILFILE}
    echo "" >> ${MAILFILE}
    echo "" >> ${MAILFILE}
    echo "Afmelden door 'reminders@agrarix.nl?subject=Unsubscribe-${USER}' te sturen." >> ${MAILFILE}
    if [ -f ${FOOTER} ]; then
      cat ${FOOTER} >> ${MAILFILE}
    else
      echo "---" >> ${MAILFILE}
      echo "Deze mail is verzorgd door Reminders van Agrarix-IT." >> ${MAILFILE}
    fi

#  MAILNAME="`echo ${USER} |cut -d\@ -f1`"
#  MAILDOMAIN="`echo ${USER} |cut -d\@ -f2`"
#  echo "Actie lijst opvragen http://www.agrarix.it/mail_bthday_list.php?name=${MAILNAME}&domain=${MAILDOMAIN}&Submit=Verzenden " >> ${MAILFILE}

    echo "" >> ${MAILFILE}
    if [ $VERSIONINFO ]; then
      echo "By ${PGM} v${VER} @ `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

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

fi  # else $PLANNING

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

