
#!/bin/bash
# File	: proc_actionlist.sh
# By	: Maarten.deBoer@Atos.net, 190501
# Subject	: Script to process ActionList data
#(0.2),190501	: Added -w|webupd(ate)
#(0.3),190501	: Added status (PRIO=1,new=6,active=2,paused=4,closed=8)
#(0.4),190501	: Added incomming actions
#(0.5),190501	: Mod sort
#(0.6),190501	: Mod's on STATUs
#(0.7),190501	: Added --planning
#(0.8),190504	: Mod. actions
#(0.9),190504	: Adding cmd's by options -s
#(0.10),190506	: Add * (as private) in Subject at WEBUPDATE
#(0.11),190507	: Mod WEPUPD with date as 2nd sort
#(0.12),190509	: Added legenda at WEB-page
#(0.13),190513	: Added Privale (#)
#(0.14),190515	: Added -p1 & -p2
#(0.15),190515	: Added Send mail of HTML-page
#(0.16),190516	: Added MAILHTML+TO
#(0.17),190516	: Added mailto in Subject
#(0.18),190516	: Added CMD's in mail-subject
#(0.19),190517	: Changed mail-subject -> -p2 (PRIVATE=2)
#(0.20),190522	: Add RCFILE
#(0.21),190525	: Change (.CSV)Database. Added FromWhom
#(0.22),190529	: Changed prio's (8=>9, 5->4)
#(0.23),190529	: Add { -> <B>, } -> </B>
#(0.24),190603	: Add When
#(0.25),190604	: Add PLANNING, DOW2LOCATION
#(0.26),190606	: Mod. PLANNING, WEBADDR2
PGM=`basename $0|cut -d\. -f1`
VER="0.26"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
RCFILE="${HOME}/etc/${PGM}.rc"
MAILFROM="actionlist@agrarix.nl"
SENDBACK=""
MAILSUBJECT=""
WEBUPD=""
MAILTO=""
PLANNING=""
SUBJECT=""
SUBJECT1=""
COMMAND=""
HOSTNAME=`hostname|cut -d\. -f1`
PRIVATE=""
MAILHTML=""
MAILTO="actionlist@agrarix.nl" 
MAILHTMLTO="nl19471@nlxmss04.bcklan.ao-srv.com"
MAILFILE="${TMP}.mailfile"

DATADIR="${HOME}/data/actionlist"
LISTFILE="${DATADIR}/actionlist.csv"
PLANFILE="${DATADIR}/planning.csv"
WEBADDR="http://actionlist.agrarix.it"
WEBADDR2="http://nlxmss04.bcklan.ao-srv.com/nl19471/"
HTMLDIR="/mnt/nas/www/domains/actionlist.agrarix.net/pages"
HTML="${HTMLDIR}/index.html"
HTML1="${HTMLDIR}/index1.html"
HTML2="${HTMLDIR}/index2.html"
FONTFACE="Arial"
FONTSIZE="4"
DOW2LOCATION="${DATADIR}/dow2location.csv"

USAGE()
{
  echo "Usage: ${PGM} [options]"
  echo "Options            : "
  echo "     -f|--from     : From address (${MAILFROM})"
  echo "     -h|--help     : This help"
  echo "     -p1           : web(page) update for Private-page1 (only # in subject) (${HTML1})"
  echo "     -p2           : web(page) update for Private-page2 (Both in subject) (${HTML2})"
  echo "     -m|--mailhtml : Mail the html-page (${HTML})"
  echo "     --mailto      : change MAILTO-address (${MAILTO})"
  echo "     --mailhtmlto  : change MAILHTMLTO-address (${MAILHTMLTO})"
  echo "     -s|--subject  : Subject (${SUBJECT})"
  echo "     -w|--webupd   : Web(page) update"
  echo "     -v            : Verbose"
  echo "     -V            : Version"
}

