/acme

Console app to calculate the total that the company has to pay an employee.

Primary LanguagePythonMIT LicenseMIT

github action codecov Documentation Status PyPI version

I hope you enjoy reviewing this console application as much as I enjoyed developing.

Documentation is also available on Read the Docs

Quickstart

Python 3.7 or higher is required.

Install ACME with pip:

python -m pip install acme-exercise

Usage

Run demo:

acme --demo

Run custom data:

acme <filename>

Be sure the file is in the same directory where you run the command

See the instructions:

acme --help
Problem Description

The company ACME offers their employees the flexibility to work the hours they want. They will pay for the hours worked based on the day of the week and time of day, according to the following table:

Monday - Friday Saturday and Sunday
00:01 - 09:00 25 USD 00:01 - 09:00 30 USD
09:01 - 18:00 15 USD 09:01 - 18:00 20 USD
18:01 - 00:00 20 USD 18:01 - 00:00 25 USD

The goal of this exercise is to calculate the total that the company has to pay an employee, based on the hours they worked and the times during which they worked. The following abbreviations will be used for entering data:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday
MO TU WE TH FR SA SU

Input: the name of an employee and the schedule they worked, indicating the time and hours. This should be a .txt file with at least five sets of data. You can include the data from our two examples below.

Output: indicate how much the employee has to be paid

For example:

Case Case 1 Case 2
Input RENE=MO10:00-12:00,TU10:00-12:00,TH01:00-03:00,SA14:00-18:00,SU20:00-21:00 ASTRID=MO10:00-12:00,TH12:00-14:00,SU20:00-21:00
Output The amount to pay RENE is: 215 USD The amount to pay ASTRID is: 85 USD
Architecture

I used C4 Model for architecture modeling. I created the Components diagram.

Components diagram

Approach & Methodology

I started with the set up of the environment, creating the repository docs, creating the README and configuring the GitHub actions.

For the functional side I decided to develop a minimum viable implementation to refactor later. I implemented the basic functionality with the provided use cases and I created the app structure and architecture using C4 Model.

Later I improve the basic functionality to allow working hours in multiple work shifts, and finally I validated the format of the input file.

After developed the solution, I deploy the console app to PyPI to easily use for the end user.

For development process I used Kanban Method with GitHub Projects

ACME Kanban

And for time management I used Pomodoro Technique

Install from source

Clone the project:

git clone https://github.com/israteneda/acme

Change to the app directory:

cd acme

Run demo:

python acme\__main__.py --demo

Run custom data:

python acme\__main__.py <filename>

Be sure the file is in the same directory where you run the command

Run test:

python -m unittest -v