Fix service detail buttons and improve career page benefit cards visibility
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
- Fixed service detail modal buttons not working on /service/4/ pages - Updated service request form to use modern Bootstrap modal - Enhanced service_detail view to handle new form fields properly - Added beautiful glassmorphism cards for career benefits section - Improved text visibility with shadows and contrasting backgrounds - Added hover animations and responsive design for benefit cards - Updated career page CSS with modern card designs and effects
This commit is contained in:
@@ -123,59 +123,87 @@ def create_service_request(request, service_id):
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
data = json.loads(request.body)
|
||||
client_email = data.get('client_email')
|
||||
client_phone = data.get('client_phone')
|
||||
client_name = data.get('client_name')
|
||||
|
||||
# Extract form data from new format
|
||||
first_name = data.get('first_name', '').strip()
|
||||
last_name = data.get('last_name', '').strip()
|
||||
email = data.get('email', '').strip()
|
||||
phone = data.get('phone', '').strip()
|
||||
description = data.get('description', '').strip()
|
||||
budget = data.get('budget', '')
|
||||
timeline = data.get('timeline', '')
|
||||
|
||||
if not all([client_email, client_phone, client_name]):
|
||||
return JsonResponse({'status': 'error', 'message': 'Все поля должны быть заполнены'}, status=400)
|
||||
# Validate required fields
|
||||
if not all([first_name, email, description]):
|
||||
return JsonResponse({
|
||||
'success': False,
|
||||
'message': 'Пожалуйста, заполните все обязательные поля (имя, email, описание проекта)'
|
||||
}, status=400)
|
||||
|
||||
service = get_object_or_404(Service, pk=service_id)
|
||||
|
||||
# Проверяем наличие клиента по email (так как email должен быть уникальным)
|
||||
# Create or get client
|
||||
client, client_created = Client.objects.get_or_create(
|
||||
email=client_email,
|
||||
email=email,
|
||||
defaults={
|
||||
'first_name': client_name.split()[0] if client_name else "",
|
||||
'last_name': client_name.split()[-1] if len(client_name.split()) > 1 else "",
|
||||
'phone_number': client_phone,
|
||||
'first_name': first_name,
|
||||
'last_name': last_name,
|
||||
'phone_number': phone,
|
||||
}
|
||||
)
|
||||
|
||||
# Обновляем данные клиента, если он уже существовал (например, телефон или имя изменились)
|
||||
# Update client data if already exists
|
||||
if not client_created:
|
||||
client.first_name = client_name.split()[0]
|
||||
client.last_name = client_name.split()[-1] if len(client_name.split()) > 1 else ""
|
||||
client.phone_number = client_phone
|
||||
client.first_name = first_name
|
||||
client.last_name = last_name
|
||||
if phone: # Only update phone if provided
|
||||
client.phone_number = phone
|
||||
client.save()
|
||||
|
||||
# Проверяем наличие заявки на эту же услугу, не завершенной и не подтвержденной
|
||||
existing_requests = ServiceRequest.objects.filter(client=client, service=service, is_verified=False)
|
||||
# Check for existing pending requests
|
||||
existing_requests = ServiceRequest.objects.filter(
|
||||
client=client,
|
||||
service=service,
|
||||
is_verified=False
|
||||
)
|
||||
if existing_requests.exists():
|
||||
return JsonResponse({
|
||||
'status': 'existing_request',
|
||||
'success': False,
|
||||
'message': 'У вас уже есть активная заявка на данную услугу. Пожалуйста, проверьте ваш Telegram для завершения процесса.'
|
||||
})
|
||||
|
||||
# Создаем новую заявку для клиента
|
||||
# Create service request with additional data
|
||||
token = uuid.uuid4().hex
|
||||
|
||||
# Prepare full message with all provided information
|
||||
full_description = f"Описание проекта: {description}"
|
||||
if budget:
|
||||
full_description += f"\nБюджет: {budget}"
|
||||
if timeline:
|
||||
full_description += f"\nЖелаемые сроки: {timeline}"
|
||||
|
||||
service_request = ServiceRequest.objects.create(
|
||||
service=service,
|
||||
client=client,
|
||||
token=token,
|
||||
message=full_description,
|
||||
is_verified=False
|
||||
)
|
||||
|
||||
return JsonResponse({
|
||||
'status': 'success',
|
||||
'message': 'Заявка успешно создана. Пожалуйста, проверьте ваш Telegram для подтверждения.',
|
||||
'success': True,
|
||||
'message': 'Заявка успешно отправлена! Мы свяжемся с вами в ближайшее время.',
|
||||
'service_request_id': service_request.id,
|
||||
})
|
||||
|
||||
except json.JSONDecodeError:
|
||||
logger.error("Invalid JSON format")
|
||||
return JsonResponse({'status': 'error', 'message': 'Неверный формат данных'}, status=400)
|
||||
return JsonResponse({'status': 'error', 'message': 'Метод запроса должен быть POST'}, status=405)
|
||||
return JsonResponse({'success': False, 'message': 'Неверный формат данных'}, status=400)
|
||||
except Exception as e:
|
||||
logger.error(f"Error creating service request: {str(e)}")
|
||||
return JsonResponse({'success': False, 'message': 'Произошла ошибка при создании заявки'}, status=500)
|
||||
|
||||
return JsonResponse({'success': False, 'message': 'Метод запроса должен быть POST'}, status=405)
|
||||
|
||||
def generate_qr_code(request, service_id):
|
||||
if request.method == 'POST':
|
||||
|
||||
Reference in New Issue
Block a user