Exemple #1
0
def claim_show(request,id):
    lang=select_language(request)
    user = request.user.username
    try:
        user = Person.objects.get(login=user)
    except Person.DoesNotExist:
        add_error(u"Пользователь с логином %s не найден!" % user,request)
        return (False,(HttpResponseRedirect("/")))
    try:
        claim = Claim.objects.get(id=id)
    except Claim.DoesNotExist:
        add_error(u"Заявка с номером %s не найдена!" % id,request)
        # return (False,(HttpResponseRedirect("/assets_by_type/"+type_id+"/")))
        return (False,(HttpResponseRedirect("/")))
    # a = str(claim.id)
    title = u'GMAH.RU - заявка %s' % str(claim.name)
    files=claim.file.all()
    if files:
        first_file = files[0]
        files = files[1:]
    else:
        first_file=''
    # Получаем список тех, кто может просмотреть данные пользователей
    can_see_info =  str(user.id) in claim.acl.split(u';') or \
                    user.login in admins or claim.owner.id == user.id
    return (True,('claim_show.html',{},{'title':title ,
                                        'claim':claim,
                                        'files':files,
                                        'first_file':first_file,
                                        'can_see_info':can_see_info,
                                        },request,app))
Exemple #2
0
def claim_edit(request,id):
    try:
        claim = Claim.objects.get(id=id)
    except Claim.DoesNotExist:
        add_error(u"Заявка с номером %s не найдена!" % id,request)
        # return (False,(HttpResponseRedirect("/assets_by_type/"+type_id+"/")))
        return (False,(HttpResponseRedirect("/")))
    if request.method == 'POST':
        open_date = datetime.datetime.now()
        form = get_localized_form('NewClaimForm',app,request)(request.POST)
        lang,user,fio,method = get_info(request)
        if form.is_valid():
            data = form.cleaned_data
            claim.name =data['name']
            claim.description = data['description']
            claim.save()
            a = request.FILES
            if request.FILES:
                for filed in ('file','file1','file2','file3'):
                    if filed in request.FILES:
                        print request.FILES[filed]
                        claim.file.add(save_file(request.FILES[filed],claim.id,request))
                        claim.save()
            return (False,HttpResponseRedirect('/claim/show/'+str(id)))
        return (False,HttpResponseRedirect('/claim/edit/'+str(id)))
    # тут надо блокировать возможность загрузить новые картинки, больше чем 4-уже_есть
    files = claim.file.all()
    count_of_files = len(files)
    return (True,('claim_add.html',{'NewClaimForm':{'name':claim.name, 'description':claim.description,
                                                    'count_of_files':count_of_files},
                                    },
                  {'title':'GMAH.RU - добавить заявку','files':files},request,app))
