This commit is contained in:
Marwan Alwali 2025-09-02 15:14:36 +03:00
parent 0a037d3d9d
commit 73c9e2e921
12 changed files with 3047 additions and 210 deletions

Binary file not shown.

View File

@ -163,7 +163,7 @@ class LabTestDetailView(LoginRequiredMixin, DetailView):
# Get recent orders for this test
context['recent_orders'] = LabOrder.objects.filter(
test=lab_test,
tests=lab_test,
tenant=self.request.user.tenant
).select_related('patient').order_by('-order_datetime')[:10]
@ -171,7 +171,7 @@ class LabTestDetailView(LoginRequiredMixin, DetailView):
context['qc_records'] = QualityControl.objects.filter(
test=lab_test,
tenant=self.request.user.tenant
).order_by('-test_date')[:5]
).order_by('-created_at')[:5]
return context

File diff suppressed because it is too large Load Diff

View File

@ -52,9 +52,9 @@
</div>
</div>
<div class="row">
<div class="row mb-4">
<!-- Recent Activity -->
<div class="col-lg-8 mb-4">
<div class="col-lg-8">
<div class="panel panel-inverse" data-sortable-id="index-1">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-history me-2"></i> {{ _("Recent Activity")}}</h4>
@ -104,16 +104,25 @@
<!-- Sidebar -->
<div class="col-lg-4">
<!-- System Health -->
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">
<div class="panel panel-inverse mb-4" data-sortable-id="index-2">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-heartbeat me-2"></i>System Health
</h5>
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>
</div>
<div class="card-body">
</div>
<div class="card-body p-4">
<div id="system-health"
hx-get="{% url 'core:system_health' %}"
hx-trigger="load, every 60s">
hx-trigger="load, every 60s"
hx-swap="innerHTML">
<div class="text-center">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="visually-hidden">Loading system health...</span>
@ -125,13 +134,21 @@
<!-- Tenant Information -->
{% if current_tenant %}
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">
<div class="panel panel-inverse mb-4" data-sortable-id="index-3">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-building me-2"></i>Organization Info
</h5>
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>
</div>
<div class="card-body">
</div>
<div class="card-body p-4">
<div id="tenant-info"
hx-get="{% url 'core:tenant_info' %}"
hx-trigger="load">
@ -146,13 +163,21 @@
{% endif %}
<!-- Quick Stats -->
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<div class="panel panel-inverse mb-4" data-sortable-id="index-4">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-chart-pie me-2"></i>Quick Stats
</h5>
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>
</div>
<div class="card-body">
</div>
<div class="card-body p-4">
<div class="row text-center">
<div class="col-6 mb-3">
<div class="border-end">
@ -181,15 +206,23 @@
</div>
<!-- Quick Actions Grid -->
<div class="row mt-4">
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<div class="panel panel-inverse mb-4" data-sortable-id="index-5">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-bolt me-2"></i>Quick Actions
</h5>
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>
</div>
<div class="card-body">
</div>
<div class="card-body p-4">
<div class="row">
<div class="col-xl-3 col-lg-4 col-md-6 mb-3">
<a href="{% url 'patients:patient_registration' %}" class="btn btn-outline-primary w-100 h-100 d-flex flex-column align-items-center justify-content-center py-4">

View File

@ -1,4 +1,4 @@
<div class="system-health">
<div id="system-health">
<div class="row">
<div class="col-12 mb-3">
<div class="d-flex justify-content-between align-items-center">

View File

