Пример #1
0
def reopen(request, issue_id, townslug):
    if (request.method == "POST"):
        #todo: ПРОВЕРКА: ТОЛЬКО ДЛЯ МОДЕРА, ПОДРЯДЧИКА ИЛИ ЖЕ ДЛЯ ВЛАДЕЛЬЦА ЗАЯВКИ
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if (last_issue.status == 2):
                data = request.POST
                form = Issues()
                user = request.user
                form.owner_ref = user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                if ("description" in data):
                    form.description = data["description"]
                form.parent_task_ref = last_issue
                form.status = 1
                form.assigned_to = last_issue.assigned_to
                form.save()
                ActivityMail.sendToSubcontractors(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' перевідкрита власником', 'defect_change_status.email',
                    form.assigned_to.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Перевідкрита власником',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' перевідкрита власником', 'defect_change_status.email',
                    form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Відкрита',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                if ("files[]" in data):
                    for filename in data.getlist("files[]"):
                        try:
                            body64 = data["attachements[%s]" % filename]
                            body = ""
                            body = base64.b64decode(body64[body64.index(",") +
                                                           1:])
                            ext = filename.split('.')[-1]
                            sys_filename = "%s.%s" % (uuid.uuid4(), ext)
                            path = weunion.settings.MEDIA_ROOT + "/defects/"
                            f = open(path + sys_filename, "wb")
                            file_size = f.write(body)
                            f.close()
                            img = Image.open(path + sys_filename)
                            img.thumbnail((350, 350), Image.ANTIALIAS)
                            img.save(path + "medium." + sys_filename)
                            img.thumbnail((150, 150), Image.ANTIALIAS)
                            img.save(path + "thumbnail." + sys_filename)
                        except:
                            print(
                                str(sys.exc_info()[0]) +
                                str(sys.exc_info()[1]))
                            traceback.print_exc(file=sys.stdout)
                            return
                        doc = Documents()
                        doc.owner_ref = user
                        doc.name = filename
                        doc.file_name = sys_filename
                        doc.type_name = "image"
                        doc.size = file_size
                        doc.save()
                        issuefile = IssueFiles()
                        issuefile.issue_ref = form
                        issuefile.document_ref = doc
                        issuefile.save()
                return HttpResponseRedirect('../../defects/%s' % issue_id)
            else:
                raise PermissionDenied("Доступ заборонено")

        except Issues.DoesNotExist:
            #print some error page or send back to index
            return HttpResponseRedirect('../defects')
Пример #2
0
def add(request, condominium_slug):
    if (request.user.is_authenticated() and request.user.is_active):
        if (request.method == "POST"):
            data = request.POST
            if (len(data["title"]) > 1 and len(data["description"]) > 1):
                form = Issues()
                user = request.user
                form.owner_ref = user
                condominium = request.user.condominiums.first()
                form.condominium_ref = condominium
                form.title = data["title"]
                form.description = data["description"]
                form.address = data["address"]
                form.status = 0
                form.assigned_to = Subcontractors.objects.get(
                    pk=2
                )  #TODO:ВАЖНО! Здесь нужно выбрать именно админ группу из нужного города!!!
                #TODO:write valiadation
                #if form.is_valid():
                form.save()
                '''if("files[]" in data):
                    for filename in data.getlist("files[]"):
                        body64=data["attachements[%s]" % filename]
                        body=""
                        body=base64.b64decode(body64[body64.index(",")+1:])
                        ext = filename.split('.')[-1]
                        sys_filename="%s.%s" % (uuid.uuid4(), ext)
                        path=system.settings.MEDIA_ROOT+"/defects/"
                        f=open(path+sys_filename,"wb")
                        file_size=f.write(body)
                        f.close()
                        img=Image.open(path+sys_filename)
                        if(getattr(img,"_getexif",None) is not None and img._getexif()):
                            exif=dict((ExifTags.TAGS[k], v) for k, v in img._getexif().items() if k in ExifTags.TAGS)
                            if('Orientation' in exif):
                                if(exif['Orientation'] == 3):
                                    img=img.rotate(180, expand=True)

                                elif(exif['Orientation'] == 6):
                                    img=img.rotate(270, expand=True)

                                elif(exif['Orientation'] == 8):
                                    img=img.rotate(90, expand=True)

                        img.save(path+sys_filename)
                        img.thumbnail((350,350),Image.ANTIALIAS)
                        img.save(path+"medium."+sys_filename)
                        img.thumbnail((150,150),Image.ANTIALIAS)
                        img.save(path+"thumbnail."+sys_filename)
                        doc = Documents()
                        doc.owner_ref=user
                        #doc.file_ref=filedata
                        doc.name=filename
                        doc.type_name="image"
                        doc.file_name=sys_filename
                        doc.size=file_size
                        doc.save()
                        issuefile=IssueFiles()
                        issuefile.issue_ref=form
                        issuefile.document_ref=doc
                        issuefile.save()'''
                ActivityMail.sendToModers(
                    request,
                    'Було додано нову заявку #' + str(form.getFirst().id),
                    'defect_new.email', form.condominium_ref.id, {
                        'title': form.getFirst().title,
                        'condominium_slug': condominium_slug,
                        'defect_id': form.getFirst().id
                    })

                return redirect('../defects/ok')
        else:
            pass
            #TODO: Print error, saving already inputed data

        issue = Issues()
        return render(request, 'add.html', {
            "issue": issue,
            "condominiumz": Condominium.objects.all(),
        })
    else:
        from django.contrib.auth.views import redirect_to_login
        return redirect_to_login(request.get_full_path(),
                                 reverse('account_signup'))
Пример #3
0
def unsubscribe(request, issue_id, townslug):
    if (request.method == "POST"):
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if ((issue.last_issue().assigned_to in request.user.work_for.all())
                    and issue.town_ref in request.user.towns.all()):
                form = Issues()
                form.owner_ref = request.user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                form.description = "Виконавець відхилив призначення по причині: " + request.POST[
                    'description']
                form.parent_task_ref = last_issue
                form.assigned_to = last_issue.assigned_to
                form.status = 0
                form.save()
                ActivityMail.sendToSubcontractors(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' відхилена представником виконавця ',
                    'defect_change_status.email', form.assigned_to.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Відмова. Повернута на модерацію',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Виконавець відхилив призначення по заявці #' +
                    str(form.getFirst().id) + '.',
                    'defect_change_status.email', form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Повернуто на модерацію',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                #ActivityMail.sendToModers(request,'Ваша заявка #'+str(form.getFirst().id)+' відхилена модератором', 'defect_change_status.email', form.town_ref.id, {'defect_id':form.getFirst().id, 'title': form.getFirst().title, 'status':'Відхилена'}, [form.owner_ref.email])
        except Issues.DoesNotExist:
            return HttpResponseRedirect('../defects/list')
    return HttpResponseRedirect('../defects/list')
Пример #4
0
def setFixModer(request, issue_id, townslug):
    if (request.method == "POST"):
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if (request.user.isAllowedToModerate(request.session["town"],
                                                 'Defects')
                    and issue.town_ref in request.user.towns.all()):
                data = request.POST
                form = Issues()
                user = request.user
                form.owner_ref = user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                form.assigned_to = last_issue.assigned_to
                if ("description" in data):
                    form.description = data["description"]
                    form.parent_task_ref = last_issue
                    form.status = 2
                try:
                    form.save()
                    ActivityMail.sendToModers(
                        request, 'Заявка #' + str(form.getFirst().id) +
                        ' "ВИКОНАНА" підрядною організацією',
                        'defect_change_status.email', form.town_ref.id, {
                            'defect_id': form.getFirst().id,
                            'title': form.getFirst().title,
                            'status': 'Виконана',
                            'resolution': form.description,
                            'townslug': townslug
                        })
                    ActivityMail.sendToModers(
                        request, 'Ваша заявка #' + str(form.getFirst().id) +
                        ' "ВИКОНАНА" підрядною організацією',
                        'defect_change_status.email', form.town_ref.id, {
                            'defect_id': form.getFirst().id,
                            'title': form.getFirst().title,
                            'status': 'Виконана',
                            'resolution': form.description,
                            'townslug': townslug
                        }, [form.owner_ref.email])
                except:
                    pass
            return redirect('../../defects/%s' % issue_id)
        except Issues.DoesNotExist:
            #print some error page or send back to index
            return HttpResponseRedirect('../defects')
Пример #5
0
def disapprove(request, issue_id, townslug):
    if (request.method == "POST"):
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if (request.user.isAllowedToModerate(request.session["town"],
                                                 'Defects')
                    and issue.town_ref in request.user.towns.all()):
                form = Issues()
                form.owner_ref = request.user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                form.description = "Вiдхилено по причині: " + request.POST[
                    'description']
                form.parent_task_ref = last_issue
                form.assigned_to = last_issue.assigned_to
                form.status = 3
                form.save()
                ActivityMail.sendToModers(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' відхилена модератором.', 'defect_change_status.email',
                    form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Відхилена',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Ваша заявка #' + str(form.getFirst().id) +
                    ' відхилена модератором', 'defect_change_status.email',
                    form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Відхилена',
                        'resolution': form.description,
                        'townslug': townslug
                    }, [form.owner_ref.email])
        except Issues.DoesNotExist:
            return HttpResponseRedirect('../defects')
    return HttpResponseRedirect('../../defects/%s' % issue_id)
Пример #6
0
def hold(request, issue_id, townslug):
    if (request.user.is_authenticated() and request.user.is_active):
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if (request.user.isAllowedToModerate(request.session["town"],
                                                 'Defects')
                    or issue.last_issue().assigned_to
                    in request.user.work_for.all()
                ) and issue.town_ref in request.user.towns.all():
                form = Issues()
                form.owner_ref = request.user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                form.description = request.POST['description']
                form.parent_task_ref = last_issue
                form.assigned_to = last_issue.assigned_to
                form.status = 5
                form.save()
                ActivityMail.sendToModers(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' "ЗАПЛАНОВАНА" відповідальною організацією.',
                    'defect_change_status.email', form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Запланована',
                        'resolution': form.description,
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Ваша заявка #' + str(form.getFirst().id) +
                    ' "ЗАПЛАНОВАНА" відповідальною організацією.',
                    'defect_change_status.email', form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Запланована',
                        'resolution': form.description,
                        'townslug': townslug
                    }, [form.owner_ref.email])
                return redirect("../../defects/" + issue_id)
            else:
                raise PermissionDenied("Доступ заборонено")
        except Issues.DoesNotExist:
            return HttpResponseRedirect('../defects')
    else:
        raise PermissionDenied("Доступ заборонено")