while [ ${#} -gt 0 ]
do
  case "${1}" in
    '-h'|'--help') USAGE; exit 1 ;;
    '-f'|'--from') MAILFROM="${2}"; shift ;;
    '-p1') WEBUPD=1; PRIVATE=1 ;;
    '-p2') WEBUPD=1; PRIVATE=2 ;;
    '--planning') PLANNING=1 ;;
    '--mailto') MAILTO="${2}"; shift ;;
    '--mailhtmlto') MAILHTMLTO="${2}"; shift ;;
    '-m'|'--mailhtml') MAILHTML=1 ;;
    '-s'|'--subject') SUBJECT="${2}"; shift ;;
    '-w'|'--webupd') WEBUPD=1 ;;
    '-x')  set -x ;;
    '-V')  echo "Version=${VER}" ; exit 1 ;;
    *) echo "Option ${1} not found." ; USAGE; exit 1 ;;
  esac
  shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE found. Using ..."|tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
HTML="${HTMLDIR}/index.html"
HTML1="${HTMLDIR}/index1.html"
HTML2="${HTMLDIR}/index2.html"

echo "COMMAND=${COMMAND}"
echo "DATADIR=${DATADIR}"
echo "DOW2LOCATION=${DOW2LOCATION}"
echo "MAILFROM=${MAILFROM}"
echo "HTML=${HTML}"
echo "HTMLDIR=${HTMLDIR}"
echo "HTML1=${HTML1}"
echo "HTML2=${HTML2}"
echo "LISTFILE=${LISTFILE}"
echo "LOG=${LOG}"
echo "MAILHTML=${MAILHTML}"
echo "MAILHTMLTO=${MAILHTMLTO}"
echo "MAILSUBJECT=${MAILSUBJECT}"
echo "MAILTO=${MAILTO}"
echo "PLANNING=${PLANNING}"
echo "PLANFILE=${PLANFILE}"
echo "SENDBACK=${SENDBACK}"
echo "SUBJECT=${SUBJECT}"
echo "WEBUPD=${WEBUPD}"

touch ${TMP} ${MAILFILE}
if [ ! -d ${DATADIR} ]; then
  echo "  NO DATADIR (${DATADIR}). Creating ..."|tee -a ${LOG}
  mkdir -p ${DATADIR}
fi

# Proc incomming (mail)data
if [ "${SUBJECT}" != "" ]; then
  echo "  Incomming subject: ${SUBJECT}"|tee -a ${LOG}
# CHeck is command, by starting with - and "ending" with :
  ANSW=`echo ${SUBJECT}| grep ^-` 
  if [ "${ANSW}" =! "" ]; then
    CMD=`echo ${SUBJECT}|cut -d\: -f1`
    SUBJECT=`echo ${SUBJECT}|cut -d\: -f2-`
    echo "  CMD=${CMD} SUBJECT=${SUBJECT}"|tee -a ${LOG}

  else
# Check if Subject is already in LIST-file
# If not, then update as NEW(7)
    grep ";${SUBJECT};" ${LISTFILE}
    EC=${?}
# 1 = NOT found, then create New (2)
    if [ ${EC} -eq 1 ]; then
      CURDAT=`date +%y%m%d`
# Layout = (short)DATE;CAT;SUBJECT;STATUS;
      echo "${CURDAT};_;${SUBJECT};;;2;" >> ${LISTFILE}
      echo "  Subject (${SUBJECT}) added to LISTFILE (${LISTFILE})."|tee -a ${LOG}
    fi  # EC=0
    if [ ${EC} -eq 0 ]; then
      echo "  Subject (${SUBJECT}) already in list. NOT added."|tee -a ${LOG}
    fi
  fi  # ANSW <> ""

  WEBUPD=1
  SENDBACK=1
  MAILHTML=1
fi  # ${SUBJECT} <> ""


# produce (mail) (week) PLANNING ==============================================
if [ ${PLANNING} ]; then
  echo "When | Where | What [From] | " > ${TMP}

  DOWS="Mon Tue Wed Thu Fri Sat Sun"
  for DOW in ${DOWS}
  do
    echo "  DOW=${DOW} ..."
    LOCATION=""
    if  [ -f ${DOW2LOCATION} ]; then
      LOCATION=`grep "^${DOW};" ${DOW2LOCATION}|awk -F\; '{print $2}'`
    fi

  cat ${LISTFILE}|grep -v ^#|while read LINE
  do
    ACTDATE=`echo ${LINE}|cut -d\; -f1`
    ACTCAT=`echo ${LINE}|cut -d\; -f2`

