Django_Basic_Manufacturing_3/url_routing_plan.md
2025-08-22 17:05:22 +07:00

12 KiB

URL Routing Plan for Django Manufacturing App

Overview

This document outlines the URL routing structure for the manufacturing application, defining how users will navigate through different modules and features.

Main URLs Configuration

1. Root URLs (manufacturing_app/urls.py)

# manufacturing_app/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from dashboard import views as dashboard_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', dashboard_views.home, name='home'),
    path('dashboard/', include('dashboard.urls')),
    path('accounts/', include('accounts.urls')),
    path('inventory/', include('inventory.urls')),
    path('purchasing/', include('purchasing.urls')),
    path('sales/', include('sales.urls')),
    path('manufacturing/', include('manufacturing.urls')),
    path('reports/', include('reports.urls')),
    path('database/', include('database_management.urls')),
]

# Serve media files in development
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Module-specific URL Patterns

2. Accounts URLs (accounts/urls.py)

# accounts/urls.py
from django.urls import path
from . import views

app_name = 'accounts'
urlpatterns = [
    # Authentication
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
    path('register/', views.register_view, name='register'),
    path('profile/', views.profile_view, name='profile'),
    path('profile/edit/', views.edit_profile_view, name='edit_profile'),
    
    # User Management
    path('users/', views.user_list_view, name='user_list'),
    path('users/create/', views.create_user_view, name='create_user'),
    path('users/<int:user_id>/', views.user_detail_view, name='user_detail'),
    path('users/<int:user_id>/edit/', views.edit_user_view, name='edit_user'),
    path('users/<int:user_id>/delete/', views.delete_user_view, name='delete_user'),
    
    # Role Management
    path('roles/', views.role_list_view, name='role_list'),
    path('roles/create/', views.create_role_view, name='create_role'),
    path('roles/<int:role_id>/', views.role_detail_view, name='role_detail'),
    path('roles/<int:role_id>/edit/', views.edit_role_view, name='edit_role'),
    path('roles/<int:role_id>/delete/', views.delete_role_view, name='delete_role'),
    
    # Permission Management
    path('permissions/', views.permission_list_view, name='permission_list'),
]

3. Inventory URLs (inventory/urls.py)

# inventory/urls.py
from django.urls import path
from . import views

app_name = 'inventory'
urlpatterns = [
    # Dashboard
    path('', views.inventory_dashboard, name='dashboard'),
    
    # Products
    path('products/', views.product_list_view, name='product_list'),
    path('products/create/', views.create_product_view, name='create_product'),
    path('products/<int:product_id>/', views.product_detail_view, name='product_detail'),
    path('products/<int:product_id>/edit/', views.edit_product_view, name='edit_product'),
    path('products/<int:product_id>/delete/', views.delete_product_view, name='delete_product'),
    
    # Categories
    path('categories/', views.category_list_view, name='category_list'),
    path('categories/create/', views.create_category_view, name='create_category'),
    path('categories/<int:category_id>/edit/', views.edit_category_view, name='edit_category'),
    path('categories/<int:category_id>/delete/', views.delete_category_view, name='delete_category'),
    
    # Units of Measure
    path('uom/', views.uom_list_view, name='uom_list'),
    path('uom/create/', views.create_uom_view, name='create_uom'),
    path('uom/<int:uom_id>/edit/', views.edit_uom_view, name='edit_uom'),
    path('uom/<int:uom_id>/delete/', views.delete_uom_view, name='delete_uom'),
    
    # Warehouses
    path('warehouses/', views.warehouse_list_view, name='warehouse_list'),
    path('warehouses/create/', views.create_warehouse_view, name='create_warehouse'),
    path('warehouses/<int:warehouse_id>/edit/', views.edit_warehouse_view, name='edit_warehouse'),
    path('warehouses/<int:warehouse_id>/delete/', views.delete_warehouse_view, name='delete_warehouse'),
    
    # Stock Movements
    path('movements/', views.stock_movement_list_view, name='movement_list'),
    path('movements/in/', views.stock_in_view, name='stock_in'),
    path('movements/out/', views.stock_out_view, name='stock_out'),
    path('movements/adjustment/', views.stock_adjustment_view, name='stock_adjustment'),
    path('movements/transfer/', views.stock_transfer_view, name='stock_transfer'),
]