Пример #7
0
def padding(request, issue_id, townslug):
    try:
        issue = Issues.objects.get(pk=issue_id)
        last_issue = issue.last_issue()
        if ((issue.last_issue().assigned_to in request.user.work_for.all())
                and issue.town_ref in request.user.towns.all()):
            form = Issues()
            form.owner_ref = request.user
            form.town_ref = issue.town_ref
            form.title = "Змiна статусу"
            form.description = "Дякуємо! Ваша заявка прийнята у роботу."
            form.parent_task_ref = last_issue
            form.assigned_to = last_issue.assigned_to
            form.status = 4
            form.save()
            ActivityMail.sendToModers(
                request, 'Заявка #' + str(form.getFirst().id) +
                ' ПРИЙНЯТА відповідальною організацією.',
                'defect_change_status.email', form.town_ref.id, {
                    'defect_id': form.getFirst().id,
                    'title': form.getFirst().title,
                    'status': 'Прийнята до виконання',
                    'townslug': townslug
                })
            ActivityMail.sendToModers(
                request, 'Ваша заявка #' + str(form.getFirst().id) +
                ' ПРИЙНЯТА відповідальною організацією.',
                'defect_change_status.email', form.town_ref.id, {
                    'defect_id': form.getFirst().id,
                    'title': form.getFirst().title,
                    'status': 'Прийнята до виконання',
                    'townslug': townslug
                }, [form.owner_ref.email])
            return redirect("../../defects/" + issue_id)
        else:
            raise PermissionDenied("Доступ заборонено")

    except Issues.DoesNotExist:
        return HttpResponseRedirect('../../defects')
