Add small fix to recipients, todo and currently used scripts for tracking time.
parent
05d3324f10
commit
cfc623ba72
|
@ -209,7 +209,7 @@ class InvoiceCommand extends Command
|
||||||
if ($input->getOption('send') && $output_path) {
|
if ($input->getOption('send') && $output_path) {
|
||||||
// @TODO If no output path print an error.
|
// @TODO If no output path print an error.
|
||||||
// Send email to configured address.
|
// Send email to configured address.
|
||||||
if ($recipients = $input->getOption('send-to')) {
|
if ($recipients = $input->getOption('recipients')) {
|
||||||
$this->mailer->setRecipients(explode(',', $recipients));
|
$this->mailer->setRecipients(explode(',', $recipients));
|
||||||
}
|
}
|
||||||
$this->mailer->sendDefaultMail($output_path);
|
$this->mailer->sendDefaultMail($output_path);
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Dependencies:
|
||||||
|
# getopt
|
||||||
|
|
||||||
|
# Track drunomix and kurier dailies.
|
||||||
|
# KUR-181 (everyday 9.30)
|
||||||
|
# DEV-122 (tue-fri 10.00) - TEAM-6
|
||||||
|
# DEV-360 (tracking time) - TEAM-14
|
||||||
|
|
||||||
|
# TO DO:
|
||||||
|
# - Implement track cli (WIP)
|
||||||
|
|
||||||
|
|
||||||
|
track_help () {
|
||||||
|
echo "Tracks dailies and other weekly meetings."
|
||||||
|
echo -e "\t-d|--drunomics-daily :: [TEAM-6] Drunomics daily - Tue-Fri(10.00) - 15m."
|
||||||
|
echo -e "\t-w|--drunomics-weekly :: [TEAM-1] Drunomics weekly - Mon(11.00) - 1h."
|
||||||
|
echo -e "\t-k|--kurier-daily :: [KUR-181] Kurier daily - Mon-Fri(9.30) - 15m."
|
||||||
|
echo -e "\t-o|--devops-weekly :: [DEV-1967] DevOps weekly - Mon(14.30) - 60m."
|
||||||
|
echo -e "\t-u|--drupal-weekly :: [CTB-24] Drupal weekly - Wed(14.00) - 30m."
|
||||||
|
echo -e "\t-l|--ldp-weekly :: [LDP-683] LDP weekly - Tue(11.00) - 30m."
|
||||||
|
echo -e "\t-v|--wv-weekly :: [WV-31] WV weekly - Wed(10.30) - 30m."
|
||||||
|
echo -e "\t-e|--kurier-weekly :: [KUR-181] Kurier weekly - Wed(15.00) - 1h."
|
||||||
|
echo -e "\t-p|--lupus-d-weekly :: [CTB-55] Lupus dcpld weekly- Thu(11.00) - 30m."
|
||||||
|
echo -e "\t-t|--tracking-time :: [TEAM-14] Personal time tracking - 15m."
|
||||||
|
echo -e "\t-s|--date :: Date in timestamp-miliseconds. Defaults to [\$(date +%s)000]"
|
||||||
|
echo -e "\tmissing :: Work type id. (Not supported yet)."
|
||||||
|
}
|
||||||
|
|
||||||
|
track_help_color () {
|
||||||
|
green='\033[0;32m'
|
||||||
|
cyan='\033[0;36m'
|
||||||
|
clr='\033[0m'
|
||||||
|
DAY_OF_WEEK=$(date +%u -d "@$DATE")
|
||||||
|
COLOR_TUE_FRI=$clr
|
||||||
|
COLOR_MON=$clr
|
||||||
|
COLOR_TUE=$clr
|
||||||
|
COLOR_WED=$clr
|
||||||
|
COLOR_THU=$clr
|
||||||
|
COLOR_ALL_DAYS=$green
|
||||||
|
COLOR_PERSONAL=$clr
|
||||||
|
if [ "$DAY_OF_WEEK" == "1" ] ; then
|
||||||
|
COLOR_MON=$green
|
||||||
|
COLOR_MON_2=$cyan
|
||||||
|
elif [ "$DAY_OF_WEEK" == "2" ] ; then
|
||||||
|
COLOR_TUE=$green
|
||||||
|
COLOR_TEAM6=$green
|
||||||
|
COLOR_TUE_FRI=$green
|
||||||
|
elif [ "$DAY_OF_WEEK" == "3" ] ; then
|
||||||
|
COLOR_WED=$green
|
||||||
|
COLOR_TUE_FRI=$green
|
||||||
|
elif [ "$DAY_OF_WEEK" == "4" ] ; then
|
||||||
|
COLOR_THU=$green
|
||||||
|
COLOR_TUE_FRI=$green
|
||||||
|
elif [ "$DAY_OF_WEEK" == "5" ] ; then
|
||||||
|
COLOR_TUE_FRI=$green
|
||||||
|
else
|
||||||
|
COLOR_ALL_DAYS=$clr
|
||||||
|
fi
|
||||||
|
if [ "$DEV360" == "1" ] ; then
|
||||||
|
COLOR_PERSONAL=$green
|
||||||
|
fi
|
||||||
|
echo "Tracks dailies and other weekly meetings."
|
||||||
|
echo -e "\t-w|--drunomics-weekly :: ${COLOR_MON}[TEAM-1]${clr} Drunomics weekly - ${COLOR_MON}Mon(11.00)${clr} - ${DEV46}m."
|
||||||
|
echo -e "\t-o|--devops-weekly :: ${COLOR_MON}[DEV-1967]${clr} DevOps weekly - ${COLOR_MON}Mon(14.00)${clr} - ${DEVOPS}m."
|
||||||
|
echo -e "\t-d|--drunomics-daily :: ${COLOR_TUE_FRI}[TEAM-6]${clr} Drunomics daily - ${COLOR_TUE_FRI}Tue-Fri(10.00)${clr} - ${DEV122}m."
|
||||||
|
echo -e "\t-k|--kurier-daily :: ${COLOR_ALL_DAYS}[KUR-181]${clr} Kurier daily - ${COLOR_ALL_DAYS}Mon-Fri(9.30)${clr} - ${KUR181}m."
|
||||||
|
echo -e "\t-l|--ldp-weekly :: ${COLOR_TUE}[LDP-683]${clr} LDP weekly - ${COLOR_TUE}Tue(11.00)${clr} - ${LDP683}m."
|
||||||
|
echo -e "\t-u|--drupal-weekly :: ${COLOR_WED}[CTB-24]${clr} Drupal weekly - ${COLOR_WED}Wed(14.00)${clr} - ${CTB24}m."
|
||||||
|
echo -e "\t-v|--wv-weekly :: ${COLOR_WED}[WV-31]${clr} WV weekly - ${COLOR_WED}Wed(10.30)${clr} - ${WV31}m."
|
||||||
|
echo -e "\t-e|--kurier-weekly :: ${COLOR_WED}[KUR-182]${clr} Kurier weekly - ${COLOR_WED}Wed(15.00)${clr} - ${KUR182}."
|
||||||
|
echo -e "\t-p|--lupus-d-weekly :: ${COLOR_THU}[CTB-55]${clr} Lupus dcpld weekly- ${COLOR_WED}Thu(11.00)${clr} - ${CTB55}."
|
||||||
|
echo -e "\t-t|--tracking-time :: ${COLOR_PERSONAL}[TEAM-14]${clr} Personal time tracking - 15m."
|
||||||
|
echo -e "\t-s|--date :: Date in timestamp-miliseconds. Defaults to [\$(date +%s)000]"
|
||||||
|
echo -e "\tmissing :: Work type id. (Not supported yet)."
|
||||||
|
}
|
||||||
|
|
||||||
|
DEV122=15 # now TEAM-6
|
||||||
|
DEV46=60 # now TEAM-1
|
||||||
|
KUR181=15
|
||||||
|
KUR182=60
|
||||||
|
WV31=30
|
||||||
|
LDP683=30
|
||||||
|
DEV360=0 # now TEAM-14
|
||||||
|
DEVOPS=60
|
||||||
|
CTB24=30
|
||||||
|
CTB55=30
|
||||||
|
DATE=$(date +%s)
|
||||||
|
|
||||||
|
# options may be followed by one colon to indicate they have a required argument
|
||||||
|
if ! options=$(getopt -u -o thd:w:k:e:l:v:s:o:u:p: -l help,time-tracking,drunomics-daily:,drunomics-weekly:,kurier-daily:,kurier-weekly:,ldp-weekly:,wv-weekly:,devops-weekly,drupal-weekly,lupus-d-weekly,date -- "$@")
|
||||||
|
then
|
||||||
|
# something went wrong, getopt will put out an error message for us
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -- $options
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]
|
||||||
|
do
|
||||||
|
case $1 in
|
||||||
|
-t|--tracking-time) DEV360=1 ;;
|
||||||
|
-d|--drunomics-daily) DEV122=$2 ; shift ;;
|
||||||
|
-w|--drunomics-weekly) DEV46=$2 ; shift ;;
|
||||||
|
-k|--kurier-daily) KUR181=$2 ; shift ;;
|
||||||
|
-e|--kurier-weekly) KUR182=$2 ; shift ;;
|
||||||
|
-l|--ldp-weekly) LDP683=$2 ; shift ;;
|
||||||
|
-v|--wv-weekly) WV31=$2 ; shift ;;
|
||||||
|
-o|--devops-weekly) DEVOPS=$2 ; shift ;;
|
||||||
|
-u|--drupal-weekly) CTB24=$2 ; shift ;;
|
||||||
|
-p|--lupus-d-weekly) CTB55=$2 ; shift ;;
|
||||||
|
-h|--help) TRACK_HELP=1;;
|
||||||
|
-s|--date) DATE=$2 ; shift ;;
|
||||||
|
(--) shift; break;;
|
||||||
|
(-*) echo "$0: error - unrecognized option $1" 1>&2; exit 1;;
|
||||||
|
(*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$TRACK_HELP" == "1" ] ; then
|
||||||
|
track_help_color
|
||||||
|
else
|
||||||
|
DAY_OF_WEEK=$(date +%u -d "@$DATE")
|
||||||
|
if [ "$DAY_OF_WEEK" == "1" ] ; then
|
||||||
|
echo "Monday: Kurier daily, Drunomics weekly, DevOps weekly:"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh KUR-181 $KUR181 'daily' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh TEAM-1 $DEV46 'weekly' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh DEV-1967 $DEVOPS 'weekly' "$(echo $DATE)000"
|
||||||
|
elif [ "$DAY_OF_WEEK" == "2" ] ; then
|
||||||
|
echo "Tuesday: Kurier daily, Drunomics daily, LDP weekly:"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh KUR-181 $KUR181 'daily + retro' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh TEAM-6 $DEV122 'daily' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh LDP-683 $LDP683 'ldp weekly' "$(echo $DATE)000"
|
||||||
|
elif [ "$DAY_OF_WEEK" == "3" ] ; then
|
||||||
|
echo "Wednesday: Kurier daily, Drunomics daily, Wirtschaftsverlag weekly, Kurier weekly:"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh KUR-181 $KUR181 'daily' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh TEAM-6 $DEV122 'daily' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh CTB-24 $CTB24 'drupal weekly' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh KUR-182 $KUR182 'Kurier weekly grooming' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh WV-31 $WV31 'weekly' "$(echo $DATE)000"
|
||||||
|
elif [ $DAY_OF_WEEK == "4" ] ; then
|
||||||
|
echo "Thursday: Kurier, Drunomics daily, Lupus Decoupled weekly:"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh CTB-55 $CTB55 'weekly' "$(echo $DATE)000"
|
||||||
|
elif [ $DAY_OF_WEEK -gt 5 ] ; then
|
||||||
|
echo "No dailies over the weekend."
|
||||||
|
else
|
||||||
|
echo "Youtrack drunomix & kurier dailies"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh KUR-181 $KUR181 'daily' "$(echo $DATE)000"
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh TEAM-6 $DEV122 'daily' "$(echo $DATE)000"
|
||||||
|
fi
|
||||||
|
if [ "$DEV360" == "1" ] ; then
|
||||||
|
/home/lio/Projects/drunomix/ytest/scripts/ytrack.sh TEAM-14 15 'tracking time' "$(echo $DATE)000"
|
||||||
|
fi
|
||||||
|
fi
|
|
@ -0,0 +1,73 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
# First export your youtrack api token (you can put this in .bashrc)
|
||||||
|
#
|
||||||
|
# export YTOKEN=<your-youtrack-token-created-in-yt-hub>
|
||||||
|
#
|
||||||
|
# All parameters are optional but the sort order defines priority
|
||||||
|
#
|
||||||
|
# ytrack.sh <issue-name> <time> <description> <timestamp-miliseconds>
|
||||||
|
#
|
||||||
|
# or:
|
||||||
|
#
|
||||||
|
# ytrack.sh [DEV-122] [15] [daily] [1631567581342]
|
||||||
|
#
|
||||||
|
# @TODO:
|
||||||
|
# - Figure a nice way to set type: Development(57-0), Project management, Testing & Review(57-1)...
|
||||||
|
# - Write a proper script with parameters and everything
|
||||||
|
|
||||||
|
# Development (57-0)
|
||||||
|
# Testing, Review (57-1)
|
||||||
|
|
||||||
|
track_help () {
|
||||||
|
echo "Youtrack command line tool."
|
||||||
|
echo -e "\t\$1 :: Ticket name. Defaults to [DEV-122]."
|
||||||
|
echo -e "\t\$2 :: Number of minutes. Defaults to [15]."
|
||||||
|
echo -e "\t\$3 :: Work item description. Defaults to [daily]."
|
||||||
|
echo -e "\t\$4 :: Date in timestamp-miliseconds. Defaults to [\$(date +%s)000]"
|
||||||
|
echo -e "\t\$5 :: Work type id. (Not supported yet)."
|
||||||
|
}
|
||||||
|
|
||||||
|
# FLAGS SETUP
|
||||||
|
while getopts "h" option
|
||||||
|
do
|
||||||
|
case "${option}"
|
||||||
|
in
|
||||||
|
h) TRACK_HELP=1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $((OPTIND -1))
|
||||||
|
|
||||||
|
if [ "$TRACK_HELP" == "1" ] ; then
|
||||||
|
track_help
|
||||||
|
else
|
||||||
|
YT_ISSUE=${1:-DEV-122}
|
||||||
|
YT_MINUTES=${2:-15}
|
||||||
|
YT_TEXT=${3:-daily}
|
||||||
|
CURRENT_DATE="$(date +%s)000"
|
||||||
|
YT_DATE=${4:-$CURRENT_DATE}
|
||||||
|
YT_WORK_TYPE=${5:-null}
|
||||||
|
|
||||||
|
YT_USER_RESP=$(curl -s 'https://drunomics.myjetbrains.com/youtrack/api/admin/users/me?fields=id,mail,fullName' -H "Authorization: Bearer $YTOKEN" -H 'Cache-Control: no-cache')
|
||||||
|
|
||||||
|
YT_USER_ID=$(echo $YT_USER_RESP | jq .id)
|
||||||
|
YT_USER_ID="${YT_USER_ID:1:-1}"
|
||||||
|
YT_USER_NAME=$(echo $YT_USER_RESP | jq .fullName)
|
||||||
|
|
||||||
|
YT_ISSUE_ID=$(curl -s "https://drunomics.myjetbrains.com/youtrack/api/issues?fields=id,idReadable&query=$YT_ISSUE" -H "Authorization: Bearer $YTOKEN" -H 'Cache-Control: no-cache' -H 'Content-Type: application/json' -H 'Accept: application/json' | jq -c ".[] | select ( .idReadable == \"$YT_ISSUE\") | .id")
|
||||||
|
YT_ISSUE_ID="${YT_ISSUE_ID:1:-1}"
|
||||||
|
|
||||||
|
echo "issue: $YT_ISSUE"
|
||||||
|
echo "issue_id: $YT_ISSUE_ID"
|
||||||
|
echo "minutes: $YT_MINUTES"
|
||||||
|
echo "text: $YT_TEXT"
|
||||||
|
echo "date: $YT_DATE"
|
||||||
|
echo "user: $YT_USER_NAME"
|
||||||
|
echo "type: $YT_WORK_TYPE"
|
||||||
|
|
||||||
|
# curl -s -X POST "https://drunomics.myjetbrains.com/youtrack/api/issues/$YT_ISSUE_ID/timeTracking/workItems?fields=id,created,type(name,id),author(name,id),duration(minutes,presentation)" -H "Authorization: Bearer $YTOKEN" -H 'Cache-Control: no-cache' -d "{\"author\": {\"id\":\"$YT_USER_ID\"},\"duration\":{\"minutes\":$YT_MINUTES},\"text\":\"$YT_TEXT\",\"date\":$YT_DATE,\"type\":{\"id\":\"$YT_WORK_TYPE\"}}" -H 'Content-Type: application/json' | jq .
|
||||||
|
curl -s -X POST "https://drunomics.myjetbrains.com/youtrack/api/issues/$YT_ISSUE_ID/timeTracking/workItems?fields=id,created,type(name,id),author(name,id),duration(minutes,presentation)" -H "Authorization: Bearer $YTOKEN" -H 'Cache-Control: no-cache' -d "{\"author\": {\"id\":\"$YT_USER_ID\"},\"duration\":{\"minutes\":$YT_MINUTES},\"text\":\"$YT_TEXT\",\"date\":$YT_DATE}" -H 'Content-Type: application/json' | jq .
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
TODO:
|
||||||
|
- nice report selection
|
||||||
|
- clean up the config (default reports)
|
||||||
|
- Improve readme
|
||||||
|
- abstract baseCommand with some input params
|
||||||
|
- add time tracking command
|
||||||
|
- plugin system for services:
|
||||||
|
- in dependencies.php find subdependencies.php
|
||||||
|
- Create interface for 3rd party service integration and abstract class
|
||||||
|
- Create factory to add correct service of a 3rd party service to the Command
|
||||||
|
- separator constant
|
||||||
|
------------------------
|
||||||
|
- add plugin system for time tracking service
|
||||||
|
- add tests
|
||||||
|
------------------------
|
||||||
|
- question helper: https://symfony.com/doc/current/components/console/helpers/questionhelper.html
|
||||||
|
- psr-12 code check and add phpstan https://phpstan.org/user-guide/getting-started
|
||||||
|
- phing for build automation
|
||||||
|
- add ddev for dockerization
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DONE:
|
||||||
|
- expenses default value
|
||||||
|
- pretify output
|
||||||
|
- rename rprt to invoice
|
||||||
|
- select report
|
||||||
|
- build phar file
|
||||||
|
- upload a phar file on repo
|
||||||
|
- create release
|
||||||
|
- clear report cache
|
||||||
|
|
Loading…
Reference in New Issue