Files
2024-04-19 14:04:41 +07:00

552 lines
18 KiB
PHP

<?php
array_push($form_plugin['ui_plugins_js'],$floatthead_js);
array_push($form_plugin['ui_plugins_js'],$sweetalert_js);
$m_cara_bayar = $db->query('SELECT * FROM m_cara_bayar');
$arr_cara_bayar = array();
foreach($m_cara_bayar->fetchAll() as $ds){
$arr_cara_bayar[$ds['id_cara_bayar']] = $ds['nama_cara_bayar'];
}
$m_penjamin = $db->query('SELECT * FROM m_penjamin where aktif = 1::bit order by id_penjamin');
$arr_penjamin = array();
foreach($m_penjamin->fetchAll() as $ds){
$arr_penjamin[$ds['id_penjamin']] = trim($ds['nama_penjamin']);
}
?>
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">Alokasi Billing</div>
<div class="card-body">
<form id="frm_report">
<input type="hidden" name="idxdaftar" id="frm_idxdaftar" value>
<input type="hidden" name="nomr" id="frm_nomr" value>
<input type="hidden" name="idxb" id="frm_idxb" value>
<input type="hidden" name="idx_nonreg" id="frm_idxnonreg" value>
<input type="hidden" name="no_nonreg" id="frm_nononreg" value>
<input type="hidden" name="aps" id="frm_aps" value>
<div class="form-group row">
<label class="col-sm-2">System</label>
<div class="col-sm-10">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sistem" id="rdRajal" value="rajal" checked="true">
<label class="form-check-label" for="rdRajal">Rawat Jalan</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sistem" id="rdRanap" value="ranap">
<label class="form-check-label" for="rdRanap">Rawat Inap</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sistem" id="rdNonreg" value="nonreg">
<label class="form-check-label" for="rdNonreg">Non Register</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="sistem" id="rdNonPasien" value="nonpasien">
<label class="form-check-label" for="rdNonPasien">Non Pasien</label>
</div>
</div>
</div>
<div class="form-group row" id="isiNobill">
<label class="col-sm-2">Nobill</label>
<div class="col-sm-2">
<div class="input-group">
<input type="number" name="nobill" id="nobill" class="mask-decimal form-control form-control-sm">
<div class="input-group-append">
<span class="input-group-addon alert alert-info p-2" id="info_nobill"><i class="fa fa-info"></i></span>
<span class="input-group-addon alert alert-success p-2 d-none" id="info_nobill_ok"><i class="fa fa-check"></i></span>
<span class="input-group-addon alert alert-danger p-2 d-none" id="info_nobill_salah"><i class="fa fa-times"></i></span>
</div>
</div>
</div>
<div class="col-sm-2">
<button class="btn btn-block btn-sm btn-primary" type="button" onclick="cari()" id="btn_cari_bill"><i class="fa fa-search"></i> Cari</button>
</div>
</div>
</form>
<hr>
<form id="identitas">
<h4 class="text-center mb-3">IDENTITAS PASIEN</h4>
<div class="row text-left">
<div class="col-sm-2">
<div class="form-group">
<label>No RM</label>
<input type="text" id="nomr" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>Nama Pasien</label>
<input type="text" id="nama_pasien" class="form-control form-control-sm" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Alamat</label>
<input type="text" id="alamat_pasien" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>Tanggal Lahir</label>
<input type="text" id="tgl_lahir" class="form-control form-control-sm" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Umur</label>
<input type="text" id="umur" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>Jenis Kelamin</label>
<input type="text" id="jenis_kelamin" class="form-control form-control-sm" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Jenis Pembayaran</label>
<input type="text" id="jenis_bayar" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>Ruang / No TT</label>
<input type="text" id="tempat_layanan" class="form-control form-control-sm" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Tanggal MRS</label>
<input type="text" id="tgl_mrs" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>No. Billing</label>
<input type="text" id="nobilling" class="form-control form-control-sm" style="font-weight:bold;font-size:16px" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Tanggal <span id="trig_ako">KRS</span></label>
<input type="text" id="tgl_krs" class="form-control form-control-sm" value="" disabled>
</div>
<div class="form-group">
<label>Jumlah Hari Rawat</label>
<input type="text" id="jml_hari_rawat" class="form-control form-control-sm" value="" disabled>
</div>
</div>
</div>
</form>
<hr>
<h4 class="text-center mb-3"></h4>
<div class="row text-right">
<div class="col-sm-2 offset-sm-6">
<div class="form-group">
<label>TOTAL BIAYA</label>
<input type="text" id="total_biaya" class="form-control form-control-sm text-right" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>TOTAL BAYAR</label>
<input type="text" id="total_bayar" class="form-control form-control-sm text-right" value="" disabled>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>SISA </label>
<input type="text" id="sisa" class="form-control form-control-sm text-right" value="" disabled>
</div>
</div>
</div>
</div>
<div class="card-footer text-right">
<button class="btn btn-sm btn-warning" type="button" onclick="reset_alokasi()" id="btn_reset_alokasi"><i class="fa fa-exclamation-circle"></i> Reset</button>
<button class="btn btn-sm btn-primary" type="button" id="btn_tambah_alokasi"><i class="fa fa-plus"></i> Alokasi</button>
<button class="btn btn-sm btn-success" type="button" onclick="simpan_alokasi()" id="btn_simpan_alokasi" disabled><i class="fa fa-check"></i> Simpan</button>
</div>
</div>
</div>
</div>
<hr>
<div class="row">
<div class="col-sm-12">
<form id="form_alokasi">
<input type="hidden" name="sistem" id="sistem_alokasi" value>
<input type="hidden" name="idx" id="idx_alokasi" value>
<input type="hidden" name="nobill" id="nobill_alokasi" value>
<input type="hidden" name="aps" id="aps_alokasi" value>
<input type="hidden" name="nomr" id="nomr_alokasi" value>
<div class="wrapper" style="overflow:auto;height:360px">
<table class="table table-bordered table-striped table-sm" id="status_billing">
<thead>
<tr class="bg-success text-white">
<th style="width:5%">No</th>
<th style="width:10%">Cara Bayar</th>
<th style="width:10%">Penjamin</th>
<th style="width:10%">Jumlah Alokasi</th>
<th style="width:15%">Jumlah Tarif Teralokasi</th>
<th style="width:5%">Aksi</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</form>
</div>
</div>
</div>
<?php
array_push($form_plugin['ui_plugins_js'], $typing_js);
$js_init .= '
const Toast = Swal.mixin({
toast: true,
position: "top-end",
showConfirmButton: false,
timer: 3000
});
$("input[type=radio][name=sistem]").click(function(){
$("#nobill").val("").trigger("focus");
});
$("#nobill").focus();
$("#nobill").typing({
stop : function(e,elm){
validasi_billing($(elm).val());
},
delay : 200
});
$("#nobill").bind("paste",function(e) {
catchPaste(e, this, function(val) {
validasi_billing(val);
});
});
$("#nobill").on("keypress",function(e){
if(e.keyCode == 13) {
e.preventDefault();
nomr = $("#frm_nomr").val();
nomr2 = $("#frm_nononreg").val();
if(nomr != "" || nomr2 != "") {
$("#btn_cari_bill").trigger("click");
}
else {
}
}
});
function catchPaste(evt, elem, callback) {
if (navigator.clipboard && navigator.clipboard.readText) {
navigator.clipboard.readText().then(callback);
} else if (evt.originalEvent && evt.originalEvent.clipboardData) {
callback(evt.originalEvent.clipboardData.getData("text"));
} else if (evt.clipboardData) {
callback(evt.clipboardData.getData("text/plain"));
} else if (window.clipboardData) {
callback(window.clipboardData.getData("Text"));
} else {
setTimeout(function() {
callback(elem.value)
}, 100);
}
}
function validasi_billing(pre_nobill) {
nobill = (pre_nobill != "") ? pre_nobill : $("#nobill").val();
sistem = $("input[type=radio][name=sistem]:checked").val();
$("#sistem_alokasi").val(sistem);
$("#nobill_alokasi").val(nobill);
$.post("'._BASE_.'include/master.php",{cari_billing:true,nobill,sistem},function(data){
if(data.type == "success"){
$("#info_nobill").addClass("d-none");
$("#info_nobill_ok").removeClass("d-none");
$("#info_nobill_salah").addClass("d-none");
if(sistem == "rajal"){
$("#frm_idxdaftar, #idx_alokasi").val(data.pasien.idxdaftar);
$("#frm_aps, #aps_alokasi").val(data.pasien.aps);
$("#frm_nomr, #nomr_alokasi").val(data.pasien.nomr);
$("#frm_idxb,#frm_nononreg,#frm_idxnonreg").val("");
}
else if(sistem == "ranap") {
$("#frm_idxb, #idx_alokasi").val(data.pasien.idxdaftar);
$("#frm_nomr, #nomr_alokasi").val(data.pasien.nomr);
$("#frm_idxdaftar,#frm_nononreg,#frm_idxnonreg").val("");
}
else if(sistem == "nonreg" || sistem == "nonpasien") {
$("#frm_idxnonreg, #idx_alokasi").val(data.pasien.idx_nonreg);
$("#frm_nononreg, #nomr_alokasi").val(data.pasien.no_nonreg);
$("#frm_idxdaftar,#frm_idxb,#frm_nomr").val("");
}
$("#btn_cari_bill").prop("disabled",false);
}
else {
$("#info_nobill").addClass("d-none");
$("#info_nobill_ok").addClass("d-none");
$("#info_nobill_salah").removeClass("d-none");
if(sistem == "rajal"){
$("#frm_idxdaftar, #idx_alokasi").val("");
$("#frm_nomr, #nomr_alokasi").val("");
$("#frm_idxb,#frm_nononreg,#frm_idxnonreg").val("");
}
else if(sistem == "ranap") {
$("#frm_idxb, #idx_alokasi").val("");
$("#frm_nomr, #nomr_alokasi").val("");
$("#frm_idxdaftar,#frm_nononreg,#frm_idxnonreg").val("");
}
else if(sistem == "nonreg" || sistem == "nonpasien") {
$("#frm_idxnonreg, #idx_alokasi").val("");
$("#frm_nononreg, #nomr_alokasi").val("");
$("#frm_idxdaftar,#frm_idxb,#frm_nomr").val("");
}
$("#btn_cari_bill").prop("disabled",true);
}
},"json");
}
let $table = $("#status_billing");
let arr_bill = [];
let flag_idxbill = [];
let no = 1;
let total_biaya = total_bayar = sisa = 0;
let alokasi_bill = [];
let opsi_carabayar = "'.preg_replace("/\"/","\\\"",preg_replace("/\n/",'',form_dropdown('detil[xno][st_carabayar]',$arr_cara_bayar,'2','class="form-control input-sm st_carabayar" data-no="xno" onchange="generate_penjamin(this)" id="carabayar-xno" style="width:100%"'))).'";
let opsi_penjamin = "'.preg_replace("/\"/","\\\"",preg_replace("/\n/",'',form_dropdown('detil[xno][kd_penjamin]',$arr_penjamin,'','class="form-control input-sm kd_penjamin" id="penjamin-xno" style="width:100%"'))).'";
$("#btn_tambah_alokasi").on("click",function(){
tambah_alokasi(no);
});
function cari() {
$.post("'._BASE_.'include/master.php?alokasi_bill=1",$("#frm_report").serialize(),function(data)
{
$("#nomr").val(data.identitas.nomr);
$("#nama_pasien").val(data.identitas.nama);
$("#alamat_pasien").val(data.identitas.alamat);
$("#tgl_lahir").val(data.identitas.tgllahir);
$("#umur").val(data.identitas.usia);
$("#jenis_kelamin").val(data.identitas.jeniskelamin);
$("#jenis_bayar").val(data.identitas.carabayar);
$("#tempat_layanan").val(data.identitas.ruang);
$("#nobilling").val(data.identitas.nobill);
$("#tgl_mrs").val(data.identitas.masukrs);
$("#tgl_krs").val(data.identitas.keluarrs);
$("#jml_hari_rawat").val(data.identitas.jml_hari_rawat);
$("#total_biaya,#sisa").val(accounting.formatMoney(data.identitas.tottarifrs));
total_biaya = data.identitas.tottarifrs;
sisa = data.identitas.tottarifrs;
arr_bill = data.bill;
no = 1;
$("#status_billing tbody").html("");
},"json");
}
function generate_penjamin(elm) {
cek_val = $(elm).find(":selected").val();
cek_nomor = $(elm).data("no");
if(cek_val == 1)
{
console.log($("#kol_penjamin-"+cek_nomor));
$("#kol_penjamin-"+cek_nomor).html("");
$("#kol_penjamin-"+cek_nomor).html("<input type=\"hidden\" name=\"detil["+cek_nomor+"][kd_penjamin]\" value=\"\">Tunai");
}
else if (cek_val == 2) {
$("#kol_penjamin-"+cek_nomor).html(opsi_penjamin.replaceAll("xno",cek_nomor));
}
else {
Toast.fire({title:"Pilih Carabayar dahulu",type:"error"});
}
}
function tambah_alokasi(noindex, val_carabayar = null, val_penjamin = null, jumlah_bayar = null) {
let jumlah_teralokasi = 0;
let idx_bill = [];
for (var key in arr_bill)
{
let tarif = parseFloat(arr_bill[key]);
if(jumlah_bayar != null && jumlah_bayar > 0) {
let sim_alokasi = jumlah_teralokasi + tarif;
// jika jumlah akumulasi perhitungan lebih dari jumlah bayar maka total terbayar tetap
if(sim_alokasi > jumlah_bayar)
{
continue;
}
}
if(sisa - tarif >= 0) {
if($.inArray(key, flag_idxbill) === -1){ // jika tidak ditemukan key di flag
idx_bill.push({[key]:tarif});
jumlah_teralokasi += tarif;
sisa -= tarif;
flag_idxbill.push(key);
}
}
}
nox = (noindex != null) ? noindex : no;
let carabayar = opsi_carabayar.replaceAll("xno",nox);
let penjamin = opsi_penjamin.replaceAll("xno",nox);
let jumlah_alokasi = (jumlah_bayar != null && jumlah_bayar > 0) ? jumlah_bayar : jumlah_teralokasi;
$("#status_billing tbody").append("<tr id=\"row-alokasi-"+nox+"\"><td>"+nox+"</td><td>"+carabayar+"</td><td><div id=\"kol_penjamin-"+nox+"\">"+penjamin+"</div></td><td><input type=\"number\" class=\"form-control form-control-sm text-right\" value=\""+jumlah_alokasi+"\" name=\"detil["+nox+"][jumlah_alokasi]\" data-xno=\""+nox+"\" step=\"50\" max=\""+total_biaya+"\" onchange=\"alokasi_ulang(this)\"></td><td><input type=\"number\" class=\"form-control form-control-sm text-right\" value=\""+jumlah_teralokasi+"\" name=\"detil["+nox+"][jumlah_teralokasi]\" disabled></td><td><button type=\"button\" id=\"btn_delete_item-"+nox+"\" class=\"btn btn-sm btn-danger\" onclick=\"delete_alokasi("+nox+")\"><i class=\"fa fa-times\"></i> Hapus</button></td></tr>");
alokasi_bill = {[nox]:idx_bill};
total_bayar += jumlah_teralokasi;
if(sisa < 1) {
$("#btn_tambah_alokasi").prop("disabled",true);
$("#btn_simpan_alokasi").prop("disabled",false);
}
// set item value
if(val_carabayar != null)
{
$("#carabayar-"+nox).val(val_carabayar);
}
if(val_penjamin != null && val_carabayar == 2)
{
$("#penjamin-"+nox).val(val_penjamin);
}
no+=1;
}
function simpan_alokasi() {
form_alokasi = $("#form_alokasi").serialize();
if(sisa > 0)
{
Toast.fire({title:"Tidak dapat memproses, silakan alokasi ulang",type:"error"});
return;
}
$.post("'._BASE_.'include/master.php?save_alokasi_bill=1",form_alokasi+"&alokasi="+JSON.stringify(alokasi_bill),function(data){
console.log(data);
$("#btn_cari_bill").prop("disable",false);
reset_alokasi();
},"JSON")
}
function reset_alokasi() {
arr_bill = [];
flag_idxbill = [];
no = 1;
total_biaya = total_bayar = sisa = 0;
alokasi_bill = [];
$("#identitas")[0].reset();
$("#frm_report")[0].reset();
$("#total_bayar, #total_biaya, #sisa").val("");
$("#status_billing tbody").html("");
}
function delete_alokasi(xno) {
current_alokasi = 0;
// hapus flag idxbill
for(i = flag_idxbill.length - 1; i >= 0 ; i--) {
id_cek = flag_idxbill[i];
for(ii = 0; ii < alokasi_bill[xno].length; ii++) {
if(alokasi_bill[xno][ii][id_cek] != undefined)
{
current_alokasi += alokasi_bill[xno][ii][id_cek];
flag_idxbill.splice(i, 1);
}
}
}
// set total bayar dikurangi alokasi yg terhapus
total_bayar -= current_alokasi;
// hapus obj alokasi_bill
delete alokasi_bill[xno];
// hitung sisa
hitung_alokasi();
// hapus elemen alokasi
$("#row-alokasi-"+xno).remove();
// set enable tombol tambah alokasi
if(sisa > 0)
{
$("#btn_tambah_alokasi").prop("disabled",false);
$("#btn_simpan_alokasi").prop("disabled",true);
}
no--;
}
function alokasi_ulang(elm) {
let cek_val = $(elm).val();
if(cek_val > total_biaya)
{
return false;
}
// disable cari button
$("#btn_cari_bill").prop("disable",true);
xno = $(elm).data("xno");
jumlah_alokasi = $(elm).val();
// hapus alokasi
delete_alokasi(xno);
// tambah alokasi baru
let cb_carabayar = $("#carabayar-"+xno).val();
let cb_penjamin = $("#penjamin-"+xno).val();
tambah_alokasi(xno, cb_carabayar, cb_penjamin, jumlah_alokasi);
hitung_alokasi();
if(sisa > 0)
{
$("#btn_tambah_alokasi").prop("disabled",false);
$("#btn_simpan_alokasi").prop("disabled",true);
}
}
function hitung_alokasi()
{
sisa = total_biaya - total_bayar;
$("#total_bayar").val(accounting.formatMoney(total_bayar));
$("#sisa").val(accounting.formatMoney(sisa));
}
';
?>