Files
FE_CPONE/test/vuex/one-fo-cashier-cpone-v3/modules/paymentnew.js
2026-04-27 10:13:31 +07:00

605 lines
22 KiB
JavaScript

import * as api from "../api/payment.js"
export default {
namespaced: true,
state: {
lookup_status: 0,
lookup_error_message: '',
types: [],
total_payment: 0,
total_last_payment: 0,
reload_after_save: false,
dialog_pay_success: false,
paynumber: '',
notes: [],
dialog_delete: false,
msg_delete: '',
note_delete: '',
nota_delete: {},
open_print_note: false,
idx: 0,
last_payments: [],
payment_total: 0,
banks: [],
disable_btn_pay: 'Y',
accounts: [],
save_process: false,
open_dialog_info: false,
msg_info: '',
languages: [],
selected_language: {},
data_station_location: [],
setting_controll: false,
urlprintnote: false,
dialog_gagal: false,
msg_success: "",
dialog_success: false,
alert_success: false,
url_bukti_wa:"",
msg_gagal:"",
success_sent_wa: false,
menu_walk_in: '',
},
mutations: {
update_menu_walk_in(state, val) {
state.menu_walk_in = val
},
update_url_bukti_wa(state, val) {
state.url_bukti_wa = val;
},
update_msg_success(state, val) {
state.msg_success = val;
},
update_dialog_success(state, val) {
state.dialog_success = val;
},
update_msg_gagal(state, val) {
state.msg_gagal = val;
},
update_dialog_gagal(state, val) {
state.dialog_gagal = val;
},
update_alert_success(state, val) {
state.alert_success = val
},
update_msg_success(state, val) {
state.msg_success = val
},
update_urlprintnote(state, value) {
state.urlprintnote = value
},
update_setting_controll(state, value) {
state.setting_controll = value
},
update_data_station_location(state, value) {
state.data_station_location = value
},
update_languages(state, val) {
state.languages = val
},
update_selected_language(state, val) {
state.selected_language = val
},
update_open_dialog_info(state, val) {
state.open_dialog_info = val
},
update_msg_info(state, val) {
state.msg_info = val
},
update_save_process(state, val) {
state.save_process = val
},
update_total_last_payment(state, val) {
state.total_last_payment
},
update_accounts(state, val) {
state.accounts = val
},
update_disable_btn_pay(state, val) {
state.disable_btn_pay = val
},
update_banks(state, val) {
state.banks = val
},
update_lookup_error_message(state, val) {
state.lookup_error_message = val
},
update_lookup_status(state, status) {
state.lookup_status = status
},
update_types(state, data) {
state.types = data.records
state.total_type = data.total
},
update_selected_status(state, val) {
state.selected_status = val
},
update_total_payment(state, val) {
state.total_payment = val
},
update_reload_after_save(state, val) {
state.reload_after_save = val
},
update_dialog_pay_success(state, val) {
state.dialog_pay_success = val
},
update_paynumber(state, val) {
state.paynumber = val
},
update_notes(state, val) {
state.notes = val
},
update_dialog_delete(state, val) {
state.dialog_delete = val
},
update_note_delete(state, val) {
state.note_delete = val
},
update_msg_delete(state, val) {
state.msg_delete = val
},
update_nota_delete(state, val) {
state.nota_delete = val
},
update_open_print_note(state, val) {
state.open_print_note = val
},
update_idx(state, val) {
state.idx = val
},
update_last_payments(state, val) {
state.last_payments = val
},
},
actions: {
async kirimBuktiViaWA(context) {
try {
var prm = {
urlX: context.state.url_bukti_wa,
T_OrderHeaderID: context.rootState.patient.selected_patient.T_OrderHeaderID,
M_PatientHp: context.rootState.patient.selected_patient.M_PatientHp,
M_PatientID: context.rootState.patient.selected_patient.M_PatientID,
T_OrderHeaderLabNumber: context.rootState.patient.selected_patient.T_OrderHeaderLabNumber,
token: one_token()
}
let resp = await api.kirimBuktiViaWA(prm)
console.log("resp update ", resp)
if (resp.status != "OK") {
context.commit("update_msg_gagal", resp.message)
context.commit("update_dialog_gagal", true);
} else {
context.commit("update_dialog_gagal", false);
context.commit("update_msg_gagal", "")
context.commit("update_dialog_success", true);
var msg = "Sukses Proses Insert Data";
context.commit("update_msg_success", msg);
// TODO: Need better handling, agar tidak ganti selectedPatient
// Update List Patient dengan Search supaya Button jadi disabled
const patientState = context.rootState.patient;
const searchParams = {
startdate: patientState.start_date,
enddate: patientState.end_date,
search: patientState.search,
status: patientState.selected_status.value,
current_page: patientState.current_page,
lastidx: 0
};
context.dispatch('patient/search', searchParams, { root: true });
}
} catch (e) {
context.commit("update_msg_gagal", e.message)
context.commit("update_dialog_gagal", true);
}
},
async save_control(context, prm) {
// context.commit("update_search_status",1)
try {
prm.token = one_token()
let resp = await api.save_control(prm)
console.log(resp)
if (resp.status != "OK") {
// context.commit("update_search_status",3)
// context.commit("update_search_error_message",resp.message)
alert(resp.message)
} else {
// context.commit("update_search_status",2)
// context.commit("update_search_error_message","")
context.commit("update_setting_controll", false)
//context.dispatch('print_control', {order_id:context.rootState.patient.selected_patient.T_OrderHeaderID,time_start:context.rootState.order.show_time})
let idx = context.rootState.patient.selected_patient.T_OrderHeaderID
let user = one_user()
var tmx = Number(new Date());
let urlprintnote = "/birt/run?__report=report/one/lab/rpt_fo_001.rptdesign&__format=pdf&username=" + user.M_StaffName + "&PID=" + idx + "?t=" + tmx
context.commit("update_urlprintnote", urlprintnote)
context.commit("update_open_print_note", true)
}
} catch (e) {
// context.commit("update_search_status",3)
console.log('gagal')
alert(e.message)
}
},
async getLocations(context) {
// context.commit("update_search_status",1)
try {
var prm = {}
prm.order_id = context.rootState.patient.selected_patient.T_OrderHeaderID
prm.token = one_token()
let resp = await api.getLocations(prm)
console.log(resp)
if (resp.status != "OK") {
// context.commit("update_search_status",3)
// context.commit("update_search_error_message",resp.message)
alert(resp.message)
} else {
// context.commit("update_search_status",2)
// context.commit("update_search_error_message","")
let sl = resp.data.datas
context.commit("update_data_station_location", sl)
context.commit("update_setting_controll", true)
}
} catch (e) {
// context.commit("update_search_status",3)
console.log('gagal')
alert(e.message)
}
},
async getlanguages(context) {
context.commit("update_lookup_status", 1)
try {
let resp = await api.getlanguages(one_token())
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
/*let data = {
records : resp.data.records,
total: resp.data.total
}*/
context.commit("update_languages", resp.data)
context.commit("update_selected_language", {})
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
},
async lookup_type(context, prm) {
context.commit("update_lookup_status", 1)
try {
let resp = await api.lookup_type(one_token())
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
let data = {
records: resp.data.records,
total: resp.data.total
}
context.commit("update_types", data)
let types = context.state.types
types.forEach(t => {
if (t.code === 'VOUCHER') {
t.voucher_locked = false
t.voucher_valid = false
t.voucher_amount = 0
t.voucher_status = ''
t.voucher_message = ''
t.voucher_code = ''
}
})
context.commit("update_types", { records: types, total: types.length })
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
},
async validateVoucher(context, prm) {
try {
const idxType = prm.idxType
const voucherNumberRaw = (prm.voucherNumber || "").trim()
const types = (context.state.types || []).map(x => ({ ...x }))
const t = types[idxType]
if (!t || t.code !== "VOUCHER") {
context.commit("update_types", { records: types, total: types.length })
return
}
const setState = (code, msg, amount) => {
t.voucher_code = code
if (code === "Y") {
t.voucher_locked = true
t.voucher_valid = true
t.voucher_amount = amount
t.leftvalue = amount
t.voucher_status = "success"
t.voucher_message = msg || "Voucher bisa digunakan"
return
}
t.voucher_locked = false
t.voucher_valid = false
t.voucher_amount = 0
t.leftvalue = 0
t.voucher_status = "error"
t.voucher_message =
msg ||
(code === "X"
? "Tidak bisa menggunakan Voucher lagi"
: "Voucher tidak bisa digunakan")
}
if (!voucherNumberRaw) {
setState("N", "Kode voucher kosong", 0)
context.commit("update_types", { records: types, total: types.length })
return
}
const orderid = (context.rootState.patient.selected_patient && context.rootState.patient.selected_patient.T_OrderHeaderID)
? context.rootState.patient.selected_patient.T_OrderHeaderID
: 0
const resp = await api.validateVoucher({
token: one_token(),
voucherNumber: voucherNumberRaw,
orderid: orderid
})
if (!resp || resp.status !== "OK") {
setState("N", (resp && resp.message) ? resp.message : "Voucher tidak bisa digunakan", 0)
context.commit("update_types", { records: types, total: types.length })
return
}
const code = (resp.data && resp.data.code) ? resp.data.code : "N"
const msg = (resp.data && resp.data.message) ? resp.data.message : ""
const amount = parseInt(resp.data && resp.data.amount) || 0
setState(code, msg, amount)
context.commit("update_types", { records: types, total: types.length })
if (code !== "Y") return
let totalNonCash = 0
types.forEach(x => {
if (x.chex && x.code !== 'CASH') {
totalNonCash += parseInt(x.leftvalue) || 0
}
})
let bill = 0
if (context.rootState.patient.selected_patient && context.rootState.patient.selected_patient.unpaid) {
bill = parseInt(context.rootState.patient.selected_patient.unpaid) || 0
}
let remaining = bill - totalNonCash
if (remaining < 0) remaining = 0
let selectedNonVoucherIdx = []
types.forEach((x, i) => {
if (x.chex && x.code !== 'VOUCHER') selectedNonVoucherIdx.push(i)
})
if (selectedNonVoucherIdx.length > 0) {
let idxCashChecked = types.findIndex(x => x.code === 'CASH' && x.chex)
if (idxCashChecked !== -1) {
if (remaining === 0) {
types[idxCashChecked].chex = false
types[idxCashChecked].leftvalue = 0
types[idxCashChecked].rightvalue = 0
} else {
types[idxCashChecked].leftvalue = remaining
types[idxCashChecked].rightvalue = 0
}
} else {
let totalNonVoucher = 0
types.forEach(x => {
if (x.chex && x.code !== 'VOUCHER') {
totalNonVoucher += parseInt(x.leftvalue) || 0
}
})
let diff = totalNonVoucher - remaining
if (diff !== 0) {
let lastIdx = selectedNonVoucherIdx[selectedNonVoucherIdx.length - 1]
let cur = parseInt(types[lastIdx].leftvalue) || 0
let next = cur - diff
if (next < 0) next = 0
types[lastIdx].leftvalue = next
}
}
}
let idxCash = types.findIndex(x => x.code === 'CASH')
if (idxCash !== -1 && types[idxCash].chex) {
if (remaining === 0) {
types[idxCash].chex = false
types[idxCash].leftvalue = 0
types[idxCash].rightvalue = 0
} else {
types[idxCash].leftvalue = remaining
types[idxCash].rightvalue = 0
}
}
context.commit("update_types", { records: types, total: types.length })
} catch (e) {
const idxType = prm.idxType
const types = (context.state.types || []).map(x => ({ ...x }))
const t = types[idxType]
if (t && t.code === "VOUCHER") {
t.voucher_code = "N"
t.voucher_status = "error"
t.voucher_message = (e && e.message) ? e.message : "Voucher tidak bisa digunakan"
t.voucher_locked = false
t.voucher_valid = false
t.voucher_amount = 0
t.leftvalue = 0
}
context.commit("update_types", { records: types, total: types.length })
}
},
async lookup_banks(context) {
context.commit("update_lookup_status", 1)
try {
let resp = await api.lookup_banks(one_token())
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
let data = {
records: resp.data.records,
total: resp.data.total
}
context.commit("update_banks", data.records)
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
},
async lookup_accounts(context) {
context.commit("update_lookup_status", 1)
try {
let resp = await api.lookup_accounts(one_token())
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
let data = {
records: resp.data.records,
total: resp.data.total
}
context.commit("update_accounts", data.records)
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
},
async searchcard(context, prm) {
context.commit("update_lookup_status", 1)
try {
let resp = await api.searchcard(one_token(), prm)
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
} else {
context.commit("update_lookup_status", 2)
let data = {
records: resp.data.records,
total: resp.data.total
}
context.commit("update_cards", resp.data.records)
}
} catch (e) {
context.commit("update_lookup_status", 3)
}
},
async pay(context, prm) {
context.commit("update_lookup_status", 1)
console.log(prm)
try {
prm.token = one_token()
let resp = await api.pay(prm)
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
let data = {
records: resp.data.records.types,
total: resp.data.total
}
context.commit("update_save_process", false)
var xpayments = resp.data.records.payments
console.log(xpayments)
context.commit("update_last_payments", xpayments)
//console.log(prm.payments)
let xnumber = resp.data.records.data.numberx
let id = resp.data.records.data.idx
var xobj = context.state.types
//console.log(xobj)
xobj.forEach(function (obj) {
obj.chex = false
obj.leftvalue = 0
obj.rightvalue = (obj.code === 'VOUCHER') ? "" : 0
obj.selected_card = { id: 0, name: '' }
obj.selected_edc = { id: 0, name: '' }
obj.selected_account = { id: 0, name: '' }
})
var xray = { records: xobj, total: xobj.length }
context.commit("update_types", xray)
context.commit("update_disable_btn_pay", 'Y')
console.log(context.state.types)
context.commit("update_idx", id)
context.commit("update_total_payment", 0)
context.commit("update_paynumber", "Pembayaran nomor <span style='color:red'>" + xnumber + "</span> telah berhasil")
context.commit("update_dialog_pay_success", true)
context.commit("update_menu_walk_in", resp.data.menu_walk_in)
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
},
async delete_note(context, prm) {
context.commit("update_lookup_status", 1)
try {
prm.token = one_token()
let resp = await api.delete_note(prm)
if (resp.status != "OK") {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", resp.message)
} else {
context.commit("update_lookup_status", 2)
context.commit("update_lookup_error_message", "")
let xmsg = "Nota nomor <span style='color:red'>" + prm.nota.note_number + "</span> telah dihapus"
context.commit("update_msg_delete", xmsg)
context.commit("update_note_delete", '')
context.commit("update_nota_delete", {})
}
} catch (e) {
context.commit("update_lookup_status", 3)
context.commit("update_lookup_error_message", e.message)
}
}
}
}