wushaodong 4 gadi atpakaļ
vecāks
revīzija
cb03392539

+ 0 - 9
apps/account/models.py

@@ -92,15 +92,6 @@ class User(AbstractBaseUser, PermissionsMixin):
     def __unicode__(self):
         return self.username
 
-    def addAdministrator(self):
-        self.type = self.type | self.SUPPER
-
-    def addTenant(self):
-        self.type = self.type | self.ADMIN
-
-    def addCustomer(self):
-        self.type = self.type | self.EMPLOYEE
-
     def is_employee(self):
         if self.type == self.EMPLOYEE:
             return True

+ 1 - 1
apps/tenant/employee/models.py

@@ -15,7 +15,7 @@ class Employee(models.Model):
     DAY_OFF = 3
     DISABLE = 4
     STATUS_CHOICES = (
-        (ENABLE, u'用'),
+        (ENABLE, u'用'),
         (WORKING, u'工作中'),
         (DAY_OFF, u'调休'),
         (DISABLE, u'禁用'),

+ 2 - 2
apps/tenant/employee/serializers.py

@@ -50,12 +50,12 @@ class EmployeeSerializer(serializers.ModelSerializer):
                 user = {
                     'username': username,
                     'password': self.initial_data['password'],
-                    'is_active': 1 if self.initial_data['status'] == 1 else 0,
+                    'is_active': 1 if self.initial_data['status'] == '1' else 0,
                     'type': self.initial_data['type'],
                 }
                 instance.user.update_item(user)
             else:
-                is_active = 1 if self.initial_data['status'] == 1 else 0
+                is_active = 1 if self.initial_data['status'] == '1' else 0
                 user = User.objects.create_tenant_user(validated_data['type'],
                                                        username,
                                                        self.initial_data['password'],

+ 5 - 3
apps/tenant/inspection_order/models.py

@@ -3,12 +3,12 @@ import string
 from django.utils import timezone
 from django.conf import settings
 from django.db import models
-from apps.tenant.building.models import Building
 from apps.tenant.models import Tenant
 from apps.tenant.option.models import Option
 from apps.upload.models import Upload
 from apps.tenant.repair_order.models import RepairOrder
 from utils.exceptions import CustomError
+from apps.tenant.device.models import DeviceModel
 
 
 class InspectionOrder(models.Model):
@@ -21,7 +21,9 @@ class InspectionOrder(models.Model):
         (REPAIR, '已修复'),
     )
 
-    building = models.ForeignKey(Building, verbose_name=u'巡检地点', on_delete=models.PROTECT)
+    device = models.ForeignKey(DeviceModel, verbose_name='设备', on_delete=models.PROTECT, blank=True, null=True)
+    device_name = models.CharField(max_length=100, verbose_name='设备名称')
+    device_address = models.CharField(max_length=200, verbose_name='设备地址')
     no = models.CharField(max_length=50, verbose_name=u'编号', blank=True)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=NOT_REPAIR)
     tenant = models.ForeignKey(Tenant, verbose_name=u'租户', on_delete=models.PROTECT, blank=True)
@@ -70,7 +72,7 @@ class InspectionOrder(models.Model):
 
     def turn_repair(self, user):
         # 巡检转报修
-        repair_order = RepairOrder.objects.create(tenant=self.tenant, building=self.building,
+        repair_order = RepairOrder.objects.create(tenant=self.tenant, device=self.device,
                                                   fault_des=self.problem, repair_type=self.repair_type, user=self.user,
                                                   tel=self.user.employee.tel,name=self.user.employee.name,
                                                   order_type=RepairOrder.INSPECTION_ORDER)

+ 2 - 7
apps/tenant/inspection_order/serializers.py

@@ -1,13 +1,11 @@
 # coding=utf-8
 from rest_framework import serializers
-from apps.tenant.building.serializer import BuildingSerializer
 from .models import InspectionOrder
 from ...upload.serializers import UploadSerializer
 
 
 class InspectionOrderSerializer(serializers.ModelSerializer):
     status = serializers.CharField(source='get_status_display', read_only=True)
-    building_text = serializers.SerializerMethodField()
     user_name = serializers.CharField(source='user.employee.name', read_only=True)
     user_tel = serializers.CharField(source='user.employee.tel', read_only=True)
     repair_type = serializers.CharField(source='repair_type.name', read_only=True)
@@ -19,11 +17,8 @@ class InspectionOrderSerializer(serializers.ModelSerializer):
     def get_images(self, obj):
         return UploadSerializer(obj.images, many=True).data
 
-    def get_building_text(self, obj):
-        return obj.building.get_full_name()
-
     class Meta:
         model = InspectionOrder
         fields = (
-            'id', 'status', 'building_text', 'no', 'problem', 'create_time', 'turn_repair_time', 'user_name',
-            'user_tel', 'repair_type', 'repair_order','status_text', 'turn_repair_user_name', 'images')
+            'id', 'status', 'device_address', 'no', 'problem', 'create_time', 'turn_repair_time', 'user_name',
+            'user_tel',    'device_name', 'repair_type', 'repair_order','status_text', 'turn_repair_user_name', 'images')

