Files
FE_CPONE/test/vuex/cpone-sample-electromedis/components/oneSampleCallSODetail.vue
2026-04-27 10:13:31 +07:00

522 lines
20 KiB
Vue

<template>
<v-layout v-if="selected_patient.is_clinic == 'N'" class="mb-2 mt-2" column>
<v-dialog v-model="dialogrequirement" persistent max-width="45%">
<v-card>
<v-card-title color="success" class="headline">Pilih yang tidak terpenuhi</v-card-title>
<v-card-text>
<v-layout wrap>
<v-flex v-for="(req, idx) in requirements" :key="req.id" xs6>
<one-x-check :xdatalabel="req.name" :xdatacbx="req.chex"
@update-data-cbx="(val) => checkReq(val, idx)"></one-x-check>
</v-flex>
</v-layout>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" flat @click="saveRequirement">Tutup</v-btn>
<!--<v-btn color="green darken-1" flat @click="saveRequirement()">Simpan</v-btn>-->
</v-card-actions>
</v-card>
</v-dialog>
<v-dialog v-model="dialognote" width="40%">
<v-card>
<v-card-title class="headline white--text error" primary-title>
</v-card-title>
<v-card-text>
<v-layout v-if="notes.fo_note !== ''" mb-2 row>
<v-flex mb-2 xs3>
<span style="color: #0f80db" class="mono name">FO</span>
</v-flex>
<v-flex xs9>
<v-layout row>
<v-flex mb-1 xs12>
<code style="
box-shadow: none !important;
color: #0f80db !important;
background-color: #a8cfee6b !important;
">{{ notes.fo_note_user }}</code>
<div class="v-markdown">
<p style="margin-top: 2px; margin-bottom: 0">
{{ notes.fo_note }}
</p>
</div>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-layout v-if="notes.fo_ver_note !== ''" mb-2 row>
<v-flex mb-2 xs3>
<span style="color: #0f80db" class="mono name">FO Verifikasi</span>
</v-flex>
<v-flex xs9>
<v-layout row>
<v-flex mb-1 xs12>
<code style="
box-shadow: none !important;
color: #0f80db !important;
background-color: #a8cfee6b !important;
">{{ notes.fo_ver_note_user }}</code>
<div class="v-markdown">
<p style="margin-top: 2px; margin-bottom: 0">
{{ notes.fo_ver_note }}
</p>
</div>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-layout v-if="notes.sampling_note !== ''" mb-2 row>
<v-flex mb-2 xs3>
<span style="color: #0f80db" class="mono name">Sampling</span>
</v-flex>
<v-flex xs9>
<v-layout row>
<v-flex mb-1 xs12>
<code style="
box-shadow: none !important;
color: #0f80db !important;
background-color: #a8cfee6b !important;
">{{ notes.sampling_note_user }}</code>
<div class="v-markdown">
<p style="margin-top: 2px; margin-bottom: 0">
{{ notes.sampling_note }}
</p>
</div>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-layout v-if="xnoterequirement.length > 0" mb-2 row>
<v-flex mb-2 xs3>
<span style="color: #c0341d" class="mono name">Requirement </span>
</v-flex>
<v-flex xs9>
<v-layout v-for="notereq in xnoterequirement" row>
<v-flex mb-1 xs12>
<code style="
box-shadow: none !important;
color: #c0341d !important;
background-color: #fbe5e1 !important;
">{{ notereq.position }}</code>
<div class="v-markdown">
<p style="margin-top: 2px; margin-bottom: 0">
{{ notereq.requirements }}
</p>
</div>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="grey" dark flat text @click="dialognote = false">
Tutup
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-dialog v-model="dialogformnote" width="40%">
<v-card>
<v-card-title class="headline white--text primary" primary-title>
</v-card-title>
<v-card-text>
<v-layout mb-2 row>
<v-flex xs12>
<v-textarea outline label="Catatan" v-model="selected_patient.sampling_note"></v-textarea>
</v-flex>
</v-layout>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="grey" dark flat text @click="searchPatientLastSelect">
Tutup
</v-btn>
<v-btn color="primary" dark flat text @click="saveNoteSampling()">
Simpan
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-card v-if="xsampletypes.length > 0">
<v-layout row>
<v-flex xs12>
<v-subheader style="background: #03a9f4; padding: 5px">
<v-icon dark large left>assignment_ind</v-icon>
<h3 style="font-size: x-large" dark class="font-weight-bold white--text">
{{ staff.name.toUpperCase() }}
</h3>
<v-flex text-md-right>
<v-btn v-if="selected_patient.fo_note !== '' ||
selected_patient.fo_requirements_status !== 'Y'
" @click="openDialogFoNoteRequirement()" style="min-width: 20px; margin-left: 1px; margin-right: 1px"
deppressed small color="error"><v-icon small>info</v-icon></v-btn>
<!--<v-btn @click="openDialogFormNote()" style="min-width: 20px; margin-left: 1px; margin-right: 1px" deppressed
small color="warning"><v-icon small>speaker_notes</v-icon></v-btn>-->
</v-flex>
</v-subheader>
<v-divider></v-divider>
<v-layout align-center pa-2 class="grey lighten-2" row>
<v-flex xs3> TINDAKAN </v-flex>
<v-flex xs6> PEMERIKSAAN </v-flex>
<!--<v-flex xs3> REQUIREMENT </v-flex>-->
<v-flex class="text-xs-center" xs3> AKSI </v-flex>
</v-layout>
<v-layout pa-1 row v-for="(sampletype, idx) in xsampletypes" :key="sampletype.id">
<v-flex xs12>
<v-layout align-center pa-2 class="grey lighten-4" row>
<v-flex xs3>
{{ sampletype.T_SampleTypeName }}
</v-flex>
<v-flex xs6>
{{ sampletype.T_BarcodeLabBarcode }}
</v-flex>
<!--<v-flex xs3>
<div v-if="selected_patient.status === 'Process' ||
selected_patient.status === 'Done'
">
<span @click="openDialogRequirement(sampletype, idx)" v-bind:class="{
white: sampletype.requirement_status === 'X',
error: sampletype.requirement_status === 'N',
}" class="icon-medium-fill-base-small white"><v-icon
:dark="sampletype.requirement_status === 'N'">close</v-icon></span>
<span @click="confirmRequirement(sampletype, idx)" v-bind:class="{
white: sampletype.requirement_status === 'X',
success: sampletype.requirement_status === 'Y',
}" class="icon-medium-fill-base-small white"><v-icon
:dark="sampletype.requirement_status === 'Y'">check</v-icon></span>
</div>
<div v-if="selected_patient.status === 'New' ||
selected_patient.status === 'Call' ||
selected_patient.status === 'Skip'
">
-
</div>
</v-flex>-->
<v-flex class="text-xs-center" xs3>
<v-btn v-if="selected_patient.status === 'Process' ||
selected_patient.status === 'Done'
" style="margin: 3px 2px" small color="warning">{{ sampletype.process_date }}
{{ sampletype.process_time }}</v-btn>
<v-btn v-if="(selected_patient.status === 'Process' ||
selected_patient.status === 'Done') &&
sampletype.requirement_status !== 'X'
" @click="receiveSample(sampletype)" style="margin: 3px 2px" small color="success">{{
sampletype.done_date }}
{{ sampletype.done_time }}</v-btn>
<v-btn depressed dark v-if="selected_patient.status === 'Process' &&
sampletype.requirement_status === 'X'
" style="margin: 3px 2px" small color="grey">00-00-0000 00:00</v-btn>
<div v-if="selected_patient.status === 'New' ||
selected_patient.status === 'Call' ||
selected_patient.status === 'Skip'
">
-
</div>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
<v-divider></v-divider>
<v-layout row>
<v-flex xs12>
<v-layout wrap>
<v-flex v-for="(inf, idx) in info" :key="inf.id" pb-1 pl-1 pr-1 xs3>
<v-btn block small color="primary" v-bind:class="{
success: inf.status_bahan === 'R',
warning: inf.status_bahan === 'P',
}" dark>{{ inf.T_BahanName }}</v-btn>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-card>
<one-order-info></one-order-info>
</v-layout>
</template>
<style scoped></style>
<script>
module.exports = {
components: {
"one-x-check": httpVueLoader("../../common/onexcheck.vue"),
"one-order-info": httpVueLoader("./oneSampleOrderInfo.vue")
},
data: () => ({
checkbox: false,
}),
computed: {
notes() {
return this.$store.state.samplecall.notes;
},
xnoterequirement() {
return this.$store.state.samplecall.note_requirement;
},
xsampletypes() {
return this.$store.state.samplecall.sampletypes;
},
xstatus() {
return this.$store.state.samplecall.selected_status;
},
selected_patient() {
return this.$store.state.samplecall.selected_patient;
},
dialognote: {
get() {
return this.$store.state.samplecall.dialog_note;
},
set(val) {
this.$store.commit("samplecall/update_dialog_note", val);
},
},
dialogform: {
get() {
return this.$store.state.samplecall.dialog_form;
},
set(val) {
this.$store.commit("samplecall/update_dialog_form", val);
},
},
dialogformnote: {
get() {
return this.$store.state.samplecall.dialog_form_note;
},
set(val) {
this.$store.commit("samplecall/update_dialog_form_note", val);
},
},
msgnote: {
get() {
return this.$store.state.samplecall.msg_note;
},
set(val) {
this.$store.commit("samplecall/update_msg_note", val);
},
},
dialogrequirement: {
get() {
return this.$store.state.samplecall.dialog_requirement;
},
set(val) {
this.$store.commit("samplecall/update_dialog_requirement", val);
},
},
requirements: {
get() {
return this.$store.state.samplecall.requirements;
},
set(val) {
this.$store.commit("samplecall/update_requirements", val);
},
},
info: {
get() {
return this.$store.state.samplecall.information_bahan;
},
set(val) {
this.$store.commit("samplecall/update_information_bahan", val);
},
},
staff: {
get() {
return this.$store.state.samplecall.staff;
},
set(val) {
this.$store.commit("samplecall/update_staff", val);
},
},
},
methods: {
processSample(sampletype) {
var patient = this.$store.state.samplecall.selected_patient;
var msg =
"Anda yakin akan melakukan proses untuk " +
sampletype.T_SampleTypeName +
" dari " +
patient.patient_fullname +
" ? ";
this.$store.commit("samplecall/update_msg_action", msg);
this.$store.commit("samplecall/update_act", "samplingprocess");
this.$store.commit("samplecall/update_selected_sampletype", sampletype);
this.$store.commit("samplecall/update_dialog_action", true);
},
doneSample(sampletype) {
var patient = this.$store.state.samplecall.selected_patient;
var msg =
"Anda yakin proses untuk " +
sampletype.T_SampleTypeName +
" dari " +
patient.patient_fullname +
" telah selesai ? ";
this.$store.commit("samplecall/update_msg_action", msg);
this.$store.commit("samplecall/update_act", "samplingdone");
this.$store.commit("samplecall/update_selected_sampletype", sampletype);
this.$store.commit("samplecall/update_dialog_action", true);
},
printBarcodeGroup() {
var id = this.selected_patient.T_OrderHeaderID;
one_print_barcode_so_group(id);
},
printBarcode(sampletype) {
var id = sampletype.T_OrderDetailID;
one_print_barcode_so(id);
},
openDialogRequirement(value, idx) {
if (value.status !== "P" && value.requirement_status === "Y") {
} else {
this.$store.commit("samplecall/update_selected_sample", value);
var sampletypes = this.$store.state.samplecall.sampletypes;
sampletypes[idx].requirement_status = "N";
this.$store.commit(
"samplecall/update_requirements",
sampletypes[idx].requirements
);
this.$store.commit("samplecall/update_dialog_requirement", true);
}
},
confirmRequirement(value, idx) {
if (value.status === "P") {
var sampletypes = this.$store.state.samplecall.sampletypes;
sampletypes[idx].requirement_status = "Y";
this.$store.commit("samplecall/update_sampletypes", sampletypes);
sampletypes[idx].requirements.forEach((el) => {
el.chex = "N";
});
}
},
searchPatientLastSelect() {
this.dialogformnote = false;
this.$store.dispatch("samplecall/search", {
xdate: this.$store.state.samplecall.start_date,
name: this.$store.state.samplecall.name,
nolab: this.$store.state.samplecall.nolab,
stationid: this.$store.state.samplecall.selected_station.id,
statusid: this.$store.state.samplecall.selected_status.id,
companyid: this.$store.state.samplecall.selected_company.id,
lastid: this.$store.state.samplecall.last_id,
locationid: this.$store.state.samplecall.selected_location.locationID,
});
},
saveRequirement() {
var sampletypes = this.$store.state.samplecall.sampletypes;
var selected_sample = this.$store.state.samplecall.selected_sample;
var idx = _.findIndex(sampletypes, function (o) {
return (
o.T_OrderHeaderID == selected_sample.T_OrderHeaderID &&
o.T_SampleTypeID == selected_sample.T_SampleTypeID
);
});
if (sampletypes[idx].status === "P") {
sampletypes[idx].requirements =
this.$store.state.samplecall.requirements;
}
this.$store.commit("samplecall/update_dialog_requirement", false);
},
checkReq(val, idx) {
var xrequirements = this.requirements;
if (xrequirements[idx].status === "P") {
xrequirements[idx].chex = val;
this.$store.commit("samplecall/update_requirements", xrequirements);
}
},
receiveSample(value) {
var goaction = true;
if (value.requirement_status === "N") {
var req_check = _.filter(value.requirements, function (o) {
return o.chex === "Y";
});
if (req_check.length === 0) {
goaction = false;
}
}
if (
value.status === "P" &&
value.requirement_status !== "X" &&
goaction
) {
this.$store.commit("samplecall/update_act", "samplingdone");
var prm = this.selected_patient;
prm.id = this.selected_patient.T_OrderHeaderID;
prm.act = "samplingdone";
prm.sample = value;
prm.staff = this.$store.state.samplecall.staff;
prm.search = {
xdate: this.$store.state.samplecall.start_date,
name: this.$store.state.samplecall.name,
nolab: this.$store.state.samplecall.nolab,
stationid: this.$store.state.samplecall.selected_station.id,
statusid: this.$store.state.samplecall.selected_status.id,
companyid: this.$store.state.samplecall.selected_company.id,
lastid: this.$store.state.samplecall.last_id,
locationid: this.$store.state.samplecall.selected_location.locationID,
};
this.$store.dispatch("samplecall/receivesample", prm);
} else {
//console.log('oeey')
if (value.status === "P") {
this.$store.commit(
"samplecall/update_msg_info",
"Jalan - jalan ke gunung merapi, Requirement-nya tolong dilengkapi"
);
this.$store.commit("samplecall/update_open_dialog_info", true);
}
if (value.status === "V") {
var prm = this.selected_patient;
prm.id = this.selected_patient.T_OrderHeaderID;
prm.act = "reject";
prm.sample = value;
prm.staff = this.$store.state.samplecall.staff;
prm.search = {
xdate: this.$store.state.samplecall.start_date,
name: this.$store.state.samplecall.name,
nolab: this.$store.state.samplecall.nolab,
companyid: this.$store.state.samplecall.selected_company.id,
stationid: this.$store.state.samplecall.selected_station.id,
statusid: this.$store.state.samplecall.selected_status.id,
lastid: this.$store.state.samplecall.last_id,
locationid:
this.$store.state.samplecall.selected_location.locationID,
};
this.$store.dispatch("samplecall/rejectsample", prm);
}
}
},
openDialogFormNote() {
this.dialogformnote = true;
},
saveNoteSampling() {
var prm = this.$store.state.samplecall.selected_patient;
prm.search = {
xdate: this.$store.state.samplecall.start_date,
name: this.$store.state.samplecall.name,
nolab: this.$store.state.samplecall.nolab,
stationid: this.$store.state.samplecall.selected_station.id,
statusid: this.$store.state.samplecall.selected_status.id,
companyid: this.$store.state.samplecall.selected_company.id,
lastid: this.$store.state.samplecall.last_id,
locationid: this.$store.state.samplecall.selected_location.locationID,
};
this.$store.dispatch("samplecall/savenotesampling", prm);
},
openDialogFoNoteRequirement() {
var prm = this.$store.state.samplecall.selected_patient;
this.$store.dispatch("samplecall/getdatanoterequirement", prm);
},
},
};
</script>