You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
6.9 KiB
175 lines
6.9 KiB
/** @odoo-module */
|
|
import { registry} from '@web/core/registry';
|
|
import { useRef } from "@odoo/owl";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
import { _t } from "@web/core/l10n/translation";
|
|
const { Component, onWillStart, useState} = owl
|
|
import { PharmacyOrderLines } from "./pharmacy_orderlines";
|
|
var currency=0;
|
|
var quantity=0;
|
|
var amount=0;
|
|
var sub_t=0;
|
|
var sub_total=0;
|
|
var product_lst=[];
|
|
var uom_lst= [];
|
|
var invoice=0;
|
|
var invoice_id=0;
|
|
var tax=0;
|
|
export class PharmacyDashboard extends Component {
|
|
//Initialize Pharmacy Dashboard
|
|
setup() {
|
|
super.setup(...arguments);
|
|
this.ref = useRef('root')
|
|
this.vaccine_div = useRef('vaccine_div')
|
|
this.medicine_div = useRef('medicine_div')
|
|
this.home_content = useRef('home_content')
|
|
this.patient_name = useRef('PatientName');
|
|
this.patient_email = useRef('Email');
|
|
this.patient_search = useRef('PatientSearch');
|
|
this.orders_div = useRef('orders_div')
|
|
this.orm = useService('orm')
|
|
this.user = useService("user");
|
|
this.actionService = useService("action");
|
|
this.state = useState({
|
|
product_lst :[],
|
|
medicines :[],
|
|
units :[],
|
|
sub_total,
|
|
vaccine :[],
|
|
order_data:[],
|
|
order_line: [],
|
|
menu: 'home',
|
|
});
|
|
this.fetch_product();
|
|
onWillStart(async () => {
|
|
this.state.med = await this.orm.call('product.template','action_get_medicine_data',[],)})
|
|
}
|
|
// Fetch product details
|
|
async fetch_product() {
|
|
const domain = [['medicine_ok', '=', true]];
|
|
const result = await this.orm.call('product.template', 'search_read', [domain]);
|
|
this.state.product_lst = result;
|
|
this.create_order();
|
|
}
|
|
// Method for creating sale order
|
|
async create_order() {
|
|
this.vaccine_div?.el?.classList.add("d-none");
|
|
this.medicine_div?.el?.classList.add("d-none");
|
|
this.home_content?.el?.classList.remove("d-none");
|
|
this.orders_div?.el?.classList.add("d-none");
|
|
await this.orm.call('hospital.pharmacy','company_currency',
|
|
).then(function (result){
|
|
$('#symbol'+ currency).text(result || '');
|
|
$('#symbol').text(result || '');
|
|
})
|
|
this.state.medicines = await this.product_lst;
|
|
this.state.units = await this.uom_lst;
|
|
}
|
|
// To update the orderline of sale order
|
|
updateOrderLine(line, id) {
|
|
const orderline = this.state.order_line.filter(orderline => orderline.id === id)[0]
|
|
orderline.product = line.product
|
|
orderline.qty = parseInt(line.qty)
|
|
orderline.uom = line.uom
|
|
orderline.price = line.price
|
|
orderline.sub_total = line.sub_total
|
|
}
|
|
// To add new row in the sale order line
|
|
addRow () {
|
|
const data = [...this.state.order_line, owl.reactive({id: new Date(), product: false, qty: 1, uom: 0, price: 0, sub_total: 0})]
|
|
this.state.order_line = data
|
|
}
|
|
// To remove the line if not needed
|
|
removeLine(id){
|
|
const filteredData = this.state.order_line.filter(line => line.id != id)
|
|
this.state.order_line = filteredData
|
|
}
|
|
// Create sale order
|
|
async create_sale_order () {
|
|
var data ={};
|
|
data['name'] = $('#patient-name').val();
|
|
data['phone'] = $('#patient-phone').val();
|
|
data['email']= $('#patient-mail').val();
|
|
data['dob'] = $('#patient-dob').val();
|
|
data['products']= this.state.order_line;
|
|
let hasInvalidQuantity = false;
|
|
if (hasInvalidQuantity) {
|
|
alert('Medicine quantity must be greater than or equal to 1.');
|
|
return;
|
|
}
|
|
if(this.patient_name.el.value === "")
|
|
{
|
|
alert("Please enter the Name")
|
|
return;
|
|
}
|
|
if(this.patient_email.el.value === "")
|
|
{
|
|
alert("Please enter the Email")
|
|
return;
|
|
}
|
|
this.orm.call('hospital.pharmacy', 'create_sale_order',[data]
|
|
).then(function (result) {
|
|
alert('The sale order has been created with refernce number ' +result.invoice)
|
|
window.location.reload()
|
|
})
|
|
}
|
|
// Fetch patient data
|
|
async fetch_patient_data () {
|
|
var self = this;
|
|
await this.orm.call('res.partner', 'action_get_patient_data',
|
|
[[this.patient_search.el.value]],
|
|
).then(function (result) {
|
|
$('#patient-title').text(result.name || '');
|
|
$('#patient-code').text(result.unique || '');
|
|
$('#patient-age').text(result.dob || '');
|
|
$('#patient-blood').text(result.blood_group || '');
|
|
$('#patient-blood').text(result.blood_group || '');
|
|
$('#patient-gender').text(result.gender || '');
|
|
$('#patient-image').attr('data:image/png;base64, ' + result.image_1920);
|
|
if (result.name == 'Patient Not Found') {
|
|
$('#hist_head').html('')
|
|
$('#patient-image').attr('src', 'https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png');
|
|
}
|
|
else {
|
|
}
|
|
})
|
|
}
|
|
// Fetch medicine data while clicking Medicine button
|
|
async fetch_medicine_data () {
|
|
this.vaccine_div?.el?.classList.add("d-none");
|
|
this.home_content?.el?.classList.add("d-none");
|
|
this.medicine_div?.el?.classList.remove("d-none");
|
|
this.orders_div?.el?.classList.add("d-none");
|
|
}
|
|
// Fetch vaccine data
|
|
async fetch_vaccine_data () {
|
|
this.vaccine_div?.el?.classList.remove("d-none");
|
|
this.home_content?.el?.classList.add("d-none");
|
|
this.medicine_div?.el?.classList.add("d-none");
|
|
this.orders_div?.el?.classList.add("d-none");
|
|
this.state.vaccine = await this.orm.call('product.template','action_get_vaccine_data', [],)
|
|
}
|
|
// Method fo fetching all sale orders
|
|
async fetch_sale_orders () {
|
|
this.vaccine_div?.el?.classList.add("d-none");
|
|
this.home_content?.el?.classList.add("d-none");
|
|
this.medicine_div?.el?.classList.add("d-none");
|
|
this.orders_div?.el?.classList.remove("d-none");
|
|
this.state.order_data = await this.orm.call('sale.order', 'search_read',
|
|
[[['partner_id.patient_seq','not in', ['New', 'Employee', 'User']]], ['name', 'create_date', 'partner_id', 'amount_total', 'state']],)
|
|
|
|
}
|
|
// Method for emptying the data
|
|
async clear_data () {
|
|
this.patient_search.el.value = '';
|
|
$('#hist_head').html('')
|
|
$('#patient-title').html('')
|
|
$('#patient-code').html('')
|
|
$('#patient-gender').html('')
|
|
$('#patient-blood').html('')
|
|
$('#patient-image').attr('src', 'https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png');
|
|
}
|
|
}
|
|
PharmacyDashboard.template = "PharmacyDashboard"
|
|
registry.category("actions").add('pharmacy_dashboard_tags', PharmacyDashboard);
|
|
PharmacyDashboard.components = { PharmacyOrderLines }
|
|
|