+ 21 - 3
apps/tenant/repair_order/models.py

@@ -21,7 +21,26 @@ class RepairOrder(models.Model):
         (REPAIR_ORDER, '报修工单'),
         (INSPECTION_ORDER, '巡检转报修工单')
     )
-
+    NOT_CHECKED = 1
+    CHECKED = 2
+    DISPATCH = 3
+    HANG_UP = 4
+    TURN_EMPLOYEE = 5
+    FINISH = 6
+    APPRAISE = 7
+    INVALID = 8
+    CANCEL_HANG_UP = 9
+    REPAIR_STATUS_CHOICES = (
+        (NOT_CHECKED, '待审核'),
+        (CHECKED, '已审核,待派单'),
+        (DISPATCH, '已派单'),
+        (HANG_UP, '已挂起'),
+        (TURN_EMPLOYEE, '转单'),
+        (FINISH, '已完工,待评价'),
+        (APPRAISE, '已评价'),
+        (INVALID, '作废'),
+        (CANCEL_HANG_UP, '取消挂起'),
+    )
     no = models.CharField(max_length=50, verbose_name='单号', blank=True)
     tenant = models.ForeignKey(Tenant, verbose_name=u'租户', on_delete=models.PROTECT, blank=True)
     device = models.ForeignKey(DeviceModel, verbose_name='设备', on_delete=models.PROTECT, blank=True, null=True)
@@ -68,8 +87,7 @@ class RepairOrder(models.Model):
         return no
 
     def get_full_name(self):
-        address = u'{0}-{1}'.format(self.device.branch,self.device.address)
-        return address
+        return self.device_address
 
     @staticmethod
     def get_instance_by_id(id, tenant):

+ 1 - 1
apps/tenant/repair_order/views.py

@@ -36,7 +36,7 @@ class GetEmployeeView(APIView):
         for emp in employees:
             dict = {
                 'id': emp['user'],
-                'name': '{0}-{1}-{2}-{3}'.format(emp['name'], emp['tel'], emp['position_text'], emp['status_text'])
+                'name': '{0}-{1}-{2}-{3}'.format(emp['name'], emp['tel'], emp['position'], emp['status_text'])
             }
             data.append(dict)
         return response_ok(data)

+ 8 - 12
apps/wxapp/inspection_order/serializers.py

@@ -2,7 +2,6 @@
 from django.conf import settings
 from rest_framework import serializers
 
-from apps.tenant.building.serializer import BuildingDetailSerializer
 from apps.tenant.inspection_order.models import InspectionOrder
 from apps.tenant.repair_order.models import RepairOrder
 from apps.upload.serializers import UploadSerializer
@@ -14,7 +13,6 @@ class InspectionOrderDetailSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     user_name = serializers.CharField(source='user.employee.name', read_only=True)
     user_tel = serializers.CharField(source='user.employee.tel', read_only=True)
-    building_text = serializers.SerializerMethodField()
     images = serializers.SerializerMethodField()
     repair_type_text = serializers.CharField(source='repair_type.name', read_only=True)
     create_at = DelayTimeCharField(source='create_time', read_only=True)
@@ -22,9 +20,6 @@ class InspectionOrderDetailSerializer(serializers.ModelSerializer):
     def get_images(self, obj):
         return UploadSerializer(obj.images, many=True).data
 
-    def get_building_text(self, obj):
-        return BuildingDetailSerializer(obj.building).data
-
     class Meta:
         model = InspectionOrder
         fields = '__all__'