Exemple #3
0
def profile_show(request,id):
    class R():
        def __init__(self,claim,requester,request):
            self.claim = claim
            self.requester = requester
            self.request = request
    class P():
        def __init__(self,claim,requester):
            self.claim = claim
            self.requester = requester
    lang=select_language(request)
    user = request.user.username
    try:
        profile_owner = Person.objects.get(id=id)
    except Person.DoesNotExist:
        add_error(u"Пользователь с id %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    who_can_see=[]
    who_can_see.extend(admins)
    who_can_see.append(profile_owner.login)
    # добавляем людей, которые могу просматрить профиль - это
    # владельцы заявок, к которым он оставлял запрос на получение
    # контакных данных и он ещё рассматривается или был принят
    for p in profile_owner.acl.split(';'):
        try:
            c = Claim.objects.get(id=p)
            # person = Person.objects.get(id=c.owner.)
            who_can_see.append(c.owner.login)
        except (Claim.DoesNotExist, Person.DoesNotExist, ValueError):
            pass
    if user not in who_can_see:
        add_error(u"Вы не имеете права просматривать этот профиль!",request)
        return (False,(HttpResponseRedirect("/")))
    # Кому мы выдали разрешения на просмотр
    # Проходимся по нашим заявкам и смотрим
    my_claims = Claim.objects.filter(owner = profile_owner).filter(
        deleted = False)
    given_requests = []
    for c in my_claims:
        for person_id in c.acl.split(';'):
            try:
                person = Person.objects.get(id=person_id)
                given_requests.append(P(c,person))
            except (Person.DoesNotExist, ValueError):
                pass


    new_requests = Requests.objects.filter(claim_owner =
                                       profile_owner).filter(seen=False)
    claims_with_requests = []
    for r in new_requests:
        r.seen = True
        r.save()
        claims_with_requests.append(R(r.claim,r.person,r))
    return (True,('profile.html',{},{'title':'GMAH.RU',
                                     'profile_owner':profile_owner,
                                     'user':user,
                                     'claims_with_requests':claims_with_requests,
                                     'given_requests':given_requests},
                  request,app))
Exemple #4
0
def profile_edit(request,id):
    lang=select_language(request)
    user = request.user.username
    try:
        profile_owner = Person.objects.get(id=id)
    except Person.DoesNotExist:
        add_error(u"Пользователь с логином %s не найден!" % user,request)
        return (False,(HttpResponseRedirect("/")))
    who_can_edit=[]
    who_can_edit.extend(admins)
    who_can_edit.append(profile_owner.login)
    if user not in who_can_edit:
        add_error(u"Вы не имеете права редактировать этот профиль!",request)
        return (False,(HttpResponseRedirect("/")))
    if request.method == 'POST':
        # form = UserCreationFormMY(request.POST)
        form = get_localized_form('UserEditForm',app,request)(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            # new_user = form.save()
            profile_owner.fio = data['fio']
            profile_owner.tel = data['tel']
            profile_owner.mail = data['mail']
            profile_owner.save()
            return (False,(HttpResponseRedirect("/accounts/profile/show/%s/" % profile_owner.id)))

    return (True,('register.html',{'UserEditForm':{'fio':profile_owner.fio,'mail':profile_owner.mail,'tel':profile_owner.tel}},{'title':'GMAH.RU','target':u'Редактируем профиль %s' % user},request,app))
Exemple #5
0
def asset_edit(request,id):
    # raise NotImplementedError("Добавить возможность введения новой модели")

    lang,user,fio,method = get_info(request)
    try:
        a = Asset.objects.get(id=id)
    except Asset.DoesNotExist:
        add_error(u"Актив с номером %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    asset_type = a.asset_type.catalogue_name
    app_module_name = 'assets.models'
    app_module = __import__(app_module_name)
    models_module = getattr(app_module,'models')
    asset_type_catalogue = getattr(models_module, a.asset_type.catalogue_name)
    asset_type_models = asset_type_catalogue.objects.all()
    statuses = Status.objects.all()
    garantys = Garanty.objects.all()
    places = Place.objects.all()
    # готовим всё, чтобы уже имеющиеся данные были установлены по умолчанию
    for place in places:
        if place == a.place_asset_set.latest('installation_date').place:
            place.selected = True
    for status in statuses:
        if status.id == a.status.id:
            status.selected = True
    for garanty in garantys:
        if garanty.id == a.garanty.id:
            garanty.selected = True
    return (True,('edit_asset.html', {},{'models':asset_type_models,'statuses':statuses,'garantys':garantys,'places':places,'asset_id':id,'item':a},request,app))
Exemple #6
0
def profile_redirect(request):
    user = request.user.username
    try:
        profile_owner = Person.objects.get(login=user)
    except Person.DoesNotExist:
        add_error(u"Пользователь с id %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    return (False,(HttpResponseRedirect(
        "/accounts/profile/show/%s/" % str(profile_owner.id))))
Exemple #7
0
def asset_delete(request,id,type_id):
    lang,user,fio,method = get_info(request)
    try:
        a = Asset.objects.get(id=id)
    except Asset.DoesNotExist:
        add_error(u"Актив с номером %s не найден!" % id,request)
        # return (False,(HttpResponseRedirect("/assets_by_type/"+type_id+"/")))
        return (False,(HttpResponseRedirect("/")))
    a=make_request_with_logging(user,"Удаляем актив №%s" % str(id),a.delete,{})
    html=u'Актив %s удалён' % str(id)
    return (True,('OK.html', {},{'html':html},request,app))
Exemple #8
0
def claim_send_request(request,id):
    lang=select_language(request)
    user = request.user.username
    try:
        claim = Claim.objects.get(id=id)
    except Person.DoesNotExist:
        add_error(u"Заявка с номером  %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    try:
        user = Person.objects.get(login=user)
    except Person.DoesNotExist:
        add_error(u"Пользователь с логином %s не найден!" % user,request)
        return (False,(HttpResponseRedirect("/")))
    # Добавляем разрешение для хозяина заявки на просмотр профиля пользователя, который хочет контактные данные
    result = add_permission(to=user, for_whom=claim.id)
    if result!='OK':
        add_error(u"Результат попытки - %s" % result,request)
        add_error(u"Не удалось задать разрешения на просмотр вашего профиля для хозяина заявки!",request)
        return (False,(HttpResponseRedirect("/")))
    a = datetime.datetime.now()
    c = make_aware(a,get_current_timezone())
    new_request = Requests(claim = claim,
                            person = user,
                            claim_owner = claim.owner,
                            date = c,
                            seen = False)
    new_request.save()
    return (False,(HttpResponseRedirect("/")))
Exemple #9
0
 def wrapped(*args,**kwargs):
     # raise ImportError
     request = args[0]
     user = request.user.username
     if user not in admins:
         add_error(u"Эта страница доступна только для администраторов: %s " % (request.path,),request)
         request.session.modified = True
         return (False,(HttpResponseRedirect('/')))
     # print "in shows_errors "+str(args[0].path)+" before calling function"
     decorate_or_not, result = fn(*args,**kwargs)
     # raise TypeError
     if not decorate_or_not:
         return decorate_or_not, result
     template,forms_dict,dict,request,app=result
     return decorate_or_not, (template,forms_dict,dict,request,app)
Exemple #10
0
 def wrapped(*args,**kwargs):
     # raise ImportError
     request = args[0]
     user = request.user.username
     if user not in admins:
         add_error(u"Эта страница доступна только для администраторов: %s " % (request.path,),request)
         request.session.modified = True
         return (False,(HttpResponseRedirect('/')))
     # print "in shows_errors "+str(args[0].path)+" before calling function"
     decorate_or_not, result = fn(*args,**kwargs)
     # raise TypeError
     if not decorate_or_not:
         return decorate_or_not, result
     template,forms_dict,dict,request,app=result
     return decorate_or_not, (template,forms_dict,dict,request,app)
Exemple #11
0
def full_delete_bill(request,b_type,id):
    # print "in full_delete_bill"
    bill_types={'cash':Cash,'cashless':Cashless}
    bill=bill_types[b_type].objects.get(id=id)
    payment=bill.payment_set.get()
    if not payment.deleted:
        add_error(u"Этот чек/счёт ещё не удалён! id=%s тип %s" % (id,b_type),request)
        # print "added error: "+str(request.session['my_error'])
        request.session.modified = True
        return (False,(HttpResponseRedirect('/all_bills/')))
    assets=payment.asset_set.all()
    for asset in assets:
        asset.delete()
    payment.delete()
    bill.delete()
    return (False,(HttpResponseRedirect('/all_bills/')))
Exemple #12
0
def main(request):
    user = request.user.username
    # who_can_delete=[]
    # who_can_delete.extend(admins)
    # who_can_delete.append(claim_owner)
    # media_dir = MEDIA_ROOT
    if user:
        try:
            user = Person.objects.get(login = user)
        except Person.DoesNotExist:
            add_error(u"Пользователь с логином %s не найден!" % user,request)
            return (False,(HttpResponseRedirect("/error/")))
    claims =  Claim.objects.filter(deleted=False).filter(closed=False)
    requests = ''
    if user:
        requests = len(Requests.objects.filter(claim_owner = user).filter(seen=False))
    return (True,('main.html',{},{'title':'GMAH.RU','claims':claims,'user':user,'requests':requests},request,app))
Exemple #13
0
def save_file(file_instance,id,request):
    # размеры итогового файла
    h=480
    w=480
    background_color = "green"
    # background_color = "white"
    a = datetime.datetime.now()
    c = make_aware(a,get_current_timezone())
    b = str(c)
    # d1 = is_aware(c)
    # d2 = is_naive(c)
    d = '_'.join((b.split(' ')[0],'_'.join(b.split(' ')[1].split('.')[0].split(':')),b.split(' ')[1].split('.')[1].split('+')[0]))
    instanse = File(file=file_instance,
                    timestamp=c,
                    file_name = str(d),
                    description = 'image for '+str(id),)
    instanse.save()
    path_to_file = instanse.file.path
    add_error(u"Файл сохранён по адресу %s" % path_to_file,request)
    img=Image.open(path_to_file)
    # вычисляем пропорции
    iw, ih = img.size
    ratio = float(max(ih,iw))/h
    new_h = int(round(ih/ratio))
    new_w = int(round(iw/ratio))
    # raise ImportError('')
    img.thumbnail((new_w,new_h),Image.ANTIALIAS)
    # а теперь мы делаем изображение стандартного размера, вставляем в него
    # наше превью, чтобы всё изображения были равного размера, а пустое место
    # будет белым
    a=Image.new("RGB",(w,h),background_color)
    # вычисляем куда вставлять картинку
    ins_h = 0
    ins_w = 0
    if new_w > new_h: # значит, картинка в ширину и надо вставить по середине высоты
        ins_h = int(round((h-new_h)/2))
    if new_w < new_h: # значит, картинка в высоту и надо вставить по середине ширины
        ins_w = int(round((w-new_w)/2))
    a.paste(img,(ins_w,ins_h))
    a.save(path_to_file,'JPEG')
    return instanse
Exemple #14
0
def claim_delete(request,id):
    # удалять может только хозяин или админ
    try:
        claim = Claim.objects.get(id=id)
    except Claim.DoesNotExist:
        add_error(u"Заявка с номером %s не найдена!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    # a = str(claim.id)
    claim_owner = claim.owner.login
    who_can_delete=[]
    who_can_delete.extend(admins)
    who_can_delete.append(claim_owner)
    user = request.user.username
    if user not in who_can_delete:
        add_error(u"Вы не имеете права удалить эту заявку!",request)
        return (False,(HttpResponseRedirect("/")))
    files=claim.file.all()
    # raise TabError('before for file in files')
    for file in files:
        try:
        # file = File.objects.get(id=file_id)
        # client = file.for_client.get()
        # raise TabError('file %s' % file.file.delete)
            storage, path = file.file.storage, file.file.path
        # raise TabError('storage:path =  %s:%s' % (storage, path))
            storage.delete(path)
            file.delete()
        except :
            logger.error("Unexpected error:", sys.exc_info()[0])
            add_error(u"Файл %s не удалён!" % file,request)
    claim.delete()

    return (False,(HttpResponseRedirect("/")))
Exemple #15
0
def claim_accept_request(request,request_id):
    """
    Добавляет для заявки право на просмотра для того, кто отправил
    запрос на зявку
    :param request: страндартный параметр
    :param request_id: id запроса
    :return:
    """
    lang=select_language(request)
    user = request.user.username
    try:
        info_request = Requests.objects.get(id=request_id)
    except Requests.DoesNotExist:
        add_error(u"Запрос с номером  %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    claim = info_request.claim
    # Добавляем разрешение для хозяина заявки на просмотр профиля пользователя, который хочет контактные данные
    result = add_permission(to=claim, for_whom=info_request.person.id)
    if result!='OK':
        add_error(u"Результат попытки - %s" % result,request)
        add_error(u"Не удалось задать разрешения на просмотр ваших "
                  u"данных для заявки %s для пользователя %s!" % (
            claim,info_request.person),
                  request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))
    # a = datetime.datetime.now()
    # c = make_aware(a,get_current_timezone())
    # new_request = Requests(claim = claim,
    #                         person = user,
    #                         claim_owner = claim.owner,
    #                         date = c,
    #                         seen = False)
    # new_request.save()g
    info_request.delete()
    return (False,(HttpResponseRedirect("/")))
Exemple #16
0
def image_delete(request,id):
    # удалять может только хозяин или админ
    try:
        file = File.objects.get(id=id)
    except File.DoesNotExist:
        add_error(u"Файл с номером %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    # a = str(claim.id)
    claim = file.for_claim.get()
    claim_id = claim.id

    claim_owner = claim.owner.login
    who_can_delete=[]
    who_can_delete.extend(admins)
    who_can_delete.append(claim_owner)
    user = request.user.username
    if user not in who_can_delete:
        add_error(u"Вы не имеете права удалить эту заявку!",request)
        return (False,(HttpResponseRedirect("/")))

    try:
        storage, path = file.file.storage, file.file.path
        storage.delete(path)
        file.delete()
    except :
        logger.error("Unexpected error:", sys.exc_info()[0])
        add_error(u"Файл %s не удалён!" % file,request)

    return (False,(HttpResponseRedirect("/claim/show/%s/" % claim_id)))
Exemple #17
0
def claim_withdraw_request(request,claim_id,requester_id):
    """
    Добавляет для заявки право на просмотра для того, кто отправил
    запрос на зявку
    Мы должны удалить разрешение на просмотр профиля для обоих человек
    Для заявки удаляем id запрашивающего
    Для запрашивающего - id заявки
    :param request: страндартный параметр
    :param request_id: id запроса
    :return:
    """
    lang=select_language(request)
    user = request.user.username
    try:
        claim = Claim.objects.get(id=claim_id)
    except Claim.DoesNotExist:
        add_error(u"Не нашли заявку id %s" % claim_id,request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))
    try:
        requester = Person.objects.get(id=requester_id)
    except Claim.DoesNotExist:
        add_error(u"Не нашли человека id %s" % requester_id,request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))
    result = remove_permission(to=claim,
                             for_whom=requester.id)
    if result!='OK':
        add_error(u"Результат попытки удаления доступа из заявки - "
                  u"%s" %
                  result,
                  request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))
    result = remove_permission(to=requester,
                             for_whom=claim.id)
    if result!='OK':
        add_error(u"Результат попытки удаления доступа из "
                  u"пользователя - %s" % result,request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))
    return (False,(HttpResponseRedirect("/")))
