def checklist_value_edit(request, uid): from service.models import ChecklistValue from service.forms import ChecklistValueEditForm value = get_object_or_404(ChecklistValue, id=uid) if request.method == 'GET': form = ChecklistValueEditForm(instance=value) context = {'value': value, 'form': form} return render(request, 'service/checklist_value/edit.html', context) elif request.method == 'POST': form = ChecklistValueEditForm(request.POST, request.FILES, instance=value) if form.is_valid(): value = form.save() if value.solve_date is not None: value.has_issues = True value.save() messages.success(request, 'Изменения применены') return redirect(to='service:checklist_value_info', uid=value.id) else: context = {'value': value, 'form': form} return render(request, 'service/checklist_value/edit.html', context)
def ticket_info(request, uid): from service.models import Ticket ticket = get_object_or_404(Ticket, id=uid) context = {'ticket': ticket} return render(request, 'service/ticket/info.html', context)
def checklist_value_list(request, state='all'): from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from service.models import ChecklistValue page = request.GET.get('page', 1) if state == 'all': data = ChecklistValue.objects.filter( has_issues=True).order_by('-checklist__date') title = 'Замечания' elif state == 'solved': data = ChecklistValue.objects.filter( has_issues=True, solve_date__isnull=False).order_by('-checklist__date') title = 'Устраненные замечания' else: data = ChecklistValue.objects.filter( has_issues=True, solve_date__isnull=True).order_by('-checklist__date') title = 'Неустраненные замечания' paginator = Paginator(data, 25) try: checklist_values = paginator.page(page) except PageNotAnInteger: checklist_values = paginator.page(1) except EmptyPage: checklist_values = paginator.page(paginator.num_pages) context = {'checklist_values': checklist_values, 'title': title} return render(request, 'service/checklist_value/list.html', context)
def checklist_list(request, state='all'): from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from service.models import Checklist page = request.GET.get('page', 1) if state == 'all': data = Checklist.objects.order_by('-date') title = 'Отчеты' elif state == 'issues': data = Checklist.objects.unsolved_only().order_by('-date') title = 'Отчеты с замечаниями' else: data = Checklist.objects.solved_only().order_by('-date') title = 'Отчеты без замечаний' paginator = Paginator(data, 25) try: checklists = paginator.page(page) except PageNotAnInteger: checklists = paginator.page(1) except EmptyPage: checklists = paginator.page(paginator.num_pages) context = {'checklists': checklists, 'title': title} return render(request, 'service/checklist/list.html', context)
def checklist_value_info(request, uid): from service.models import ChecklistValue value = get_object_or_404(ChecklistValue, id=uid) context = {'value': value} return render(request, 'service/checklist_value/info.html', context)
def ticket_close(request, uid): from service.models import Ticket, ChecklistValue from service.forms import TicketColseForm from datetime import datetime ticket = get_object_or_404(Ticket, id=uid) return_path = request.GET.get('return', 'ticket_info') if ticket.close_date is not None: messages.warning(request, 'Невозможно изменить статус заявки') return redirect(to='service:ticket_info', uid=ticket.id) form = TicketColseForm(instance=ticket, initial={'close_date': datetime.now()}) if request.method == 'POST': form = TicketColseForm(request.POST, instance=ticket) if form.is_valid(): ticket = form.save() messages.success(request, 'Заявка закрыта') if form.cleaned_data['solve_issue']: issue = ChecklistValue.objects.get(id=ticket.issue_id) issue.solve_date = ticket.close_date issue.save() messages.success(request, 'Замечание устранено') if return_path == 'ticket_list': return redirect(to='service:ticket_list', state='active') else: return redirect(to='service:ticket_info', uid=uid) if ticket.issue is None or ticket.issue.solve_date is not None: form.fields.pop('solve_issue') context = {'ticket': ticket, 'form': form} return render(request, 'service/ticket/close.html', context)
def ticket_list(request, state='all'): from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from service.models import Ticket page = request.GET.get('page', 1) title = 'Завки' if state == 'active': data = Ticket.objects.filter( close_date__isnull=True).order_by('-creation_datetime') title = 'Заявки в работе' elif state == 'closed': data = Ticket.objects.filter( close_date__isnull=False).order_by('-creation_datetime') title = 'Закрытые заявки' else: data = Ticket.objects.order_by('-creation_datetime') paginator = Paginator(data, 25) try: tickets = paginator.page(page) except PageNotAnInteger: tickets = paginator.page(1) except EmptyPage: tickets = paginator.page(paginator.num_pages) context = {'tickets': tickets, 'title': title} return render(request, 'service/ticket/list.html', context)
def provider_new(request): from service.forms import ProviderEditForm from service.models import Provider if request.method == 'GET': form = ProviderEditForm() context = {'form': form} return render(request, 'service/provider/new.html', context) elif request.method == 'POST': form = ProviderEditForm(request.POST) if form.is_valid(): provider = form.save() messages.success(request, 'Провайдер добавлен') return redirect(to='service:provider_info', uid=provider.id) else: context = {'form': form} return render(request, 'service/provider/new.html', context)
def provider_edit(request, uid): from service.models import Provider from service.forms import ProviderEditForm provider = get_object_or_404(Provider, id=uid) if request.method == 'GET': form = ProviderEditForm(instance=provider) context = {'form': form} return render(request, 'service/provider/edit.html', context) elif request.method == 'POST': form = ProviderEditForm(request.POST, instance=provider) if form.is_valid(): form.save() messages.success(request, 'Изменения применены') return redirect(to='service:provider_info', uid=uid) else: context = {'form': form} return render(request, 'service/provider/edit.html', context)
def checklist_new(request): from django.forms import formset_factory from service.forms import ChecklistNewForm, ChecklistValueForm from service.models import ChecklistRow, ChecklistValue, Checklist checklist_form = ChecklistNewForm() checklist_rows = [ x for x in ChecklistRow.objects.order_by( 'zone__ord_number', 'ord_number').all().prefetch_related('zone') ] rows_num = len(checklist_rows) rows_factory = formset_factory(ChecklistValueForm, extra=rows_num) if request.method == 'GET': formset = rows_factory() rows = [] for i in range(rows_num): formset[i].initial = {'row': checklist_rows[i].id} rows.append({ 'zone': checklist_rows[i].zone.name, 'name': checklist_rows[i].name, 'form': formset[i] }) context = { 'checklist_form': checklist_form, 'formset': rows, 'management_form': formset.management_form } return render(request, 'service/checklist/new.html', context) elif request.method == 'POST': form = ChecklistNewForm(request.POST) formset = rows_factory(request.POST, request.FILES) if formset.is_valid() and form.is_valid(): checklist = form.save() for row in formset: row_value = row.save(commit=False) row_value.checklist = checklist row_value.save() messages.success(request, 'Отчет создан') return redirect(to='service:checklist_list') else: messages.error( request, 'Есть ошибки в заполнении формы:<br/>' + str(formset.errors)) return redirect(to='service:checklist_new')
def ticket_edit(request, uid): from service.forms import TicketEditForm from service.models import Ticket, ChecklistValue ticket = get_object_or_404(Ticket, id=uid) if request.method == 'GET': form = TicketEditForm(instance=ticket) form.fields['issue'].queryset |= ChecklistValue.objects.filter( id=ticket.issue_id) context = {'form': form} return render(request, 'service/ticket/edit.html', context) elif request.method == 'POST': form = TicketEditForm(request.POST, request.FILES, instance=ticket) form.fields['issue'].queryset |= ChecklistValue.objects.filter( id=ticket.issue_id) if form.is_valid(): form.save() messages.success(request, 'Изменения применены') return redirect(to='service:ticket_info', uid=ticket.id) else: context = {'form': form} return render(request, 'service/ticket/edit.html', context)
def ticket_new(request): from service.forms import TicketNewForm from main.models import GlobalSettings from django.core.mail import EmailMultiAlternatives if request.method == 'GET': issue_id = request.GET.get('issue_id', None) form = TicketNewForm(initial={'issue': issue_id}) context = {'form': form} return render(request, 'service/ticket/new.html', context) elif request.method == 'POST': form = TicketNewForm(request.POST, request.FILES) if form.is_valid(): if form.cleaned_data['issue'] is not None and form.cleaned_data[ 'issue'].has_ticket(): messages.error(request, 'К выбранному замечанию уже создана заявка') else: ticket = form.save() email = send_mail(ticket, form.cleaned_data['attach_file']) if email['sent']: messages.success(request, 'Заявка создана') messages.success(request, 'Письмо отправлено') ticket.mail_sent = True ticket.save() return redirect(to='service:ticket_info', uid=ticket.id) else: messages.warning(request, 'Заявка создана') messages.error(request, 'Письмо НЕ отправлено') messages.debug(request, email['error']) return redirect(to='service:ticket_info', uid=ticket.id) context = {'form': form} return render(request, 'service/ticket/new.html', context)
def checklist_value_solve(request, uid): from service.models import ChecklistValue, Ticket from service.forms import ChecklistValueSolveForm from datetime import datetime value = get_object_or_404(ChecklistValue, id=uid) return_path = request.GET.get('return', 'checklist_value_info') ticket = next(iter(Ticket.objects.filter(issue_id=uid)), None) if not value.has_issues or value.solve_date is not None: messages.debug(request, 'Ничего не произошло') return redirect(to='service:checklist_value_info', uid=value.id) form = ChecklistValueSolveForm(instance=value, initial={'solve_date': datetime.now()}) if request.method == 'POST': form = ChecklistValueSolveForm(request.POST, instance=value) if form.is_valid(): value = form.save() messages.success(request, 'Замечание устранено') if form.cleaned_data['close_ticket'] and ticket is not None: if ticket.close_date is None: ticket.close_date = value.solve_date ticket.save() messages.success(request, 'Заявка закрыта') if return_path == 'checklist_info': return redirect(to='service:checklist_info', uid=value.checklist_id) elif return_path == 'checklist_value_list': return redirect(to='service:checklist_value_list', state='unsolved') else: return redirect(to='service:checklist_value_info', uid=value.id) if ticket is None or ticket.close_date is not None: form.fields.pop('close_ticket') context = {'value': value, 'form': form} return render(request, 'service/checklist_value/close.html', context)
def checklist_info(request, uid): from service.models import Checklist, Zone checklist = get_object_or_404(Checklist, id=uid) checklist_zones = [] for zone in Zone.objects.order_by('ord_number'): checklist_zones.append({ 'name': zone.name, 'issues': checklist.checklistvalue_set.filter( row__zone=zone, has_issues=True).order_by('row__ord_number'), 'unsolved_count': checklist.checklistvalue_set.filter( row__zone=zone, has_issues=True, solve_date__isnull=True).count() }) context = {'checklist': checklist, 'checklist_zones': checklist_zones} return render(request, 'service/checklist/info.html', context)
def settings(request): from service.forms import GlobalSettingsForm from django.forms import modelformset_factory from main.models import GlobalSettings keys_list = [ 'service_email_footer', #'service_email_from', ] settings_list = GlobalSettings.objects.filter( key__in=keys_list).order_by('name') settings_factory = modelformset_factory(GlobalSettings, form=GlobalSettingsForm, extra=len(keys_list)) if request.method == 'GET': formset = settings_factory(queryset=settings_list) rows = [] for i, elem in enumerate(settings_list): rows.append({'name': elem.name, 'form': formset[i]}) context = {'formset': rows, 'management_form': formset.management_form} return render(request, 'service/settings.html', context) elif request.method == 'POST': formset = settings_factory(request.POST, queryset=settings_list) if formset.is_valid(): formset.save() messages.success(request, 'Изменения применены') return redirect(to='service:settings') else: messages.error(request, 'Не удалось применить изменения') return redirect(to='service:settings') else: return HttpResponse('Метод не поддерживается')
def index(request): context = {} return render(request, 'service/index.html', context)
def provider_list(request): from service.models import Provider providers = Provider.objects.order_by('name') context = {'providers': providers} return render(request, 'service/provider/list.html', context)
def provider_info(request, uid): from service.models import Provider provider = get_object_or_404(Provider, id=uid) context = {'provider': provider} return render(request, 'service/provider/info.html', context)
def checklist_edit(request, uid): from django.forms import modelformset_factory from service.models import Checklist, ChecklistValue from service.forms import ChecklistEditForm, ChecklistValueEditInlineForm checklist = get_object_or_404(Checklist, id=uid) queryset = ChecklistValue.objects.filter(checklist_id=uid).order_by( 'row__zone__ord_number', 'row__ord_number').prefetch_related('row', 'row__zone') rows_num = queryset.count() rows_factory = modelformset_factory(ChecklistValue, form=ChecklistValueEditInlineForm, extra=rows_num) if request.method == 'GET': checklist_form = ChecklistEditForm(instance=checklist) formset = rows_factory(queryset=queryset) rows = [] for i, elem in enumerate(queryset): rows.append({ 'zone': elem.row.zone.name, 'name': elem.row.name, 'form': formset[i] }) context = { 'checklist_form': checklist_form, 'formset': rows, 'management_form': formset.management_form } return render(request, 'service/checklist/edit.html', context) elif request.method == 'POST': checklist_form = ChecklistEditForm(request.POST, instance=checklist) formset = rows_factory(request.POST, request.FILES, queryset=queryset) if checklist_form.is_valid() and formset.is_valid(): checklist_form.save() instances = formset.save(commit=False) for instance in instances: instance.save() messages.success(request, 'Изменения применены') return redirect(to='service:checklist_info', uid=uid) else: rows = [] for i, elem in enumerate(queryset): rows.append({ 'zone': elem.row.zone.name, 'name': elem.row.name, 'form': formset[i] }) context = { 'checklist_form': checklist_form, 'formset': rows, 'management_form': formset.management_form } return render(request, 'service/checklist/edit.html', context)