@@ -32,7 +27,6 @@ class InspectionOrderDetailSerializer(serializers.ModelSerializer):
 
 class InspectionOrderListSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
-    building_text = serializers.SerializerMethodField()
     images = serializers.SerializerMethodField()
     repair_type_text = serializers.CharField(source='repair_type.name', read_only=True)
     create_at = DelayTimeCharField(source='create_time', read_only=True)
@@ -40,9 +34,6 @@ class InspectionOrderListSerializer(serializers.ModelSerializer):
     def get_images(self, obj):
         return UploadSerializer(obj.images, many=True).data
 
-    def get_building_text(self, obj):
-        return BuildingDetailSerializer(obj.building).data
-
     class Meta:
         model = InspectionOrder
         fields = '__all__'
@@ -51,14 +42,19 @@ class InspectionOrderListSerializer(serializers.ModelSerializer):
 class InspectionOrderSerializer(serializers.ModelSerializer):
     class Meta:
         model = InspectionOrder
-        fields = ('id', 'building', 'problem', 'repair_type')
+        fields = ('id', 'device_id',  'device_name', 'device_address', 'problem', 'repair_type')
 
     def create(self, validated_data):
         # 巡检结果
         inspection_result = str(self.initial_data['inspection_result'])
+        device = None
+        if 'device' in self.initial_data:
+            device = self.initial_data['device']
         if inspection_result == '0':
             # 巡检状态如果为正常,判断当前教室是否还存有未完成保修的工单