@ -673,7 +673,7 @@
<div class="section-card">
<div class="section-header">
<div>
<i class="fas fa-list me-2"></i>Order Items ({{ order.items.count }})
<i class="fas fa-list me-2"></i>Order Items ({{ order.line_items.count }})
</div>
<div class="btn-group btn-group-sm">
<button type="button" class="btn btn-outline-secondary" onclick="expandAllItems()">
@ -698,7 +698,7 @@
</tr>
</thead>
<tbody>
{% for item in order.items.all %}
{% for item in order.line_items.all %}
<tr class="item-row">
<td>
{% if item.product.image %}
@ -711,34 +711,44 @@
</td>
<td>
<div class="item-details">
<div class="item-name">{{ item.product.name }}</div>
<div class="item-description">{{ item.product.description|truncatechars:100 }}</div>
<div class="item-name">{{ item.inventory_item.item_name }}</div>
{# <div class="item-description">{{ item.inventory_item.description|truncatechars:50 }}</div>#}
<div class="item-specs">
SKU: {{ item.product.sku|default:"N/A" }} |
Category: {{ item.product.category|default:"N/A" }}
Category: {{ item.inventory_item.category|default:"N/A" }} |
Subcategory: {{ item.inventory_item.subcategory|default:"N/A" }}
</div>
</div>
</td>
<td>
<div class="quantity-info">
<div class="quantity-number">{{ item.quantity }}</div>
<div class="quantity-unit">{{ item.unit|default:"pcs" }}</div>
<div class="">
<div class="">{{ item.quantity_ordered }}</div>
<div class="text-muted fs-9px">{{ item.inventory_item.unit_of_measure|default:"pcs" }}</div>
</div>
</td>
<td>
<div class="price-info">
<div class="unit-price"><span class="symbol">&#xea;</span>{{ item.unit_price|floatformat:'2g' }}</div>
<div class="">
<div class=""><span class="symbol">&#xea;</span>{{ item.unit_price|floatformat:'2g' }}</div>
</div>
</td>
<td>
<div class="price-info">
<div class="total-price"><span class="symbol">&#xea;</span>{{ item.total_price|floatformat:'2g' }}</div>
<div class="">
<div class="text-success fw-bold"><span class="symbol">&#xea;</span>{{ item.total_price|floatformat:'2g' }}</div>
</div>
</td>
<td>
<span class="badge bg-{{ item.status_color }}">
{{ item.get_status_display|default:"Pending" }}
</span>
{% if item.status == 'PENDING' %}
<span class="badge bg-warning text-dark">{{ item.get_status_display|upper }}</span>
{% elif item.status == 'ORDERED' %}
<span class="badge bg-info">{{ item.get_status_display|upper }}</span>
{% elif item.status == 'PARTIAL_RECEIVED' %}
<span class="badge bg-success">{{ item.get_status_display|upper }}</span>
{% elif item.status == 'RECEIVED' %}
<span class="badge bg-green">{{ item.get_status_display|upper }}</span>
{% elif item.status == 'CANCELLED' %}
<span class="badge bg-danger">{{ item.get_status_display|upper }}</span>
{% else %}
<span class="badge bg-secondary">{{ item.get_status_display|upper }}</span>
{% endif %}
</td>
</tr>
{% endfor %}

View File

@ -5,7 +5,7 @@
{% if reference_range.pk %}Edit Reference Range{% else %}Add Reference Range{% endif %}
{% endblock %}
{% block extra_css %}
{% block css %}
<style>
.form-section {
background: #f8f9fa;
@ -533,7 +533,7 @@
</div>
{% endblock %}
{% block extra_js %}
{% block js %}
<script>
$(document).ready(function() {
// Initialize form

View File

@ -55,13 +55,20 @@
<div class="row">
<!-- Test Information -->
<div class="col-lg-8 mb-4">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<i class="fas fa-info-circle me-2"></i>Test Information
</h5>
<div class="panel panel-inverse" data-sortable-id="index-1">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-info-circle me-2"></i> {{ _("Test Information")}}
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
<div class="card-body">
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
@ -149,13 +156,20 @@
<!-- Quick Stats -->
<div class="col-lg-4 mb-4">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<i class="fas fa-chart-bar me-2"></i>Test Statistics
</h5>
<div class="panel panel-inverse" data-sortable-id="index-2">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-chart-bar me-2"></i> {{ _("Test Statistics")}}
</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
<div class="card-body">
</div>
<div class="panel-body">
<div class="row g-3">
<div class="col-6">
<div class="text-center p-3 bg-light rounded">
@ -191,18 +205,23 @@
{% if reference_ranges %}
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between align-items-center">
<h5 class="mb-0">
<div class="panel panel-inverse" data-sortable-id="index-3">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-ruler me-2"></i>Reference Ranges
</h5>
<a href="{% url 'laboratory:reference_range_create' %}?test={{ lab_test.pk }}" class="btn btn-outline-primary btn-sm">
</h4>
<div class="panel-heading-btn">
<a href="{% url 'laboratory:reference_range_create' %}?test={{ lab_test.pk }}" class="btn btn-outline-primary btn-xs">
<i class="fas fa-plus me-1"></i>Add Range
</a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
</div>
<div class="card-body p-0">
<div class="panel-body">
<div class="table-responsive">
<table class="table table-hover mb-0">
<thead class="table-light">
@ -224,16 +243,16 @@
</span>
</td>
<td>{{ range.age_min }} - {{ range.age_max|default:"∞" }} years</td>
<td class="fw-semibold">{{ range.normal_min }} - {{ range.normal_max }}</td>
<td class="text-danger">{{ range.critical_low|default:"N/A" }}</td>
<td class="text-danger">{{ range.critical_high|default:"N/A" }}</td>
<td class="fw-semibold">{{ range.range_low }} - {{ range.range_high }}</td>
<td class="text-danger">{{ range.critical_low }}</td>
<td class="text-danger">{{ range.critical_high }}</td>
<td>
<div class="btn-group btn-group-sm">
<a href="{% url 'laboratory:reference_range_detail' range.pk %}" class="btn btn-outline-primary">
<a href="{% url 'laboratory:reference_range_detail' range.pk %}" class="btn btn-outline-primary btn-xs">
<i class="fas fa-eye"></i>
</a>
{% if perms.laboratory.change_referencerange %}
<a href="{% url 'laboratory:reference_range_update' range.pk %}" class="btn btn-outline-secondary">
<a href="{% url 'laboratory:reference_range_update' range.pk %}" class="btn btn-outline-secondary btn-xs">
<i class="fas fa-edit"></i>
</a>
{% endif %}
@ -254,18 +273,23 @@
<div class="row">
<!-- Recent Orders -->
<div class="col-lg-6 mb-4">
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between align-items-center">
<h5 class="mb-0">
<div class="panel panel-inverse" data-sortable-id="index-4">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-clipboard-list me-2"></i>Recent Orders
</h5>
<a href="{% url 'laboratory:lab_order_list' %}?test={{ lab_test.pk }}" class="btn btn-outline-primary btn-sm">
</h4>
<div class="panel-heading-btn">
<a href="{% url 'laboratory:lab_order_list' %}?test={{ lab_test.pk }}" class="btn btn-outline-primary btn-xs">
<i class="fas fa-list me-1"></i>View All
</a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
</div>
<div class="card-body p-0">
<div class="panel-body">
{% if recent_orders %}
<div class="table-responsive">
<table class="table table-hover mb-0">
@ -298,7 +322,7 @@
</td>
<td>{{ order.order_datetime|date:"M d, H:i" }}</td>
<td>
<a href="{% url 'laboratory:lab_order_detail' order.pk %}" class="btn btn-outline-primary btn-sm">
<a href="{% url 'laboratory:lab_order_detail' order.pk %}" class="btn btn-outline-primary btn-xs">
<i class="fas fa-eye"></i>
</a>
</td>
@ -320,18 +344,23 @@
<!-- Quality Control Records -->
<div class="col-lg-6 mb-4">
<div class="card">
<div class="card-header">
<div class="d-flex justify-content-between align-items-center">
<h5 class="mb-0">
<div class="panel panel-inverse" data-sortable-id="index-5">
<div class="panel-heading">
<h4 class="panel-title">
<i class="fas fa-check-circle me-2"></i>Quality Control
</h5>
<a href="{% url 'laboratory:quality_control_create' %}?test={{ lab_test.pk }}" class="btn btn-outline-success btn-sm">
</h4>
<div class="panel-heading-btn">
<a href="{% url 'laboratory:quality_control_create' %}?test={{ lab_test.pk }}" class="btn btn-outline-success btn-xs">
<i class="fas fa-plus me-1"></i>Add QC
</a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
</div>
<div class="card-body p-0">
<div class="panel-body">
{% if qc_records %}
<div class="table-responsive">
<table class="table table-hover mb-0">
@ -347,16 +376,16 @@
<tbody>
{% for qc in qc_records %}
<tr>
<td>{{ qc.test_date|date:"M d" }}</td>
<td>{{ qc.run_datetime|date:"M d" }}</td>
<td>{{ qc.get_control_level_display }}</td>
<td class="fw-semibold">{{ qc.result_value }}</td>
<td class="fw-semibold">{{ qc.result.result_value }}</td>
<td>
<span class="badge bg-{% if qc.is_within_range %}success{% else %}danger{% endif %}">
{% if qc.is_within_range %}In Range{% else %}Out of Range{% endif %}
</span>
</td>
<td>
<a href="{% url 'laboratory:quality_control_detail' qc.pk %}" class="btn btn-outline-primary btn-sm">
<a href="{% url 'laboratory:quality_control_detail' qc.pk %}" class="btn btn-outline-primary btn-xs">
<i class="fas fa-eye"></i>
</a>
</td>

View File

@ -24,14 +24,18 @@
<div class="row">
<div class="col-xl-8">
<div class="card">
<div class="card-header">
<h4 class="card-title">
<i class="fas fa-vial me-2"></i>
Lab Test Information
</h4>
<div class="panel panel-inverse" data-sortable-id="index-1">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-vial me-2"></i> {{ _("Lab Test Information")}}</h4>
{# <div class="panel-heading-btn">#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
{# </div>#}
</div>
<div class="card-body">
<div class="panel-body">
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
@ -375,14 +379,18 @@
<div class="col-xl-4">
<!-- Test Categories -->
<div class="card mb-4">
<div class="card-header">
<h5 class="card-title">
<i class="fas fa-tags me-2"></i>
Test Categories
</h5>
<div class="panel panel-inverse" data-sortable-id="index-2">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-tags me-2"></i> {{ _("Test Categories")}}</h4>
{# <div class="panel-heading-btn">#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
{# </div>#}
</div>
<div class="card-body">
<div class="panel-body">
<div class="mb-3">
<h6><i class="fas fa-heart text-danger me-2"></i>Hematology</h6>
<p class="small text-muted">Blood cell counts, coagulation studies</p>
@ -406,14 +414,18 @@
</div>
<!-- Specimen Types -->
<div class="card mb-4">
<div class="card-header">
<h5 class="card-title">
<i class="fas fa-vial me-2"></i>
Common Specimen Types
</h5>
<div class="panel panel-inverse" data-sortable-id="index-3">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-bolt me-2"></i> {{ _("Common Specimen Types")}}</h4>
{# <div class="panel-heading-btn">#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
{# </div>#}
</div>
<div class="card-body">
<div class="panel-body">
<div class="row">
<div class="col-6">
<ul class="list-unstyled small">
@ -436,14 +448,18 @@
</div>
<!-- Quick Actions -->
<div class="card">
<div class="card-header">
<h5 class="card-title">
<i class="fas fa-bolt me-2"></i>
Quick Actions
</h5>
<div class="panel panel-inverse" data-sortable-id="index-4">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-bolt me-2"></i> {{ _("Quick Actions")}}</h4>
{# <div class="panel-heading-btn">#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
{# </div>#}
</div>
<div class="card-body">
<div class="panel-body">
<div class="d-grid gap-2">
<button type="button" class="btn btn-outline-primary" onclick="generateCode()">
<i class="fas fa-barcode me-2"></i>Generate Test Code

View File

@ -169,29 +169,29 @@
</div>
<!-- Tests Table -->
<div class="card">
<div class="card-header">
<div class="d-flex align-items-center">
<h4 class="card-title mb-0">
<i class="fas fa-list me-2"></i>
Lab Tests
<div class="panel panel-inverse" data-sortable-id="index-1">
<div class="panel-heading">
<h4 class="panel-title"><i class="fas fa-list me-2"></i> {{ _("Lab Tests")}}
{% if object_list %}
<span class="badge bg-secondary ms-2">{{ object_list|length }}</span>
{% endif %}
</h4>
<div class="ms-auto">
<div class="btn-group btn-group-sm">
<button type="button" class="btn btn-outline-secondary" onclick="selectAll()">
<span class="badge bg-primary ms-2">{{ object_list|length }}</span>
{% endif %} </h4>
<div class="panel-heading-btn">
<button type="button" class="btn btn-xs btn-outline-primary me-2" onclick="selectAll()">
<i class="fas fa-check-square me-1"></i>Select All
</button>
<button type="button" class="btn btn-outline-secondary" onclick="clearSelection()">
<button type="button" class="btn btn-xs btn-outline-danger me-2" onclick="clearSelection()">
<i class="fas fa-square me-1"></i>Clear
</button>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-success" data-toggle="panel-reload"><i class="fa fa-redo"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-warning" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>#}
{# <a href="javascript:;" class="btn btn-xs btn-icon btn-danger" data-toggle="panel-remove"><i class="fa fa-times"></i></a>#}
{##}
</div>
</div>
</div>
</div>
<div class="card-body p-0">
<div class="panel-body">
{% if object_list %}
<div class="table-responsive">
<table class="table table-hover mb-0">
@ -222,30 +222,47 @@
<div class="flex-grow-1">
<div class="fw-bold">
<a href="{% url 'laboratory:lab_test_detail' test.pk %}" class="text-decoration-none">
{{ test.name }}
{{ test.test_name }}
</a>
</div>
{% if test.description %}
<div class="small text-muted">{{ test.description|truncatewords:8 }}</div>
{% if test.test_description %}
<div class="small text-muted">{{ test.test_description|truncatewords:8 }}</div>
{% endif %}
</div>
</div>
</td>
<td>
<span class="badge bg-light text-dark">{{ test.code }}</span>
<span class="badge bg-light text-dark">{{ test.test_code }}</span>
</td>
<td>
<span class="badge bg-{% if test.category == 'hematology' %}danger{% elif test.category == 'chemistry' %}primary{% elif test.category == 'microbiology' %}warning{% elif test.category == 'molecular' %}success{% else %}secondary{% endif %}">
{{ test.get_category_display }}
<span class="badge bg-{% if test.test_category == 'HEMATOLOGY' %}danger{% elif test.test_category == 'CHEMISTRY' %}primary{% elif test.test_category == 'MICROBIOLOGY' %}warning{% elif test.test_category == 'MOLECULAR' %}success{% else %}secondary{% endif %}">
{{ test.get_test_category_display }}
</span>
</td>
<td>
<div class="d-flex align-items-center">
<i class="fas fa-{% if test.specimen_type == 'blood' %}tint text-danger{% elif test.specimen_type == 'urine' %}flask text-warning{% elif test.specimen_type == 'sputum' %}lungs text-info{% else %}vial text-secondary{% endif %} me-2"></i>
{{ test.get_specimen_type_display }}
<i class="fas
fa-{% if test.specimen_type == 'BLOOD' %}tint text-danger
{% elif test.specimen_type == 'URINE' %}flask text-warning
{% elif test.specimen_type == 'SPUTUM' %}lungs text-info
{% elif test.specimen_type == 'PLASMA' %}tint text-yellow
{% elif test.specimen_type == 'SERUM' %}bottle-droplet text-info
{% elif test.specimen_type == 'STOOL' %}poop text-cyan
{% elif test.specimen_type == 'CSF' %}eye text-primary
{% elif test.specimen_type == 'SWAB' %}hand text-secondary
{% elif test.specimen_type == 'TISSUE' %}microscope text-green
{% elif test.specimen_type == 'FLUID' %}droplet text-info
{% elif test.specimen_type == 'SALIVA' %}lungs text-info
{% else %}vial-vertical text-secondary{% endif %} me-1"></i>
<span class="fw-bold">{{ test.get_specimen_type_display }}</span>
</div>
</td>
<td>
<div class="d-flex align-items-center">
{{ test.get_department_display }}
</div>
</td>
<td>{{ test.department.name }}</td>
<td>
{% if test.turnaround_time %}
<span class="badge bg-{% if test.turnaround_time <= 2 %}success{% elif test.turnaround_time <= 24 %}warning{% else %}info{% endif %}">
@ -257,7 +274,7 @@
</td>
<td>
{% if test.cost %}
${{ test.cost|floatformat:2 }}
<span class="symbol">&#xea;</span>{{ test.cost|floatformat:'2g' }}
{% else %}
<span class="text-muted">-</span>
{% endif %}
@ -284,16 +301,16 @@
title="View Details">
<i class="fas fa-eye"></i>
</a>
<a href="{% url 'laboratory:lab_test_create' test.pk %}"
<a href="{% url 'laboratory:lab_test_update' test.pk %}"
class="btn btn-outline-secondary"
title="Edit">
<i class="fas fa-edit"></i>
</a>
<a href="{% url 'laboratory:lab_test_confirm_delete' test.pk %}"
class="btn btn-outline-danger"
title="Delete">
<i class="fas fa-trash"></i>
</a>
{# <a href="{% url 'laboratory:lab_test_confirm_delete' test.pk %}" #}
{# class="btn btn-outline-danger" #}
{# title="Delete">#}
{# <i class="fas fa-trash"></i>#}
{# </a>#}
</div>
</td>
</tr>
@ -304,38 +321,7 @@
<!-- Pagination -->
{% if is_paginated %}
<div class="card-footer">
<div class="d-flex justify-content-between align-items-center">
<div>
Showing {{ page_obj.start_index }} to {{ page_obj.end_index }} of {{ paginator.count }} tests
</div>
<nav>
<ul class="pagination pagination-sm mb-0">
{% if page_obj.has_previous %}
<li class="page-item">
<a class="page-link" href="?page=1{% if request.GET.search %}&search={{ request.GET.search }}{% endif %}{% if request.GET.category %}&category={{ request.GET.category }}{% endif %}">First</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}{% if request.GET.search %}&search={{ request.GET.search }}{% endif %}{% if request.GET.category %}&category={{ request.GET.category }}{% endif %}">Previous</a>
</li>
{% endif %}
<li class="page-item active">
<span class="page-link">{{ page_obj.number }}</span>
</li>
{% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}{% if request.GET.search %}&search={{ request.GET.search }}{% endif %}{% if request.GET.category %}&category={{ request.GET.category }}{% endif %}">Next</a>
</li>
<li class="page-item">
<a class="page-link" href="?page={{ paginator.num_pages }}{% if request.GET.search %}&search={{ request.GET.search }}{% endif %}{% if request.GET.category %}&category={{ request.GET.category }}{% endif %}">Last</a>
</li>
{% endif %}
</ul>
</nav>
</div>
</div>
{% include 'partial/pagination.html' %}
{% endif %}
<!-- Bulk Actions -->