# Normal, no Subject with ^#
    if [ "${PRIVATE}" = "" ]; then
      ACTSUBJECT=`echo ${LINE}|cut -d\; -f3|grep -v ^#`
    else
# If -P1, only Subject with ^#
      if [ ${PRIVATE} -eq 1 ]; then
        ACTSUBJECT=`echo ${LINE}|cut -d\; -f3|grep ^#`
      fi
# If -P2, then both
      if [ ${PRIVATE} -eq 2 ]; then
        ACTSUBJECT=`echo ${LINE}|cut -d\; -f3`
      fi
    fi  # PRIVARE=""

    ACTWHEN=`echo ${LINE}|cut -d\; -f4`
    ACTFROM=`echo ${LINE}|cut -d\; -f5`
    ACTSTATUS=`echo ${LINE}|cut -d\; -f6`

# IF DOW & When is same and Status <= 4 (Active) then for planning
    if [ "${ACTWHEN}" = "${DOW}" ] && [ ${ACTSTATUS} -le 4 ] ; then
# When PRIO(1), then add !!
      if [ ${ACTSTATUS} -eq 1 ]; then
        ACTSUBJECT="${ACTSUBJECT} !!"
      fi
# When NEW(2), then add ??
      if [ ${ACTSTATUS} -eq 2 ]; then
        ACTSUBJECT="${ACTSUBJECT} ??"
      fi
      echo "${ACTWHEN} | ${LOCATION} | ${ACTCAT} : ${ACTSUBJECT} [${ACTFROM}] | " |tee -a ${TMP}
      echo "" >> ${TMP}

    fi

  done  # cat LISTFILE

  done  # DOW
  echo "" >> ${TMP}
  echo "" >> ${TMP}
# If 2nd WEBADDR is filled in, then use
  if [ "${WEBADDR2}" != "" ]; then
    echo "Based on actions from ${WEBADDR2}" >> ${TMP}
  else
    echo "Based on actions from ${WEBADDR}" >> ${TMP}
  fi
  echo "" >> ${TMP}
  echo "`date` by ${PGM} v${VER} at ${HOSTNAME}" >> ${TMP}

  FROM="ActionList <actionlist@agrarix.nl>"
  REPLYTO="actionlist@agrarix.it"
  SUBJECT="Week planning [${PGM} v${VER}]"
  echo "From: ${FROM}" >> ${MAILFILE}
  echo "To: ${MAILTO}" >> ${MAILFILE}
#  echo "Cc: ${CC}" >> ${MAILFILE}
#  echo "Bcc: ${BCC}" >> ${MAILFILE}
  echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
  echo "Subject: ${SUBJECT}" >> ${MAILFILE}
  cat ${TMP} >> ${MAILFILE}

  echo "  Sending planning by mail to ${MAILTO}"|tee -a ${LOG}
  cat ${MAILFILE}|/usr/sbin/sendmail -t

  cp /dev/null ${TMP} 
fi  # PLANNING



