models.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import random
  2. import string
  3. from django.utils import timezone
  4. from django.conf import settings
  5. from django.db import models
  6. from apps.tenant.building.models import Building
  7. from apps.tenant.models import Tenant
  8. from apps.tenant.option.models import Option
  9. from apps.upload.models import Upload
  10. from apps.tenant.repair_order.models import RepairOrder
  11. from utils.exceptions import CustomError
  12. class InspectionOrder(models.Model):
  13. NOT_REPAIR = 1
  14. HAS_REPAIR = 2
  15. REPAIR = 3
  16. STATUS_CHOICES = (
  17. (NOT_REPAIR, '巡检正常'),
  18. (HAS_REPAIR, '已报修'),
  19. (REPAIR, '已修复'),
  20. )
  21. building = models.ForeignKey(Building, verbose_name=u'巡检地点', on_delete=models.PROTECT)
  22. no = models.CharField(max_length=50, verbose_name=u'编号', blank=True)
  23. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=NOT_REPAIR)
  24. tenant = models.ForeignKey(Tenant, verbose_name=u'租户', on_delete=models.PROTECT, blank=True)
  25. user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"巡检人员", on_delete=models.PROTECT,
  26. editable=False, related_name='inspection_order_user')
  27. problem = models.CharField(max_length=500, verbose_name=u'巡检问题')
  28. create_time = models.DateTimeField(verbose_name=u'巡检时间', auto_now_add=True)
  29. images = models.ManyToManyField(Upload, verbose_name=u'图片', blank=True)
  30. repair_type = models.ForeignKey(Option, verbose_name=u'报修类型', on_delete=models.PROTECT, null=True)
  31. repair_order = models.ForeignKey(RepairOrder, verbose_name=u'转报修', on_delete=models.PROTECT, null=True)
  32. turn_repair_time = models.DateTimeField(verbose_name=u'转报修时间', null=True)
  33. turn_repair_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"转报修人", on_delete=models.PROTECT,
  34. null=True, related_name='turn_repair_user')
  35. class Meta:
  36. db_table = 'inspection_order'
  37. verbose_name = '巡检工单'
  38. ordering = ['-create_time']
  39. index_together = (
  40. 'status',
  41. 'create_time',
  42. )
  43. default_permissions = ()
  44. permissions = [
  45. ('browse_inspection_order', u'查看'),
  46. ('add_inspection_order', u'添加'),
  47. ('delete_inspection_order', u'删除'),
  48. ('dturn_repair_inspection_order', u'转报修'),
  49. ]
  50. @staticmethod
  51. def get_instance_by_id(id, tenant):
  52. try:
  53. id = int(id)
  54. except:
  55. raise CustomError('无效的inspection_order_id')
  56. instance = InspectionOrder.objects.filter(pk=id, tenant=tenant).first()
  57. if not instance:
  58. raise CustomError('未找到对应的巡检工单实例')
  59. return instance
  60. def get_no(self):
  61. now = timezone.now()
  62. no = '%s%d-%s' % ('XJ', self.tenant.id, now.strftime('%Y%m%d%H%M%S'))
  63. return no
  64. def turn_repair(self, user):
  65. # 巡检转报修
  66. repair_order = RepairOrder.objects.create(tenant=self.tenant, building=self.building,
  67. fault_des=self.problem, repair_type=self.repair_type, user=self.user,
  68. tel=self.user.employee.tel,name=self.user.employee.name,
  69. order_type=RepairOrder.INSPECTION_ORDER)
  70. repair_order.no = repair_order.get_no()
  71. images = self.images.all()
  72. for image in images:
  73. repair_order.images.add(image.id)
  74. repair_order.save()
  75. self.status = InspectionOrder.HAS_REPAIR
  76. self.repair_order = repair_order
  77. self.turn_repair_time = timezone.now()
  78. self.turn_repair_user = user
  79. self.save()
  80. return repair_order