it_manager: справочник типовых работ в журнале WorkLog.
Категория/работа/required_details вместо свободного work_type; seed Directory, отчёт и тесты. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,8 +2,6 @@ from django.db import models
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
|
||||
from core.models.directories import directory_default
|
||||
|
||||
|
||||
class WorkLog(models.Model):
|
||||
date = models.DateField('Дата', default=timezone.localdate, db_index=True)
|
||||
@@ -16,12 +14,21 @@ class WorkLog(models.Model):
|
||||
null=True, blank=True,
|
||||
related_name='work_logs', verbose_name='Локация',
|
||||
)
|
||||
# Устаревший грубый вид (~7 типов); для новых записей не заполняется.
|
||||
work_type = models.ForeignKey(
|
||||
'core.Directory', on_delete=models.PROTECT,
|
||||
limit_choices_to={'directory_type__code': 'worklog_type', 'is_active': True},
|
||||
related_name='worklogs_by_type', verbose_name='Вид работ',
|
||||
null=True, blank=True,
|
||||
)
|
||||
description = models.TextField('Описание работ')
|
||||
catalog_work = models.ForeignKey(
|
||||
'core.Directory', on_delete=models.PROTECT,
|
||||
limit_choices_to={'directory_type__code': 'it_work', 'is_active': True},
|
||||
related_name='worklogs_by_catalog', verbose_name='Типовая работа',
|
||||
null=True, blank=True,
|
||||
)
|
||||
details = models.JSONField('Уточнения', default=dict, blank=True)
|
||||
description = models.TextField('Комментарий', blank=True)
|
||||
result = models.TextField('Результат', blank=True)
|
||||
hours_spent = models.DecimalField('Затрачено часов', max_digits=5, decimal_places=1,
|
||||
null=True, blank=True)
|
||||
@@ -49,7 +56,18 @@ class WorkLog(models.Model):
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.work_type.name} — {self.technician} — {self.date:%d.%m.%Y}'
|
||||
if self.catalog_work_id:
|
||||
title = self.catalog_work.name
|
||||
elif self.work_type_id:
|
||||
title = self.work_type.name
|
||||
else:
|
||||
title = (self.description or '—')[:40]
|
||||
return f'{title} — {self.technician} — {self.date:%d.%m.%Y}'
|
||||
|
||||
@property
|
||||
def display_title(self) -> str:
|
||||
from apps.it_manager.work_directory import worklog_display_title
|
||||
return worklog_display_title(self)
|
||||
|
||||
|
||||
class ServiceCall(models.Model):
|
||||
|
||||
Reference in New Issue
Block a user