# WEBUPDate ============================================
if [ ${WEBUPD} ]; then
  UPDATE=`date +%Y-%m-%d-%H-%M-%S`
  if [ ! -d ${HTMLDIR} ]; then
    echo "  NO HTMLDIR (${HTMLDIR}) found. Exiting ..."|tee -a ${LOG}
    exit 3
  fi
  if [ ! -f ${LISTFILE} ]; then
    echo "  NO LISTFILE (${LISTFILE}) found. Exiting ..."|tee -a ${LOG}
    exit 4
  fi
  if [ "${PRIVATE}" = "" ]; then
    echo "  UPDating WEBpage ${HTML}..."| tee -a ${LOG}
  else
    if [ ${PRIVATE} -eq 1 ]; then
      HTML="${HTML1}"
      echo "  UPDating Private1 WEBpage ${HTML}..."| tee -a ${LOG}
    fi
    if [ ${PRIVATE} -eq 2 ]; then
      HTML="${HTML2}"
      echo "  UPDating Private2 WEBpage ${HTML}..."| tee -a ${LOG}
    fi
  fi  # PRIVATE=""

  echo "  Copying actionlistfile (${LISTFILE}) to TMP (${TMP}) for sorting ..."
  /bin/cat ${LISTFILE} |/bin/grep -v ^# |while read LINE
  do
    ACTDATE=`echo ${LINE}|cut -d\; -f1`
    ACTCAT=`echo ${LINE}|cut -d\; -f2`

# Normal, no Subject with ^#
    if [ "${PRIVATE}" = "" ]; then
      ACTSUBJECT=`echo ${LINE}|cut -d\; -f3|grep -v ^#`
    else
# If -P1, only Subject with ^#
      if [ ${PRIVATE} -eq 1 ]; then
        ACTSUBJECT=`echo ${LINE}|cut -d\; -f3|grep ^#`
      fi
# If -P2, then both
      if [ ${PRIVATE} -eq 2 ]; then
        ACTSUBJECT=`echo ${LINE}|cut -d\; -f3`
      fi
    fi  # PRIVARE=""

    ACTWHEN=`echo ${LINE}|cut -d\; -f4`
    ACTFROM=`echo ${LINE}|cut -d\; -f5`
    ACTSTATUS=`echo ${LINE}|cut -d\; -f6`
    if [ "${ACTSUBJECT}" != "" ]; then
      echo "${ACTSTATUS};${ACTDATE};${ACTCAT};${ACTSUBJECT};${ACTWHEN};${ACTFROM};" >> ${TMP}
    fi
  done  # LISTFILE

  echo "<HTML>" > ${HTML}
  echo "<HEAD>" >> ${HTML}
  echo " <META NAME='generator' content='${PGM} v${VER}' /> " >> ${HTML}
  echo " <META NAME='up-date' content='${UPDATE}' /> " >> ${HTML}
  echo "  <title>ActionList ${PRIVATE}</title> " >> ${HTML}
  echo "</HEAD>" >> ${HTML}
  echo "<BODY>" >> ${HTML}
  echo "<H1>ActionList ${PRIVATE}</H1>" >> ${HTML}

  echo "  <TABLE border=1>" >> ${HTML}

  echo "    <TR>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> STATUS^ </B> </TD>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> CAT </B> </TD>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> SUBJECT </B> </TD>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> WHEN </B> </TD>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> FROM </B> </TD>" >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> DATE^ </B> </TD> " >> ${HTML}
  echo "      <TD> <FONT face=${FONTFACE} size=${FONTSIZE}> <B> Nr </B> </TD>" >> ${HTML}
  echo "    </TR>" >> ${HTML}

# ActionListCounter
  ALCNT=0
# Use TMP to Sort on Cat
  /bin/cat ${TMP}|/usr/bin/sort| while read LINE
  do
    STATUSNR=`echo ${LINE}|cut -d\; -f1`
    DATE=`echo ${LINE}|cut -d\; -f2`
    CAT=`echo ${LINE}|cut -d\; -f3`
    SUBJECT=`echo ${LINE}|cut -d\; -f4|sed 's/\*\*/<\/B>/g'|sed 's/\*/<B>/g'`
    WHEN=`echo ${LINE}|cut -d\; -f5`
    FROM=`echo ${LINE}|cut -d\; -f6`
    if [ "${PRIVATE}" != "" ]; then
      if [ ${PRIVATE} -eq 2 ]; then
        SUBJECT="<a href=\"mailto:${MAILTO}?subject=${SUBJECT}\">${SUBJECT}</a>"
      fi
    fi
    echo "${STATUSNR};${CAT};${SUBJECT};${WHEN};${FROM};${DATE};${ALCNT}"

    if [ "${CAT}" != "" ] ;then
      ALCNT=`expr ${ALCNT} + 1`
      echo "    <TR>" >> ${HTML}

