301 lines
12 KiB
Markdown
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. |