This commit is contained in:
shijing 2023-06-28 13:23:58 +08:00
commit 4d1eabcd23
2 changed files with 51 additions and 9 deletions

View File

@ -3,6 +3,7 @@ from rest_framework import serializers
from .models import *
from apps.system.serializers import OrganizationSerializer,FileListSerializer,UserSimpleSerializer,OrganizationSimpleSerializer, FileSimpleSerializer
from rest_framework.exceptions import ParseError
import datetime
class ContentSerializer(serializers.ModelSerializer):
@ -161,14 +162,39 @@ class PgoalDeptSerializer(serializers.ModelSerializer):
attrs['year'] = task2do.task2.year
attrs['belong_dept'] = task2do.belong_dept
return attrs
class DateField(serializers.Field):
def to_internal_value(self, value):
if isinstance(value, datetime.datetime):
return value
elif isinstance(value, datetime.date):
return value
try:
date_obj = datetime.datetime.strptime(value, '%Y-%m-%d %H:%M:%S').date()
except ValueError:
try:
date_obj = datetime.datetime.strptime(value, '%Y-%m-%d').date()
except ValueError:
raise serializers.ValidationError("日期格式错误")
return date_obj
def to_representation(self, value):
if isinstance(value, datetime.date):
value = value.strftime('%Y-%m-%d')
return super().to_representation(value)
class RcSerializer(ValidateMixin, serializers.ModelSerializer):
# date_issue = DateField(required=False, allow_null=True)
# date_accept = DateField(required=False, allow_null=True)
# date_expect = DateField(required=False, allow_null=True)
class Meta(BaseMeta):
model = Rc
class ComplaintSerializer(ValidateMixin, serializers.ModelSerializer):
# date_occurrence = DateField()
# date_feedback = DateField()
class Meta(BaseMeta):
model = Complaint
@ -183,7 +209,7 @@ class RiskSerializer(ValidateMixin, serializers.ModelSerializer):
model = Risk
class OinspectSerializer(ValidateMixin, serializers.ModelSerializer):
# date_inspect = DateField()
class Meta(BaseMeta):
model = Oinspect

View File

@ -12,6 +12,7 @@ from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from utils.pagination import PageOrNot
from openpyxl import load_workbook
import datetime
from apps.system.mixins import CreateUpdateCustomMixin
from apps.system.models import Organization
@ -601,6 +602,21 @@ class PgoalDeptViewSet(Domixin, CreateUpdateCustomMixin, ModelViewSet):
self.countup_task2do(instance.task2do)
class ImpMixin:
def format_date(self, ind, val):
new_val = val
if isinstance(val, datetime.datetime):
new_val = val.date()
elif isinstance(val, datetime.date):
new_val = val
elif isinstance(val, str):
try:
new_val = datetime.datetime.strptime(val, '%Y-%m-%d').date()
except ValueError:
raise ParseError(f'{ind}行, 日期时间格式错误')
else:
raise ParseError(f'{ind}行, 日期时间格式错误')
return new_val
def get_enum(self, val, atuple, ind):
for i in atuple:
if i[1] == val:
@ -659,12 +675,12 @@ class RcViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet):
data['number'] = sheet['b'+str(i)].value
data['number_correct'] = sheet['c'+str(i)].value
data['reason_error'] = sheet['d'+str(i)].value
data['date_issue'] = sheet['e'+str(i)].value
data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value)
else:
data['number'] = sheet['b'+str(i)].value
data['date_accept'] = sheet['c'+str(i)].value
data['date_expect'] = sheet['d'+str(i)].value
data['date_issue'] = sheet['e'+str(i)].value
data['date_accept'] = self.format_date(i, sheet['c'+str(i)].value)
data['date_expect'] = self.format_date(i, sheet['d'+str(i)].value)
data['date_issue'] = self.format_date(i, sheet['e'+str(i)].value)
data['remark'] = sheet['f'+str(i)].value
return data
@ -700,9 +716,9 @@ class ComplaintViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet)
def make_data(self, data, sheet, i, etype):
data['complainant'] = sheet['b'+str(i)].value
data['date_occurrence'] = sheet['c'+str(i)].value
data['date_occurrence'] = self.format_date(i, sheet['c'+str(i)].value)
data['content'] = sheet['d'+str(i)].value
data['date_feedback'] = sheet['e'+str(i)].value
data['date_feedback'] = self.format_date(i, sheet['e'+str(i)].value)
data['is_satisfied'] = True if sheet['f'+str(i)].value == '' else False
return data
@ -780,7 +796,7 @@ class OinspectViewSet(ImpMixin, Domixin, CreateUpdateCustomMixin, ModelViewSet):
def make_data(self, data, sheet, i, etype):
data['cate'] = self.get_enum(sheet['b'+str(i)].value, Oinspect.oinspect_cate_choices, i)
data['checker'] = sheet['c'+str(i)].value
data['date_inspect'] = sheet['d'+str(i)].value
data['date_inspect'] = self.format_date(i, sheet['d'+str(i)].value)
data['result'] = sheet['e'+str(i)].value
return data