# STATUS
      BGCOL=""
      COLOR="black"
      STATUS="?"
      case ${STATUSNR} in
        1) STATUS="PRIO"; BGCOL="orange" ;;
        2) STATUS="New"; BGCOL="blue"; COLOR="white" ;;
        3) STATUS="Regular"; BGCOL="limegreen" ;;
        4) STATUS="Active"; BGCOL="green"; COLOR="white" ;;
        5) STATUS="Delegated"; BGCOL="lightgreen" ;;
        6) STATUS="Paused"; BGCOL="yellow" ;;
        7) STATUS="On hold"; BGCOL="lightblue" ;;
        8) STATUS="Finished"; BGCOL="pink" ;;
        9) STATUS="Closed"; BGCOL="purple"; COLOR="white" ;;
      esac

      echo "      <TD BGCOLOR=${BGCOL}><FONT color=${COLOR} face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${STATUS}" >> ${HTML}
      echo "      </TD>" >> ${HTML}

      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${CAT}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${SUBJECT}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${WHEN}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${FROM}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${DATE}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
      echo "        ${ALCNT}" >> ${HTML}
      echo "      </TD>" >> ${HTML}
      echo "    </TR>" >> ${HTML}
    fi

  done  # cat ${TMP}

  echo "  </TABLE>" >> ${HTML}
  echo "  <TABLE border=0>" >> ${HTML}
  echo "    <TR>" >> ${HTML}
  echo "      <TD><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        STATUS legenda:" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="orange"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        1=PRIOrity" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="blue"><FONT face=${FONTFACE} size=${FONTSIZE} color=white> " >> ${HTML}
  echo "        2=New" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="limegreen"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        3=Regular" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="green"><FONT color=white face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        4=Active" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="lightgreen"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        5=Delegated" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="yellow"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        6=Paused" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="lightblue"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        7=On hold" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="pink"><FONT face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        8=Finished" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "      <TD BGCOLOR="purple"><FONT color=white face=${FONTFACE} size=${FONTSIZE}> " >> ${HTML}
  echo "        9=Closed" >> ${HTML}
  echo "      </TD>" >> ${HTML}
  echo "    </TR>" >> ${HTML}
  echo "  </TABLE>" >> ${HTML}

  echo "<H6> `date` by ${PGM} v${VER} at ${HOSTNAME} <A HREF=\"${WEBADDR}/index1.html\">P1</A> <A HREF=\"${WEBADDR}/index2.html\">P2</A> </H6>" >> ${HTML}

  echo "</HTML>" >> ${HTML}

fi  # WEBUPD


# SENDmailBACK ========================================
if [ ${SENDBACK} ]; then
  MAILTO="${MAILFROM}"
  echo "  Sending mail back to ${MAILTO}"|tee -a ${LOG}
  echo "Actionlist has been processed and updated (${WEBADDR})."| mailx -s "Actionlist processed." ${MAILTO}
fi  # SENDBACK

if [ ${MAILHTML} ]; then
  FROM="ActionList <actionlist@agrarix.nl>"
  REPLYTO="actionlist@agrarix.it"
  MAILTO="${MAILHTMLTO}"
  SUBJECT="${PGM}.html:"
  echo "From: ${FROM}" >> ${MAILFILE}
  echo "To: ${MAILTO}" >> ${MAILFILE}
#  echo "Cc: ${CC}" >> ${MAILFILE}
#  echo "Bcc: ${BCC}" >> ${MAILFILE}
  echo "Reply-to: ${REPLYTO}" >> ${MAILFILE}
  echo "Subject: ${SUBJECT}" >> ${MAILFILE}
  cat ${HTML} >> ${MAILFILE}

  echo "  Sending HTML by mail to ${MAILTO}"|tee -a ${LOG}
  cat ${MAILFILE}|/usr/sbin/sendmail -t
fi  # MAILHTML


echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
rm ${TMP} ${MAILFILE}
exit 0

