clinical_laboratory/test/test_sample_generation.py
Luis Ernesto Portillo Zaldivar 4be56fc9f7 fix(#32): Spanish translations and workflow fixes
- Fixed missing action_collect method for pending_collection state
- Updated all model field labels to Spanish
- Updated view labels and strings to Spanish
- Fixed readonly conditions for pending_collection state
- Added barcode and new fields to stock.lot views
- Updated sale.order embedded view with correct button
- Added 5-minute timeout note to CLAUDE.md
- Removed problematic demo sale.order XML records
- Updated test script location guidance in CLAUDE.md
- Marked all acceptance criteria as completed in plan
2025-07-14 23:46:31 -06:00

136 lines
4.5 KiB
Python

import odoo
def test_sample_generation(cr):
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
print("=== TESTING AUTOMATIC SAMPLE GENERATION ===\n")
# Create test patient
patient = env['res.partner'].create({
'name': 'Test Patient for Validation',
'is_patient': True,
'patient_identifier': 'P-TEST01'
})
print(f"Created patient: {patient.name}")
# Create test doctor
doctor = env['res.partner'].create({
'name': 'Dr. Test Validation',
'is_doctor': True,
'doctor_license': 'L-TEST01'
})
print(f"Created doctor: {doctor.name}")
# Get or create sample types
sample_types = {}
# EDTA Tube
edta = env['product.template'].search([('name', 'like', 'EDTA'), ('is_sample_type', '=', True)], limit=1)
if not edta:
edta = env['product.template'].create({
'name': 'Test EDTA Tube',
'is_sample_type': True,
'type': 'consu'
})
sample_types['edta'] = edta
# Serum Tube
serum = env['product.template'].search([('name', 'like', 'Suero'), ('is_sample_type', '=', True)], limit=1)
if not serum:
serum = env['product.template'].create({
'name': 'Test Serum Tube',
'is_sample_type': True,
'type': 'consu'
})
sample_types['serum'] = serum
# Create test analyses
analyses = []
# Analysis 1 - requires EDTA
analysis1 = env['product.template'].create({
'name': 'Test Hemograma',
'is_analysis': True,
'type': 'service',
'required_sample_type_id': edta.id,
'sample_volume_ml': 3.0
})
analyses.append(analysis1)
print(f"Created analysis: {analysis1.name} (requires {edta.name}, {analysis1.sample_volume_ml} ml)")
# Analysis 2 - also requires EDTA
analysis2 = env['product.template'].create({
'name': 'Test HbA1c',
'is_analysis': True,
'type': 'service',
'required_sample_type_id': edta.id,
'sample_volume_ml': 2.0
})
analyses.append(analysis2)
print(f"Created analysis: {analysis2.name} (requires {edta.name}, {analysis2.sample_volume_ml} ml)")
# Analysis 3 - requires Serum
analysis3 = env['product.template'].create({
'name': 'Test Glucose',
'is_analysis': True,
'type': 'service',
'required_sample_type_id': serum.id,
'sample_volume_ml': 1.0
})
analyses.append(analysis3)
print(f"Created analysis: {analysis3.name} (requires {serum.name}, {analysis3.sample_volume_ml} ml)")
# Analysis 4 - no sample type defined
analysis4 = env['product.template'].create({
'name': 'Test Special Analysis',
'is_analysis': True,
'type': 'service'
})
analyses.append(analysis4)
print(f"Created analysis: {analysis4.name} (no sample type defined)")
# Create lab order
print("\n--- Creating Lab Order ---")
order = env['sale.order'].create({
'partner_id': patient.id,
'doctor_id': doctor.id,
'is_lab_request': True,
'order_line': [(0, 0, {
'product_id': a.product_variant_id.id,
'product_uom_qty': 1
}) for a in analyses]
})
print(f"Created order: {order.name}")
print(f"Order lines: {len(order.order_line)}")
# Confirm order - this should trigger automatic sample generation
print("\n--- Confirming Order (triggering sample generation) ---")
order.action_confirm()
print(f"Order state: {order.state}")
# Check generated samples
print(f"\n--- Generated Samples: {len(order.generated_sample_ids)} ---")
for sample in order.generated_sample_ids:
print(f"\nSample: {sample.name}")
print(f" Barcode: {sample.barcode}")
print(f" Sample Type: {sample.sample_type_product_id.name if sample.sample_type_product_id else 'None'}")
print(f" Total Volume: {sample.volume_ml} ml")
print(f" Analyses: {sample.analysis_names}")
print(f" State: {sample.state}")
# Check messages
print("\n--- Order Messages ---")
messages = order.message_ids.filtered(lambda m: m.body and m.message_type == 'notification')
for msg in messages[:5]:
print(f"Message: {msg.body[:200]}...")
print("\n=== TEST COMPLETED ===")
return order
if __name__ == '__main__':
db_name = 'lims_demo'
registry = odoo.registry(db_name)
with registry.cursor() as cr:
test_sample_generation(cr)
cr.commit()