Пример #8
0
def setSubcontractor(request, issue_id, townslug):
    if (request.method == "POST"):
        try:
            issue = Issues.objects.get(pk=issue_id)
            last_issue = issue.last_issue()
            if (request.user.isAllowedToModerate(request.session["town"],
                                                 'Defects')
                    and issue.town_ref in request.user.towns.all()):
                subc = Subcontractors.objects.get(pk=request.POST["subc"])
                form = Issues()
                form.owner_ref = request.user
                form.town_ref = issue.town_ref
                form.title = "Змiна статусу"
                form.description = "Вiдправлено на виконання до " + subc.name
                form.parent_task_ref = last_issue
                form.status = 1
                form.assigned_to = subc
                form.save()
                Karma.add(form.getFirst().owner_ref,
                          KARMA['DEFECT_WAS_APPROVE'],
                          "Додано дефект який погодив модератор",
                          "Дефекти ЖКГ")
                ActivityMail.sendToSubcontractors(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' назначена на Вашу організацію',
                    'defect_subcontractor.email', form.assigned_to.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status': 'Назначена на Вашу організацію',
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Заявка #' + str(form.getFirst().id) +
                    ' пройшла модерацію і було назначено відповідальну підрядну організацію.',
                    'defect_change_status.email', form.town_ref.id, {
                        'defect_id': form.getFirst().id,
                        'title': form.getFirst().title,
                        'status':
                        'Відкрита. Відповідальна організація - ' + subc.name,
                        'townslug': townslug
                    })
                ActivityMail.sendToModers(
                    request, 'Ваша заявка #' + str(form.getFirst().id) +
                    ' пройшла модерацію і було назначено відповідальну підрядну організацію.',
                    'defect_change_status.email', form.town_ref.id, {
                        'defect_id':
                        form.getFirst().id,
                        'title':
                        form.getFirst().title,
                        'status':
                        'Відкрита.  Відповідальна організація - ' + subc.name,
                        'townslug':
                        townslug
                    }, [form.owner_ref.email])

        except Issues.DoesNotExist:
            return HttpResponseRedirect('../defects')
    return HttpResponseRedirect('../../defects/%s' % issue_id)
