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))
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))
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))
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))
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))
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))))
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))
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("/")))
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)
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/')))
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))
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
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("/")))
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("/")))
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)))
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("/")))
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("/")))