-            repair_orders = RepairOrder.objects.filter(building=self.validated_data['building'],
+            repair_orders = RepairOrder.objects.filter(device_address=self.initial_data['device_address'],
+                                                       device_name=self.initial_data['device_name'],
+                                                       device=device,
                                                        status__in=[settings.NOT_CHECKED, settings.CHECKED,
                                                                    settings.DISPATCH, settings.HANG_UP])
             if repair_orders:
@@ -66,12 +62,12 @@ class InspectionOrderSerializer(serializers.ModelSerializer):
 
             # 状态保存为正常
             validated_data['status'] = InspectionOrder.NOT_REPAIR
-
         if 'images' in self.initial_data:
             validated_data['images'] = self.initial_data['images'].split(',')
         user = self.context['request'].user
         validated_data['user'] = user
         validated_data['tenant'] = user.employee.tenant
+        validated_data['device'] = device
         instance = super(InspectionOrderSerializer, self).create(validated_data)
         instance.no = instance.get_no()
         instance.save()

+ 3 - 5
apps/wxapp/inspection_order/views.py

@@ -38,17 +38,15 @@ class InspectionOrderAllView(generics.ListAPIView):
 
 
 class InspectionOrderViewSet(CustomModelViewSet):
-    permission_classes = [IsTenantUser, ]
+    permission_classes = [isLogin, ]
     queryset = InspectionOrder.objects.filter()
     serializer_class = InspectionOrderSerializer
 
-    @permission_required('inspection_order.browse_inspection_order')
     def filter_queryset(self, queryset):
         queryset = queryset.filter(tenant=self.request.user.employee.tenant, user=self.request.user)
         f = InspectionOrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 
-    @permission_required('inspection_order.add_inspection_order')
     def perform_create(self, serializer):
         super(InspectionOrderViewSet, self).perform_create(serializer)
         instance = serializer.instance
@@ -60,8 +58,8 @@ class InspectionOrderViewSet(CustomModelViewSet):
     def turn_repair(self, request, pk):
         # 转报修
         try:
-            if not self.request.user.has_perm('inspection_order.dturn_repair_inspection_order'):
-                raise CustomError(u"您没有[报修工单-转报修]权限,无法执行该操作,请联系管理员分配权限!")
+            if not self.request.user.is_employee():
+                raise CustomError(u"权限不足,禁止操作!")
             with transaction.atomic():
                 user = self.request.user
                 instance = InspectionOrder.get_instance_by_id(pk, user.employee.tenant)

+ 2 - 11
apps/wxapp/repair_order/serializers.py

@@ -3,7 +3,6 @@ from django.conf import settings
 from rest_framework import serializers
 
 from apps.account.models import User
-from apps.tenant.building.serializer import BuildingDetailSerializer
 from apps.tenant.repair_order.models import RepairOrder, RepairOrderRecord, RepairOrderComment
 from apps.upload.serializers import UploadSerializer
 from utils.serializersfield import DelayTimeCharField
@@ -12,7 +11,6 @@ from utils.serializersfield import DelayTimeCharField
 class RepairOrderDetailSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     user_id = serializers.CharField(source='user.id', read_only=True)
-    building_text = serializers.SerializerMethodField()
     images = serializers.SerializerMethodField()
     repair_type_name = serializers.CharField(source='repair_type.name', read_only=True)
     create_at = DelayTimeCharField(source='create_time', read_only=True)
@@ -20,19 +18,15 @@ class RepairOrderDetailSerializer(serializers.ModelSerializer):
     def get_images(self, obj):
         return UploadSerializer(obj.images, many=True).data
 
-    def get_building_text(self, obj):
-        return BuildingDetailSerializer(obj.building).data
-
     class Meta:
         model = RepairOrder
         fields = (
-            'id', 'status_text', 'status', 'no', 'fault_des', 'tel', 'name', 'create_at', 'building_text',
+            'id', 'status_text', 'status', 'no', 'fault_des', 'tel', 'name', 'create_at', 'device_address',
             'repair_type_name', 'images', 'user_id')
 
 
 class RepairOrderListSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
-    building_text = serializers.SerializerMethodField()
     images = serializers.SerializerMethodField()
     user_id = serializers.CharField(source='user.id', read_only=True)
     repair_type_name = serializers.CharField(source='repair_type.name', read_only=True)
@@ -49,13 +43,10 @@ class RepairOrderListSerializer(serializers.ModelSerializer):
     def get_images(self, obj):
         return UploadSerializer(obj.images, many=True).data
 
-    def get_building_text(self, obj):
-        return BuildingDetailSerializer(obj.building).data
-
     class Meta:
         model = RepairOrder
         fields = (
-            'id', 'status_text', 'no', 'fault_des', 'create_at', 'building_text', 'repair_type_name', 'name',
+            'id', 'status_text', 'no', 'fault_des', 'create_at', 'device_address','repair_type_name', 'name',
             'images', 'status', 'start', 'user_id')
 
 

+ 11 - 16
apps/wxapp/repair_order/views.py

@@ -37,18 +37,14 @@ class RepairOrderMineView(generics.ListAPIView):
     serializer_class = RepairOrderListSerializer
 
     def filter_queryset(self, queryset):
-        appid = self.request.GET.get('appid')
-        app = WechatApplet.getByAppid(appid)
-        queryset = queryset.filter(tenant=app.tenant, user=self.request.user)
+        queryset = queryset.filter(tenant=self.request.user.employee.tenant, user=self.request.user)
         f = RepairOrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 
 
 class RepairOrderCountView(APIView):
     def get(self, request):
-        appid = request.GET.get('appid')
-        app = WechatApplet.getByAppid(appid)
-        queryset = RepairOrder.objects.filter(delete=False, tenant=app.tenant)
+        queryset = RepairOrder.objects.filter(delete=False, tenant=self.request.user.employee.tenant)
         return response_ok({
             'NOT_CHECKED_COUNT': queryset.filter(status=settings.NOT_CHECKED).count(),
             'CHECKED_COUNT': queryset.filter(status=settings.CHECKED).count()
@@ -68,15 +64,13 @@ class RepairOrderAllView(generics.ListAPIView):
 
 class DispatchRepairOrderView(generics.ListAPIView):
     # 我的维修单
-    permission_classes = [IsTenantUser, ]
+    permission_classes = [IsEmployee, ]
     # 查询维修工单记录状态为已派单的
     queryset = RepairOrder.objects.filter()
     serializer_class = RepairOrderDetailSerializer
 
     def get_queryset(self):
-        appid = self.request.GET.get('appid')
-        app = WechatApplet.getByAppid(appid)
-        queryset = self.queryset.filter(tenant=app.tenant, repair_users=self.request.user)
+        queryset = self.queryset.filter(tenant=self.request.user.employee.tenant, repair_users=self.request.user)
         return queryset
 
     def filter_queryset(self, queryset):
@@ -85,7 +79,7 @@ class DispatchRepairOrderView(generics.ListAPIView):
 
 
 class RepairOrderViewSet(CustomModelViewSet):
-    permission_classes = [IsTenantUser, ]
+    permission_classes = (isLogin, )
     queryset = RepairOrder.objects.filter(delete=False)
     serializer_class = RepairOrderSerializer
 
@@ -133,7 +127,7 @@ class RepairOrderViewSet(CustomModelViewSet):
     def hang_up(self, request, pk):
         # 挂起
         try:
-            if not self.request.user.is_admin():
+            if not self.request.user.is_employee():
                 raise CustomError(u"权限不足,禁止操作!")
             reason = request.data.get('reason')
             if not reason:
@@ -152,7 +146,7 @@ class RepairOrderViewSet(CustomModelViewSet):
     def cancel_hang_up(self, request, pk):
         # 取消挂起,继续施工
         try:
-            if not self.request.user.is_admin():
+            if not self.request.user.is_employee():
                 raise CustomError(u"权限不足,禁止操作!")
             with transaction.atomic():
                 user = self.request.user
@@ -190,6 +184,8 @@ class RepairOrderViewSet(CustomModelViewSet):
     @action(methods=['post'], detail=True)
     def finish(self, request, pk):
         # 完工
+        if not self.request.user.is_employee():
+            raise CustomError(u"权限不足,禁止操作!")
         try:
             content = request.data.get('content')
             images = request.data.get('images', None)
@@ -222,8 +218,8 @@ class RepairOrderViewSet(CustomModelViewSet):
                     inspection_order.save()
 
                 # 发送通知
-                CustomerWechat.sendMsg(instance.user, user.employee.name, instance.get_full_building(),
-                                       instance.fault_des, instance.no)
+                # CustomerWechat.sendMsg(instance.user, user.employee.name, instance.get_full_name(),
+                #                        instance.fault_des, instance.no)
 
         except CustomError as e:
             return response_error(e.get_error_msg())
@@ -284,7 +280,6 @@ class RepairOrderViewSet(CustomModelViewSet):
             data.append(dict)
         return response_ok(data)
 
-    @permission_required('repair_order.delete_repair_order')
     def destroy(self, request, *args, **kwargs):
         try:
             if not self.request.user.is_admin():

+ 1 - 1
apps/wxapp/views.py

@@ -216,7 +216,7 @@ class DeviceView(APIView):
             rows = rows[:10]
         for item in rows:
             build_dict = {
-                'id': item.name,
+                'id': item.id,
                 'name':item.name,
                 'device_no':item.device_no,
                 'device_model':item.device_model,

+ 2 - 2
uis/tenant/inspection/detail.html

@@ -30,7 +30,7 @@
             <h3>报销单号:{{ d.no }}</h3>
         </li>
         <li class="baoxiu-li">
-            <h3>地点:{{ d.building_text }}</h3>
+            <h3>地点:{{ d.device_address }}</h3>
         </li>
         <li class="baoxiu-li">
             <h3>问题描述:{{ d.fault_des }}</h3>
@@ -64,7 +64,7 @@
             <h3>报销单号:{{ d.no }}</h3>
         </li>
         <li class="baoxiu-li">
-            <h3>地点:{{ d.building_text }}</h3>
+            <h3>地点:{{ d.device_address }}</h3>
         </li>
         <li class="baoxiu-li">
             <h3>问题描述:{{ d.problem }}</h3>

+ 1 - 1
uis/tenant/inspection/index.html

@@ -117,7 +117,7 @@
             , type: 'get'
             , cols: [[
                 {field: 'no', title: '巡检单号', width: 180}
-                , {field: 'building_text', title: '巡检地点', width: 250}
+                , {field: 'device_address', title: '巡检地点', width: 250}
                 , {field: 'status_text', title: '状态', width: 90}
                 , {field: 'user_name', title: '巡检人员', width: 120}
                 , {field: 'problem', title: '巡检问题', width: 200}

+ 1 - 1
uis/tenant/repairManage/detail.html

@@ -40,7 +40,7 @@
                         <h3>报销单号:{{ d.no }}</h3>
                     </li>
                     <li class="baoxiu-li">
-                        <h3>地点:{{ d.building_text }}</h3>
+                        <h3>地点:{{ d.device_address }}</h3>
                     </li>
                     <li class="baoxiu-li">
                         <h3>问题描述:{{ d.fault_des }}</h3>