Пример #9
0
def add(request, townslug):
    if (request.user.is_authenticated() and request.user.is_active):
        if (request.method == "POST"):
            data = request.POST
            if (len(data["title"]) > 1 and len(data["description"]) > 1
                    and len(data['address']) > 1):
                form = Issues()
                user = request.user
                form.owner_ref = user
                town = request.user.towns.first()
                form.town_ref = town
                form.title = data["title"]
                form.description = data["description"]
                form.address = data["address"]
                form.map_lat = data["map_lat"]
                form.map_lon = data["map_lon"]
                #form.parent_task_ref=Issues(id=1)
                form.status = 0
                form.assigned_to = Subcontractors.objects.get(
                    pk=2
                )  #TODO:ВАЖНО! Здесь нужно выбрать именно админ группу из нужного города!!!
                #TODO:write valiadation
                #if form.is_valid():
                form.save()
                if ("files[]" in data):
                    for filename in data.getlist("files[]"):
                        body64 = data["attachements[%s]" % filename]
                        body = ""
                        body = base64.b64decode(body64[body64.index(",") + 1:])
                        ext = filename.split('.')[-1]
                        sys_filename = "%s.%s" % (uuid.uuid4(), ext)
                        path = weunion.settings.MEDIA_ROOT + "/defects/"
                        f = open(path + sys_filename, "wb")
                        file_size = f.write(body)
                        f.close()
                        img = Image.open(path + sys_filename)
                        if (getattr(img, "_getexif", None) is not None
                                and img._getexif()):
                            exif = dict((ExifTags.TAGS[k], v)
                                        for k, v in img._getexif().items()
                                        if k in ExifTags.TAGS)
                            if ('Orientation' in exif):
                                if (exif['Orientation'] == 3):
                                    img = img.rotate(180, expand=True)

                                elif (exif['Orientation'] == 6):
                                    img = img.rotate(270, expand=True)

                                elif (exif['Orientation'] == 8):
                                    img = img.rotate(90, expand=True)

                        img.save(path + sys_filename)
                        img.thumbnail((350, 350), Image.ANTIALIAS)
                        img.save(path + "medium." + sys_filename)
                        img.thumbnail((150, 150), Image.ANTIALIAS)
                        img.save(path + "thumbnail." + sys_filename)
                        doc = Documents()
                        doc.owner_ref = user
                        #doc.file_ref=filedata
                        doc.name = filename
                        doc.type_name = "image"
                        doc.file_name = sys_filename
                        doc.size = file_size
                        doc.save()
                        issuefile = IssueFiles()
                        issuefile.issue_ref = form
                        issuefile.document_ref = doc
                        issuefile.save()
                ActivityMail.sendToModers(
                    request,
                    'Було додано нову заявку #' + str(form.getFirst().id),
                    'defect_new.email', form.town_ref.id, {
                        'title': form.getFirst().title,
                        'townslug': townslug,
                        'defect_id': form.getFirst().id
                    })

                return redirect('../defects/ok')
            else:
                issue = Issues()
                api_key = weunion.settings.GOOGLE_API_KEY
                userTown = request.user.towns.first()
                gmap = {}
                gmap["lon"] = userTown.map_lon
                gmap["lat"] = userTown.map_lat
                gmap["zoom"] = userTown.zoom
                title = request.POST["title"],
                description = request.POST["description"],
                address = request.POST["address"],
                print(request.POST)
                return render(
                    request,
                    'add.html',
                    {
                        "issue": issue,
                        "townz": Town.objects.all(),
                        "api_key": api_key,
                        "gmap": gmap,
                        "title": title[0],
                        "description": description[0],
                        "address": address[0],
                        "error": "Заповніть назву, опис та адресу дефекту!"
                    },
                )
        else:
            pass
            #TODO: Print error, saving already inputed data

        issue = Issues()
        api_key = weunion.settings.GOOGLE_API_KEY
        userTown = request.user.towns.first()
        gmap = {}
        gmap["lon"] = userTown.map_lon
        gmap["lat"] = userTown.map_lat
        gmap["zoom"] = userTown.zoom
        return render(
            request, 'add.html', {
                "issue": issue,
                "townz": Town.objects.all(),
                "api_key": api_key,
                "gmap": gmap
            })
    else:
        from django.contrib.auth.views import redirect_to_login
        return redirect_to_login(request.get_full_path(),
                                 reverse('account_signup'))