Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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')
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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('Метод не поддерживается')
Ejemplo n.º 16
0
def index(request):
    context = {}
    return render(request, 'service/index.html', context)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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)