feat: 行政管理 -印章管理
This commit is contained in:
parent
f7cc3b438f
commit
6a6d46583b
|
@ -0,0 +1,48 @@
|
|||
# Generated by Django 3.2.12 on 2025-05-21 05:59
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Conversation',
|
||||
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='删除标记')),
|
||||
('title', models.CharField(default='新对话', max_length=200, verbose_name='对话标题')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='conversation_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='conversation_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Message',
|
||||
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='删除标记')),
|
||||
('content', models.TextField(verbose_name='消息内容')),
|
||||
('role', models.CharField(default='user', help_text='system/user', max_length=10, verbose_name='角色')),
|
||||
('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='ichat.conversation', verbose_name='对话')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,48 @@
|
|||
# Generated by Django 3.2.12 on 2025-09-05 03:07
|
||||
|
||||
from django.conf import settings
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wf', '0002_alter_state_filter_dept'),
|
||||
('system', '0006_auto_20241213_1249'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('ofm', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='LendingSeal',
|
||||
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='删除标记')),
|
||||
('seal', models.JSONField(default=list, help_text='{"seal_name": "印章名称"}', verbose_name='印章信息')),
|
||||
('filename', models.TextField(verbose_name='文件名称')),
|
||||
('file', models.TextField(verbose_name='文件内容')),
|
||||
('file_count', models.PositiveIntegerField(verbose_name='用印份数')),
|
||||
('is_lending', models.BooleanField(default=False, verbose_name='是否借出')),
|
||||
('contacts', models.CharField(blank=True, max_length=50, null=True, validators=[django.core.validators.RegexValidator('^1[3456789]\\d{9}$', '手机号码格式不正确')], verbose_name='联系方式')),
|
||||
('lending_date', models.DateField(blank=True, null=True, verbose_name='借出日期')),
|
||||
('return_date', models.DateField(blank=True, null=True, verbose_name='拟归还日期')),
|
||||
('actual_return_date', models.DateField(blank=True, null=True, verbose_name='实际归还日期')),
|
||||
('reason', models.CharField(blank=True, max_length=100, null=True, verbose_name='借用理由')),
|
||||
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_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='lendingseal_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('submit_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='seal_submit_user', to=settings.AUTH_USER_MODEL, verbose_name='提交人')),
|
||||
('ticket', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='seal_ticket', to='wf.ticket', verbose_name='关联工单')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='lendingseal_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -1,7 +1,23 @@
|
|||
from django.db import models
|
||||
from apps.utils.models import CommonADModel, BaseModel
|
||||
from apps.utils.models import CommonADModel, BaseModel, CommonBDModel
|
||||
from apps.system.models import User
|
||||
from django.core.validators import RegexValidator
|
||||
# Create your models here.
|
||||
|
||||
|
||||
MTASK_CREATED = 10
|
||||
MTASK_ASSGINED = 20
|
||||
MTASK_STOP = 34
|
||||
MTASK_SUBMIT = 40
|
||||
MTASK_STATES = (
|
||||
(MTASK_CREATED, '创建中'),
|
||||
(MTASK_ASSGINED, '已下达'),
|
||||
(MTASK_STOP, '已停止'),
|
||||
(MTASK_SUBMIT, '已提交')
|
||||
)
|
||||
phone_validator = RegexValidator(r'^1[3456789]\d{9}$', '手机号码格式不正确')
|
||||
|
||||
|
||||
class Mroom(CommonADModel):
|
||||
"""TN: 会议室基本信息"""
|
||||
name = models.CharField('会议室名称', max_length=50, unique=True)
|
||||
|
@ -23,3 +39,284 @@ class MroomSlot(BaseModel):
|
|||
class Meta:
|
||||
unique_together = ('mroom', 'mdate', 'slot')
|
||||
|
||||
|
||||
# class Seal(BaseModel):
|
||||
# """TN: 印章类型"""
|
||||
# name = models.CharField('印章名称', max_length=50, unique=True)
|
||||
|
||||
|
||||
class LendingSeal(CommonBDModel):
|
||||
"""TN: 印章外出用印信息"""
|
||||
|
||||
seal = models.JSONField('印章信息',default=list ,help_text='{"seal_name": "印章名称"}')
|
||||
filename = models.TextField('文件名称')
|
||||
file = models.TextField('文件内容')
|
||||
file_count = models.PositiveIntegerField('用印份数')
|
||||
is_lending= models.BooleanField('是否借出', default=False)
|
||||
contacts = models.CharField('联系方式', max_length=50, validators=[phone_validator], blank=True, null=True)
|
||||
lending_date = models.DateField('借出日期', blank=True, null=True)
|
||||
return_date = models.DateField('拟归还日期', blank=True, null=True)
|
||||
actual_return_date = models.DateField('实际归还日期', blank=True, null=True)
|
||||
reason = models.CharField('借用理由', max_length=100, blank=True, null=True)
|
||||
submit_user = models.ForeignKey(
|
||||
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='seal_submit_user')
|
||||
ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
|
||||
on_delete=models.SET_NULL, related_name='seal_ticket', null=True, blank=True, db_constraint=False)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
|
||||
|
||||
# class Vehicle(CommonADModel):
|
||||
# """TN: 用车申请"""
|
||||
|
||||
# submit_user = models.ForeignKey(
|
||||
# User, verbose_name='用车人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_submit_user')
|
||||
# approval_user = models.ForeignKey(
|
||||
# User, verbose_name='审批人', on_delete=models.CASCADE, null=True, blank=True, related_name='vehicle_approval_user'
|
||||
# )
|
||||
# start_time = models.DateTimeField('出车时间')
|
||||
# end_time = models.DateTimeField('还车时间')
|
||||
# location = models.CharField('出发地点', null=True, blank=True, max_length=100)
|
||||
# destination = models.CharField('到达地点', null=True, blank=True, max_length=100)
|
||||
# start_km = models.PositiveIntegerField('出发公里数')
|
||||
# end_km = models.PositiveIntegerField('归还公里数')
|
||||
# actual_km = models.PositiveIntegerField('实际行驶公里数', editable=False)
|
||||
# is_city = models.BooleanField('是否市内用车', default=True)
|
||||
# reason = models.CharField('用车事由', max_length=100)
|
||||
# ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单',
|
||||
# on_delete=models.SET_NULL, related_name='vehicle_ticket', null=True, blank=True, db_constraint=False)
|
||||
# state = models.PositiveIntegerField(
|
||||
# '状态', choices=MTASK_STATES, default=MTASK_CREATED, help_text=str(MTASK_STATES))
|
||||
|
||||
# def save(self, *args, **kwargs):
|
||||
# if self.end_km and self.start_km:
|
||||
# self.actual_km = self.end_km - self.start_km
|
||||
# return super().save(*args, **kwargs)
|
||||
|
||||
|
||||
# class FileRecord(CommonBDModel):
|
||||
# """TN: 档案台账"""
|
||||
# name = models.CharField('资料名称', max_length=100)
|
||||
# number = models.CharField('档案编号', max_length=50)
|
||||
# files = models.CharField('文件份数', max_length=10)
|
||||
# location = models.CharField('存放位置', max_length=100)
|
||||
# contacts = models.CharField('存档人电话', max_length=50)
|
||||
# location = models.CharField('存档位置', max_length=100)
|
||||
# reciver = models.CharField('接收人(综合办)', max_length=50)
|
||||
# remark = models.CharField('备注', max_length=100)
|
||||
|
||||
|
||||
# class BorrowRecord(CommonBDModel):
|
||||
# """TN: 借阅、复印、查阅记录"""
|
||||
# files = models.ManyToManyField(FileRecord, related_name="borrow_records")
|
||||
# borrow_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="borrow_user")
|
||||
# borrow_date = models.DateField('借阅日期')
|
||||
# return_date = models.DateField('归还日期')
|
||||
# contacts = models.CharField('借阅人电话', max_length=50, validators=[phone_validator], null=True, blank=True)
|
||||
# remark = models.CharField('用途', max_length=100)
|
||||
|
||||
|
||||
# class Publicity(CommonBDModel):
|
||||
# """TN: 公示栏"""
|
||||
# CHANNEL_CHOICES = [
|
||||
# ('internet', '互联网'),
|
||||
# ('platform', '信息平台'),
|
||||
# ('official', '官微'),
|
||||
# ('publication', '公开发行物'),
|
||||
# ('other', '其它'),
|
||||
# ]
|
||||
# SECRET_LEVELS = (
|
||||
# (0, '重要'),
|
||||
# (1, '一般'),
|
||||
# (2, '非涉密'),
|
||||
# )
|
||||
# CONTENT_CHOICES = [
|
||||
# ('device', '武器装备科研生产综合事项'),
|
||||
# ('other', '其他'),
|
||||
# ]
|
||||
# number = models.CharField('记录编号', max_length=50)
|
||||
# title = models.CharField('送审稿件标题', max_length=100)
|
||||
# participants = models.CharField('所有撰稿人', max_length=50)
|
||||
# level = models.PositiveBigIntegerField('涉密等级', choices=SECRET_LEVELS, default=2, help_text=str(SECRET_LEVELS))
|
||||
# content = models.CharField('稿件内容涉及', max_length=50, choices=CONTENT_CHOICES, default='device', blank=True)
|
||||
# report_purpose = models.CharField('宣传报道目的', max_length=100, blank=True, null=True)
|
||||
# channel = models.CharField('发布渠道', max_length=50, choices=CHANNEL_CHOICES, default='platform')
|
||||
# other_channel = models.CharField('其它渠道', max_length=50, blank=True, null=True)
|
||||
# review = models.CharField('第一撰稿人自审', max_length=100, blank=True, null=True)
|
||||
# dept_opinion = models.CharField('部门负责人意见', max_length=100, blank=True, null=True)
|
||||
# manager_opinion = models.CharField('总经理', max_length=100, blank=True, null=True)
|
||||
|
||||
|
||||
# class PatentInfo(CommonBDModel):
|
||||
# """TN: 专利申密审批表单样式"""
|
||||
# PATENT_TYPE_CHOICES = (
|
||||
# ('invention', '发明专利'),
|
||||
# ('utility', '实用新型专利'),
|
||||
# ('design', '外观设计专利'),
|
||||
# )
|
||||
# APPLY_AREAS = (
|
||||
# ('Domestic', '国内申请'),
|
||||
# ('Foreign', '国外申请'),
|
||||
# (' PCT', 'PCT申请'),
|
||||
# )
|
||||
# name = models.CharField('拟申请专利名称', max_length=100)
|
||||
# author = models.CharField('发明人(设计人)', max_length=100)
|
||||
# type = models.CharField('专利类型', max_length=50, choices=PATENT_TYPE_CHOICES, default='invention')
|
||||
# is_public = models.BooleanField('是否公开', default=False)
|
||||
# area = models.CharField('拟申请地域', max_length=50, choices=APPLY_AREAS, default='Domestic')
|
||||
# identified = models.BooleanField('是否进行过科技成果鉴定', default=False)
|
||||
# published_article = models.BooleanField('是否发表过文章', default=False)
|
||||
# exhibited = models.BooleanField('是否参与过展会展出', default=False)
|
||||
# applied_to_production = models.BooleanField('是否参与应用于生产/销售', default=False)
|
||||
# participated_in_exchange = models.BooleanField('是否参与过技术交流', default=False)
|
||||
# tech_background_pages = models.PositiveIntegerField('技术背景材料页数', null=True, blank=True)
|
||||
# tech_disclosure_pages = models.PositiveIntegerField('技术交底材料页数', null=True, blank=True)
|
||||
# novelty_report_pages = models.PositiveIntegerField('查新检索报告页数', null=True, blank=True)
|
||||
# diagrams_or_photos_pages = models.PositiveIntegerField('图/照片页数或张数', null=True, blank=True)
|
||||
|
||||
|
||||
# class PaperOfm(CommonADModel):
|
||||
# """TN: 论文申密审批表单"""
|
||||
# PAPER_TYPE_CHOICES = (
|
||||
# ('research', '研究论文'),
|
||||
# ('comprehensive', '综合'),
|
||||
# )
|
||||
# name = models.CharField('拟申请专利名称', max_length=100)
|
||||
# author = models.CharField('发明人(设计人)', max_length=100)
|
||||
# paper_type = models.CharField('论文类型', max_length=50, choices=PAPER_TYPE_CHOICES, default='research')
|
||||
# is_chinese_core = models.BooleanField('是否为中文核心', default=False)
|
||||
# is_sci = models.BooleanField('是否被SCI/EI收录', default=False)
|
||||
# has_appraisal = models.BooleanField('是否进行过科技成果鉴定', default=False)
|
||||
# has_published_article = models.BooleanField('是否发表过文章', default=False)
|
||||
# has_exhibited = models.BooleanField('是否参与过展会展出', default=False)
|
||||
# has_applied_in_production = models.BooleanField('是否参与应用于生产/销售', default=False)
|
||||
# has_technical_exchange = models.BooleanField('是否参与过技术交流', default=False)
|
||||
# paper_page_count = models.PositiveIntegerField('论文页数', null=True, blank=True)
|
||||
# image_count = models.PositiveIntegerField('图/照片张数', null=True, blank=True)
|
||||
|
||||
|
||||
# class Platform(CommonADModel):
|
||||
# name = models.CharField(max_length=100)
|
||||
|
||||
# def __str__(self):
|
||||
# return self.name
|
||||
|
||||
# class Project(CommonADModel):
|
||||
# name = models.CharField(max_length=100)
|
||||
|
||||
# def __str__(self):
|
||||
# return self.name
|
||||
|
||||
|
||||
# class PatentRecord(CommonADModel):
|
||||
# """TN: 专利台账登记"""
|
||||
# volume_number = models.CharField(max_length=50, null=True, blank=True, verbose_name="卷号")
|
||||
# application_number = models.CharField(max_length=50, verbose_name="申请号(交局后补登)")
|
||||
# title = models.CharField(max_length=255, verbose_name="名称")
|
||||
|
||||
# patent_type = models.CharField(
|
||||
# max_length=20,
|
||||
# choices=[
|
||||
# ("invention", "发明"),
|
||||
# ("utility_model", "实用新型"),
|
||||
# ("design", "外观设计")
|
||||
# ],
|
||||
# verbose_name="专利类型"
|
||||
# )
|
||||
# organization = models.CharField(max_length=100, verbose_name="单位")
|
||||
# inventors = models.CharField(max_length=255, verbose_name="发明人")
|
||||
# agent = models.CharField(max_length=255, null=True, blank=True, verbose_name="代理人")
|
||||
# affiliated_platforms = models.ManyToManyField('Platform', blank=True, verbose_name="归属平台")
|
||||
# affiliated_projects = models.ManyToManyField('Project', blank=True, verbose_name="归属项目")
|
||||
# application_date = models.DateField(null=True, blank=True, verbose_name="申请日")
|
||||
# authorization_date = models.DateField(null=True, blank=True, verbose_name="授权日")
|
||||
# validity_years = models.IntegerField(null=True, blank=True, verbose_name="有效年限(年)")
|
||||
# annuity_paid = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="年费缴纳")
|
||||
|
||||
# status = models.CharField(
|
||||
# max_length=20,
|
||||
# choices=[
|
||||
# ("not_disclosed", "未公开"),
|
||||
# ("under_examination", "实审中"),
|
||||
# ("first_office_action", "一通"),
|
||||
# ("second_office_action", "二通"),
|
||||
# ("rejected", "驳回"),
|
||||
# ("reexamination", "复审"),
|
||||
# ("authorized", "授权")
|
||||
# ],
|
||||
# verbose_name="状态"
|
||||
# )
|
||||
# award_info = models.TextField(null=True, blank=True, verbose_name="报奖情况")
|
||||
# bonus_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="奖金金额(元)")
|
||||
|
||||
|
||||
# class PaperRecord(models.Model):
|
||||
# """TN: 论文台账登记"""
|
||||
# index = models.PositiveIntegerField(verbose_name="序号")
|
||||
# paper_code = models.CharField(max_length=100, blank=True, null=True, verbose_name="论文编号(投稿后补登)")
|
||||
# title = models.CharField(max_length=255, verbose_name="名称")
|
||||
# paper_type = models.CharField(max_length=100, verbose_name="论文类型")
|
||||
# affiliation = models.CharField(max_length=255, verbose_name="单位")
|
||||
# authors = models.CharField(max_length=255, verbose_name="作者")
|
||||
# corresponding_author = models.CharField(max_length=255, blank=True, null=True, verbose_name="通讯作者")
|
||||
# affiliated_platforms = models.ManyToManyField('Platform', blank=True, verbose_name="归属平台")
|
||||
# affiliated_projects = models.ManyToManyField('Project', blank=True, verbose_name="归属项目")
|
||||
# acceptance_date = models.DateField(blank=True, null=True, verbose_name="接受日期")
|
||||
# publication_date = models.DateField(blank=True, null=True, verbose_name="发表日期")
|
||||
# page_fee_paid = models.DecimalField(
|
||||
# max_digits=10,
|
||||
# decimal_places=2,
|
||||
# blank=True,
|
||||
# null=True,
|
||||
# verbose_name="版面费缴纳"
|
||||
# )
|
||||
|
||||
# status = models.CharField(
|
||||
# max_length=50,
|
||||
# choices=[
|
||||
# ("under_review", "审稿中"),
|
||||
# ("revise_1", "一修"),
|
||||
# ("revise_2", "二修"),
|
||||
# ("accepted", "接收"),
|
||||
# ("published", "发表")
|
||||
# ],
|
||||
# default="under_review", verbose_name="状态"
|
||||
# )
|
||||
# award_status = models.CharField(max_length=255, blank=True, null=True, verbose_name="报奖情况")
|
||||
# bonus_amount = models.DecimalField(max_digits=10,decimal_places=2,blank=True,null=True,verbose_name="奖金发放")
|
||||
|
||||
|
||||
# class ProjectApproval(CommonBDModel):
|
||||
# """TN: 立项审批表"""
|
||||
# project_start_date = models.DateField("立项日期", null=True, blank=True)
|
||||
# is_self_initiated = models.BooleanField("自立项目", default=False)
|
||||
# is_city_level = models.BooleanField("市级项目", default=False)
|
||||
# is_province_level = models.BooleanField("省级项目", default=False)
|
||||
# construction_period = models.CharField("建设期", max_length=100, null=True, blank=True)
|
||||
# project_members = models.TextField("项目组员", null=True, blank=True)
|
||||
# project_budget = models.DecimalField("项目预算(万元)", max_digits=12, decimal_places=2, null=True, blank=True)
|
||||
# project_description = models.TextField("项目基本情况", null=True, blank=True)
|
||||
# project_performance = models.TextField("目标绩效", null=True, blank=True)
|
||||
|
||||
|
||||
# class ProjectInfo(CommonBDModel):
|
||||
# """TN: 项目信息表
|
||||
|
||||
# """
|
||||
# serial_number = models.CharField("序号", max_length=50, null=True, blank=True)
|
||||
# red_head_doc_no = models.CharField("红头发文号/公示页", max_length=100, null=True, blank=True)
|
||||
# name = models.CharField("名称", max_length=200, null=True, blank=True)
|
||||
# project_type = models.CharField("项目类型", max_length=100, null=True, blank=True)
|
||||
# platform = models.CharField("所属平台", max_length=100, null=True, blank=True)
|
||||
# project_source = models.CharField("项目来源", max_length=100, null=True, blank=True)
|
||||
# construction_period = models.CharField("建设期", max_length=100, null=True, blank=True)
|
||||
# project_funding = models.DecimalField("项目资金(财政与自筹)", max_digits=15, decimal_places=2, null=True, blank=True)
|
||||
# support_period = models.CharField("项目支持期", max_length=100, null=True, blank=True)
|
||||
# undertaking_unit = models.CharField("承担单位", max_length=200, null=True, blank=True)
|
||||
# responsible_person = models.CharField("负责人", max_length=50, null=True, blank=True)
|
||||
|
||||
# project_members = models.TextField("项目人员", null=True, blank=True)
|
||||
# milestone = models.TextField("里程碑节点", null=True, blank=True)
|
||||
# mid_term_status = models.TextField("项目中期情况", null=True, blank=True)
|
||||
# acceptance_status = models.TextField("项目验收情况", null=True, blank=True)
|
||||
# sci_tech_achievements = models.TextField("科技成果", null=True, blank=True)
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
from .models import Mroom, MroomBooking, MroomSlot
|
||||
from .models import (Mroom, MroomBooking, MroomSlot, LendingSeal)
|
||||
# Vehicle, Publicity,
|
||||
# FileRecord, BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
from rest_framework import serializers
|
||||
from django.db import transaction
|
||||
|
@ -55,10 +57,131 @@ class MroomBookingSerializer(CustomModelSerializer):
|
|||
return booking
|
||||
|
||||
|
||||
|
||||
class MroomSlotSerializer(CustomModelSerializer):
|
||||
booking_title = serializers.CharField(source='booking.title', read_only=True)
|
||||
class Meta:
|
||||
model = MroomSlot
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
# class SealSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = Seal
|
||||
# fields = '__all__'
|
||||
|
||||
|
||||
# class SealManageSerializer(CustomModelSerializer):
|
||||
# seal_name = serializers.CharField(source='seal.name', read_only=True)
|
||||
# class Meta:
|
||||
# model = SealManage
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
class LendingSealSerializer(CustomModelSerializer):
|
||||
# seal_name = serializers.CharField(source='seal.name', read_only=True)
|
||||
class Meta:
|
||||
model = LendingSeal
|
||||
fields = '__all__'
|
||||
read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class VehicleSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = Vehicle
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS + ['actual_km']
|
||||
|
||||
|
||||
# class FileRecordSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = FileRecord
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class BorrowRecordSerializer(CustomModelSerializer):
|
||||
# files = serializers.PrimaryKeyRelatedField(queryset=FileRecord.objects.all(), many=True, write_only=True, label="借阅文件")
|
||||
# file_detail = FileRecordSerializer(source='file', many=True, read_only=True, label="借阅文件详情")
|
||||
# class Meta:
|
||||
# model = BorrowRecord
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class PublicitySerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = Publicity
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class PatentInfoSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = PatentInfo
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class PaperSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = PaperOfm
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class PlatformSerializer(serializers.ModelSerializer):
|
||||
# class Meta:
|
||||
# model = Platform
|
||||
# fields = ['id', 'name']
|
||||
|
||||
|
||||
# class ProjectSerializer(serializers.ModelSerializer):
|
||||
# class Meta:
|
||||
# model = Project
|
||||
# fields = ['id', 'name']
|
||||
|
||||
|
||||
# class ProjectMemberSerializer(CustomModelSerializer):
|
||||
# affiliated_platforms = serializers.PrimaryKeyRelatedField(
|
||||
# many=True,
|
||||
# queryset=Platform.objects.all(),
|
||||
# write_only=True
|
||||
# )
|
||||
# affiliated_platforms_detail = PlatformSerializer(
|
||||
# source='affiliated_platforms', many=True, read_only=True
|
||||
# )
|
||||
|
||||
# affiliated_projects = serializers.PrimaryKeyRelatedField(
|
||||
# many=True,
|
||||
# queryset=Project.objects.all(),
|
||||
# write_only=True
|
||||
# )
|
||||
# affiliated_projects_detail = ProjectSerializer(
|
||||
# source='affiliated_projects', many=True, read_only=True
|
||||
# )
|
||||
# class Meta:
|
||||
# model = PatentRecord
|
||||
# fields = '__all__'
|
||||
|
||||
|
||||
# class PaperRecordSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = PaperRecord
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class ProjectApprovalSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = ProjectApproval
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
||||
|
||||
# class ProjectInfoSerializer(CustomModelSerializer):
|
||||
# class Meta:
|
||||
# model = ProjectInfo
|
||||
# fields = '__all__'
|
||||
# read_only_fields = EXCLUDE_FIELDS
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
from apps.wf.models import Ticket
|
||||
# TicketFlow, Transition, Workflow, CustomField, State,
|
||||
from apps.ofm.models import SealManage, LendingSeal
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
||||
|
||||
def seal_submit_validate(ins: LendingSeal):
|
||||
if ins.submit_time:
|
||||
raise ParseError('该日志已提交!')
|
||||
if ins.mtask and ins.mtask.state == LendingSeal.MTASK_STOP:
|
||||
raise ParseError('该任务已停止!')
|
||||
|
||||
def bind_lendingseal(ticket: Ticket, transition, new_ticket_data: dict):
|
||||
ins = SealManage.objects.get(id=new_ticket_data['t_id'])
|
||||
if ins.submit_time is not None:
|
||||
raise ParseError('该印章申请不可提交审批')
|
||||
seal_submit_validate(ins)
|
||||
ticket_data = ticket.ticket_data
|
||||
ticket_data.update({
|
||||
't_model': 'LendingSeal',
|
||||
't_id': ins.id,
|
||||
})
|
||||
ticket.ticket_data = ticket_data
|
||||
ticket.create_by = ins.create_by
|
||||
ticket.save()
|
||||
if ins.ticket is None:
|
||||
ins.ticket = ticket
|
||||
ins.save()
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet)
|
||||
from apps.ofm.views import (MroomViewSet, MroomBookingViewSet, MroomSlotViewSet,LendingSealViewSet)
|
||||
# , VehicleViewSet, FilerecordViewSet, SealModelViewSet,
|
||||
# FileborrowViewSet, PublicityViewSet, PatentInfoViewSet, PaperViewSet, PlatformViewSet,
|
||||
# ProjectViewSet, PatentRecordViewSet, PaperRecordViewSet, ProjectApprovalViewSet, ProjectInfoViewSet)
|
||||
|
||||
API_BASE_URL = 'api/ofm/'
|
||||
HTML_BASE_URL = 'dhtml/ofm/'
|
||||
|
@ -9,6 +12,21 @@ router = DefaultRouter()
|
|||
router.register('mroom', MroomViewSet, basename='mroom')
|
||||
router.register('mroombooking', MroomBookingViewSet, basename='mroombooking')
|
||||
router.register('mroomslot', MroomSlotViewSet, basename='mroomslot')
|
||||
# router.register('sealmanage', SealManageViewSet, basename='sealmanage')
|
||||
router.register('lendingseal', LendingSealViewSet, basename='lendingseal')
|
||||
# router.register('vehicle', VehicleViewSet, basename='vehicle')
|
||||
# router.register('filerecord', FilerecordViewSet, basename='filerecord')
|
||||
# router.register('fileborrow', FileborrowViewSet, basename='fileborrow')
|
||||
# router.register('publicity', PublicityViewSet, basename='publicity')
|
||||
# router.register('patentinfo', PatentInfoViewSet, basename='patentinfo')
|
||||
|
||||
# router.register('paper', PaperViewSet, basename='paper')
|
||||
# router.register('platform', PlatformViewSet, basename='platform')
|
||||
# router.register('project', ProjectViewSet, basename='project')
|
||||
# router.register('patentrecord', PatentRecordViewSet, basename='patentrecord')
|
||||
# router.register('paperrecord', PaperRecordViewSet, basename='paperrecord')
|
||||
# router.register('projectapproval', ProjectApprovalViewSet, basename='projectapproval')
|
||||
# router.register('projectinfo', ProjectInfoViewSet, basename='projectinfo')
|
||||
urlpatterns = [
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
]
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
from django.shortcuts import render
|
||||
from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet
|
||||
from .models import Mroom, MroomBooking, MroomSlot
|
||||
from .serializers import MroomSerializer, MroomBookingSerializer, MroomSlotSerializer
|
||||
from .models import Mroom, MroomBooking, MroomSlot, LendingSeal
|
||||
# Vehicle, FileRecord, Seal
|
||||
# BorrowRecord, Publicity, PatentInfo, PaperOfm, Platform, Project, PatentRecord, PaperRecord, ProjectApproval, ProjectInfo)
|
||||
from .serializers import (MroomSerializer, MroomBookingSerializer, MroomSlotSerializer, LendingSealSerializer)
|
||||
# ,SealSerializer,
|
||||
# LendingSealSerializer, FileRecordSerializer, BorrowRecordSerializer, PublicitySerializer,
|
||||
# PatentInfoSerializer, PaperSerializer, PlatformSerializer, ProjectSerializer, ProjectMemberSerializer, PaperRecordSerializer, ProjectApprovalSerializer, ProjectInfoSerializer)
|
||||
from rest_framework.decorators import action
|
||||
from apps.utils.mixins import CustomListModelMixin
|
||||
from rest_framework.exceptions import ParseError
|
||||
|
@ -88,10 +93,176 @@ class MroomBookingViewSet(CustomModelViewSet):
|
|||
|
||||
|
||||
class MroomSlotViewSet(CustomListModelMixin, CustomGenericViewSet):
|
||||
"""list: 会议室预订时段
|
||||
"""list:
|
||||
|
||||
会议室预订时段
|
||||
"""
|
||||
queryset = MroomSlot.objects.all()
|
||||
serializer_class = MroomSlotSerializer
|
||||
filterset_fields = ["mroom", "mdate", "booking"]
|
||||
|
||||
|
||||
# class SealModelViewSet(CustomModelViewSet):
|
||||
# """list: 印章列表
|
||||
|
||||
# 印章列表
|
||||
# """
|
||||
# queryset = Seal.objects.all()
|
||||
# serializer_class = SealSerializer
|
||||
# filterset_fields = ["name"]
|
||||
# ordering = ["name"]
|
||||
|
||||
|
||||
# class SealManageViewSet(CustomModelViewSet):
|
||||
# """list: 印章管理
|
||||
|
||||
# 印章管理
|
||||
# """
|
||||
# queryset = SealManage.objects.all()
|
||||
# serializer_class = SealManageSerializer
|
||||
# filterset_fields = ["seal"]
|
||||
|
||||
|
||||
class LendingSealViewSet(CustomModelViewSet):
|
||||
"""list: 印章外出
|
||||
|
||||
印章外出
|
||||
"""
|
||||
perms_map = {'get': '*', 'post': 'seal.update',
|
||||
'put': 'seal.update', 'delete': 'seal.delete'}
|
||||
queryset = LendingSeal.objects.all()
|
||||
serializer_class = LendingSealSerializer
|
||||
filterset_fields = ["seal"]
|
||||
ordering = ["create_time"]
|
||||
|
||||
|
||||
# class VehicleViewSet(CustomModelViewSet):
|
||||
# """list: 车辆
|
||||
|
||||
# 车辆
|
||||
# """
|
||||
# queryset = Vehicle.objects.all()
|
||||
# serializer_class = VehicleSerializer
|
||||
# filterset_fields = ["submit_user"]
|
||||
# ordering = ["create_time"]
|
||||
|
||||
|
||||
# class FilerecordViewSet(CustomModelViewSet):
|
||||
# """list: 文件
|
||||
|
||||
# 文件
|
||||
# """
|
||||
# queryset = FileRecord.objects.all()
|
||||
# serializer_class = FileRecordSerializer
|
||||
# filterset_fields = ["submit_user", "name", "number"]
|
||||
# ordering = ["create_time", "number", "name"]
|
||||
|
||||
|
||||
# class FileborrowViewSet(CustomModelViewSet):
|
||||
# """list: 文件借阅
|
||||
|
||||
# 文件借阅
|
||||
# """
|
||||
# queryset = BorrowRecord.objects.all()
|
||||
# serializer_class = BorrowRecordSerializer
|
||||
# filterset_fields = ["files", "borrow_user"]
|
||||
# ordering = ["create_time"]
|
||||
|
||||
|
||||
# class PublicityViewSet(CustomModelViewSet):
|
||||
# """list: 公告
|
||||
|
||||
# 公告
|
||||
# """
|
||||
# queryset = Publicity.objects.all()
|
||||
# serializer_class = PublicitySerializer
|
||||
# filterset_fields = ["title","number"]
|
||||
# ordering = ["create_time", "number"]
|
||||
|
||||
|
||||
# class PatentInfoViewSet(CustomModelViewSet):
|
||||
# """list: 专利
|
||||
|
||||
# 专利
|
||||
# """
|
||||
# queryset = PatentInfo.objects.all()
|
||||
# serializer_class = PatentInfoSerializer
|
||||
# filterset_fields = ["name", "author", "type"]
|
||||
# ordering = ["create_time", "name", "author", "type"]
|
||||
|
||||
|
||||
# class PaperViewSet(CustomModelViewSet):
|
||||
# """list: 论文申密审批
|
||||
|
||||
# 论文申密审批
|
||||
# """
|
||||
# queryset = PaperOfm.objects.all()
|
||||
# serializer_class = PaperSerializer
|
||||
# filterset_fields = ["name", "author"]
|
||||
# ordering = ["create_time", "name"]
|
||||
|
||||
|
||||
# class PlatformViewSet(CustomModelViewSet):
|
||||
# """list: 平台
|
||||
|
||||
# 平台
|
||||
# """
|
||||
# queryset = Platform.objects.all()
|
||||
# serializer_class = PlatformSerializer
|
||||
# filterset_fields = ["name"]
|
||||
# ordering = ["create_time", "name"]
|
||||
|
||||
|
||||
# class ProjectViewSet(CustomModelViewSet):
|
||||
# """list: 项目
|
||||
|
||||
# 项目
|
||||
# """
|
||||
# queryset = Project.objects.all()
|
||||
# serializer_class = ProjectSerializer
|
||||
# filterset_fields = ["name"]
|
||||
# ordering = ["create_time", "name"]
|
||||
|
||||
|
||||
# class PatentRecordViewSet(CustomModelViewSet):
|
||||
# """list: 专利台账登记
|
||||
|
||||
# 专利台账登记
|
||||
# """
|
||||
# queryset = PatentRecord.objects.all()
|
||||
# serializer_class = ProjectMemberSerializer
|
||||
# filterset_fields = ["patent", "type"]
|
||||
# ordering = ["create_time", "patent", "type"]
|
||||
|
||||
|
||||
# class PaperRecordViewSet(CustomModelViewSet):
|
||||
# """list: 论文台账登记
|
||||
|
||||
# 论文台账登记
|
||||
# """
|
||||
# queryset = PaperRecord.objects.all()
|
||||
# serializer_class = ProjectMemberSerializer
|
||||
# filterset_fields = ["index", "title", "paper_code","paper_type", "authors"]
|
||||
# ordering = ["create_time", "paper", "type"]
|
||||
|
||||
|
||||
# class ProjectApprovalViewSet(CustomModelViewSet):
|
||||
# """list: 立项审批表
|
||||
|
||||
# 立项审批表
|
||||
# """
|
||||
# queryset = ProjectApproval.objects.all()
|
||||
# serializer_class = ProjectApprovalSerializer
|
||||
# filterset_fields = ["project_start_date"]
|
||||
# ordering = ["project_start_date"]
|
||||
|
||||
|
||||
# class ProjectInfoViewSet(CustomModelViewSet):
|
||||
# """list: 项目信息
|
||||
|
||||
# 项目信息
|
||||
# """
|
||||
# queryset = ProjectInfo.objects.all()
|
||||
# serializer_class = ProjectInfoSerializer
|
||||
# filterset_fields = ["serial_number", "name", "platform", "project_source"]
|
||||
# ordering = ["serial_number", "name"]
|
||||
|
|
Loading…
Reference in New Issue