128 lines
5.3 KiB
HTML
128 lines
5.3 KiB
HTML
{% extends 'base.html' %}
|
|
{% load indonesian_filters %}
|
|
|
|
{% block title %}Sales Dashboard - Manufacturing App{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
|
|
<h1 class="h2">Sales Dashboard</h1>
|
|
<div class="btn-toolbar mb-2 mb-md-0">
|
|
<div class="btn-group me-2">
|
|
<a href="{% url 'sales:customer_list' %}" class="btn btn-sm btn-outline-primary">
|
|
<i class="fas fa-users"></i> Customers
|
|
</a>
|
|
<a href="{% url 'sales:so_list' %}" class="btn btn-sm btn-outline-primary">
|
|
<i class="fas fa-file-invoice"></i> Orders
|
|
</a>
|
|
<a href="{% url 'sales:delivery_list' %}" class="btn btn-sm btn-outline-primary">
|
|
<i class="fas fa-truck"></i> Deliveries
|
|
</a>
|
|
</div>
|
|
<a href="{% url 'sales:create_customer' %}" class="btn btn-sm btn-outline-success">
|
|
<i class="fas fa-plus"></i> Add Customer
|
|
</a>
|
|
<a href="{% url 'sales:create_so' %}" class="btn btn-sm btn-outline-primary">
|
|
<i class="fas fa-file-invoice"></i> New Order
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Active Customers Widget -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-body text-center">
|
|
<i class="fas fa-users fa-3x text-primary mb-3"></i>
|
|
<div class="display-4 text-primary">{{ customers|length }}</div>
|
|
<h5 class="card-title">Active Customers</h5>
|
|
<p class="card-text text-muted">Total customers in system</p>
|
|
<a href="{% url 'sales:customer_list' %}" class="btn btn-primary">
|
|
<i class="fas fa-eye me-2"></i>View Customers
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Pending Orders Widget -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-body text-center">
|
|
<i class="fas fa-file-invoice fa-3x text-warning mb-3"></i>
|
|
<div class="display-4 text-warning">{{ pending_orders|length }}</div>
|
|
<h5 class="card-title">Pending Orders</h5>
|
|
<p class="card-text text-muted">Awaiting processing or delivery</p>
|
|
<a href="{% url 'sales:so_list' %}" class="btn btn-warning">
|
|
<i class="fas fa-eye me-2"></i>View Orders
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Total Sales Value Widget -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-body text-center">
|
|
<i class="fas fa-dollar-sign fa-3x text-success mb-3"></i>
|
|
<div class="display-4 text-success">{{ total_value|format_rupiah:0 }}</div>
|
|
<h5 class="card-title">Total Sales Value</h5>
|
|
<p class="card-text text-muted">Recent order value (Rp)</p>
|
|
<a href="{% url 'sales:so_list' %}" class="btn btn-success">
|
|
<i class="fas fa-eye me-2"></i>View Sales
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mt-4">
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Recent Sales Orders</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if recent_orders %}
|
|
<div class="list-group list-group-flush">
|
|
{% for order in recent_orders %}
|
|
<div class="list-group-item">
|
|
<div class="d-flex w-100 justify-content-between">
|
|
<h6 class="mb-1">{{ order.so_number }}</h6>
|
|
<small>{{ order.order_date|date:"M d" }}</small>
|
|
</div>
|
|
<p class="mb-1">{{ order.customer.name }} - {{ order.total_amount|format_rupiah }}</p>
|
|
<small class="text-muted">
|
|
Status: <span class="badge bg-{{ order.status|yesno:'success,warning,danger' }}">{{ order.get_status_display }}</span>
|
|
</small>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<p class="text-muted">No recent orders</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Customer Performance</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if top_customers %}
|
|
<div class="list-group list-group-flush">
|
|
{% for customer in top_customers %}
|
|
<div class="list-group-item d-flex justify-content-between align-items-center">
|
|
{{ customer.name }}
|
|
<span class="badge bg-info rounded-pill">{{ customer.order_count }} orders</span>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<p class="text-muted">No customer data available</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{% endblock %} |