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

301 lines
12 KiB
Markdown

# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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)
```python
# 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:
```python
# 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.