fix: исправление создания заявок - добавлено обязательное поле department
- Сделано поле 'items' необязательным в ProcurementRequestCreateSerializer - Добавлено поле 'department' в форму создания заявки (dashboard и request_list) - Обновлен JavaScript для передачи department в API - Добавлен список departments в контекст dashboard view - Теперь можно создать заявку без позиций (items), добавить их потом - Все 72 теста проходят успешно
This commit is contained in:
parent
c94de51c31
commit
41eda0e7ac
@ -231,7 +231,7 @@ class ProcurementRequestDetailSerializer(serializers.ModelSerializer):
|
||||
class ProcurementRequestCreateSerializer(serializers.ModelSerializer):
|
||||
"""Сериализатор для создания заявки с позициями."""
|
||||
|
||||
items = ProcurementItemCreateSerializer(many=True)
|
||||
items = ProcurementItemCreateSerializer(many=True, required=False)
|
||||
|
||||
class Meta:
|
||||
model = ProcurementRequest
|
||||
@ -251,7 +251,7 @@ class ProcurementRequestCreateSerializer(serializers.ModelSerializer):
|
||||
|
||||
def create(self, validated_data):
|
||||
"""Создать заявку с позициями."""
|
||||
items_data = validated_data.pop('items')
|
||||
items_data = validated_data.pop('items', [])
|
||||
request = self.context['request']
|
||||
|
||||
# Создаем заявку
|
||||
@ -260,7 +260,7 @@ class ProcurementRequestCreateSerializer(serializers.ModelSerializer):
|
||||
**validated_data
|
||||
)
|
||||
|
||||
# Создаем позиции
|
||||
# Создаем позиции (если они переданы)
|
||||
for item_data in items_data:
|
||||
ProcurementItem.objects.create(
|
||||
request=procurement_request,
|
||||
|
||||
@ -67,6 +67,7 @@ def dashboard(request):
|
||||
'budget': budget,
|
||||
'recent_requests': recent_requests,
|
||||
'can_approve': can_approve,
|
||||
'departments': Department.objects.all().order_by('name'),
|
||||
}
|
||||
return render(request, 'procurement/dashboard.html', context)
|
||||
|
||||
|
||||
@ -242,6 +242,16 @@
|
||||
placeholder="Опишите необходимость закупки..." maxlength="2000"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="form-label">Отдел <span class="text-danger">*</span></label>
|
||||
<select name="department" class="form-select" required>
|
||||
<option value="">Выберите отдел...</option>
|
||||
{% for dept in departments %}
|
||||
<option value="{{ dept.id }}">{{ dept.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Срочность <span class="text-danger">*</span></label>
|
||||
<select name="urgency" class="form-select" required>
|
||||
@ -303,6 +313,7 @@
|
||||
const data = {
|
||||
title: formData.get('title'),
|
||||
description: formData.get('description') || '',
|
||||
department: formData.get('department'),
|
||||
urgency: formData.get('urgency'),
|
||||
estimated_cost: formData.get('estimated_cost') || null,
|
||||
desired_date: formData.get('desired_date') || null,
|
||||
|
||||
@ -173,6 +173,16 @@
|
||||
placeholder="Опишите необходимость закупки..." maxlength="2000"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="form-label">Отдел <span class="text-danger">*</span></label>
|
||||
<select name="department" class="form-select" required>
|
||||
<option value="">Выберите отдел...</option>
|
||||
{% for dept in departments %}
|
||||
<option value="{{ dept.id }}">{{ dept.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label class="form-label">Срочность <span class="text-danger">*</span></label>
|
||||
<select name="urgency" class="form-select" required>
|
||||
@ -234,6 +244,7 @@
|
||||
const data = {
|
||||
title: formData.get('title'),
|
||||
description: formData.get('description') || '',
|
||||
department: formData.get('department'),
|
||||
urgency: formData.get('urgency'),
|
||||
estimated_cost: formData.get('estimated_cost') || null,
|
||||
desired_date: formData.get('desired_date') || null,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user