forked from erp-dev/erp
feat: added print_count api, added merchant setting model, added manual mode setting for purchase order
This commit is contained in:
@@ -38,6 +38,21 @@ class QuickInputAdmin(admin.ModelAdmin):
|
||||
list_filter = ('group',)
|
||||
|
||||
|
||||
@admin.register(models.MerchantSetting)
|
||||
class MerchantSettingAdmin(admin.ModelAdmin):
|
||||
list_display = (
|
||||
'merchant', 'key', 'value',
|
||||
'type', 'val_str', 'val_int',
|
||||
'val_float', 'val_bool', 'description',
|
||||
)
|
||||
list_filter = ('merchant', 'type')
|
||||
search_fields = ('merchant__name', 'key', 'description')
|
||||
|
||||
@admin.display(description='设置值')
|
||||
def _value(self, obj):
|
||||
return obj.value()
|
||||
|
||||
|
||||
@admin.register(models.UserProfile)
|
||||
class UserProfileAdmin(AdminBase):
|
||||
list_display = ('user', 'merchant')
|
||||
|
||||
30
basic_info/migrations/0014_merchantsetting.py
Normal file
30
basic_info/migrations/0014_merchantsetting.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.2.7 on 2025-11-28 06:00
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('basic_info', '0013_alter_customer_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MerchantSetting',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('key', models.CharField(max_length=100, verbose_name='设置项')),
|
||||
('val', models.CharField(max_length=100, verbose_name='设置值')),
|
||||
('description', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('merchant', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='settings', to='basic_info.merchant', verbose_name='所属商户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商户设置',
|
||||
'verbose_name_plural': '商户设置',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 5.2.7 on 2025-11-28 06:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('basic_info', '0014_merchantsetting'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='merchantsetting',
|
||||
name='val',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='merchantsetting',
|
||||
name='val_bool',
|
||||
field=models.BooleanField(blank=True, null=True, verbose_name='设置值(布尔值)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='merchantsetting',
|
||||
name='val_float',
|
||||
field=models.FloatField(blank=True, null=True, verbose_name='设置值(浮点数)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='merchantsetting',
|
||||
name='val_int',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='设置值(整数)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='merchantsetting',
|
||||
name='val_str',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='设置值(字符串)'),
|
||||
),
|
||||
]
|
||||
18
basic_info/migrations/0016_merchantsetting_type.py
Normal file
18
basic_info/migrations/0016_merchantsetting_type.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.7 on 2025-11-28 06:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('basic_info', '0015_remove_merchantsetting_val_merchantsetting_val_bool_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='merchantsetting',
|
||||
name='type',
|
||||
field=models.CharField(choices=[('str', '字符串'), ('int', '整数'), ('float', '浮点数'), ('bool', '布尔值')], default='str', max_length=20, verbose_name='设置类型'),
|
||||
),
|
||||
]
|
||||
@@ -452,3 +452,52 @@ class VehicleTransportRecord(ModelBase):
|
||||
class Meta:
|
||||
verbose_name = '司机车次'
|
||||
verbose_name_plural = '司机车次'
|
||||
|
||||
|
||||
class MerchantSettingTypeEnum(models.TextChoices):
|
||||
"""商户设置类型枚举"""
|
||||
STR = 'str', '字符串'
|
||||
INT = 'int', '整数'
|
||||
FLOAT = 'float', '浮点数'
|
||||
BOOL = 'bool', '布尔值'
|
||||
|
||||
|
||||
class MerchantSetting(ModelBase):
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
merchant = models.ForeignKey('Merchant', on_delete=models.PROTECT, related_name='settings', verbose_name='所属商户')
|
||||
key = models.CharField(max_length=100, verbose_name='设置项')
|
||||
type = models.CharField(
|
||||
max_length=20,
|
||||
choices=MerchantSettingTypeEnum.choices,
|
||||
default=MerchantSettingTypeEnum.STR,
|
||||
verbose_name='设置类型',
|
||||
)
|
||||
val_str = models.CharField(max_length=100, null=True, blank=True, verbose_name='设置值(字符串)')
|
||||
val_int = models.IntegerField(null=True, blank=True, verbose_name='设置值(整数)')
|
||||
val_float = models.FloatField(null=True, blank=True, verbose_name='设置值(浮点数)')
|
||||
val_bool = models.BooleanField(null=True, blank=True, verbose_name='设置值(布尔值)')
|
||||
description = models.TextField(blank=True, null=True, verbose_name='备注')
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
if self.type == MerchantSettingTypeEnum.STR:
|
||||
return self.val_str
|
||||
elif self.type == MerchantSettingTypeEnum.INT:
|
||||
return self.val_int
|
||||
elif self.type == MerchantSettingTypeEnum.FLOAT:
|
||||
return self.val_float
|
||||
elif self.type == MerchantSettingTypeEnum.BOOL:
|
||||
return self.val_bool
|
||||
raise ValueError(f'Invalid setting type: {self.type}')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.merchant.name} - {self.key}'
|
||||
|
||||
class Meta:
|
||||
verbose_name = '商户设置'
|
||||
verbose_name_plural = '商户设置'
|
||||
|
||||
|
||||
class MerchantSettingKeyEnum(models.TextChoices):
|
||||
"""商户设置项枚举"""
|
||||
AUTO_CREATE_STOCK_CHANGE_TASKS = 'auto_create_stock_change_tasks', '自动创建出入库记录任务'
|
||||
|
||||
@@ -73,3 +73,9 @@ class DataVisibilityService:
|
||||
return False
|
||||
|
||||
return basic_models.WareHouse.objects.filter(id=warehouse_id).filter(merchant=emp.merchant).exists()
|
||||
|
||||
|
||||
class MerchantSettingService:
|
||||
@staticmethod
|
||||
def get_setting(merchant: basic_models.Merchant, key: basic_models.MerchantSettingKeyEnum):
|
||||
return basic_models.MerchantSetting.objects.get(merchant=merchant, key=key)
|
||||
|
||||
Reference in New Issue
Block a user