Coder Social home page Coder Social logo

eporsche / daybreak Goto Github PK

View Code? Open in Web Editor NEW
125.0 12.0 36.0 6.52 MB

Simple timesheets and vacation management for small businesses.

License: MIT License

Shell 0.13% PHP 66.54% HTML 0.83% Blade 32.49% Procfile 0.01%
timesheet vacation hrm laravel livewire

daybreak's Introduction

Logo Daybreak

Build Status Total Downloads Latest Stable Version License

About Daybreak

Daybreak is a very simplistic timesheet and vacation planning program for small businesses. It was created because I needed something I could host myself and integrate better into our local IT enviornment. Other open sourced programs like smalltime or kimai didn't work out for me, since they did not comply to C-55/18 EuGH or where not easily extendable. This program is inspired by papershift. If you are looking for something more robust and/or more enterprise ready, I suggest you test and use their service at papershift.com.

Open Todos

  • Documentation
  • Add automatic pause times after "x" working hours
  • Include holiday importer for other countries
  • Make timezone of location configurable and make use of it
  • Add more absence times calculators
  • Add extended datatables and disable employee switcher
  • More Tests

Installation instruction to setup a development environment

Requirements

Ubuntu/Debian

apt-get update
apt-get install php7.4 php7.4-common php7.4-bcmath openssl php7.4-json php7.4-mbstring php7.4-xml

Install docker and composer on you system.

Clone repository

git clone https://github.com/eporsche/daybreak.git && cd daybreak

Setup repository

# Restore PHP packages
composer install

# Create .env file
# By default port :80 will be used. To change the port, put `APP_PORT=<port>` into the .env config file
cp .env.example .env

Start application

# Start the application
./vendor/bin/sail up -d

# Generate app key
./vendor/bin/sail artisan key:generate

# Migrate database
./vendor/bin/sail artisan migrate

By default, the application is available at: http://localhost

Mails

In the default installation the sending of mails is simulated with mailhog, you can view them via your browser at http://localhost:8025

A small video preview of the application

daybreak_demo_EDIT_2.mp4

Demo Installation

The application can be tested via heroku.

https://demo-daybreak.herokuapp.com/

User: [email protected]

Password: admin1234

Limitation:

  • No Emails will be send from the demo instance, therefore user invitations won't work
  • Application will be reset to defaults every 24h

Security Vulnerabilities

If you discover a security vulnerability within Laravel, please send an e-mail to Erik Porsche via [email protected]. All security vulnerabilities will be promptly addressed.

License

Copyright (c) Erik Porsche

Daybreak is open-sourced software licensed under the MIT license.

Icons made by Freepik from www.flaticon.com

daybreak's People

Contributors

amayer5125 avatar eporsche avatar felixboers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

daybreak's Issues

[BUG] - Specified key was too long; max key length is 1000 bytes

On php artisan migrate:refresh --seed

  Illuminate\Database\QueryException 

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `personal_access_tokens` add index `personal_access_tokens_tokenable_type_tokenable_id_index`(`tokenable_type`, `tokenable_id`))

Solution:

As outlined in the Migrations guide to fix this all you have to do is edit your AppServiceProvider.php file and inside the boot method set a default string length:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

[Request] - disable editing Eingecheckt times for user

is there an option to disable edition of user that is not an admin or have permission to do that -> for Eingecheckt

the problem is if user thry to cheat the system so i thing having some supervisor to have permission for that will be nice to have in tnx

image

Error when removing a punched in time

TypeError
Argument 2 passed to App\Actions\RemoveTimeTracking::remove() must be an instance of App\Models\Location, int given, called in /Users/jakub/Desktop/WORK/Web/WWW/daybreak/app/Http/Livewire/TimeTracking/TimeTrackingManager.php on line 217

  • clicked "Punch in" in the time tracking section. It started a timer, stopped the timer. Then tried deleting the logged time and got the error above..

API

Hey, nice project!

Is there an API available? I want to start and stop time tracking with a Telegram Messenger Bot :)

[BUG] - User DB seeder

There is a problem with user DB seeder when you change email and password inside DatabaseSeeder

app(CreatesNewUsers::class)->create([
            'name' => 'Admin User',
            'email' => '[email protected]',
            'password' => 'admin1234',
            'password_confirmation' => 'admin1234',
            'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? true : false,
        ]);

