提交 957ba09a authored 作者: 苏星豪's avatar 苏星豪

合并分支 'master' 到 'test'

Master 查看合并请求 tj_django/datacenter!9
# Generated by Django 3.1.4 on 2022-11-16 10:57
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('company', '0305_companycfg_product_batchlot'),
]
operations = [
migrations.CreateModel(
name='OperationLog',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.IntegerField(blank=True, null=True, verbose_name='实例ID')),
('tb_name', models.CharField(blank=True, max_length=50, null=True, verbose_name='自建表名称')),
('action', models.SmallIntegerField(choices=[(1, '修改'), (2, '删除')], verbose_name='操作类型')),
('changes', models.JSONField(default=list, verbose_name='修改内容')),
('dt', models.DateField(auto_now_add=True, db_index=True, verbose_name='日期')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='时间')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='operationlog_company', to='company.company', verbose_name='所属企业')),
('contenttype', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='operationlog_contenttype', to='contenttypes.contenttype', verbose_name='对像/表名')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='operationlog_user', to=settings.AUTH_USER_MODEL, verbose_name='操作人')),
],
options={
'verbose_name': '修改删除操作日志',
'verbose_name_plural': '修改删除操作日志',
},
),
]
...@@ -17,6 +17,13 @@ from django.contrib.postgres.fields import ArrayField ...@@ -17,6 +17,13 @@ from django.contrib.postgres.fields import ArrayField
# from django.dispatch import receiver # from django.dispatch import receiver
# from django.contrib.auth.validators import UnicodeUsernameValidator # from django.contrib.auth.validators import UnicodeUsernameValidator
# 2022-11-16
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey,GenericRelation
MEDIA_ROOT=settings.MEDIA_ROOT MEDIA_ROOT=settings.MEDIA_ROOT
def company_upload_register(instance, filename): def company_upload_register(instance, filename):
...@@ -1980,3 +1987,30 @@ class UserWechatOpenids(models.Model): ...@@ -1980,3 +1987,30 @@ class UserWechatOpenids(models.Model):
class Meta: class Meta:
verbose_name=_('用户微信绑定表') verbose_name=_('用户微信绑定表')
verbose_name_plural=_('用户微信绑定表') verbose_name_plural=_('用户微信绑定表')
# 2022-11-16
class OperationLog(models.Model):
'''
model或自建表(非model创建) 修改/删除操作日志
云平台先放company下,restful-api要放在system下
'''
company=models.ForeignKey(Company,verbose_name=_('所属企业'),on_delete=models.CASCADE,related_name='operationlog_company')
contenttype=models.ForeignKey(ContentType,verbose_name=_('对像/表名'),blank=True,null=True,on_delete=models.CASCADE,related_name='operationlog_contenttype')
object_id = models.IntegerField(verbose_name='实例ID',blank=True,null=True)
# 快速实现content_type操作 ,快速插入数据 不生成数据库中的字段
content_object = GenericForeignKey('contenttype','object_id')
# 自建表
tb_name=models.CharField(_('自建表名称'),max_length=50,blank=True,null=True)
action=models.SmallIntegerField(_('操作类型'),choices=( (1,_('修改')), (2,_('删除')) ))
user=models.ForeignKey(User,verbose_name=_('操作人'),on_delete=models.CASCADE,related_name='operationlog_user')
#修改 字段(名):{'old':旧值,'new':新值}
#删除:{"data":{当前数据记录格式如{字段1:v1,字段2:v2,字段3:v3...},"details":[与当前记录关联的子记录明细{字段1:v1,字段2:v2,字段3:v3...},{...}]} 一般只打删除标记,不做物理删除
changes=models.JSONField(_('修改内容'),default=list)
dt=models.DateField(_('日期'),auto_now_add=True,db_index=True)
tm=models.DateTimeField(_('时间'),auto_now_add=True)
class Meta:
verbose_name=_('修改删除操作日志')
verbose_name_plural=_('修改删除操作日志')
...@@ -579,13 +579,21 @@ def get_obj_list(request, company_id, obj): ...@@ -579,13 +579,21 @@ def get_obj_list(request, company_id, obj):
else: else:
for r in rs: for r in rs:
d.append({'id':r[0],'code':r[1],'name':r[2],'barcode':r[3]}) d.append({'id':r[0],'code':r[1],'name':r[2],'barcode':r[3]})
""" """
#s = "select id,coalesce(external_code,''),name,coalesce(barcode,''),coalesce(photo,''),"+\
# "coalesce((select value from product_productprop where id=("+\
# "SELECT prd_property_id FROM product_prdprops where product_id=p.id and categoryprop_id=5 and company_id=p.company_id)"+\
# "),'') "+\
# "from product_product p where company_id="+str(c.ancestor_id)+" and is_delete=false"
# 2022-11-18 categoryprop_id 不同企业类型包装规格ID不同,不能写死
aid=str(c.ancestor_id)
s = "select id,coalesce(external_code,''),name,coalesce(barcode,''),coalesce(photo,''),"+\ s = "select id,coalesce(external_code,''),name,coalesce(barcode,''),coalesce(photo,''),"+\
"coalesce((select value from product_productprop where id=("+\ "coalesce((select value FROM product_productprop where company_id="+aid+" and categoryprop_id=(SELECT id FROM company_categoryprop where name='package' "+\
"SELECT prd_property_id FROM product_prdprops where product_id=p.id and categoryprop_id=5 and company_id=p.company_id)"+\ "and category_id=(select category_id from company_company where id="+aid+")) "+\
"),'') "+\ "and id in (select prd_property_id from product_prdprops where product_id=p.id)),'') "+\
"from product_product p where company_id="+str(c.ancestor_id)+" and is_delete=false" "from product_product p where company_id="+aid+" and is_delete=false"
if is_banquet == "1": if is_banquet == "1":
s = s+ ' and is_banquet = true ' s = s+ ' and is_banquet = true '
......
...@@ -26,7 +26,6 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))).replace(' ...@@ -26,7 +26,6 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))).replace('
SECRET_KEY = '#bt&r7&_sgnw5)6gjcervgu$#&3t@j=iix&r2faosv$#12$_+m' SECRET_KEY = '#bt&r7&_sgnw5)6gjcervgu$#&3t@j=iix&r2faosv$#12$_+m'
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True DEBUG = True
#测试用true #测试用true
......
# Generated by Django 3.1.4 on 2022-11-18 15:25
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('inventory', '0183_auto_20221101_0956'),
]
operations = [
migrations.CreateModel(
name='receiptdetails',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('wrapper_id', models.IntegerField(blank=True, null=True, verbose_name='标签外包码ID')),
('label_code', models.CharField(db_index=True, max_length=32, verbose_name='标签号码')),
('label_id', models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='标签ID')),
('label_pk_id', models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name='标签PKID')),
('product_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='产品名称')),
('dt', models.DateField(blank=True, db_index=True, null=True, verbose_name='生成日期')),
('tm', models.DateTimeField(auto_now_add=True, verbose_name='生成时间')),
('label_pkg', models.SmallIntegerField(blank=True, db_index=True, null=True, verbose_name='标签类型')),
('remark', models.CharField(blank=True, max_length=100, null=True, verbose_name='备注')),
('from_agent_id', models.IntegerField(blank=True, null=True, verbose_name='来源经销商')),
('receipt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='inventory.receipt', verbose_name='Receipt')),
],
options={
'verbose_name': '确认收货明细记录',
'verbose_name_plural': '确认收货明细记录',
},
),
]
...@@ -1031,3 +1031,19 @@ class StackLog(models.Model): ...@@ -1031,3 +1031,19 @@ class StackLog(models.Model):
verbose_name = _('垛盘数据变更') verbose_name = _('垛盘数据变更')
verbose_name_plural = _('垛盘数据变更') verbose_name_plural = _('垛盘数据变更')
class receiptdetails(models.Model):
receipt = models.ForeignKey(Receipt, verbose_name=_('Receipt'), on_delete=models.CASCADE)
wrapper_id = models.IntegerField(_('标签外包码ID'), blank=True, null=True)
label_code = models.CharField(_('标签号码'), max_length=32, db_index=True)
label_id = models.BigIntegerField(_('标签ID'), blank=True, null=True, db_index=True)
label_pk_id = models.BigIntegerField(_('标签PKID'), db_index=True, blank=True, null=True)
product_id = models.IntegerField(_('产品名称'), blank=True, null=True, db_index=True)
dt = models.DateField(_('生成日期'), blank=True, null=True, db_index=True)
tm = models.DateTimeField(_('生成时间'), auto_now_add=True)
label_pkg = models.SmallIntegerField(_('标签类型'), blank=True, null=True, db_index=True)
remark = models.CharField(_('备注'), max_length=100, blank=True, null=True)
from_agent_id = models.IntegerField(_('来源经销商'), blank=True, null=True)
class Meta:
verbose_name = _('确认收货明细记录')
verbose_name_plural = _('确认收货明细记录')
\ No newline at end of file
差异被折叠。
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论