\ No newline at end of file
diff --git a/app/Modules/Dashboard/resources/views/documents/create.blade.php b/app/Modules/Dashboard/resources/views/documents/create.blade.php
new file mode 100644
index 0000000..cd4716d
--- /dev/null
+++ b/app/Modules/Dashboard/resources/views/documents/create.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Dashboard/resources/views/documents/edit.blade.php b/app/Modules/Dashboard/resources/views/documents/edit.blade.php
new file mode 100644
index 0000000..a5178aa
--- /dev/null
+++ b/app/Modules/Dashboard/resources/views/documents/edit.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Dashboard/resources/views/documents/index.blade.php b/app/Modules/Dashboard/resources/views/documents/index.blade.php
new file mode 100644
index 0000000..f3213b5
--- /dev/null
+++ b/app/Modules/Dashboard/resources/views/documents/index.blade.php
@@ -0,0 +1,68 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Employee/Leaves/resources/views/edit.blade.php b/app/Modules/Employee/Leaves/resources/views/edit.blade.php
new file mode 100644
index 0000000..069dbfe
--- /dev/null
+++ b/app/Modules/Employee/Leaves/resources/views/edit.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main_employee')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Employee/Leaves/resources/views/index.blade.php b/app/Modules/Employee/Leaves/resources/views/index.blade.php
new file mode 100644
index 0000000..c13e117
--- /dev/null
+++ b/app/Modules/Employee/Leaves/resources/views/index.blade.php
@@ -0,0 +1,77 @@
+@extends('layouts.main_employee')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Employee/Time/resources/views/edit.blade.php b/app/Modules/Employee/Time/resources/views/edit.blade.php
new file mode 100644
index 0000000..e38dc77
--- /dev/null
+++ b/app/Modules/Employee/Time/resources/views/edit.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main_employee')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Employee/Time/resources/views/index.blade.php b/app/Modules/Employee/Time/resources/views/index.blade.php
new file mode 100644
index 0000000..ebc3c6b
--- /dev/null
+++ b/app/Modules/Employee/Time/resources/views/index.blade.php
@@ -0,0 +1,77 @@
+@extends('layouts.main_employee')
+@section('content')
+
@endsection
\ No newline at end of file
diff --git a/app/Modules/Recruitment/resources/views/job_advert/.php_cs.cache b/app/Modules/Recruitment/resources/views/job_advert/.php_cs.cache
new file mode 100644
index 0000000..03c7459
--- /dev/null
+++ b/app/Modules/Recruitment/resources/views/job_advert/.php_cs.cache
@@ -0,0 +1 @@
+{"php":"7.0.18-0ubuntu0.16.04.1","version":"2.3.1","rules":{"blank_line_after_namespace":true,"braces":true,"class_definition":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_constants":true,"lowercase_keywords":true,"method_argument_space":true,"no_closing_tag":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":true,"encoding":true,"full_opening_tag":true},"hashes":{"_form.blade.php":2988637721,"create.blade.php":924751384,"edit.blade.php":1816404516,"index.blade.php":3200190596}}
\ No newline at end of file
diff --git a/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php b/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php
new file mode 100644
index 0000000..f63d278
--- /dev/null
+++ b/app/Modules/Recruitment/resources/views/job_advert/_form.blade.php
@@ -0,0 +1,51 @@
+
\ No newline at end of file
diff --git a/app/Modules/Recruitment/resources/views/job_advert/create.blade.php b/app/Modules/Recruitment/resources/views/job_advert/create.blade.php
new file mode 100644
index 0000000..2d1d702
--- /dev/null
+++ b/app/Modules/Recruitment/resources/views/job_advert/create.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php b/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php
new file mode 100644
index 0000000..b4f910d
--- /dev/null
+++ b/app/Modules/Recruitment/resources/views/job_advert/edit.blade.php
@@ -0,0 +1,13 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
\ No newline at end of file
diff --git a/app/Modules/Recruitment/resources/views/job_advert/index.blade.php b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php
new file mode 100644
index 0000000..ee57caa
--- /dev/null
+++ b/app/Modules/Recruitment/resources/views/job_advert/index.blade.php
@@ -0,0 +1,65 @@
+@extends('layouts.main')
+@section('content')
+
+@endsection
+@section('additionalCSS')
+
+@endsection
+@section('additionalJS')
+
+
+@endsection
\ No newline at end of file
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 66e01c7..656bb2e 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -20,6 +20,12 @@ public function boot()
View::addNamespace('recruitment', base_path('app/Modules/Recruitment/resources/views'));
View::addNamespace('discipline', base_path('app/Modules/Discipline/resources/views'));
View::addNamespace('time', base_path('app/Modules/Time/resources/views'));
+ View::addNamespace('employee.salary', base_path('app/Modules/Employee/Salary/resources/views'));
+ View::addNamespace('employee.time', base_path('app/Modules/Employee/Time/resources/views'));
+ View::addNamespace('employee.leaves', base_path('app/Modules/Employee/Leaves/resources/views'));
+ View::addNamespace('employee.leaves', base_path('app/Modules/Employee/Leaves/resources/views'));
+ View::addNamespace('dashboard', base_path('app/Modules/Dashboard/resources/views'));
+ View::addNamespace('employee.dashboard_documents', base_path('app/Modules/Employee/Dashboard/resources/views'));
}
/**
diff --git a/app/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php
index 40551d5..4a16e4c 100644
--- a/app/Providers/RepositoryServiceProvider.php
+++ b/app/Providers/RepositoryServiceProvider.php
@@ -9,6 +9,7 @@
use App\Modules\Recruitment as Recruitment;
use App\Modules\Discipline as Discipline;
use App\Modules\Time as Time;
+use App\Modules\Dashboard as Dashboard;
class RepositoryServiceProvider extends ServiceProvider
{
@@ -40,10 +41,12 @@ public function register()
Leave\Repositories\EmployeeLeaveRepository::class => [Leave\Repositories\Interfaces\EmployeeLeaveRepositoryInterface::class],
Leave\Repositories\EmployeeLeaveStatusRepository::class => [Leave\Repositories\Interfaces\EmployeeLeaveStatusRepositoryInterface::class],
Recruitment\Repositories\ReportRepository::class => [Recruitment\Repositories\Interfaces\ReportRepositoryInterface::class],
+ Recruitment\Repositories\JobAdvertRepository::class => [Recruitment\Repositories\Interfaces\JobAdvertRepositoryInterface::class],
Discipline\Repositories\DisciplinaryCaseRepository::class => [Discipline\Repositories\Interfaces\DisciplinaryCaseRepositoryInterface::class],
Time\Repositories\ClientRepository::class => [Time\Repositories\Interfaces\ClientRepositoryInterface::class],
Time\Repositories\ProjectRepository::class => [Time\Repositories\Interfaces\ProjectRepositoryInterface::class],
Time\Repositories\TimeLogRepository::class => [Time\Repositories\Interfaces\TimeLogRepositoryInterface::class],
+ Dashboard\Repositories\DashboardDocumentsRepository::class => [Dashboard\Repositories\Interfaces\DashboardDocumentsRepositoryInterface::class],
];
foreach ($bindings as $concrete => $interfaces) {
diff --git a/app/Providers/ViewComposerServiceProvider.php b/app/Providers/ViewComposerServiceProvider.php
index 6dfd76a..307d64b 100644
--- a/app/Providers/ViewComposerServiceProvider.php
+++ b/app/Providers/ViewComposerServiceProvider.php
@@ -27,5 +27,8 @@ public function register()
view()->composer('includes.header', function($view) {
$view->with('current', preg_replace('/\..*/', '', Route::currentRouteName()));
});
+ view()->composer('includes.header_employee', function($view) {
+ $view->with('current', preg_replace('/\..*/', '', Route::currentRouteName()));
+ });
}
}
diff --git a/app/User.php b/app/User.php
index 2eba781..e986059 100644
--- a/app/User.php
+++ b/app/User.php
@@ -27,7 +27,7 @@ class User extends Authenticatable
* @var array
*/
protected $fillable = [
- 'first_name', 'last_name', 'email', 'gender', 'birth_date', 'password', 'role', 'notes'
+ 'first_name', 'last_name', 'email', 'gender', 'birth_date', 'password', 'role', 'notes', 'how_did_they_hear'
];
/**
diff --git a/contributing.md b/contributing.md
new file mode 100644
index 0000000..6d6c7e0
--- /dev/null
+++ b/contributing.md
@@ -0,0 +1,110 @@
+# Contributing to HRM
+
+Thank you for considering contributing to HRM! :octocat: :rocket:
+
+**Table of contents**
+
+
+
+- Code of conduct
+- How can I contribute?
+ - Reporting bugs
+ - Suggesting Enhancements
+
+
+
+## Code of conduct
+
+This project and everyone participating in it is governed by the [Contributor Covenant](https://github.com/ContributorCovenant/contributor_covenant). By participating, you are expected to uphold this code. Please report unacceptable behavior to info@adevait.com.
+
+## How can I contribute?
+
+### Reporting bugs
+
+Bugs are reported as [Github issues](https://github.com/adevait/hrm/issues), with the label `bug`. Before reporting a bug, please make sure it's not already [reported](https://github.com/adevait/hrm/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3Abug%20) or [fixed](https://github.com/adevait/hrm/pulls?q=is%3Aopen+is%3Apr+label%3Abug).
+
+We welcome pull request for bug fixes so if you think you can tackle it, feel free to. Please make sure to label it `bug`, and link it to the related issue.
+
+Bug reports should have the following format.
+
+**Title**
+
+Use clear and descriptive title for the issue that identifies the problem.
+
+**Description**
+
+Make sure to explain the problem well and include all details you find necessary.
+
+**Details**
+
+1. Steps to reproduce
+ * Write down as many steps as you find necessary to explain how the bug occurred and help maintainers reproduce it.
+2. Expected behavior
+ * What did you expect to happen?
+3. Actual behavior
+ * What actually happened?
+4. Testing environment
+ * Describe the testing environment including used browser, operating system and other details that can be helpful.
+
+**Additional information**
+
+This is the place for anything not included in the guide above that you find important.
+
+> Note: If you find a Closed issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
+
+### Suggesting Enhancements
+
+Enhancements are also suggested in the form of [issues](https://github.com/adevait/hrm/issues), labeled `enhancement`. Before suggesting an enhancement, please make it's not already [suggested](https://github.com/adevait/hrm/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement) or [implemented](https://github.com/adevait/hrm/pulls?q=is%3Aopen+is%3Apr+label%3Abug+label%3Aenhancement).
+
+Before making a pull request for your suggestion, please get a feedback from some of the maintainers to see if such feature aligns with the general vision for the system.
+
+Pull requests for enhancements should follow these practices:
+
+**Code Format**
+
+1. Use [PSR-2](http://www.php-fig.org/psr/psr-2/) coding standard
+ * Make sure your code follows PSR-2 coding style guide.
+ * Some editors have packages that automatically build your code in PSR-2. If you don't want to think about your code structure while coding, you can easily automate it by installing such package. An example is Sublime's [Code Formatter](https://github.com/akalongman/sublimetext-codeformatter).
+2. Document your code
+ * All of your code should be properly documented. A great package for generating code documentation is [DocBlockr](https://packagecontrol.io/packages/DocBlockr).
+
+**General Structure**
+
+1. Modules
+ * The system is organized in modules located in `app/Modules`. Every module has its own HTTP part, models, repositories and resources, and they follow Laravel's nesting and conventions.
+ * When adding a new module, check one of the existing ones as example for the code structure and practices.
+2. Logic
+ * Controllers
+ - They are following the RESTful structure and are organized as resources.
+ - Controller methods should not do any complex operations or calculations.
+ - All database operations are handled in repositories (see point 3 below).
+ - Any function that is used more than once should be a helper function.
+ * Validation
+ - Every controller has its `FormRequest` class, located in `ModuleName/Http/Requests` where the request validation is done prior to executing the code in the controller method.
+ - Apart from the required rules, other validation rules should be added based on common sense.
+ * Routes
+ - All routes should be defined as resources and be properly nested (see existing routes as example).
+ - All routes should be named and used accordingly throughout the code.
+3. Database
+ * Migrations
+ All database alterations should be done using migrations.
+ - Migrations used for creating a table in the database should follow this naming convention: `create_[table_name]_table`.
+ - Migrations used for altering a table in the database should follow this naming convention: `update_[table_name]_[altering_description]`.
+ - Every table should have timestamps and soft deletes.
+ - Every table should have an auto increment primary key.
+ - Every foreign key should be defined and cascade on delete and update.
+ * Models
+ - Tables representing many to many relations should not have separate model class.
+ - Every model should have the table name defined as a protected attribute.
+ - Every model should have the guarded attributes specified.
+ * Repositories
+ - All complex database operations should be handled in a repository rather than the model itself.
+ - Every model has its own repository that extends `App\Repositories\EloquentRepository`.
+ - Every repository should have its interface and binded through it to allow for higher abstraction. The repository bindings are done in `App\Providers\RepositoryServiceProvider`.
+ - Don't use model attributes or constants directly in external classes (e.g. `User::ACTIVE`). Instead, do it through the respective repository, like so: `$userRepository->model::ACTIVE`. To be able to use that, you should set the repository's `allowedAttributes` attribute to include the model - `$allowedAttributes = ['model']`.
+4. Other
+ * Breadcrumbs
+ - Every page should have its breadcrumbs defined in `routes/breadcrumbs`.
+ * Localization
+ - Every text used throughout the system should be defined in `/resources/lang/en/app.php`, to make it easier for implementing localization eventually.
+ - Make sure to follow the existing nesting structure and naming for all texts added in the lang file.
\ No newline at end of file
diff --git a/database/migrations/2017_05_30_105051_create_job_advert_table.php b/database/migrations/2017_05_30_105051_create_job_advert_table.php
new file mode 100644
index 0000000..96b6309
--- /dev/null
+++ b/database/migrations/2017_05_30_105051_create_job_advert_table.php
@@ -0,0 +1,38 @@
+increments('id');
+ $table->string('title', 255);
+ $table->text('description');
+ $table->text('skills')->nullable();
+ $table->text('advantages')->nullable();
+ $table->text('responsibilities')->nullable();
+ $table->text('benefits')->nullable();
+ $table->string('image', 255)->nullable();
+ $table->softDeletes();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('job_advert');
+ }
+}
diff --git a/database/migrations/2017_06_15_114249_update_user_leaves_add_approved.php b/database/migrations/2017_06_15_114249_update_user_leaves_add_approved.php
new file mode 100644
index 0000000..9bdad0f
--- /dev/null
+++ b/database/migrations/2017_06_15_114249_update_user_leaves_add_approved.php
@@ -0,0 +1,32 @@
+boolean('approved')->nullable()->after('attachment');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('user_leaves', function (Blueprint $table) {
+ $table->dropColumn('approved');
+ });
+ }
+}
diff --git a/database/migrations/2017_07_05_121947_update_table_users_add_column_how_did_they_hear.php b/database/migrations/2017_07_05_121947_update_table_users_add_column_how_did_they_hear.php
new file mode 100644
index 0000000..8cd4214
--- /dev/null
+++ b/database/migrations/2017_07_05_121947_update_table_users_add_column_how_did_they_hear.php
@@ -0,0 +1,32 @@
+string('how_did_they_hear')->after('notes');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('users', function (Blueprint $table) {
+ $table->dropColumn('how_did_they_hear');
+ });
+ }
+}
diff --git a/database/migrations/2017_07_26_100942_create_dashboard_documents_table.php b/database/migrations/2017_07_26_100942_create_dashboard_documents_table.php
new file mode 100644
index 0000000..20f5af0
--- /dev/null
+++ b/database/migrations/2017_07_26_100942_create_dashboard_documents_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('name', 100);
+ $table->string('description')->nullable();
+ $table->string('attachment', 100);
+ $table->timestamps();
+ $table->softDeletes();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('dashboard_documents');
+ }
+}
diff --git a/public/.DS_Store b/public/.DS_Store
new file mode 100644
index 0000000..c096493
Binary files /dev/null and b/public/.DS_Store differ
diff --git a/public/images/browserstack-logo.png b/public/images/browserstack-logo.png
new file mode 100644
index 0000000..226c727
Binary files /dev/null and b/public/images/browserstack-logo.png differ
diff --git a/readme.md b/readme.md
index 5e0cf7d..ab838b6 100644
--- a/readme.md
+++ b/readme.md
@@ -28,10 +28,18 @@ The system is built on top of Laravel 5.3, so to proceed with the installation y
* Check `/bootstrap/cache` permissions - this folder should also be writable. Make sure the permissions are set correctly.
8. At this point you should have the app up and running. Hit `yourdomain/register` to open the registration screen for creating an admin user. This is a one time setup and the credentials set here will be used for authenticating before using the system.
+## Contributing
+
+We encourage you to contribute to HRM! Please check out the [Contributing guide](contributing.md) for guidelines about how to proceed.
+
## License
HRM is released under the GPL v3 (or later) license.
## Support
-Please direct any feedback to trajchevska@adevait.com.
\ No newline at end of file
+Please direct any feedback to trajchevska@adevait.com.
+
+## Our supporters
+#### [BrowserStack](https://www.browserstack.com/): Hassle free web-based browser testing
+
\ No newline at end of file
diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php
index 3ead3a2..029286c 100644
--- a/resources/lang/en/app.php
+++ b/resources/lang/en/app.php
@@ -33,6 +33,9 @@
'login' => 'Login',
'logout' => 'Logout',
'home' => 'Home',
+ 'download' => 'Download',
+ 'status' => 'Status',
+ 'approve' => 'Approve',
'profile' => [
'main' => 'Profile',
@@ -140,6 +143,7 @@
'gender_female' => 'Female',
'birth_date' => 'Birth date',
'notes' => 'Notes',
+ 'how_did_they_hear' => 'How did they hear about us?',
'store_success' => 'The employee was successfully added.',
'update_success' => 'The employee details were successfully updated.',
'delete_success' => 'The employee was successfully removed.',
@@ -316,6 +320,7 @@
'store_success' => 'Leave was successfully assigned.',
'update_success' => 'Leave was successfully updated.',
'delete_success' => 'Leave was successfully deleted.',
+ 'approve_success' => 'Leave was successfully approved.',
'attachment' => 'Attachment',
'error_no_available_days' => 'The leave request exceeds the total available days. There are :days days left.',
],
@@ -335,6 +340,21 @@
],
'recruitment' => [
'main' => 'Recruitment',
+ 'job_advert' => [
+ 'main' => 'Job Advertisement',
+ 'add_new' => 'Add job advertisement',
+ 'title' => 'Job title',
+ 'description' => 'Job description',
+ 'skills' => 'Required skills',
+ 'advantages' => 'Advantages',
+ 'responsibilities' => 'Responsibilities',
+ 'benefits' => 'Benefits',
+ 'image' => 'Image',
+ 'edit_details' => 'Edit job advertisement details',
+ 'store_success' => 'The job advertisement was successfully added.',
+ 'update_success' => 'The job advertisement details were successfully updated.',
+ 'delete_success' => 'The job advertisement was successfully removed.',
+ ],
'reports' => [
'main' => 'Reports',
'first_name' => 'First name',
@@ -408,5 +428,34 @@
'update_success' => 'Time log was successfully updated.',
'delete_success' => 'Time log was successfully deleted.',
]
+ ],
+ 'dashboard' => [
+ 'main' => 'Dashboard',
+ 'documents' => [
+ 'main' => 'Documents',
+ 'name' => 'Name',
+ 'description' => 'Description',
+ 'attachment' => 'Attachment',
+ 'add_new' => 'Add new document',
+ 'edit_details' => 'Edit document details',
+ 'store_success' => 'Dashboard document was successfully added.',
+ 'update_success' => 'Dashboard document was successfully updated.',
+ 'delete_success' => 'Dashboard document was successfully deleted.',
+ ],
+ ],
+ 'employee' => [
+ 'leaves' => [
+ 'main' => 'Leaves',
+ 'details' => 'Leave Details',
+ 'approved' => 'Approved',
+ 'pending' => 'Pending',
+ 'request' => 'Request a leave',
+ 'store_success' => 'Leave request is successfully sent.',
+ 'update_success' => 'Leave request is successfully updated.',
+ 'delete_success' => 'Leave request is successfully deleted.',
+ ],
+ 'salary' => [
+ 'main' => 'Salary'
+ ]
]
];
diff --git a/resources/lang/en/emails.php b/resources/lang/en/emails.php
new file mode 100644
index 0000000..123676f
--- /dev/null
+++ b/resources/lang/en/emails.php
@@ -0,0 +1,9 @@
+ [
+ 'title' => 'Welcome to HRM',
+ 'password' => 'Your temporary password is: ',
+ 'change_password_url' => ' Please log in with the temporary password and change it to a password of your choice as soon as possible, at the following link - '
+ ]
+];
\ No newline at end of file
diff --git a/resources/views/emails/employee-login-password.blade.php b/resources/views/emails/employee-login-password.blade.php
new file mode 100644
index 0000000..f40443b
--- /dev/null
+++ b/resources/views/emails/employee-login-password.blade.php
@@ -0,0 +1,8 @@
+
+
+
+