fix: invoicing logic for appointments
diff --git a/erpnext/healthcare/utils.py b/erpnext/healthcare/utils.py
index 1912270..0ff86cb 100644
--- a/erpnext/healthcare/utils.py
+++ b/erpnext/healthcare/utils.py
@@ -21,7 +21,7 @@
patient_appointments = frappe.get_list(
'Patient Appointment',
fields='*',
- filters={'patient': patient.name, 'invoiced': False},
+ filters={'patient': patient.name, 'invoiced': 0},
order_by='appointment_date'
)
if patient_appointments:
@@ -32,7 +32,7 @@
clinical_procedures = get_clinical_procedures_to_invoice(patient)
inpatient_services = get_inpatient_services_to_invoice(patient)
- items_to_invoice = encounters + lab_tests + clinical_procedures + inpatient_services
+ items_to_invoice += encounters + lab_tests + clinical_procedures + inpatient_services
return items_to_invoice
def validate_customer_created(patient):
@@ -45,10 +45,7 @@
if not frappe.db.get_single_value('Healthcare Settings', 'enable_free_follow_ups'):
return
- fee_validity_details = []
items_to_invoice = []
- valid_days = frappe.db.get_single_value('Healthcare Settings', 'valid_days')
- max_visits = frappe.db.get_single_value('Healthcare Settings', 'max_visits')
for appointment in patient_appointments:
if appointment.procedure_template:
if frappe.db.get_value('Clinical Procedure Template', appointment.procedure_template, 'is_billable'):
@@ -58,40 +55,21 @@
'service': appointment.procedure_template
})
else:
- practitioner_exist_in_list = False
- skip_invoice = False
- if fee_validity_details:
- for validity in fee_validity_details:
- if validity['practitioner'] == appointment.practitioner:
- practitioner_exist_in_list = True
- if validity['valid_till'] >= appointment.appointment_date:
- validity['visits'] = validity['visits'] + 1
- if int(max_visits) > validity['visits']:
- skip_invoice = True
- if not skip_invoice:
- validity['visits'] = 1
- validity['valid_till'] = appointment.appointment_date + datetime.timedelta(days=int(valid_days))
-
- if not practitioner_exist_in_list:
- valid_till = appointment.appointment_date + datetime.timedelta(days=int(valid_days))
- visits = 0
- fee_validity = check_fee_validity(appointment)
- if fee_validity:
- valid_till = fee_validity.valid_till
- visits = fee_validity.visited
- fee_validity_details.append({'practitioner': appointment.practitioner,
- 'valid_till': valid_till, 'visits': visits})
-
- if not skip_invoice:
+ fee_validity = frappe.db.exists('Fee Validity Reference', {'appointment': appointment.name})
+ if not fee_validity:
practitioner_charge = 0
income_account = None
service_item = None
if appointment.practitioner:
service_item, practitioner_charge = get_service_item_and_practitioner_charge(appointment)
income_account = get_income_account(appointment.practitioner, appointment.company)
- items_to_invoice.append({'reference_type': 'Patient Appointment', 'reference_name': appointment.name,
- 'service': service_item, 'rate': practitioner_charge,
- 'income_account': income_account})
+ items_to_invoice.append({
+ 'reference_type': 'Patient Appointment',
+ 'reference_name': appointment.name,
+ 'service': service_item,
+ 'rate': practitioner_charge,
+ 'income_account': income_account
+ })
return items_to_invoice