Adjust Timezone

How could i adjust the timezone?

  • Added APP_TIMEZONE=Europe/Berlin to .env-file
  • Added Enviroment TZ=Europe/Berlin
  • Added Europe/Berlin to DB/locations/time_zone

I also tried CEST as value, but the times are still in UTC.

Some questions

  1. Is it available in english? The demo is not english.

  2. Is it necessary to use this command "./vendor/bin/sail"?

Day/Night shift

Is it possible to add in report how many hours user worked in day vs night.

Day shift is from 06:00 - 22:00
Night shift is from 22:00 - 06:00

So if user came on Monday in 19:00 and worked to Tuesday until 07:00 he would have:

Monday
Day shift = 3 hours
Night shift = 2 hours

Tuesday
Day shift = 1 hours
Night shift = 7 hours

Thanks

Update sail dependency

The image fails at building because PHP binaries are not found:

image
image

docker-compose.yml is using dockerfiles from ./vendor/laravel/sail/runtimes/8.0, reading composer.lock you were using laravel/sail 1.12.12 but the issue is laravel/sail 1.12.12 is using Ubuntu 21.04 (see https://github.com/laravel/sail/blob/v1.12.12/runtimes/8.0/Dockerfile) and Ubuntu 21.04 is deprecated See http://old-releases.ubuntu.com/releases/. However since laravel/sail v1.13.4 they use Ubuntu 21.10 for the 8.0 php flavor and ubuntu 22.04 for the 8.1 php flavor.

So I removed composer.lock and modified composer.json

-"laravel/sail": "^1.0.1",
+"laravel/sail": "^1.15.0",

Now it builds.

[Suggestion] - Language

I suggest insted using enum in user migration use relation id

current

  public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            ...
            $table->enum('locale', ['de','en'])->default('en');
        });
    }

Replace with

current

  public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            ...
            $table->unasignedBigInteger('language_id')->default(1);
        });
    }

Also make

 php artisan make:model Utilities/Language -m
 Schema::create('languages', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('name_short')->unique();
            $table->string('country_code')->unique();
            $table->string('code')->unique();
            $table->timestamps();
        });

 Language::truncate();

 Language::create([
    'name'              => 'English',
    'name_short'    => 'en',
    'country_code' => 'gb',
    'code'               => 'gb',
]);

And for better usage put in .env.example AND .env LANGUAGE_DEFAULT=de

[Suggestion] - Branching the git

