Kakitangan CLI for Malaysian Users
Tags: python, kakitangan, github
Published: 2019-08-20 06:14:43

Hello everyone, it's Minhaz. This is my first post in dev.to.

For the last 2 months, I have been working with a command line version of [Kakitangan](https://www.kakitangan.com/platform.html) is an online HR Software for Malaysian businesses that helps handle payroll, claims, benefits, leave and more.

The project can be found at [mdminhazulhaque/kakitangan-cli](https://github.com/mdminhazulhaque/kakitangan-cli)

# Why CLI Version?

You can ask me why I made this CLI version although they have a nice web and mobile version. Well, people like me prefer CLI than GUI. Also, I wanted to learn how Python module works. So I decided to turn this into a pet project.

# How To Use It?

I am currently working to distribute this via `setuptools`. Before that, you can download the repo and execute the `kakitangan.py` as the main file. The default commands are given below.

```
$ kakitangan.py --help
Usage: kakitangan.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  aboutme      Shows personal information as Kakitangan user
  colleagues   Shows colleagues' leaves
  holidays     Shows holidays
  loadleaves   Fetches all calendar information from Kakitangan server
  login        Login and save authorization token in disk
  logout       Logs out by clearing authorization token from disk
  myleaves     Shows user's leaves
  myleavestat  The user's leave statistics
```

First, you have to log in, right? You have to pass the username/email via `-u` option. The password will be prompted and will be invisible as you type it. The password can also be passed via `-p` option but I tell you not to do so. Your password will be stored in `.bash_history` which would be a serious security issue.

```
$ kakitangan.py login -u john.doe@dream.job
Password: **********
Login success

$ kakitangan.py login -u john.doe@dream.job -p 1234567890
Login success
```

If your password is correct and you have an internet connection, you are supposed to see the `Login success` message. Use the `aboutme` option to see your basic info.

```
$ kakitangan.py aboutme
---------------------  -------------------------------
Email                  john.doe@dream.job
Official Full Name     John Doe
Nationality            Bangladesh
Highest Qualification  Bachelors Degree
SOCSO Account          1234567890
Bank Account           1234567890
Bank Account Type      saving
Bank Account Name      AABBCCDD
Income Tax Account     1234567890
Salary                 1234567890
Preferred Name         John
Sex                    Male
Marital Status         married
Active                 True
Birth Date             1994-01-23
Phone                  1234567890
NRIC Number            1234567890
Passport Number        BB12345678
Employee ID            1000
Joined                 1970-01-01
Manager                boss@dream.job
Position               DevOps
Department             Tech
Location               Kuala Lumpur
---------------------  -------------------------------
```

That's enough for you I guess. Let's move to the leave calendar which is the best feature of Kakitangan. Before executing any calendar related command, you have to download the full calendar from Kakitangan server. `loadleaves` option will do it for you.

```
$ kakitangan.py loadleaves
Updated leave database
```

After doing so, you will find 3 new JSON files in `~/.config/kakitangan-cli` named `load_calendar.json`, `load_colleagues.json` and `load_holiday_event.json`. This 3 calendar holds data for yourself, your colleagues, and holidays respectively.

Now you are ready to get your colleagues' leave summary. The `colleagues` command takes several parameters.

```
Usage: kakitangan.py colleagues [OPTIONS]

  Shows colleagues' leaves

Options:
  -a, --all          Show past leaves also
  -t, --today        Show leaves only on today
  -u, --untill TEXT  Show leaves upto date
  -s, --since TEXT   Show leaves from date
  -d, --date TEXT    Show leaves on specific date
  --help             Show this message and exit.
```

By default, it will show leaves AFTER the current date. You can see all leaves with `-a` parameter.

```
$ kakitangan.py colleagues
----------  --------------
2019-06-03  Abdul Doe (Annual)
            Alice Begum (Marriage Leave)
2019-06-04  Abdul Doe (CarryForward)
            Charlie Ahmed (Annual)
            Foo Bin Bar (Annual)
            Alice Begum (Sick)
2019-06-10  Foo Bin Bar (Sick)
            Bob Mia (Birthday Leave)
2019-06-11  Bob Mia (Sick)
2019-06-12  Bob Mia (Sick)
2019-06-13  Bob Mia (Annual)
2019-06-14  Clara Khatun (Annual)
            Bob Mia (Annual)
2019-06-15  Clara Khatun (CarryForward)
2019-06-16  Clara Khatun (CarryForward)
2019-06-17  Clara Khatun (Annual)
            Bob Mia (Replacement)
2019-06-18  Bob Mia (Annual)
----------  --------------
```

It is possible to see who are on leave on a specific date. Just pass the date in `YYYY-MM-DD` format with `-d` parameter.

```
$ kakitangan.py colleagues -d 2019-06-10
----------  -----------
2019-06-10  Foo Bin Bar (Sick)
            Bob Mia (Birthday Leave)
----------  -----------
```

You might want to filter colleagues within specific date range. Just use the `-s` (since) and `-u` (until) parameter.

```
$ kakitangan.py colleagues -s 2019-06-15 -u 2019-06-17
----------  ------------
2019-06-15  Clara Khatun (Annual)
2019-06-16  Clara Khatun (Annual)
2019-06-17  Clara Khatun (Annual)
            Bob Mia (Annual)
----------  ------------
```

Similar to the leave calendar, you can check your holidays too. Use the `holidays` option for this purpose.

```
$ kakitangan.py holidays 
----------  ----------------------------
2019-06-05  Hari Raya Aidilfitri
2019-06-06  Hari Raya Aidilfitri Holiday
2019-08-11  Hari Raya Haji
2019-08-12  Hari Raya Haji
2019-08-31  Merdeka Day
2019-09-01  Awal Muharram
2019-09-02  Awal Muharram
2019-09-09  Agong's Birthday
2019-09-16  Malaysia Day
2019-10-27  Deepavali
2019-10-28  Deepavali
2019-11-09  Prophet Muhammad's birthday
2019-12-25  Christmas
----------  ----------------------------
```

As I said earlier, filtering hides old leaves/events. So you have to pass `-a` to see full holiday list.

```
$ kakitangan.py holidays -a
----------  ---------------------------------------------------------
2015-01-01  New Year
2015-01-02  New Year
2015-01-03  New Year
...
2017-06-25  Hari Raya Aidilfitri
2017-06-26  Hari Raya Aidilfitri
2017-06-27  Hari Raya Aidilfitri
...
2019-10-27  Deepavali
2019-10-28  Deepavali
2019-11-09  Prophet Muhammad's birthday
2019-12-25  Christmas
----------  ---------------------------------------------------------
```

Okay, you want to check your own leaves, right? You can! Use `myleaves` with `-a` parameter if you want to see the old leaves too.

```
$ kakitangan.py myleaves -a
----------  -----------
2019-02-28  Sick
2019-03-12  Sick
2019-03-21  Annual
2019-05-17  Annual (PM)
2019-05-21  Annual
2019-05-22  Annual
2019-05-23  Annual
2019-05-24  Annual
----------  -----------
```

If you need to know your leave statistics, I have added a command named `myleavestat`.

```
$ kakitangan.py myleavestat
-----------------------  -----------------
Compassionate            10/10
Annual                   25/50 (25 used)
Sick                     15/30 (15 used)
Paternity                10/10
Hospitalization          30/60 (30 used)
Replacement              1/1
Birthday Leave           1/1
Annual Leave Additional  5/5
CarryForward             5/5
Unpaid Leave             10/10
Bonus Leave              1/1
Exam/Study Leave         5/5
-----------------------  -----------------
```

Going back home? Don't want anyone to sneak into your Kakitangan account? You can log out anytime. It's easy.

```
$ kakitangan.py logout
Confirm logout? [Y/N]: Y
Logged out
```

Please review, post issues, star or commit changes. Thanks.