4. Purchasing URLs (purchasing/urls.py)

# purchasing/urls.py
from django.urls import path
from . import views

app_name = 'purchasing'
urlpatterns = [
    # Dashboard
    path('', views.purchasing_dashboard, name='dashboard'),
    
    # Suppliers
    path('suppliers/', views.supplier_list_view, name='supplier_list'),
    path('suppliers/create/', views.create_supplier_view, name='create_supplier'),
    path('suppliers/<int:supplier_id>/', views.supplier_detail_view, name='supplier_detail'),
    path('suppliers/<int:supplier_id>/edit/', views.edit_supplier_view, name='edit_supplier'),
    path('suppliers/<int:supplier_id>/delete/', views.delete_supplier_view, name='delete_supplier'),
    
    # Purchase Orders
    path('orders/', views.po_list_view, name='po_list'),
    path('orders/create/', views.create_po_view, name='create_po'),
    path('orders/<str:po_number>/', views.po_detail_view, name='po_detail'),
    path('orders/<str:po_number>/edit/', views.edit_po_view, name='edit_po'),
    path('orders/<str:po_number>/approve/', views.approve_po_view, name='approve_po'),
    path('orders/<str:po_number>/cancel/', views.cancel_po_view, name='cancel_po'),
    path('orders/<str:po_number>/delete/', views.delete_po_view, name='delete_po'),
    
    # Goods Receipt
    path('receipts/', views.gr_list_view, name='gr_list'),
    path('receipts/create/<str:po_number>/', views.create_gr_view, name='create_gr'),
    path('receipts/<str:gr_number>/', views.gr_detail_view, name='gr_detail'),
]

5. Sales URLs (sales/urls.py)

# sales/urls.py
from django.urls import path
from . import views

app_name = 'sales'
urlpatterns = [
    # Dashboard
    path('', views.sales_dashboard, name='dashboard'),
    
    # Customers
    path('customers/', views.customer_list_view, name='customer_list'),
    path('customers/create/', views.create_customer_view, name='create_customer'),
    path('customers/<int:customer_id>/', views.customer_detail_view, name='customer_detail'),
    path('customers/<int:customer_id>/edit/', views.edit_customer_view, name='edit_customer'),
    path('customers/<int:customer_id>/delete/', views.delete_customer_view, name='delete_customer'),
    
    # Sales Orders
    path('orders/', views.so_list_view, name='so_list'),
    path('orders/create/', views.create_so_view, name='create_so'),
    path('orders/<str:so_number>/', views.so_detail_view, name='so_detail'),
    path('orders/<str:so_number>/edit/', views.edit_so_view, name='edit_so'),
    path('orders/<str:so_number>/approve/', views.approve_so_view, name='approve_so'),
    path('orders/<str:so_number>/cancel/', views.cancel_so_view, name='cancel_so'),
    path('orders/<str:so_number>/delete/', views.delete_so_view, name='delete_so'),
    
    # Delivery
    path('deliveries/', views.delivery_list_view, name='delivery_list'),
    path('deliveries/create/<str:so_number>/', views.create_delivery_view, name='create_delivery'),
    path('deliveries/<str:delivery_number>/', views.delivery_detail_view, name='delivery_detail'),
]

6. Manufacturing URLs (manufacturing/urls.py)

# manufacturing/urls.py
from django.urls import path
from . import views