Strongly suggest start branching the git workflow for your very nice project.

  • Master (release / pre-release) (lock master branch )
    • Stag (copy of production / pass all tests before marge to master )
    • Develop (Main develop branch)
      • Features/*
      • Bugs/*
      • Theme/*
      • Security/*

:)

How to run daybreak as Docker Container

I found this great project, but unfortunately I can't get it to run. I would like to run it as a Docker container, but I have seen that daybreak uses docker itself - because of sail. Is there any way to run it inside a Docker container? I'm not a fan of building a Docker container with Docker in it....

[Translation] - English

Here you have json translation

{
    "Location administrator": "Location administrator",
    "Location administrators can perform updates on a location.": "Location administrators can perform updates on a location.",
    "Employee": "Employee",
    "Employees have can create new working hours.": "Employees have can create new working hours.",
    "Great! You have accepted the invitation to join the: location team.": "Great! You have accepted the invitation to join the: location team.",
    "Target to zero (to be implemented)": "Target to zero (to be implemented)",
    "The target hours will be set to zero in the evaluation.": "The target hours will be set to zero in the evaluation.",
    "Absent to target": "Absent to target",
    "The absence hours will be summed up.": "The absence times are summarized.",
    "Fixed value (to be implemented)": "Fixed value (to be implemented)",
    "Caclulate a fixed value.": "Calculate a fixed value.",
    "Custom value (to be implemented)": "Custom value (to be implemented)",
    "Employee specific values.": "Employee specific values.",
    "The project budget has been exceeded.": "The project budget has been exceeded.",
    "Date should not be in the future.": "Date should not be in the future.",
    "Date should not before employment date.": "The date should not be before the employment date.",
    "The given time period overlapps with an existing entry.": "The given time period overlapps with an existing entry.",
    "Given pause time is too small.": "Given a pause, the time is too small.",
    "Break is not between working hours.": "The break is not between working hours.",
    "Overlapping pause time detected.": "Overlapping pause time detected.",
    "Sorry, you were not invited.": "Sorry, you were not invited.",
    "We were unable to find a registered user with this email address.": "We could not find a registered user with this email address.",
    "This user already belongs to the team.": "This user already belongs to the team.",
    "Something went wrong. Please try again.": "Something went wrong. Please try again.",
    "Chosen date interval is too big.": "The selected date interval is too big.",
    "The start date should not be set before the employment date.": "The start date should not be set before the employment date.",
    "The provided password does not match your current password.": "The provided password does not match your current password.",
    "Transferred:: name": "Transferred:: name",
    "This user has already been invited.": "This user has already been invited.",
    "This user already belongs to the location.": "This user already belongs to the location.",
    "Sorry, there is no fitting vacation entitlement for this absence.": "Unfortunately, there is no suitable vacation entitlement for this absence.",
    "Paid hours changed from {$ absence-> paid_hours} to {$ absenceCalculator-> sumPaidHours ()}": "The paid hours have been changed from {$ absence-> paid_hours} to {$ absenceCalculator-> sumPaidHours ()}.",
    "Vacation days changed from {$ absence-> vacation_days} to {$ absenceCalculator-> sumVacationDays ()}": "The vacation days were changed from {$ absence-> vacation_days} to {$ absenceCalculator-> sumVacationDays ()}.",
    "You may not leave a location that you created.": "You may not leave a location that you created.",
    "The date format is wrong.": "The date format is wrong.",
    "The given date format is wrong.": "The given date format is wrong.",
    "Starting Balance": "Starting balance",
    "Sth. Went wrong.": "Sth. Went wrong.",
    "Not yet billed hours:: hours": "Not yet billed hours:: hours",
    "Working hours:: hours": "Arbeitszeit:: hours",
    "Date Duration (Hrs.) Description": "Date Duration (Hrs.) Description",
    "Period:: from -: to": "Period:: from -: to",
    "Vacation entitlement has wrong status.": "Vacation entitlement has wrong status.",
    ": start -: end o'clock": ": start -: end clock",
    "Location Settings": "Location Settings",
    "Locations": "Locations",
    "Location: Name": "Place: Name",
    "Projects": "Projects",
    "Project: Name": "Project: Name",
    "Calendar": "Calendar",
    "Create Team": "Create Team",
    "Team Settings": "Team Settings",
    "Delete Team": "Delete Team",
    "Permanently delete this team.": "Permanently delete this team.",
    "Once a team is deleted, all of its resources and data will be permanently deleted. Before deleting this team, please download any data or information regarding this team that you wish to retain.": "As soon as a team is deleted, all resources and data permanently deleted. Before deleting this team, download any data or information about this team that you want to keep. ",
    "Are you sure you want to delete this team? Once a team is deleted, all of its resources and data will be permanently deleted.": "Are you sure you want to delete this team? As soon as a team is deleted, all resources and data become permanent deleted.",
    "Nevermind": "Don't worry",
    "Team Name": "Team Name",
    "The team \\ 's name and owner information.": "The team \\' s name and owner information.",
    "Team Owner": "Team Owner",
    "Saved.": "Saved.",
    "Save": "Save",
    "Team Details": "Team Details",
    "Create a new team to collaborate with others on projects.": "Create a new team to collaborate with others on projects.",
    "Create": "Create",
    "Add Team Member": "Add team member",
    "Add a new team member to your team, allowing them to collaborate with you.": "Add a new team member to your team, allowing them to collaborate with you.",
    "Please provide the email address of the person you would like to add to this team.": "Please provide the email address of the person you would like to add to this team.",
    "Email": "Email",
    "Role": "Role",
    "Added.": "Added.",
    "Add": "Add",
    "Pending Team Invitations": "Pending team invitations",
    "These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.": "These people have been invited to your team and have been sent an invitation email. They may join the team by accepting the email invitation.",
    "Team Members": "Team Members",
    "All of the people that are part of this team.": "All of the people that are part of this team.",
    "Leave": "Leave",
    "Remove": "Remove",
    "Manage Role": "Manage Role",
    "Leave Team": "Leave Team",
    "Are you sure you would like to leave this team?": "Are you sure you want to leave this team?",
    "Remove Team Member": "Remove team member",
    "Are you sure you would like to remove this person from the team?": "Are you sure you want to remove this person from the team?",
    "Absence": "Absence",
    "Report": "Report",
    "Account Settings": "Account Settings",
    "Confirm Password": "Confirm Password",
    "For your security, please confirm your password to continue.": "For your security, please confirm your password to continue.",
    "Confirm": "Confirm",
    "Password": "Password",
    "Name": "Name",
    "Already registered?": "Already registered?",
    "Register": "Register",
    "Reset Password": "Reset Password",
    "Please confirm access to your account by entering the authentication code provided by your authenticator application.": "Please confirm access to your account by entering the authentication code provided by your authentication application.",
    "Please confirm access to your account by entering one of your emergency recovery codes.": "Please confirm access to your account by entering one of your emergency recovery codes.",
    "Code": "Code",
    "Recovery Code": "Recovery Code",
    "Use a recovery code": "Use a recovery code",
    "Use an authentication code": "Use an authentication code",
    "Login": "Registration",
    "Remember me": "Keep me in mind",
    "Forgot your password?": "Did you forget your password?",
    "Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn \\ 't receive the email, we will gladly send you another.": "Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn \\ 't receive the email, we will gladly send you another. ",
    "A new verification link has been sent to the email address you provided during registration.": "A new verification link has been sent to the email address you provided during registration.",
    "Resend Verification Email": "Resend confirmation email",
    "Logout": "Log out",
    "Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.": "Have you forgotten your password? No problem. Just let us know Include your email address and we will email you a password reset link so you can choose a new one. ",
    "Email Password Reset Link": "Link to reset the email password",
    "Employees": "employees",
    "Employee:: name": "Employee:: name",
    "You have been invited to join the: location team!": "You have been invited to join the: location team!",
    "If you do not have an account, you may create one by clicking the button below. After creating an account, you may click the invitation acceptance button in this email to accept the team invitation:": "If you don't have an account, you can You create an account by clicking the button below. After creating an account, you can click the Accept Invitation button in that email to accept the team invitation: ",
    "If you already have an account, you may accept this invitation by clicking the button below:": "If you already have an account, you can accept this invitation by clicking the button below:",
    "If you did not expect to receive an invitation to this team, you may discard this email.": "If you did not expect to receive an invitation to this team, you can discard this email.",
    "Time tracking": "Time tracking",
    "Manage Account": "Manage Account",
    "Profile": "Profile",
    "API Tokens": "API Tokens",
    "Dashboard": "Instrument panel",
    "Profile Information": "Profile Information",
    "Update your account \\ 's profile information and email address.": "Update your account \\' s profile information and email address.",
    "Photo": "Photo",
    "Select A New Photo": "Select a new photo",
    "Remove Photo": "Remove Photo",
    "Delete Account": "Delete Account",
    "Permanently delete your account.": "Permanently delete your account.",
    "Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.": "Once your account has been deleted, all resources and data will be permanent Before deleting your account, download any data or information you want to keep. ",
    "Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.": "Are you sure you want to delete your account? Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.",

    "Two Factor Authentication": "Two-Factor Authentication",
    "Add additional security to your account using two factor authentication.": "Add additional security to your account by using two factor authentication.",
    "You have enabled two factor authentication.": "You have enabled two-factor authentication.",
    "You have not enabled two factor authentication.": "You have not enabled two-factor authentication.",
    "When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone \\ 's Google Authenticator application.": "When two factor authentication is enabled, you will be prompted for a secure, random token during authentication. You may retrieve this token from your phone \\ 's Google Authenticator application. ",
    "Two factor authentication is now enabled. Scan the following QR code using your phone \\ 's authenticator application.": "Two factor authentication is now enabled. Scan the following QR code using your phone \\' s authenticator application.",
    "Store these recovery codes in a secure password manager. They can be used to recover access to your account if your two factor authentication device is lost.": "Save these recovery codes in a secure password manager. They can be used to access.",
    "Enable": "Activate",
    "Regenerate Recovery Codes": "Regenerate recovery codes",
    "Show Recovery Codes": "Show recovery codes",
    "Disable": "Deactivate",
    "Browser Sessions": "Browser Sessions",
    "Manage and logout your active sessions on other browsers and devices.": "Manage and logout your active sessions on other browsers and devices.",
    "If necessary, you may logout of all of your other browser sessions across all of your devices. Some of your recent sessions are listed below; however, this list may not be exhaustive. If you feel your account has been compromised, you should also update your password. ": " If necessary, you can log out of all other browser sessions on all of your devices. Some of your most recent sessions are shown below. However, this list may not be complete. If you think your account has been compromised, you should also update your password. ",
    "This device": "This device",
    "Last active": "Last activity",
    "Logout Other Browser Sessions": "Log out other browser sessions",
    "Done.": "Done.",
    "Please enter your password to confirm you would like to logout of your other browser sessions across all of your devices.": "Please enter your password to confirm that you want to log out of your other browser sessions on all of your devices . ",
    "Update Password": "Renew Password",
    "Ensure your account is using a long, random password to stay secure.": "Make sure your account is using a long, random password to ensure security.",
    "Current Password": "Current Password",
    "New Password": "New Password",
    "Add project": "Add project",
    "Project": "Project",
    "Project Name": "Project Name",
    "Customer Order Number": "Customer Order Number",
    "Time budget for this project": "Time budget for this project",
    "Hourly rate for this project": "Hourly rate for this project",
    "Default billing type": "Standard billing type",
    "Default billing description": "Standard billing description",
    "Send Billing": "Send billing",
    "Billing from": "Billing from",
    "Billing to": "Billing to",
    "Filter": "Filter",
    "Date": "Date",
    "Hours": "Std",
    "Amount": "Quantity",
    "Description": "Description",
    "no details": "no details",
    "Payment Month": "Payment Month",
    "Payment Year": "Payment Year",
    "Assign user": "Assign user",
    "Users": "Users",
    "Time Tracking": "Time tracking",
    "Working Time": "Working time",
    "Start": "Start",
    "End": "End",
    "Please choose": "Please choose",
    "Billing Description": "Billing Description",
    "Billing Type": "Billing Type",
    "Hourly Rate": "Hourly Rate",
    "Add Pause": "Add a pause",
    "No pause yet.": "No pause yet.",
    "Add location": "Add location",
    "Location": "Place",
    "Location Name": "Location Name",
    "Add Location Member": "Add Location Member",
    "Add a new location member to your location, allowing them to collaborate with you.": "Add a new location member to your location so they can collaborate with you.",
    "Please provide the email address of the person you would like to add to this location. The email address must be associated with an existing account.": "Please provide the email address of the person you are adding to this location The email address must be associated with an existing account. ",
    "Pending Location Invitations": "Pending location invitations",
    "These people have been invited to your location and have been sent an invitation email. They may join the location by accepting the email invitation.": "These people have been invited to your location and have been sent an invitation email. They may join the location by accepting the email invitation.",
    "Cancel": "Cancel",
    "Location Members": "Location Members",
    "All of the people that are part of this location.": "All of the people that are part of this location.",
    "Leave Location": "Leave location",
    "Are you sure you would like to leave this location?": "Are you sure you want to leave this location?",
    "Remove Location Member": "Remove Location Member",
    "Are you sure you would like to remove this person from the location?": "Are you sure you want to remove this person from the location?",
    "Public holidays": "Holidays",
    "Here you can add, edit and delete public holidays for this location.": "Here you can add, edit and delete public holidays for this location.",
    "Day": "Tag",
    "Half day": "Half day",
    "No public holidays yet.": "No public holidays yet.",
    "Add Public Holiday": "Add Public Holiday",
    "Import Public Holiday": "Import public holiday",
    "Add public holiday": "Add public holiday",
    "Remove Public Holiday": "Remove Public Holiday",
    "Are you sure you would like to remove the public holiday from this location?": "Are you sure you want to remove the public holiday from this location?",
    "Import public holidays": "Import public holidays",
    "Select year for import": "Select the year for the import",
    "Select country": "Select country",
    "The Location \\ 's name and owner information.": "The Location \\' s name and owner information.",
    "Location Owner": "Location Owner",
    "Absence types for location": "Absence types for the location",
    "Absence types available for this location.": "Absence types are available for this location.",
    "Vacation": "Vacation",
    "Evaluation": "Evaluation",
    "Update": "Update",
    "No absent types for this location.": "No absent types for this location.",
    "Add Absence Type": "Add absence type",
    "Add absent type": "Add missing type",
    "Absence Type Name": "Name of the absence type",
    "Assigned employees": "Assigned employees",
    "Vacation contingent": "Vacation contingent",
    "Hours booked with this absent type should be substracted from vacation allowence.": "Hours booked with this absence type should be deducted from the vacation allowance.",
    "Affects Evaluation": "Influences the evaluation",
    "Choose if the report calculation method is affected by this absent type.": "Select whether the report calculation method is affected by this absent type.",
    "Regard Holidays": "View Holidays",
    "Holidays are taken into account (On public holidays - no vacation days are calculated. Within evaluations the holiday hours are considered, not the absence hours)": "Holidays are taken into account , not the absence times) ",
    "Assign new users": "Assign new users",
    "Assign absence type to new users automatically.": "Automatically assign the absence type to new users.",
    "Remove working sessions on confirm": "Remove the working sessions on confirmation",
    "When confirming an absence, remove all time records in the period": "When confirming an absence, remove all time records in the period",
    "Remove Absence Type": "Remove absence type",
    "Are you sure you would like to remove the absence type from this location?": "Are you sure you want to remove the absence type from this location?",
    "Overall": "Overall",
    "Overall entitled vacation": "Overall entitled vacation",
    "Used": "Used",
    "Transferred": "Transferred",
    "Rest": "rest",
    "(until: date)": "(to: date)",
    "Add Absence": "Add absence",
    "Type": "Art",
    "Status": "Status",
    "Approve": "Approve",
    "No absences yet.": "No absences yet.",
    "Add absence": "Add absence",
    "Absence Type": "Absence Type",
    "Starts at": "Starts at",
    "Ends at": "Ends at",
    "Full day": "Whole day",
    "Vacation Days": "Vacation Days",
    "Details": "Details",
    "Target Hours": "Target Hours",
    "Paid hours": "Paid hours",
    "Vacation (calculative)": "Vacation (calculative)",
    "Remove Absence": "Remove absence",
    "Are you sure you would like to remove this absence?": "Are you sure you want to remove this absence?",
    "Until today": "Until today",
    "Planned": "Planned",
    "It is": "It is",
    "Away": "Away",
    "Diff": "Diff",
    "Running Balance": "Interim balance",
    "Public holiday:": "Public holiday:",
    "Time Budget": "Time Budget",
    "Assigned Users": "Assigned Users",
    "Hours used": "Hours used",
    "Hourly rate": "Hourly rate",
    "Billing type": "Billing type",
    "Billing description": "Billing description",
    "Billing": "Billing",
    "no data yet": "No data yet",
    "Master data": "Master data",
    "Change account settings": "Change account settings",
    "Account Name": "Account Name",
    "Updated.": "Updated.",
    "Time Zone": "Time Zone",
    "Locale": "Locale",
    "Sum Trackings": "Sum Tracking",
    "Min. Punch Clock Pause": "Minimum. Punch Clock Pause",
    "Add Target Hours": "Add Target Hours",
    "Based on employees target hours, overtime will be calculated.": "Based on the target hours of the employees, overtime will be calculated.",
    "Start at": "Start at",
    "Summary": "Summary",
    "Can create overtime": "Can work overtime",
    "no target hours planned yet": "No target hours planned yet",
    "Add Target Hour": "Add Target Hour",
    "Removed.": "Removed.",
    "Add Vacation Entitlement": "Add Vacation Entitlement",
    "Here you can add the granted vacation days for this employee.": "Here you can add the granted vacation days for this employee.",
    "Transfer": "Transfer",
    "no vacations entitlements found.": "No vacations entitlements found.",
    "Add vacation entitlement": "Add vacation entitlement",
    "Edit Employee Profile": "Edit Employee Profile",
    "Edit general employee profile data.": "Edit general employee profile data.",
    "Date of employment": "Date of employment",
    "Opening overtime balance": "Open overtime credit",
    "Manage Target Hour": "Manage Target Hour",
    "Start Date": "Start Date",
    "Mode": "Mode",
    "Weekly hours": "Weekly hours",
    "Target hours based on per week": "Target hours based on per week",
    "Monthly hours": "Monthly hours",
    "Target hours based on per month": "Target hours based on per month",
    "Target Limited": "Target Limited",
    "Enable or disable overwork for this target hour plan.": "Enable or disable overwork for this target hour plan.",
    "Days": "Days",
    "Remove Time Tracking": "Remove time tracking",
    "Are you sure you would like to remove these target hours?": "Are you sure you want to remove these target hours?",
    "Manage Vacation Entitlement": "Manage Vacation Entitlement",
    "End Date": "End Date",
    "Expires": "Expires",
    "Transfer remaining entitlement": "Transfer remaining entitlement",
    "Expiration date of the transfer": "Expiration date of the transfer",
    "Are you sure you would like to remove this vacation entitlement?": "Are you sure you want to remove this vacation entitlement?",
    "Add time": "Add time",
    "Times": "Times",
    "Duration": "Duration",
    "Pause": "pause",
    "Balance": "Balance",
    "Project:": "Project:",
    "Billing Type:": "Billing Type:",
    "Billing Description:": "Billing Description:",
    "Hourly Rate:": "Hourly Rate:",
    "Invoice Number:": "Invoice Number:",
    "Are you sure you would like to remove this time entry?": "Are you sure you want to remove this time entry?",
    "Manage Location": "Manage location",
    "Manage Team": "Manage Team",
    "Create New Team": "Create New Team",
    "Switch Teams": "Switch Teams",
    "Create API Token": "Create API Token",
    "API tokens allow third-party services to authenticate with our application on your behalf.": "API tokens allow third-party services to authenticate with our application on your behalf.",
    "Token Name": "Token Name",
    "Permissions": "Permissions",
    "Created.": "Created.",
    "Manage API Tokens": "Manage API Tokens",
    "You may delete any of your existing tokens if they are no longer needed.": "You can delete all existing tokens if they are no longer needed.",
    "Last used": "Last used",
    "Delete": "Delete",
    "API Token": "API Token",
    "Please copy your new API token. For your security, it won \\ 't be shown again.": "Please copy your new API token. For your security, it won \\' t be shown again.",
    "Close": "Close",
    "API Token Permissions": "API Token Permissions",
    "Delete API Token": "Delete API Token",
    "Are you sure you would like to delete this API token?": "Are you sure you want to delete this API token?",
    "Edit": "Edit",
    "Default billing increment (minutes)": "Minimum billing unit (in minutes)",
    "Stopped": "Stopped",
    "Running": "Checked in",
    "Paused": "Paused",
    "Punch in": "Punch in",
    "auth.failed": "The user could not be authenticated.",
    "Whoops! Something went wrong.": "An error occurred",
    "Switch Location": "Change location",
    "Showing": "Show",
    "to": "from",
    "of": "of",
    "results": "Results",
    "Month:: month Year:: year": "Month:: month year:: year",
    "Previous": "Previous",
    "Next": "Next",
    "Current": "Current",
    "Public Holiday": "Public Holiday",
    "Your absence has been removed. Please check you absences for correctness.": "Your absence has been deleted. Please check your absences for correctness.",
    "The absence from: employee has been approved.": "The absence of: employee has been approved.",
    "Open Daybreak": "Open Daybreak",
    "New absence waiting for approval": "Confirm new absence",
    "Absence Status Changed.": "The status of an absence has been changed.",
    "Absence Removed": "An absence has been removed",
    ": employee created a new absence and it's waiting for approval!": ": employee has created a new absence. Please check and approve.",
    "List is empty": "The list is empty",
    "Select Filter": "Filter",
    "Add Default Resting Time": "Automatic pause times",
    "Add a default resting time to new time trackings.": "Prescribed pause times for new time records.",
    "No default durations yet.": "No automatic pauses have been set yet.",
    "Duration of the pause in minutes": "Time of the pause in minutes",
    "Pause from x hours": "Pause from x hours",
    "Add default resting time": "Add automatic rest time",
    "Remove Default Pause Time": "Delete automatic pause time",
    "Are you sure you would like to remove the default pause time from this location?": "Are you sure you want to delete the automatic pause time from this location?"
}

[Suggestion] - disable mail sending on local env

if is mail not set on local env you get errors like this

Connection could not be established with host mailhog :stream_socket_client(): php_network_getaddresses: getaddrinfo failed: No such host is known.

Solution:

if (!app()->environment('local')) {
    Mail::to($absence->employee)->send(new AbsenceRemoved());
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.