mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
updated streamline-setup v2
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Payroll\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Payroll\Http\Controllers;
|
||||
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\PayrollCategory;
|
||||
|
||||
class PayrollCategoriesController extends Controller {
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index() {
|
||||
$categories = PayrollCategory::orderBy('name', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
return view('payroll::payroll_categories.index', compact('categories'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create() {
|
||||
return view('payroll::payroll_categories.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
//validation passed
|
||||
$category = new PayrollCategory;
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
|
||||
$category->name = $request->name;
|
||||
$category->created_by = $logged_in_user_id;
|
||||
$category->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$category->save();
|
||||
|
||||
flash("Category has been saved")->success();
|
||||
return redirect("/payroll_categories/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit($id) {
|
||||
$category = PayrollCategory::where(['id' => $id])->first();
|
||||
|
||||
if (!$category) {
|
||||
flash()->error("Category not found");
|
||||
return redirect('/payroll_categories/');
|
||||
} else {
|
||||
return view('payroll::payroll_categories.edit', compact('category'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
request()->validate([
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
//validation passed
|
||||
$category = PayrollCategory::find($id);
|
||||
$category->name = $request->name;
|
||||
|
||||
try {
|
||||
$category->save();
|
||||
flash("Category has been updated")->success();
|
||||
return redirect("/payroll_categories/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$category = PayrollCategory::find($id);
|
||||
|
||||
if ($category->delete()) {
|
||||
flash("Category has been deleted.")->success();
|
||||
} else {
|
||||
flash('An error occurred. Please again later.');
|
||||
}
|
||||
|
||||
return redirect('/payroll_categories/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*/
|
||||
public function inactive() {
|
||||
$categories = PayrollCategory::onlyTrashed()
|
||||
->orderBy('name')
|
||||
->paginate(50);
|
||||
|
||||
if (count($categories) < 1) {
|
||||
flash()->error("There is no inactive category");
|
||||
return redirect('/payroll_categories/');
|
||||
} else {
|
||||
return view('payroll::payroll_categories.inactive', compact('categories'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*/
|
||||
public function activate($id) {
|
||||
$category = PayrollCategory::withTrashed()->find($id);
|
||||
|
||||
if($category->restore()){
|
||||
flash("Category has been activated.")->success();
|
||||
return redirect('/payroll_categories/inactive');
|
||||
} else {
|
||||
flash('An error occurred. Please again later.');
|
||||
return redirect('/payroll_categories/');
|
||||
}
|
||||
}
|
||||
}
|
||||
+1039
File diff suppressed because it is too large
Load Diff
+68
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Payroll\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Streamline\Models\PayrollDefault;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Database\QueryException;
|
||||
|
||||
class PayrollDefaultsController extends Controller{
|
||||
|
||||
public function __construct() {
|
||||
$this->middleware('auth');
|
||||
$this->middleware('permission:nssf-rate-edit', ['only' => ['edit_nssf_rate', 'save_nssf_rate']]);
|
||||
$this->middleware('permission:tax-rate-edit', ['only' => ['edit_tax_rate', 'save_tax_rate']]);
|
||||
}
|
||||
|
||||
// edit the nssf rate
|
||||
public function edit_nssf_rate(){
|
||||
$nssf_rate = PayrollDefault::where(['id' => 1])->first();
|
||||
|
||||
return view('payroll::payroll_defaults.edit_nssf_rate', compact('nssf_rate'));
|
||||
}
|
||||
|
||||
// save the nssf rate
|
||||
public function save_nssf_rate(Request $request){
|
||||
|
||||
$nssf_rate = PayrollDefault::find(1);
|
||||
|
||||
$nssf_rate->nssf_rate = $request->nssf_rate;
|
||||
$nssf_rate->updated_by = Auth::user()->id;
|
||||
|
||||
try {
|
||||
$nssf_rate->save();
|
||||
flash("Social security rate has been edited successfully.")->success();
|
||||
return redirect('/payroll_defaults/edit_nssf_rate');
|
||||
} catch (QueryException $e) {
|
||||
flash('An error occurred. Please try again later')->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function edit_tax_rate() {
|
||||
$tax_rate_record = PayrollDefault::where(['id' => 1])->first();
|
||||
|
||||
return view('payroll::payroll_defaults.edit_tax_rate', compact('tax_rate_record'));
|
||||
}
|
||||
|
||||
public function save_tax_rate(Request $request) {
|
||||
$tax_rate_record = PayrollDefault::find(1);
|
||||
|
||||
$tax_rate_record->tax_from = json_encode($request->from);
|
||||
$tax_rate_record->tax_to = json_encode($request->to);
|
||||
$tax_rate_record->tax_rate = json_encode($request->tax_rate);
|
||||
$tax_rate_record->updated_by = Auth::user()->id;
|
||||
|
||||
try {
|
||||
$tax_rate_record->save();
|
||||
flash("Tax rate has been edited successfully.")->success();
|
||||
return redirect('/payroll_defaults/edit_tax_rate');
|
||||
} catch (QueryException $e) {
|
||||
flash('An error occurred. Please try again later')->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
}
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Payroll\Http\Controllers;
|
||||
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\PayrollSalaryScale;
|
||||
|
||||
class PayrollSalaryScaleController extends Controller {
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index() {
|
||||
$scales = PayrollSalaryScale::orderBy('name', 'asc')
|
||||
->paginate(50);
|
||||
|
||||
return view('payroll::payroll_salary_scales.index', compact('scales'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create() {
|
||||
return view('payroll::payroll_salary_scales.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request) {
|
||||
//validation passed
|
||||
$scale = new PayrollSalaryScale;
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
|
||||
$scale->name = $request->name;
|
||||
$scale->created_by = $logged_in_user_id;
|
||||
$scale->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$scale->save();
|
||||
|
||||
flash("Salary Scale has been saved")->success();
|
||||
return redirect("/payroll_salary_scales/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show($id) {
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit($id) {
|
||||
$scale = PayrollSalaryScale::where(['id' => $id])->first();
|
||||
|
||||
if (!$scale) {
|
||||
flash()->error("Salary Scale not found");
|
||||
return redirect('/payroll_salary_scales/');
|
||||
} else {
|
||||
return view('payroll::payroll_salary_scales.edit', compact('scale'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, $id) {
|
||||
request()->validate([
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
//validation passed
|
||||
$scale = PayrollSalaryScale::find($id);
|
||||
$scale->name = $request->name;
|
||||
|
||||
try {
|
||||
$scale->save();
|
||||
flash("Salary Scale has been updated")->success();
|
||||
return redirect("/payroll_salary_scales/");
|
||||
} catch (QueryException $e) {
|
||||
flash("An error occurred. Please try again later")->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy($id) {
|
||||
$scale = PayrollSalaryScale::find($id);
|
||||
|
||||
if ($scale->delete()) {
|
||||
flash("Salary Scale has been deleted.")->success();
|
||||
} else {
|
||||
flash('An error occurred. Please again later.');
|
||||
}
|
||||
|
||||
return redirect('/payroll_salary_scales/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the inactive resource(s).
|
||||
*/
|
||||
public function inactive() {
|
||||
$scales = PayrollSalaryScale::onlyTrashed()
|
||||
->orderBy('name')
|
||||
->paginate(50);
|
||||
|
||||
if (count($scales) < 1) {
|
||||
flash()->error("There is no inactive salary scale");
|
||||
return redirect('/payroll_salary_scales/');
|
||||
} else {
|
||||
return view('payroll::payroll_salary_scales.inactive', compact('scales'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the specified resource in storage.
|
||||
*/
|
||||
public function activate($id) {
|
||||
$scale = PayrollSalaryScale::withTrashed()->find($id);
|
||||
|
||||
if($scale->restore()){
|
||||
flash("Salary Scale has been activated.")->success();
|
||||
return redirect('/payroll_salary_scales/inactive');
|
||||
} else {
|
||||
flash('An error occurred. Please again later.');
|
||||
return redirect('/payroll_salary_scales/');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Payroll\Http\Controllers;
|
||||
|
||||
use Barryvdh\Snappy\Facades\SnappyPdf;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Streamline\Models\ChartOfAccount;
|
||||
use Streamline\Models\PayrollAllowancesOrDeduction;
|
||||
use Streamline\Models\PayrollCategory;
|
||||
use Streamline\Models\PayrollSchedule;
|
||||
|
||||
class PayrollScheduleController extends Controller {
|
||||
public function index() {
|
||||
$schedules = PayrollSchedule::get();
|
||||
|
||||
return view('payroll::payroll_schedule.index', compact('schedules'));
|
||||
}
|
||||
|
||||
public function create(Request $request) {
|
||||
$employees = [];
|
||||
|
||||
if (isset($request->payroll_category)) {
|
||||
if ($request->payroll_category == 0) {
|
||||
$employees = DB::table('payrolls')
|
||||
->join('patients', 'payrolls.patient_id', '=', 'patients.id')
|
||||
->get(['payrolls.*', 'patients.first_name', 'patients.last_name', 'patients.number']);
|
||||
} else {
|
||||
$employees = DB::table('payrolls')
|
||||
->join('patients', 'payrolls.patient_id', '=', 'patients.id')
|
||||
->where('payroll_category', $request->payroll_category)
|
||||
->get(['payrolls.*', 'patients.first_name', 'patients.last_name', 'patients.number']);
|
||||
}
|
||||
}
|
||||
|
||||
$months = array(
|
||||
'-select-', 'January' => 'January', 'February' => 'February', 'March' => 'March',
|
||||
'April' => 'April', 'May' => 'May', 'June' => 'June', 'July' => 'July',
|
||||
'August' => 'August', 'September' => 'September', 'October' => 'October',
|
||||
'November' => 'November', 'December' => 'December'
|
||||
);
|
||||
|
||||
$years = ['' => '-select-'];
|
||||
|
||||
$end_year = date('Y');
|
||||
$start_year = $end_year - 10;
|
||||
|
||||
// create array with all the years in between
|
||||
$years_range = range($end_year, $start_year);
|
||||
|
||||
// add to years array to be returned to view
|
||||
foreach ($years_range as $year) {
|
||||
$years[$year] = $year;
|
||||
}
|
||||
|
||||
$payroll_categories = PayrollCategory::pluck('name', 'id')->toArray();
|
||||
$payroll_categories = [0 => 'All Categories'] + $payroll_categories;
|
||||
|
||||
$expense_accounts = ChartOfAccount::where('type', 2)->pluck('name', 'id')->toArray();
|
||||
$expense_accounts = ['' => '- select -'] + $expense_accounts;
|
||||
|
||||
$payable_accounts = ChartOfAccount::whereIn('type', [6, 9])->pluck('name', 'id')->toArray();
|
||||
$payable_accounts = ['' => '- select -'] + $payable_accounts;
|
||||
|
||||
return view('payroll::payroll_schedule.create', compact('employees', 'years', 'months', 'payroll_categories', 'expense_accounts', 'payable_accounts'));
|
||||
}
|
||||
|
||||
public function save_schedule(Request $request) {
|
||||
request()->validate([
|
||||
'name' => 'required',
|
||||
'pay_year' => 'required',
|
||||
'pay_month' => 'required',
|
||||
'due_date' => 'required',
|
||||
'employee_id' => 'required'
|
||||
]);
|
||||
|
||||
$logged_in_user_id = Auth::user()->id;
|
||||
|
||||
$basic_pay_arr = $request->basic_pay;
|
||||
$allowance_arr = $request->allowance;
|
||||
$gross_pay_arr = $request->gross_pay;
|
||||
$tax_arr = $request->tax;
|
||||
$social_security_arr = $request->social_security;
|
||||
$deductions_arr = $request->deductions;
|
||||
$total_deductions_arr = $request->total_deductions;
|
||||
$net_pay_arr = $request->net_pay;
|
||||
$employee_id_arr = $request->employee_id;
|
||||
$payroll_category_arr = $request->payroll_category;
|
||||
$allow_deduct_ids_arr = array_merge($request->allowances_arr, $request->deductions_arr);
|
||||
|
||||
foreach ($allow_deduct_ids_arr as $records) {
|
||||
if ($records) {
|
||||
$exploded_records = explode(",", $records);
|
||||
foreach ($exploded_records as $record) {
|
||||
$allow_deduct = DB::table('payroll_allowances_or_deductions')->where('id', $record)->first();
|
||||
|
||||
$are_dates_past = !$allow_deduct->recurring_final_date || Carbon::today()->isAfter(Carbon::createFromFormat('Y-m-d', $allow_deduct->recurring_final_date));
|
||||
|
||||
if ($allow_deduct && ($allow_deduct->recurring == 0 || $are_dates_past)) {
|
||||
DB::table('payroll_allowances_or_deductions')->where('id', $record)->update(['billed' => 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$schedule = new PayrollSchedule();
|
||||
|
||||
$schedule->name = $request->name;
|
||||
$schedule->pay_year = $request->pay_year;
|
||||
$schedule->pay_month = $request->pay_month;
|
||||
$schedule->salaries_expense_account = $request->salaries_expense_account;
|
||||
$schedule->salaries_payable_account = $request->salaries_payable_account;
|
||||
$schedule->tax_expense_account = $request->tax_expense_account;
|
||||
$schedule->tax_payable_account = $request->tax_payable_account;
|
||||
$schedule->due_date = Carbon::createFromFormat('d/m/Y', $request->due_date)->toDateString();
|
||||
$schedule->social_security_expense_account = $request->social_security_expense_account;
|
||||
$schedule->social_security_payable_account = $request->social_security_payable_account;
|
||||
$schedule->memo = $request->memo;
|
||||
$schedule->employee_id = implode(',', $employee_id_arr);
|
||||
$schedule->payroll_category = implode(',', $payroll_category_arr);
|
||||
$schedule->basic_pay = implode(',', $basic_pay_arr);
|
||||
$schedule->allowances = implode(',', $allowance_arr);
|
||||
$schedule->gross_pay = implode(',', $gross_pay_arr);
|
||||
$schedule->tax_amount = implode(',', $tax_arr);
|
||||
$schedule->social_security_amount = implode(',', $social_security_arr);
|
||||
$schedule->deductions = implode(',', $deductions_arr);
|
||||
$schedule->total_deductions = implode(',', $total_deductions_arr);
|
||||
$schedule->net_pay = implode(',', $net_pay_arr);
|
||||
$schedule->created_by = $logged_in_user_id;
|
||||
$schedule->updated_by = $logged_in_user_id;
|
||||
|
||||
try {
|
||||
$schedule->save();
|
||||
flash("Payroll Schedule has been saved")->success();
|
||||
return redirect("/payroll_schedules/index");
|
||||
} catch (QueryException $e) {
|
||||
flash('An error occurred. Please try again later')->error();
|
||||
return back()->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
public function get_allowance_deductions_details(Request $request) {
|
||||
$items = explode(',', $request->ids);
|
||||
$records = PayrollAllowancesOrDeduction::whereIn('id', $items)->get();
|
||||
$html = '';
|
||||
|
||||
foreach ($records as $record) {
|
||||
$html .= "<tr>";
|
||||
|
||||
if($record->type == 0) {
|
||||
$html .= '<td>' . __('payroll.allowance') . '</td>';
|
||||
} else {
|
||||
$html .= '<td>' . __('payroll.deduction') . '</td>';
|
||||
}
|
||||
|
||||
$html .= '<td>' . ugandan_shillings($record->amount) . '</td>';
|
||||
$html .= '<td>' . ($record->recurring == 0 ? 'No' : 'Yes') . '</td>';
|
||||
$html .= '<td>' . ($record->recurring_final_date ? streamline_date($record->recurring_final_date) : 'N/A') . '</td>';
|
||||
$html .= '<td>' . $record->reason . '</td>';
|
||||
$html .= '<td>' . get_full_name($record->created_by, 'id', 'first_name', 'last_name', 'users') . '</td>';
|
||||
$html .= '<td>' . streamline_date_time($record->created_at) . '</td>';
|
||||
|
||||
$html .= "</tr>";
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
public function details($id) {
|
||||
$schedule = PayrollSchedule::find($id);
|
||||
|
||||
$payroll_categories = PayrollCategory::pluck('name', 'id')->toArray();
|
||||
$expense_accounts = ChartOfAccount::where('type', 2)->pluck('name', 'id')->toArray();
|
||||
$payable_accounts = ChartOfAccount::whereIn('type', [6, 9])->pluck('name', 'id')->toArray();
|
||||
|
||||
return view('payroll::payroll_schedule.details', compact('schedule', 'payroll_categories', 'payable_accounts', 'expense_accounts'));
|
||||
}
|
||||
|
||||
public function print_details($id) {
|
||||
$schedule = PayrollSchedule::find($id);
|
||||
|
||||
$payroll_categories = PayrollCategory::pluck('name', 'id')->toArray();
|
||||
$expense_accounts = ChartOfAccount::where('type', 2)->pluck('name', 'id')->toArray();
|
||||
$payable_accounts = ChartOfAccount::whereIn('type', [6, 9])->pluck('name', 'id')->toArray();
|
||||
|
||||
$data = [
|
||||
'schedule' => $schedule,
|
||||
'payroll_categories' => $payroll_categories,
|
||||
'expense_accounts' => $expense_accounts,
|
||||
'payable_accounts' => $payable_accounts,
|
||||
];
|
||||
|
||||
$pdf = SnappyPDF::loadView("payroll_schedule.print_details", $data)
|
||||
->setOrientation('portrait')
|
||||
->setPaper('a4')
|
||||
->setOption('margin-bottom', 5)
|
||||
->setOption('margin-top', 5)
|
||||
->setOption('footer-html', '<i>Printed On ' . date('d-M-Y h:ia') . '</i>');
|
||||
|
||||
return $pdf->inline('Payroll Schedule Details.pdf');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user