app_name = 'manufacturing'
urlpatterns = [
    # Dashboard
    path('', views.manufacturing_dashboard, name='dashboard'),
    
    # Bill of Materials
    path('bom/', views.bom_list_view, name='bom_list'),
    path('bom/create/', views.create_bom_view, name='create_bom'),
    path('bom/<int:bom_id>/', views.bom_detail_view, name='bom_detail'),
    path('bom/<int:bom_id>/edit/', views.edit_bom_view, name='edit_bom'),
    path('bom/<int:bom_id>/delete/', views.delete_bom_view, name='delete_bom'),
    
    # Manufacturing Orders
    path('orders/', views.mo_list_view, name='mo_list'),
    path('orders/create/', views.create_mo_view, name='create_mo'),
    path('orders/<str:mo_number>/', views.mo_detail_view, name='mo_detail'),
    path('orders/<str:mo_number>/edit/', views.edit_mo_view, name='edit_mo'),
    path('orders/<str:mo_number>/start/', views.start_mo_view, name='start_mo'),
    path('orders/<str:mo_number>/complete/', views.complete_mo_view, name='complete_mo'),
    path('orders/<str:mo_number>/cancel/', views.cancel_mo_view, name='cancel_mo'),
    path('orders/<str:mo_number>/delete/', views.delete_mo_view, name='delete_mo'),
]

7. Database Management URLs (database_management/urls.py)

# database_management/urls.py
from django.urls import path
from . import views

app_name = 'database_management'
urlpatterns = [
    path('', views.db_dashboard, name='dashboard'),
    path('backup/', views.backup_view, name='backup'),
    path('restore/', views.restore_view, name='restore'),
    path('initialize/', views.initialize_view, name='initialize'),
    path('backups/', views.backup_list_view, name='backup_list'),
    path('backups/<int:backup_id>/download/', views.download_backup_view, name='download_backup'),
    path('backups/<int:backup_id>/delete/', views.delete_backup_view, name='delete_backup'),
]

8. Reports URLs (reports/urls.py)

# reports/urls.py
from django.urls import path
from . import views

app_name = 'reports'
urlpatterns = [
    path('', views.reports_dashboard, name='dashboard'),
    path('inventory/', views.inventory_report_view, name='inventory_report'),
    path('sales/', views.sales_report_view, name='sales_report'),
    path('purchasing/', views.purchasing_report_view, name='purchasing_report'),
    path('manufacturing/', views.manufacturing_report_view, name='manufacturing_report'),
    path('financial/', views.financial_report_view, name='financial_report'),
    path('<int:report_id>/export/excel/', views.export_to_excel_view, name='export_excel'),
    path('<int:report_id>/export/pdf/', views.export_to_pdf_view, name='export_pdf'),
]

9. Dashboard URLs (dashboard/urls.py)

# dashboard/urls.py
from django.urls import path
from . import views

app_name = 'dashboard'
urlpatterns = [
    path('', views.home, name='home'),
    path('print/', views.print_dashboard, name='print_dashboard'),
    path('widgets/<int:widget_id>/configure/', views.configure_widget_view, name='configure_widget'),
    path('widgets/<int:widget_id>/toggle/', views.toggle_widget_view, name='toggle_widget'),
]

URL Naming Convention

To maintain consistency across the application, we'll follow these naming conventions:

  1. List views: module_list (e.g., product_list, user_list)
  2. Detail views: module_detail (e.g., product_detail, user_detail)
  3. Create views: create_module (e.g., create_product, create_user)
  4. Edit views: edit_module (e.g., edit_product, edit_user)
  5. Delete views: delete_module (e.g., delete_product, delete_user)
  6. Action views: action_module (e.g., approve_po, start_mo)

Access Control

URLs will be protected using Django's permission system:

  • Superusers can access all URLs
  • Regular users can only access URLs for modules they have permission to
  • Some URLs (like login/logout) are publicly accessible

API Endpoints (Future Consideration)

For potential future API development, we can add API endpoints:

# api/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter

urlpatterns = [
    path('api/v1/inventory/', include('inventory.api_urls')),
    path('api/v1/purchasing/', include('purchasing.api_urls')),
    path('api/v1/sales/', include('sales.api_urls')),
    # ... other API endpoints
]

This URL structure provides a clean, organized, and scalable routing system for the manufacturing application, making it easy for users to navigate and for developers to maintain.