Feature: справочник Статусы заказов, поле Статус в заказе клиента, оформление в списке (зелёный/песочный)
Made-with: Cursor
This commit is contained in:
@@ -8,6 +8,7 @@ from .models import (
|
||||
Employee,
|
||||
CashAccount,
|
||||
Product,
|
||||
OrderStatus,
|
||||
)
|
||||
|
||||
admin.site.register(Currency)
|
||||
@@ -18,3 +19,4 @@ admin.site.register(Supplier)
|
||||
admin.site.register(Employee)
|
||||
admin.site.register(CashAccount)
|
||||
admin.site.register(Product)
|
||||
admin.site.register(OrderStatus)
|
||||
|
||||
24
app/references/migrations/0002_order_status.py
Normal file
24
app/references/migrations/0002_order_status.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.2.11 on 2026-02-26 16:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('references', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OrderStatus',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, verbose_name='Название')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Статус заказа',
|
||||
'verbose_name_plural': 'Статусы заказов',
|
||||
},
|
||||
),
|
||||
]
|
||||
24
app/references/migrations/0003_orderstatus_data.py
Normal file
24
app/references/migrations/0003_orderstatus_data.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Data migration: начальные статусы заказов
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def create_default_statuses(apps, schema_editor):
|
||||
OrderStatus = apps.get_model("references", "OrderStatus")
|
||||
for name in ["В работе", "Выполнено"]:
|
||||
OrderStatus.objects.get_or_create(name=name)
|
||||
|
||||
|
||||
def noop(apps, schema_editor):
|
||||
pass
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("references", "0002_order_status"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(create_default_statuses, noop),
|
||||
]
|
||||
@@ -99,3 +99,15 @@ class Product(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class OrderStatus(models.Model):
|
||||
"""Статусы заказов."""
|
||||
name = models.CharField("Название", max_length=100)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Статус заказа"
|
||||
verbose_name_plural = "Статусы заказов"
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@@ -36,4 +36,8 @@ urlpatterns = [
|
||||
path("products/create/", views.ProductCreate.as_view(), name="product_create"),
|
||||
path("products/<int:pk>/edit/", views.ProductUpdate.as_view(), name="product_update"),
|
||||
path("products/<int:pk>/delete/", views.ProductDelete.as_view(), name="product_delete"),
|
||||
path("order-statuses/", views.OrderStatusList.as_view(), name="orderstatus_list"),
|
||||
path("order-statuses/create/", views.OrderStatusCreate.as_view(), name="orderstatus_create"),
|
||||
path("order-statuses/<int:pk>/edit/", views.OrderStatusUpdate.as_view(), name="orderstatus_update"),
|
||||
path("order-statuses/<int:pk>/delete/", views.OrderStatusDelete.as_view(), name="orderstatus_delete"),
|
||||
]
|
||||
|
||||
@@ -17,6 +17,7 @@ from .models import (
|
||||
Employee,
|
||||
CashAccount,
|
||||
Product,
|
||||
OrderStatus,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -129,3 +130,10 @@ ProductList, ProductCreate, ProductUpdate, ProductDelete = _ref_view(
|
||||
"references:product_update", "references:product_delete",
|
||||
"Товары", "Товар",
|
||||
)
|
||||
|
||||
# Статусы заказов
|
||||
OrderStatusList, OrderStatusCreate, OrderStatusUpdate, OrderStatusDelete = _ref_view(
|
||||
OrderStatus, "references:orderstatus_list", "references:orderstatus_create",
|
||||
"references:orderstatus_update", "references:orderstatus_delete",
|
||||
"Статусы заказов", "Статус заказа",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user