重新同步数据库
This commit is contained in:
parent
1806eb80bb
commit
fb24904b6b
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
|
@ -20,7 +20,7 @@ class Migration(migrations.Migration):
|
|||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '准入'), (20, '禁入')], verbose_name='准入类型')),
|
||||
('obj_cate', models.CharField(help_text='post/org/people', max_length=20, verbose_name='对象类型')),
|
||||
('obj_cate', models.CharField(help_text='post/org/people/visit', max_length=20, verbose_name='对象类型')),
|
||||
('stay_minute_min', models.PositiveSmallIntegerField(default=0, verbose_name='最短停留时间')),
|
||||
('stay_minute_max', models.PositiveSmallIntegerField(default=0, verbose_name='最长停留时间')),
|
||||
('sort', models.PositiveSmallIntegerField(default=1, verbose_name='排序')),
|
||||
|
@ -41,9 +41,7 @@ class Migration(migrations.Migration):
|
|||
('level', models.PositiveSmallIntegerField(verbose_name='区域风险等级')),
|
||||
('cate', models.PositiveSmallIntegerField(verbose_name='区域分类')),
|
||||
('number', models.CharField(blank=True, max_length=20, null=True, verbose_name='编号')),
|
||||
('visitor_yes', models.BooleanField(default=False, verbose_name='准许访客人员')),
|
||||
('remployee_yes', models.BooleanField(default=False, verbose_name='准许相关方人员')),
|
||||
('employee_yes', models.BooleanField(default=True, verbose_name='准许内部员工')),
|
||||
('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='准入人员类型')),
|
||||
('count_people_min', models.PositiveIntegerField(default=0, verbose_name='最小人员数')),
|
||||
('count_people_max', models.PositiveIntegerField(default=1000, verbose_name='最大人员数')),
|
||||
('count_people', models.PositiveIntegerField(default=0, verbose_name='当前人数')),
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -10,10 +10,10 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('system', '0001_initial'),
|
||||
('am', '0001_initial'),
|
||||
('hrm', '0001_initial'),
|
||||
('system', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
@ -30,7 +30,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='area',
|
||||
name='manager',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='区域负责人'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='区域负责人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='area',
|
||||
|
@ -50,17 +50,17 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='access',
|
||||
name='dept',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dept', verbose_name='关联部门'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='关联部门'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='access',
|
||||
name='employee',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='关联人员'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='access',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='关联岗位'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='access',
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 08:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('am', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='access',
|
||||
name='obj_cate',
|
||||
field=models.CharField(help_text='post/org/people/visit', max_length=20, verbose_name='对象类型'),
|
||||
),
|
||||
]
|
|
@ -1,30 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-13 06:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('am', '0003_alter_access_obj_cate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='area',
|
||||
name='employee_yes',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='area',
|
||||
name='remployee_yes',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='area',
|
||||
name='visitor_yes',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='area',
|
||||
name='access_list',
|
||||
field=models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='准入人员类型'),
|
||||
),
|
||||
]
|
|
@ -37,7 +37,7 @@ class Area(CommonBModel):
|
|||
stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0, help_text='0代表未配置')
|
||||
stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0, help_text='0代表未配置')
|
||||
is_hidden = models.BooleanField('隐藏围栏用', default=False)
|
||||
manager = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='区域负责人', null=True, blank=True)
|
||||
manager = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name='区域负责人', null=True, blank=True)
|
||||
third_info = models.JSONField('三方信息', default=dict,
|
||||
null=False, blank=True)
|
||||
|
||||
|
@ -60,9 +60,9 @@ class Access(CommonADModel):
|
|||
area = models.ForeignKey(Area, verbose_name='关联区域',
|
||||
on_delete=models.CASCADE)
|
||||
obj_cate = models.CharField('对象类型', max_length=20, help_text='post/org/people/visit')
|
||||
post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.CASCADE, null=True, blank=True)
|
||||
dept = models.ForeignKey(Dept, verbose_name='关联部门', on_delete=models.CASCADE, null=True, blank=True)
|
||||
employee = models.ForeignKey(Employee, verbose_name='关联人员', on_delete=models.CASCADE, null=True, blank=True)
|
||||
post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
dept = models.ForeignKey(Dept, verbose_name='关联部门', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
employee = models.ForeignKey(Employee, verbose_name='关联人员', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
stay_minute_min = models.PositiveSmallIntegerField('最短停留时间', default=0)
|
||||
stay_minute_max = models.PositiveSmallIntegerField('最长停留时间', default=0)
|
||||
sort = models.PositiveSmallIntegerField('排序', default=1)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
|
@ -21,9 +22,6 @@ class Migration(migrations.Migration):
|
|||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('always_on', models.BooleanField(default=True, verbose_name='始终开启')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Event',
|
||||
|
@ -32,11 +30,16 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('face_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='人脸照')),
|
||||
('global_img', models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照')),
|
||||
('location', models.JSONField(blank=True, default=dict, verbose_name='事件点位坐标')),
|
||||
('obj_cate', models.CharField(help_text='people(人员)/...', max_length=20, verbose_name='发生对象')),
|
||||
('msg', models.TextField(blank=True, null=True, verbose_name='事件文本')),
|
||||
('voice_msg', models.TextField(blank=True, null=True, verbose_name='语音文本')),
|
||||
('voice', models.TextField(blank=True, null=True, verbose_name='语音地址')),
|
||||
('is_timeout', models.BooleanField(default=False, verbose_name='是否超时')),
|
||||
('mark', models.PositiveSmallIntegerField(default=10, help_text='10(正常)/20(误报)', verbose_name='事件标记')),
|
||||
('happen_time', models.DateTimeField(blank=True, null=True, verbose_name='事件发生时间')),
|
||||
('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
|
||||
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
|
||||
('is_pushed', models.BooleanField(default=False, verbose_name='是否已推送')),
|
||||
|
@ -52,14 +55,17 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('code', models.CharField(max_length=10, unique=True, verbose_name='标识')),
|
||||
('code', models.CharField(max_length=20, unique=True, verbose_name='标识')),
|
||||
('name', models.CharField(max_length=20, unique=True, verbose_name='名称')),
|
||||
('priority', models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级')),
|
||||
('trigger', models.PositiveSmallIntegerField(choices=[(10, '监控'), (20, '定位')], default=10, verbose_name='触发方式')),
|
||||
('self_algo', models.BooleanField(default=False, verbose_name='识别算法')),
|
||||
('speaker_on', models.BooleanField(default=True, verbose_name='开启音响报警')),
|
||||
('speaker_on', models.BooleanField(default=True, verbose_name='开启喇叭报警')),
|
||||
('voice_person', models.PositiveSmallIntegerField(default=0, help_text='0女声3男声', verbose_name='声音选择')),
|
||||
('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定音响区域级别过滤')),
|
||||
('voice_num', models.PositiveSmallIntegerField(default=2, verbose_name='播放次数')),
|
||||
('filter_area_level', models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定喇叭区域级别过滤')),
|
||||
('hanle_minute', models.PositiveSmallIntegerField(default=0, help_text='超过处理时间事件状态变为超时未处理,0代表未配置', verbose_name='处理时间')),
|
||||
('same_allow_minute', models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -68,10 +74,16 @@ class Migration(migrations.Migration):
|
|||
migrations.CreateModel(
|
||||
name='Eventdo',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('handle_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
|
||||
('handle_desc', models.TextField(blank=True, null=True, verbose_name='处理描述')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NotifySetting',
|
||||
|
@ -80,8 +92,8 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('obj_cate', models.CharField(help_text='post岗位/user用户/var变量', max_length=20, verbose_name='提醒对象')),
|
||||
('var', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')),
|
||||
('obj_cate', models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象')),
|
||||
('variable', models.CharField(blank=True, help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)', max_length=20, null=True, verbose_name='提醒变量')),
|
||||
('filter_recipient', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='提醒人员过滤')),
|
||||
('filter_area_level', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='区域级别过滤')),
|
||||
('sms_enable', models.BooleanField(default=False, verbose_name='短信通知')),
|
||||
|
@ -103,6 +115,8 @@ class Migration(migrations.Migration):
|
|||
('msg', models.TextField(blank=True, null=True, verbose_name='推送文本')),
|
||||
('is_read', models.BooleanField(default=False, verbose_name='站内信已读')),
|
||||
('can_handle', models.BooleanField(default=False, verbose_name='是否可处理')),
|
||||
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件')),
|
||||
('notify_setting', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -10,35 +10,16 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('hrm', '0001_initial'),
|
||||
('am', '0002_initial'),
|
||||
('opm', '0001_initial'),
|
||||
('third', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('ecm', '0001_initial'),
|
||||
('am', '0002_initial'),
|
||||
('system', '0001_initial'),
|
||||
('hrm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='remind',
|
||||
name='dept',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.dept', verbose_name='部门'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remind',
|
||||
name='event',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.event', verbose_name='关联事件'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remind',
|
||||
name='notify_setting',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ecm.notifysetting', verbose_name='通过哪个配置'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remind',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='岗位'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remind',
|
||||
name='recipient',
|
||||
|
@ -57,7 +38,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='notifysetting',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='提醒岗位'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='提醒岗位'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='notifysetting',
|
||||
|
@ -67,12 +48,12 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='notifysetting',
|
||||
name='user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='提醒用户'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
name='cate',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ecm.eventcate', verbose_name='关联事件种类'),
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='do_cate', to='ecm.eventcate', verbose_name='关联事件种类'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
|
@ -82,17 +63,22 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
name='handle_user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='create_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='eventcate_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='opl_cates',
|
||||
field=models.ManyToManyField(to='opm.OplCate', verbose_name='关联许可证'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='speakers',
|
||||
field=models.ManyToManyField(blank=True, to='third.TDevice', verbose_name='固定音响'),
|
||||
field=models.ManyToManyField(blank=True, related_name='ec_speakers', to='third.TDevice', verbose_name='固定喇叭'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
|
@ -102,7 +88,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='area',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='发生区域'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='发生区域'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
|
@ -122,23 +108,28 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='employee',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='当事人'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当事人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='handle_user',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='处理人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='imgs',
|
||||
field=models.ManyToManyField(blank=True, to='system.File', verbose_name='事件图片'),
|
||||
name='opl',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='opm.opl', verbose_name='关联许可证'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='event_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='vchannel',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='third.tdevice', verbose_name='抓拍设备'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='algochannel',
|
||||
name='algo',
|
||||
|
@ -149,4 +140,8 @@ class Migration(migrations.Migration):
|
|||
name='vchannel',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='视频通道'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='algochannel',
|
||||
unique_together={('algo', 'vchannel')},
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 06:19
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0002_alter_tdevice_name'),
|
||||
('ecm', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterUniqueTogether(
|
||||
name='algochannel',
|
||||
unique_together={('algo', 'vchannel')},
|
||||
),
|
||||
]
|
|
@ -1,32 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-02 02:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0003_alter_algochannel_unique_together'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='imgs',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='face_img',
|
||||
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='人脸照'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='global_img',
|
||||
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='全景照'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='is_timeout',
|
||||
field=models.BooleanField(default=False, verbose_name='是否超时'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-02 02:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0004_auto_20220702_1025'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='voice_msg',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='语音文本'),
|
||||
),
|
||||
]
|
|
@ -1,34 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-02 03:48
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0005_event_voice_msg'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
name='create_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
name='is_deleted',
|
||||
field=models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventdo',
|
||||
name='update_time',
|
||||
field=models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='eventdo',
|
||||
name='id',
|
||||
field=models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID'),
|
||||
),
|
||||
]
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-02 05:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0006_auto_20220702_1148'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='notifysetting',
|
||||
old_name='var',
|
||||
new_name='variable',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='notifysetting',
|
||||
name='obj_cate',
|
||||
field=models.CharField(help_text='post岗位/user用户/variable变量', max_length=20, verbose_name='提醒对象'),
|
||||
),
|
||||
]
|
|
@ -1,35 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-04 00:41
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0003_alter_tdevice_type'),
|
||||
('ecm', '0007_auto_20220702_1327'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='vchannel',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='抓拍设备'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='eventcate',
|
||||
name='filter_area_level',
|
||||
field=models.PositiveSmallIntegerField(choices=[(10, '办公'), (20, '生产一般'), (30, '生产重点'), (40, '四级')], default=10, verbose_name='固定喇叭区域级别过滤'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='eventcate',
|
||||
name='speaker_on',
|
||||
field=models.BooleanField(default=True, verbose_name='开启喇叭报警'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='eventcate',
|
||||
name='speakers',
|
||||
field=models.ManyToManyField(blank=True, related_name='ec_speakers', to='third.TDevice', verbose_name='固定喇叭'),
|
||||
),
|
||||
]
|
|
@ -1,26 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-04 07:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0008_auto_20220704_0841'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='remind',
|
||||
name='dept',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='remind',
|
||||
name='post',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='happen_time',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='事件发生时间'),
|
||||
),
|
||||
]
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 00:55
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0009_auto_20220704_1504'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='priority',
|
||||
field=models.PositiveSmallIntegerField(default=1, help_text='1-99', verbose_name='优先级'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='voice_num',
|
||||
field=models.PositiveSmallIntegerField(default=2, verbose_name='播放次数'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 05:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0010_auto_20220712_0855'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='same_allow_minute',
|
||||
field=models.PositiveSmallIntegerField(default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发', verbose_name='允许时间'),
|
||||
),
|
||||
]
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-13 06:08
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ecm', '0011_eventcate_same_allow_minute'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='eventdo',
|
||||
name='cate',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='do_cate', to='ecm.eventcate', verbose_name='关联事件种类'),
|
||||
),
|
||||
]
|
|
@ -1,25 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-10 07:12
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('am', '0004_auto_20220713_1408'),
|
||||
('ecm', '0012_alter_eventdo_cate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='event',
|
||||
name='area',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='发生区域'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='eventcate',
|
||||
name='code',
|
||||
field=models.CharField(max_length=20, unique=True, verbose_name='标识'),
|
||||
),
|
||||
]
|
|
@ -1,25 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-11 06:03
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('opm', '0002_initial'),
|
||||
('ecm', '0013_auto_20220810_1512'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='operation',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='opm.operation', verbose_name='关联作业'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='eventcate',
|
||||
name='opl_cates',
|
||||
field=models.ManyToManyField(to='opm.OplCate', verbose_name='关联许可证'),
|
||||
),
|
||||
]
|
|
@ -1,24 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-12 09:15
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('opm', '0002_initial'),
|
||||
('ecm', '0014_auto_20220811_1403'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='operation',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='opl',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='opm.opl', verbose_name='关联许可证'),
|
||||
),
|
||||
]
|
|
@ -58,9 +58,9 @@ class NotifySetting(CommonADModel):
|
|||
event_cate = models.ForeignKey(EventCate, verbose_name='关联事件种类', on_delete=models.CASCADE)
|
||||
obj_cate = models.CharField('提醒对象', max_length=20, help_text='post岗位/user用户/variable变量')
|
||||
post = models.ForeignKey(Post, verbose_name='提醒岗位',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
user = models.ForeignKey(User, verbose_name='提醒用户',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
variable = models.CharField('提醒变量', max_length=20, null=True, blank=True,
|
||||
help_text='self(本人)/area_manager(区域负责人)/visit_receptionist(访客接待人)')
|
||||
filter_recipient = models.PositiveSmallIntegerField('提醒人员过滤', null=True, blank=True)
|
||||
|
@ -82,13 +82,13 @@ class Event(CommonBModel):
|
|||
cates = models.ManyToManyField(EventCate, verbose_name='关联事件种类', through='ecm.eventdo')
|
||||
face_img = models.CharField('人脸照', max_length=1000, null=True, blank=True)
|
||||
global_img = models.CharField('全景照', max_length=1000, null=True, blank=True)
|
||||
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.CASCADE, null=True, blank=True)
|
||||
vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.CASCADE, null=True, blank=True)
|
||||
area = models.ForeignKey(Area, verbose_name='发生区域', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
vchannel = models.ForeignKey(TDevice, verbose_name='抓拍设备', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
location = models.JSONField('事件点位坐标', default=dict, null=False, blank=True)
|
||||
opl = models.ForeignKey(Opl, verbose_name='关联许可证', on_delete=models.CASCADE, null=True, blank=True)
|
||||
opl = models.ForeignKey(Opl, verbose_name='关联许可证', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
obj_cate = models.CharField('发生对象', max_length=20, help_text='people(人员)/...')
|
||||
employee = models.ForeignKey(Employee, verbose_name='当事人',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
msg = models.TextField('事件文本', null=True, blank=True)
|
||||
voice_msg = models.TextField('语音文本', null=True, blank=True)
|
||||
voice = models.TextField('语音地址', null=True, blank=True)
|
||||
|
@ -97,7 +97,7 @@ class Event(CommonBModel):
|
|||
happen_time = models.DateTimeField('事件发生时间', null=True, blank=True)
|
||||
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||
handle_user = models.ForeignKey(User, verbose_name='处理人',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
handle_desc = models.TextField('处理描述', null=True, blank=True)
|
||||
is_pushed = models.BooleanField('是否已推送', default=False)
|
||||
|
||||
|
@ -109,7 +109,7 @@ class Eventdo(BaseModel):
|
|||
on_delete=models.CASCADE)
|
||||
handle_time = models.DateTimeField('处理时间', null=True, blank=True)
|
||||
handle_user = models.ForeignKey(User, verbose_name='处理人',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
handle_desc = models.TextField('处理描述', null=True, blank=True)
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django_filters import rest_framework as filters
|
||||
from apps.hrm.models import ClockRecord, Employee, NotWorkRemark
|
||||
from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark
|
||||
|
||||
|
||||
class ClockRecordFilterSet(filters.FilterSet):
|
||||
|
@ -23,7 +23,11 @@ class EmployeeFilterSet(filters.FilterSet):
|
|||
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = ['job_state', 'show_atwork', 'type']
|
||||
fields = {
|
||||
'job_state': ['exact'],
|
||||
'show_atwork': ['exact'],
|
||||
'type': ['exact', 'in']
|
||||
}
|
||||
|
||||
|
||||
class NotWorkRemarkFilterSet(filters.FilterSet):
|
||||
|
@ -39,3 +43,15 @@ class NotWorkRemarkFilterSet(filters.FilterSet):
|
|||
|
||||
def filter_month(self, queryset, name, value):
|
||||
return queryset.filter(not_work_date__month=value)
|
||||
|
||||
|
||||
class CertificateFilterSet(filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Certificate
|
||||
fields = {
|
||||
'employee': ['exact'],
|
||||
'employee__name': ['exact', 'contains'],
|
||||
'employee__user': ['exact'],
|
||||
'employee__type': ['exact', 'in']
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
|
@ -38,7 +38,9 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡')], default=10, verbose_name='打卡类型')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '上班打卡'), (20, '下班打卡')], default=10, verbose_name='打卡类型')),
|
||||
('trigger', models.CharField(max_length=20, verbose_name='触发')),
|
||||
('detail', models.JSONField(blank=True, default=dict, verbose_name='相关记录')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -10,9 +10,9 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('system', '0001_initial'),
|
||||
('hrm', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('system', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
@ -41,6 +41,11 @@ class Migration(migrations.Migration):
|
|||
name='create_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employee_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='所属岗位'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='update_by',
|
||||
|
@ -49,17 +54,12 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='user',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='系统账号'),
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='clockrecord',
|
||||
name='create_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='clockrecord',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='clockrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
name='employee',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='对应人员'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='certificate',
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-05 06:37
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0001_initial'),
|
||||
('hrm', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='所属岗位'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-13 08:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0003_employee_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='phone',
|
||||
field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-28 10:58
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0004_alter_employee_phone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='phone',
|
||||
field=models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号'),
|
||||
),
|
||||
]
|
|
@ -1,51 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-10 07:12
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('hrm', '0005_alter_employee_phone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='clockrecord',
|
||||
name='create_by',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='clockrecord',
|
||||
name='update_by',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='clockrecord',
|
||||
name='detail',
|
||||
field=models.JSONField(blank=True, default=dict, verbose_name='相关记录'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='clockrecord',
|
||||
name='employee',
|
||||
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='对应人员'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='clockrecord',
|
||||
name='trigger',
|
||||
field=models.CharField(default='door', max_length=20, verbose_name='触发'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='clockrecord',
|
||||
name='type',
|
||||
field=models.PositiveSmallIntegerField(choices=[(10, '上班打卡'), (20, '下班打卡')], default=10, verbose_name='打卡类型'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='user',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'),
|
||||
),
|
||||
]
|
|
@ -10,7 +10,7 @@ from rest_framework.permissions import AllowAny
|
|||
from rest_framework.response import Response
|
||||
|
||||
from apps.hrm.errors import NO_NEED_LEVEL_REMARK
|
||||
from apps.hrm.filters import (ClockRecordFilterSet, EmployeeFilterSet,
|
||||
from apps.hrm.filters import (CertificateFilterSet, ClockRecordFilterSet, EmployeeFilterSet,
|
||||
NotWorkRemarkFilterSet)
|
||||
from apps.hrm.models import Certificate, ClockRecord, Employee, NotWorkRemark
|
||||
from apps.hrm.serializers import (CertificateCreateUpdateSerializer, CertificateSerializer, ChannelAuthoritySerializer,
|
||||
|
@ -231,4 +231,4 @@ class CertificateViewSet(CustomModelViewSet):
|
|||
create_serializer_class = CertificateCreateUpdateSerializer
|
||||
update_serializer_class = CertificateCreateUpdateSerializer
|
||||
serializer_class = CertificateSerializer
|
||||
filterset_fields = ['employee__user', 'employee', 'employee__type']
|
||||
filterset_class = CertificateFilterSet
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
@ -81,6 +81,7 @@ class Migration(migrations.Migration):
|
|||
('close_note', models.PositiveSmallIntegerField(blank=True, choices=[(10, '作业正常结束'), (20, '因计划改变停止作业'), (30, '因发生异常终止作业'), (40, '其他')], help_text='正常结束/计划改变停止/发生异常停止/其他', null=True, verbose_name='作业关闭情况')),
|
||||
('close_dos', models.JSONField(blank=True, default=list, verbose_name='关闭工作')),
|
||||
('close_desc', models.TextField(blank=True, null=True, verbose_name='作业关闭描述')),
|
||||
('mtask_id', models.CharField(blank=True, max_length=200, null=True, verbose_name='视频监控任务ID')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
|
|||
|
||||
dependencies = [
|
||||
('hrm', '0002_initial'),
|
||||
('opm', '0001_initial'),
|
||||
('third', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('wf', '0001_initial'),
|
||||
('opm', '0001_initial'),
|
||||
('am', '0002_initial'),
|
||||
('system', '0001_initial'),
|
||||
]
|
||||
|
@ -112,7 +113,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='opl',
|
||||
name='ticket',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'),
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='opl',
|
||||
|
@ -134,6 +135,11 @@ class Migration(migrations.Migration):
|
|||
name='belong_dept',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_belong_dept', to='system.dept', verbose_name='所属部门'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='operation',
|
||||
name='cates',
|
||||
field=models.ManyToManyField(through='opm.Opl', to='opm.OplCate'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='operation',
|
||||
name='coordinator',
|
||||
|
@ -159,6 +165,11 @@ class Migration(migrations.Migration):
|
|||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='operation_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='operation',
|
||||
name='vchannels',
|
||||
field=models.ManyToManyField(to='third.TDevice', verbose_name='监控所用摄像头'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gascheck',
|
||||
name='checker',
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-12 09:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0009_tlog_errors'),
|
||||
('opm', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='operation',
|
||||
name='cates',
|
||||
field=models.ManyToManyField(through='opm.Opl', to='opm.OplCate'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='operation',
|
||||
name='vchannels',
|
||||
field=models.ManyToManyField(to='third.TDevice', verbose_name='监控所用摄像头'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='opl',
|
||||
name='mtask_id',
|
||||
field=models.CharField(blank=True, max_length=200, null=True, verbose_name='视频监控任务ID'),
|
||||
),
|
||||
]
|
|
@ -115,7 +115,7 @@ class Opl(CommonBDModel):
|
|||
close_dos = models.JSONField('关闭工作', default=list, null=False, blank=True)
|
||||
close_desc = models.TextField('作业关闭描述', null=True, blank=True)
|
||||
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
mtask_id = models.CharField('视频监控任务ID', max_length=200, null=True, blank=True)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -10,18 +10,18 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('rpm', '0001_initial'),
|
||||
('hrm', '0002_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('wf', '0001_initial'),
|
||||
('system', '0001_initial'),
|
||||
('rpm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='rpjfile',
|
||||
name='file_cate',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'),
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.dictionary', verbose_name='文件种类'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='rpjfile',
|
||||
|
@ -36,7 +36,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='rpjcertificate',
|
||||
name='rcertificate',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rcertificate', verbose_name='关联相关方证书'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rcertificate', verbose_name='关联相关方证书'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='rpjcertificate',
|
||||
|
@ -61,7 +61,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='rpj',
|
||||
name='ticket',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='关联工单'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='rpj',
|
||||
|
@ -71,7 +71,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='rparty',
|
||||
name='admin',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='rparty',
|
||||
|
@ -116,7 +116,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='remployee',
|
||||
name='employee',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remployee',
|
||||
|
@ -126,7 +126,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='remployee',
|
||||
name='rpj',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='rpm.rpj', verbose_name='最近所属相关方项目'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rpm.rpj', verbose_name='最近所属相关方项目'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='remployee',
|
||||
|
@ -136,7 +136,7 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='rcertificate',
|
||||
name='certificate',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.certificate', verbose_name='关联认可证书'),
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.certificate', verbose_name='关联认可证书'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='rcertificate',
|
||||
|
|
|
@ -21,7 +21,7 @@ class Rparty(CommonBModel):
|
|||
email = models.EmailField('邮箱', null=True, blank=True)
|
||||
address = models.CharField('企业地址', max_length=200, null=True, blank=True)
|
||||
description = models.TextField('概述', null=True, blank=True)
|
||||
admin = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
|
||||
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
|
||||
class Rfile(BaseModel):
|
||||
|
@ -65,7 +65,7 @@ class Rpj(CommonBDModel):
|
|||
rparty = models.ForeignKey(Rparty, verbose_name='关联相关方', on_delete=models.CASCADE)
|
||||
# belong_dept是业务部门可以带过来
|
||||
ticket = models.ForeignKey(Ticket, verbose_name='关联工单',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
|
||||
class Rpjfile(BaseModel):
|
||||
|
@ -73,7 +73,7 @@ class Rpjfile(BaseModel):
|
|||
相关方项目文件库
|
||||
"""
|
||||
file_cate = models.ForeignKey(Dictionary, verbose_name='文件种类',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.CASCADE)
|
||||
files = models.ManyToManyField(File, verbose_name='文件', blank=True)
|
||||
rpj = models.ForeignKey(Rpj, verbose_name='关联相关方项目', on_delete=models.CASCADE)
|
||||
|
||||
|
@ -83,13 +83,13 @@ class Remployee(CommonAModel):
|
|||
相关方成员
|
||||
"""
|
||||
employee = models.ForeignKey(Employee, verbose_name='成员信息',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
on_delete=models.SET_NULL, null=True, blank=True)
|
||||
name = models.CharField('姓名', max_length=20)
|
||||
phone = models.CharField('手机号', max_length=11)
|
||||
photo = models.CharField('证件照', max_length=1000)
|
||||
id_number = models.CharField('身份证号', max_length=100)
|
||||
rparty = models.ForeignKey(Rparty, verbose_name='所属相关方', on_delete=models.CASCADE)
|
||||
rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.CASCADE,
|
||||
rpj = models.ForeignKey(Rpj, verbose_name='最近所属相关方项目', on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
|
||||
|
||||
|
@ -98,7 +98,7 @@ class Rcertificate(CommonAModel):
|
|||
相关方证书
|
||||
"""
|
||||
certificate = models.ForeignKey(Certificate, verbose_name='关联认可证书',
|
||||
on_delete=models.CASCADE,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
remployee = models.ForeignKey(Remployee, verbose_name='关联相关方成员',
|
||||
on_delete=models.CASCADE)
|
||||
|
@ -128,7 +128,7 @@ class Rpjcertificate(BaseModel):
|
|||
相关方项目人员证书
|
||||
"""
|
||||
rpj_member = models.ForeignKey(Rpjmember, verbose_name='关联项目成员', on_delete=models.CASCADE)
|
||||
rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.CASCADE,
|
||||
rcertificate = models.ForeignKey(Rcertificate, verbose_name='关联相关方证书', on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
name = models.CharField('证书名称', max_length=20)
|
||||
number = models.CharField('证书编号', max_length=20)
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
from django_filters import rest_framework as filters
|
||||
from .models import User
|
||||
from .models import Dept, User
|
||||
|
||||
|
||||
class UserFilterSet(filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = {
|
||||
|
@ -12,5 +13,14 @@ class UserFilterSet(filters.FilterSet):
|
|||
'post': ['exact'],
|
||||
'belong_dept': ['exact'],
|
||||
'depts': ['exact'],
|
||||
'type': ['exact']
|
||||
'type': ['exact', 'in']
|
||||
}
|
||||
|
||||
|
||||
class DeptFilterSet(filters.FilterSet):
|
||||
|
||||
class Meta:
|
||||
model = Dept
|
||||
fields = {
|
||||
'type': ['exact', 'in']
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
import apps.system.models
|
||||
from django.conf import settings
|
||||
|
@ -36,8 +36,13 @@ class Migration(migrations.Migration):
|
|||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.CharField(default='employee', max_length=10, verbose_name='账号类型')),
|
||||
('name', models.CharField(blank=True, max_length=20, null=True, verbose_name='姓名')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('avatar', models.CharField(blank=True, default='/media/default/avatar.png', max_length=100, null=True, verbose_name='头像')),
|
||||
('secret', models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥')),
|
||||
('wx_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信公众号OpenId')),
|
||||
('wx_nickname', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称')),
|
||||
('wx_headimg', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信头像')),
|
||||
('wxmp_openid', models.CharField(blank=True, max_length=100, null=True, verbose_name='微信小程序OpenId')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户信息',
|
||||
|
@ -158,8 +163,8 @@ class Migration(migrations.Migration):
|
|||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('data_range', models.PositiveSmallIntegerField(choices=[(10, '全部'), (30, '同级及以下'), (40, '本级及以下'), (50, '本级'), (60, '仅本人')], default=40, verbose_name='数据权限范围')),
|
||||
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')),
|
||||
('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')),
|
||||
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='关联岗位')),
|
||||
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.role', verbose_name='关联角色')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -225,6 +230,11 @@ class Migration(migrations.Migration):
|
|||
name='groups',
|
||||
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.post', verbose_name='主要岗位'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='posts',
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-05 06:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='system.post', verbose_name='主要岗位'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-13 08:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0002_user_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='phone',
|
||||
field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'),
|
||||
),
|
||||
]
|
|
@ -1,33 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-24 05:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0003_alter_user_phone'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='wx_headimg',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信头像'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='wx_nickname',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='wx_openid',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信公众号OpenId'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='wxmp_openid',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信小程序OpenId'),
|
||||
),
|
||||
]
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-28 10:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0004_auto_20220724_1305'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='userpost',
|
||||
name='post',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='up_post', to='system.post'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-08-04 09:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0005_alter_userpost_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='secret',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='密钥'),
|
||||
),
|
||||
]
|
|
@ -105,10 +105,8 @@ class PostRole(BaseModel):
|
|||
"""
|
||||
data_range = models.PositiveSmallIntegerField('数据权限范围', choices=DataFilter.choices,
|
||||
default=DataFilter.THISLEVEL_AND_BELOW)
|
||||
post = models.ForeignKey(Post, verbose_name='关联岗位',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
role = models.ForeignKey(Role, verbose_name='关联角色',
|
||||
on_delete=models.CASCADE, null=True, blank=True)
|
||||
post = models.ForeignKey(Post, verbose_name='关联岗位', on_delete=models.CASCADE)
|
||||
role = models.ForeignKey(Role, verbose_name='关联角色', on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
|
||||
|
@ -126,8 +124,7 @@ class User(AbstractUser, CommonBModel):
|
|||
'头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True)
|
||||
superior = models.ForeignKey(
|
||||
'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管')
|
||||
post = models.ForeignKey(Post, verbose_name='主要岗位',
|
||||
on_delete=models.CASCADE,
|
||||
post = models.ForeignKey(Post, verbose_name='主要岗位', on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
posts = models.ManyToManyField(Post, through='system.userpost', related_name='user_posts')
|
||||
depts = models.ManyToManyField(Dept, through='system.userpost')
|
||||
|
@ -157,7 +154,7 @@ class UserPost(BaseModel):
|
|||
"""
|
||||
name = models.CharField('名称', max_length=20, null=True, blank=True)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='up_user')
|
||||
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='up_post', null=True, blank=True)
|
||||
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='up_post')
|
||||
dept = models.ForeignKey(Dept, on_delete=models.CASCADE, related_name='up_dept')
|
||||
sort = models.PositiveSmallIntegerField('排序', default=1)
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ from rest_framework.permissions import IsAuthenticated
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from apps.system.errors import OLD_PASSWORD_WRONG, PASSWORD_NOT_SAME, SCHEDULE_WRONG
|
||||
from apps.system.filters import UserFilterSet
|
||||
from apps.system.filters import DeptFilterSet, UserFilterSet
|
||||
# from django_q.models import Task as QTask, Schedule as QSchedule
|
||||
from apps.utils.mixins import (CustomCreateModelMixin, MyLoggingMixin)
|
||||
from django.conf import settings
|
||||
|
@ -317,7 +317,7 @@ class DeptViewSet(CustomModelViewSet):
|
|||
create_serializer_class = DeptCreateUpdateSerializer
|
||||
update_serializer_class = DeptCreateUpdateSerializer
|
||||
partial_update_serializer_class = DeptCreateUpdateSerializer
|
||||
filterset_fields = ['type']
|
||||
filterset_class = DeptFilterSet
|
||||
search_fields = ['name']
|
||||
ordering = ['type', 'sort', 'create_time']
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
@ -31,6 +31,7 @@ class Migration(migrations.Migration):
|
|||
('response', models.JSONField(blank=True, null=True)),
|
||||
('method', models.CharField(max_length=10)),
|
||||
('url', models.TextField(blank=True, null=True)),
|
||||
('errors', models.TextField(blank=True, null=True)),
|
||||
('params', models.JSONField(blank=True, null=True)),
|
||||
('body', models.JSONField(blank=True, null=True)),
|
||||
],
|
||||
|
@ -45,16 +46,33 @@ class Migration(migrations.Migration):
|
|||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '音响'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')),
|
||||
('code', models.CharField(db_index=True, max_length=50, verbose_name='设备唯一标识')),
|
||||
('name', models.CharField(max_length=50, verbose_name='设备名称')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '喇叭'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型')),
|
||||
('code', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识')),
|
||||
('name', models.CharField(blank=True, max_length=50, null=True, verbose_name='名称')),
|
||||
('location', models.JSONField(blank=True, default=dict, verbose_name='位置信息')),
|
||||
('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
|
||||
('is_clock', models.BooleanField(default=False, verbose_name='是否打卡设备')),
|
||||
('access_list', models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='自动下发人员类型')),
|
||||
('third_info', models.JSONField(blank=True, default=dict, verbose_name='三方信息')),
|
||||
('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='am.area', verbose_name='所在区')),
|
||||
('area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='am.area', verbose_name='所在区')),
|
||||
('areas', models.ManyToManyField(related_name='tareas', to='am.Area', verbose_name='覆盖区')),
|
||||
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='绑定人员')),
|
||||
('employee', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='当前绑定人员')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BltBind',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '绑定'), (20, '解绑')], default=10, help_text='10(绑定)/20(解绑)', verbose_name='绑定类型')),
|
||||
('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
|
||||
('blt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='关联标签')),
|
||||
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='tdevice',
|
||||
name='name',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='名称'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-02 02:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0002_alter_tdevice_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='tdevice',
|
||||
name='type',
|
||||
field=models.PositiveSmallIntegerField(choices=[(10, '定位基站'), (20, '定位信标'), (30, '定位标签'), (40, 'aoa引擎'), (50, '喇叭'), (60, '视频通道'), (70, '闸机通道'), (80, '面板机')], verbose_name='设备类型'),
|
||||
),
|
||||
]
|
|
@ -1,42 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-07 01:57
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0003_employee_post'),
|
||||
('third', '0003_alter_tdevice_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='tdevice',
|
||||
name='code',
|
||||
field=models.CharField(db_index=True, max_length=50, unique=True, verbose_name='设备唯一标识'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tdevice',
|
||||
name='employee',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='td_employee', to='hrm.employee', verbose_name='当前绑定人员'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BltBind',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('type', models.PositiveSmallIntegerField(choices=[(10, '绑定'), (20, '解绑')], default=10, help_text='10(绑定)/20(解绑)', verbose_name='绑定类型')),
|
||||
('obj_cate', models.CharField(blank=True, help_text='people/...', max_length=20, null=True, verbose_name='绑定对象')),
|
||||
('blt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='third.tdevice', verbose_name='关联标签')),
|
||||
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='关联人员')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-11 02:40
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0003_employee_post'),
|
||||
('third', '0004_auto_20220707_0957'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='tdevice',
|
||||
name='employee',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='当前绑定人员'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 07:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0005_alter_tdevice_employee'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tdevice',
|
||||
name='door_auth_list',
|
||||
field=models.JSONField(blank=True, default=list, verbose_name='自动下发人员类型列表'),
|
||||
),
|
||||
]
|
|
@ -1,32 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-12 08:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0006_tdevice_door_auth_list'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='tdevice',
|
||||
name='door_auth_list',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tdevice',
|
||||
name='employee_yes',
|
||||
field=models.BooleanField(default=True, verbose_name='自动下发员工'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tdevice',
|
||||
name='remployee_yes',
|
||||
field=models.BooleanField(default=True, verbose_name='自动下发相关方'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tdevice',
|
||||
name='visitor_yes',
|
||||
field=models.BooleanField(default=True, verbose_name='自动下发访客'),
|
||||
),
|
||||
]
|
|
@ -1,30 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-13 06:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0007_auto_20220712_1628'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='tdevice',
|
||||
name='employee_yes',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='tdevice',
|
||||
name='remployee_yes',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='tdevice',
|
||||
name='visitor_yes',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tdevice',
|
||||
name='access_list',
|
||||
field=models.JSONField(blank=True, default=list, help_text='employee/remployee/visitor', verbose_name='自动下发人员类型'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-26 04:20
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('third', '0008_auto_20220713_1408'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tlog',
|
||||
name='errors',
|
||||
field=models.TextField(blank=True, null=True),
|
||||
),
|
||||
]
|
|
@ -35,12 +35,12 @@ class TDevice(BaseModel):
|
|||
name = models.CharField('名称', max_length=50, null=True, blank=True)
|
||||
location = models.JSONField('位置信息', default=dict,
|
||||
null=False, blank=True)
|
||||
area = models.ForeignKey(Area, on_delete=models.CASCADE,
|
||||
area = models.ForeignKey(Area, on_delete=models.SET_NULL,
|
||||
verbose_name='所在区', null=True, blank=True)
|
||||
areas = models.ManyToManyField(Area, verbose_name='覆盖区',
|
||||
related_name='tareas')
|
||||
obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True)
|
||||
employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.CASCADE,
|
||||
employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
is_clock = models.BooleanField('是否打卡设备', default=False)
|
||||
access_list = models.JSONField('自动下发人员类型', default=list, null=False, blank=True, help_text='employee/remployee/visitor')
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -11,9 +11,10 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('hrm', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('hrm', '0002_initial'),
|
||||
('wf', '0001_initial'),
|
||||
('system', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
@ -36,6 +37,7 @@ class Migration(migrations.Migration):
|
|||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_belong_dept', to='system.dept', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('receptionist', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='接待人')),
|
||||
('ticket', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visit_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
|
@ -50,13 +52,13 @@ class Migration(migrations.Migration):
|
|||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=20, verbose_name='姓名')),
|
||||
('phone', models.CharField(max_length=11, verbose_name='手机号')),
|
||||
('photo', models.CharField(max_length=1000, verbose_name='证件照')),
|
||||
('id_number', models.CharField(max_length=100, verbose_name='身份证号')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('photo', models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照')),
|
||||
('id_number', models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='hrm.employee', verbose_name='成员信息')),
|
||||
('employee', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='hrm.employee', verbose_name='成员信息')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='visitor_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='vm.visit', verbose_name='最近所属访问项目')),
|
||||
('visit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='vm.visit', verbose_name='最近所属访问项目')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -77,4 +79,9 @@ class Migration(migrations.Migration):
|
|||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='visit',
|
||||
name='visitors',
|
||||
field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-07 01:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='visit',
|
||||
name='visitors',
|
||||
field=models.ManyToManyField(related_name='v_visitors', through='vm.Vpeople', to='vm.Visitor'),
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-07 07:22
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0003_ticket_belong_dept'),
|
||||
('vm', '0002_visit_visitors'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='visit',
|
||||
name='ticket',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.ticket', verbose_name='关联工单'),
|
||||
),
|
||||
]
|
|
@ -1,28 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-11 08:24
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('vm', '0003_visit_ticket'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='visitor',
|
||||
name='id_number',
|
||||
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='visitor',
|
||||
name='phone',
|
||||
field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='visitor',
|
||||
name='photo',
|
||||
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照'),
|
||||
),
|
||||
]
|
|
@ -52,12 +52,12 @@ class Visitor(CommonAModel):
|
|||
"""
|
||||
访客信息
|
||||
"""
|
||||
employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.CASCADE, null=True, blank=True)
|
||||
employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
name = models.CharField('姓名', max_length=20)
|
||||
phone = models.CharField('手机号', max_length=11, null=True, blank=True)
|
||||
photo = models.CharField('证件照', max_length=1000, null=True, blank=True)
|
||||
id_number = models.CharField('身份证号', max_length=100, null=True, blank=True)
|
||||
visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.CASCADE,
|
||||
visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.SET_NULL,
|
||||
null=True, blank=True)
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-01 05:11
|
||||
# Generated by Django 3.2.12 on 2022-08-15 06:02
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
@ -11,6 +11,7 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('system', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
|
@ -23,6 +24,7 @@ class Migration(migrations.Migration):
|
|||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=50, verbose_name='名称')),
|
||||
('key', models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识')),
|
||||
('is_hidden', models.BooleanField(default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)', verbose_name='是否隐藏')),
|
||||
('sort', models.IntegerField(default=0, help_text='用于工单步骤接口时,step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前', verbose_name='状态顺序')),
|
||||
('type', models.IntegerField(choices=[(0, '普通'), (1, '开始'), (2, '结束')], default=0, help_text='0.普通类型 1.初始状态(用于新建工单时,获取对应的字段必填及transition信息) 2.结束状态(此状态下的工单不得再处理,即没有对应的transition)', verbose_name='状态类型')),
|
||||
|
@ -30,16 +32,17 @@ class Migration(migrations.Migration):
|
|||
('enable_deliver', models.BooleanField(default=False, verbose_name='允许转交')),
|
||||
('participant_type', models.IntegerField(blank=True, choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (3, '部门'), (4, '角色'), (10, '岗位'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=1, help_text='0.无处理人,1.个人,2.多人,3.部门,4.角色,5.变量(支持工单创建人,创建人的leader),6.脚本,7.工单的字段内容(如表单中的"测试负责人",需要为用户名或者逗号隔开的多个用户名),8.父工单的字段内容。 初始状态请选择类型5,参与人填create_by', verbose_name='参与者类型')),
|
||||
('participant', models.JSONField(blank=True, default=list, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表\\部门id\\角色id\\变量(create_by,create_by_tl)\\脚本记录的id等,包含子工作流的需要设置处理人为loonrobot', verbose_name='参与者')),
|
||||
('state_fields', models.JSONField(default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')),
|
||||
('state_fields', models.JSONField(blank=True, default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')),
|
||||
('distribute_type', models.IntegerField(choices=[(1, '主动接单'), (2, '直接处理'), (3, '随机分配'), (4, '全部处理')], default=1, help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)', verbose_name='分配方式')),
|
||||
('filter_policy', models.IntegerField(choices=[(0, '无'), (1, '和工单同属一及上级部门'), (2, '和创建人同属一及上级部门'), (3, '和上步处理人同属一及上级部门')], default=0, verbose_name='参与人过滤策略')),
|
||||
('filter_dept', models.CharField(blank=True, max_length=20, null=True, verbose_name='部门字段过滤')),
|
||||
('participant_cc', models.JSONField(blank=True, default=list, help_text='抄送给(userid列表)', verbose_name='抄送给')),
|
||||
('on_reach_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='到达时调用方法')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
'verbose_name': '工作流节点',
|
||||
'verbose_name_plural': '工作流节点',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
@ -59,6 +62,7 @@ class Migration(migrations.Migration):
|
|||
('act_state', models.IntegerField(choices=[(0, '草稿中'), (1, '进行中'), (2, '被退回'), (3, '被撤回'), (4, '已完成'), (5, '已关闭')], default=1, help_text='当前工单的进行状态', verbose_name='进行状态')),
|
||||
('multi_all_person', models.JSONField(blank=True, default=dict, help_text='需要当前状态处理人全部处理时实际的处理结果,json格式', verbose_name='全部处理的结果')),
|
||||
('add_node_man', models.ForeignKey(blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='加签人')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_belong_dept', to='system.dept', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='父工单')),
|
||||
('parent_state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ticket_parent_state', to='wf.state', verbose_name='父工单状态')),
|
||||
|
@ -89,7 +93,8 @@ class Migration(migrations.Migration):
|
|||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workflow_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
'verbose_name': '工作流',
|
||||
'verbose_name_plural': '工作流',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
@ -101,7 +106,7 @@ class Migration(migrations.Migration):
|
|||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=50, verbose_name='操作')),
|
||||
('timer', models.IntegerField(default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效', verbose_name='定时器(单位秒)')),
|
||||
('condition_expression', models.JSONField(default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', max_length=1000, verbose_name='条件表达式')),
|
||||
('condition_expression', models.JSONField(blank=True, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', verbose_name='条件表达式')),
|
||||
('attribute_type', models.IntegerField(choices=[(1, '同意'), (2, '拒绝'), (3, '其他')], default=1, help_text='属性类型,1.同意,2.拒绝,3.其他', verbose_name='属性类型')),
|
||||
('field_require_check', models.BooleanField(default=True, help_text='默认在用户点击操作的时候需要校验工单表单的必填项,如果设置为否则不检查。用于如"退回"属性的操作,不需要填写表单内容', verbose_name='是否校验必填项')),
|
||||
('on_submit_func', models.CharField(blank=True, max_length=100, null=True, verbose_name='提交操作调用方法')),
|
||||
|
@ -112,7 +117,8 @@ class Migration(migrations.Migration):
|
|||
('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
'verbose_name': '工作流流转',
|
||||
'verbose_name_plural': '工作流流转',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
@ -131,7 +137,7 @@ class Migration(migrations.Migration):
|
|||
('participant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticketflow_participant', to=settings.AUTH_USER_MODEL, verbose_name='处理人')),
|
||||
('state', models.ForeignKey(blank=True, default=0, on_delete=django.db.models.deletion.CASCADE, to='wf.state', verbose_name='当前状态')),
|
||||
('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticketflow_ticket', to='wf.ticket', verbose_name='关联工单')),
|
||||
('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.transition', verbose_name='流转id')),
|
||||
('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.SET_NULL, to='wf.transition', verbose_name='流转id')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-07 01:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='state',
|
||||
options={'verbose_name': '工作流节点', 'verbose_name_plural': '工作流节点'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='transition',
|
||||
options={'verbose_name': '工作流流转', 'verbose_name_plural': '工作流流转'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='workflow',
|
||||
options={'verbose_name': '工作流', 'verbose_name_plural': '工作流'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='state',
|
||||
name='state_fields',
|
||||
field=models.JSONField(blank=True, default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='transition',
|
||||
name='condition_expression',
|
||||
field=models.JSONField(blank=True, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', verbose_name='条件表达式'),
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-07 07:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0002_user_post'),
|
||||
('wf', '0002_auto_20220707_0957'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='ticket',
|
||||
name='belong_dept',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_belong_dept', to='system.dept', verbose_name='所属部门'),
|
||||
),
|
||||
]
|
|
@ -1,22 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-18 05:44
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0003_ticket_belong_dept'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='state',
|
||||
name='filter_policy',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='state',
|
||||
name='filter_dept',
|
||||
field=models.CharField(default=0, max_length=20, verbose_name='部门字段过滤'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-18 07:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0004_auto_20220718_1344'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='state',
|
||||
name='filter_dept',
|
||||
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='部门字段过滤'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2022-07-22 08:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0005_alter_state_filter_dept'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='state',
|
||||
name='key',
|
||||
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='状态标识'),
|
||||
),
|
||||
]
|
|
@ -276,7 +276,7 @@ class TicketFlow(BaseModel):
|
|||
"""
|
||||
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket')
|
||||
transition = models.ForeignKey(Transition, verbose_name='流转id',
|
||||
help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True)
|
||||
help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True)
|
||||
participant_type = models.IntegerField(
|
||||
'处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices)
|
||||
|
|
|
@ -6,7 +6,7 @@ django-cors-headers==3.11.0
|
|||
django-filter==21.1
|
||||
djangorestframework==3.13.1
|
||||
djangorestframework-simplejwt==5.1.0
|
||||
drf-yasg==1.20.0
|
||||
drf-yasg==1.21.3
|
||||
psutil==5.9.0
|
||||
pillow==9.0.1
|
||||
opencv-python==4.5.5.62
|
||||
|
|
Loading…
Reference in New Issue