mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 11:11:31 +00:00
updated streamline-setup v2
This commit is contained in:
+133
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Modules\PatientFinance\Services;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Streamline\Models\ChartOfAccount;
|
||||
use Streamline\Models\EyeGlasses;
|
||||
use Streamline\Models\OrderedEyeGlasses;
|
||||
use Streamline\Models\TrackReceipt;
|
||||
|
||||
class EyeGlassesDeposit {
|
||||
public function store_payment(Request $request): string
|
||||
{
|
||||
$patient_id = $request->patient_id;
|
||||
$episode_id = $request->episode_id;
|
||||
$optical_ids_array = explode(",", $request->optical_ids);
|
||||
$order_ids_array = explode(",", $request->order_ids);
|
||||
$optical_subtotals_array = $request->optical_subtotal;
|
||||
$optical_amounts_array = $request->optical_amount;
|
||||
$optical_quantity_array = $request->quantity;
|
||||
$tag_id = 19;
|
||||
|
||||
// update the track_receipt table to include created receipt
|
||||
$track_receipts = new TrackReceipt;
|
||||
$track_receipts->created_by = Auth::id();
|
||||
$track_receipts->reason = 'Eye Glasses';
|
||||
$track_receipts->save();
|
||||
$receipt_number = sprintf("%04u", $track_receipts->id);
|
||||
|
||||
// update the chart of accounts balance for each item
|
||||
for ($i = 0; $i < count($optical_ids_array); $i++) {
|
||||
$optical_account = get_name($optical_ids_array[$i], "id", "account_id", "eye_glasses");
|
||||
$account_balance = get_name($optical_account, "id", "balance", "chart_of_accounts");
|
||||
|
||||
$optical = EyeGlasses::withTrashed()->find($optical_ids_array[$i]);
|
||||
$current_stock = $optical->pharmacy_stock;
|
||||
$new_stock = $current_stock - $optical_quantity_array[$i];
|
||||
$optical->pharmacy_stock = $new_stock;
|
||||
/**** batch tracking */
|
||||
$auto_calculated_batches_used = get_lab_batches_to_use_based_on_needed_quantity($optical_ids_array[$i], 7, $optical_quantity_array[$i],'pharmacy_stock');
|
||||
foreach ($auto_calculated_batches_used as $batch_number => $batch_qty) {
|
||||
reduce_batch_item_from_pharmacy(7, $optical_ids_array[$i], $batch_number, $batch_qty, "ordered_eye_glasses", $order_ids_array[0], $patient_id);
|
||||
}
|
||||
/*** end batch tracking logic **/
|
||||
$optical->update();
|
||||
|
||||
|
||||
try {
|
||||
$new_balance = $account_balance + $optical_subtotals_array[$i];
|
||||
ChartOfAccount::where(['id' => $optical_account])->update(['balance' => $new_balance]);
|
||||
} catch (\Exception $exception) {
|
||||
// raise error and go back to warn the person
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// check if donor discounts have been applied using null and insert into table
|
||||
if ($request->donor_discount) {
|
||||
DepositHelpers::donor_discount_details($patient_id, $episode_id, $receipt_number, $request->patient_discount_amount, $request->donor_to_pay, $request->hospital_to_pay_selected_discount, $request->donor_discount, $request->donor_id, $tag_id);
|
||||
}
|
||||
|
||||
// add patient to debtors if balance is more than 0
|
||||
if ($request->balance > 0) {
|
||||
DepositHelpers::debt($patient_id, $episode_id, $request->balance, $receipt_number, $tag_id);
|
||||
}
|
||||
|
||||
// register one off discount
|
||||
if ($request->one_off_discount > 0) {
|
||||
DepositHelpers::patient_one_off_discount($patient_id, $episode_id, $request->one_off_discount, $tag_id, $request->one_off_discount_memo, $receipt_number);
|
||||
}
|
||||
|
||||
// patient category discount flag
|
||||
$discount_status = 0;
|
||||
|
||||
// check if patient has a discount amount more than zero and pay later is not available to them
|
||||
// this discount amount is represented as hospital to pay general
|
||||
if ($request->hospital_to_pay_general_discount > 0) {
|
||||
// change discount status
|
||||
$discount_status = 1;
|
||||
|
||||
// add to discounts table
|
||||
DepositHelpers::discount($request->hospital_to_pay_general_discount, $patient_id, $episode_id, $receipt_number, 'Optical Items');
|
||||
}
|
||||
|
||||
// is_invoice flag for receipt purposes. Default is 0 for no
|
||||
$is_invoice = 0;
|
||||
|
||||
// check if patient category is of type pay later to generate invoice for that category or to add to normal service payments table
|
||||
if ($request->pay_later == 1) {
|
||||
// change invoice flag to show that it is an invoice
|
||||
$is_invoice = 1;
|
||||
// create a new invoice
|
||||
DepositHelpers::patient_category_invoice(
|
||||
$request->patient_category_id, $patient_id, $episode_id,
|
||||
implode(',', $optical_subtotals_array),
|
||||
implode(',', $optical_ids_array), $receipt_number, $tag_id,
|
||||
implode(',', $optical_quantity_array),
|
||||
$request->patient_category_to_pay, date('Y-m-d'), implode(",", $order_ids_array)
|
||||
);
|
||||
|
||||
// for co-payment people with some cash
|
||||
if ($request->patient_to_pay > 0) {
|
||||
DepositHelpers::eye_glasses_payment(
|
||||
$patient_id, $episode_id,
|
||||
implode(',', $optical_ids_array),
|
||||
implode(',', $optical_quantity_array),
|
||||
implode(',', $optical_amounts_array),
|
||||
implode(',', $optical_subtotals_array),
|
||||
$discount_status, $receipt_number, $request->patient_to_pay, implode(",", $order_ids_array), $request->wallets_amount
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// create a new optics payment record
|
||||
DepositHelpers::eye_glasses_payment(
|
||||
$patient_id, $episode_id,
|
||||
implode(',', $optical_ids_array),
|
||||
implode(',', $optical_quantity_array),
|
||||
implode(',', $optical_amounts_array),
|
||||
implode(',', $optical_subtotals_array),
|
||||
$discount_status, $receipt_number, $request->patient_to_pay, implode(",", $order_ids_array), $request->wallets_amount
|
||||
);
|
||||
}
|
||||
|
||||
// update the payment status for the ordered ids to paid
|
||||
for ($i = 0; $i < count($order_ids_array); $i++) {
|
||||
OrderedEyeGlasses::where(['id' => $order_ids_array[$i]])->update(['payment_status' => 1]);
|
||||
}
|
||||
|
||||
return $is_invoice . "," . $receipt_number;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user