Exemple #18
0
def claim_refuse_request(request,request_id):
    """
    Отказ в предоставлении котакных данных. Удаляет объект
    запроса на просмотр + лишает пользователя возможности
    просмотреть профиль того, кто хотел получить данные
    :param request: страндартный параметр
    :param request_id: id запроса
    :return:
    """
    lang=select_language(request)
    user = request.user.username
    try:
        info_request = Requests.objects.get(id=request_id)
    except Requests.DoesNotExist:
        add_error(u"Запрос с номером  %s не найден!" % id,request)
        return (False,(HttpResponseRedirect("/")))
    # Получаем номер заявки для которой хотели получить данные
    claim = info_request.claim
    # кто просил данные
    who_want_info = info_request.person
    # и для этой заявки удаляем разершение на просмотр данных
    # профиля того, кто просил данные
    result = remove_permission(to=who_want_info,
                             for_whom=claim.id)
    if result!='OK':
        add_error(u"Результат попытки - %s" % result,request)
        add_error(u"Не удалось удалить разрешение на "
                  u"просмотр профиля пользователя %s, "
                  u"выданный для получения данных к заявки %s "
                  u"для пользователю %s!" % (
            who_want_info, claim,info_request.claim_owner),
                  request)
        return (False,(HttpResponseRedirect("/accounts/profile/")))

    # удаляем сам запрос
    info_request.delete()
    return (False,(HttpResponseRedirect("/")))