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 claim_add(request): 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 # a = datetime.datetime.now() open_date = make_aware(open_date,get_current_timezone()) new_claim=Claim(name=data['name'], description = data['description'], open_date = open_date, owner = fio) new_claim.save() a = request.FILES if request.FILES: for filed in ('file','file1','file2','file3'): if filed in request.FILES: print request.FILES[filed] new_claim.file.add(save_file(request.FILES[filed],new_claim.id,request)) new_claim.save() return (False,HttpResponseRedirect('/')) return (False,HttpResponseRedirect('/')) return (True,('claim_add.html',{'NewClaimForm':{}},{'title':'GMAH.RU - добавить заявку',},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 json_price_and_warranty(request): lang,user,fio,method = get_info(request) if request.method == 'POST': model = request.POST.get('model') contractor = request.POST.get('contractor') ass = Asset.objects.filter(model=model) assets = [] for asset in ass: try: ass_contractor = asset.payment.cash.contractor.name asset.data = asset.payment.cash.date except AttributeError: ass_contractor = asset.payment.cashless.contractor.name asset.data = asset.payment.cashless.date_of_invoice if ass_contractor == contractor: assets.append(asset) def sort_key(a): return a.data assets.sort(key=sort_key,reverse=True) # То что нужно - assets[0] # Возвращаем JSON try: a={'price':float(assets[0].price),'warranty':assets[0].guarantee_period} except IndexError: a={'price':0,'warranty':0} a=json.dumps(a) return (False,HttpResponse(a, mimetype="application/json"))
def assets_by_type(request,type_id): lang,user,fio,method = get_info(request) assets = Asset.objects.filter(asset_type=type_id).order_by('id') asset_types = Asset_type.objects.all() for asset in assets: asset.place=asset.place_asset_set.latest('installation_date').place.place asset.place_id=asset.place_asset_set.latest('installation_date').place.id return (True,('assets_by_type_table.html',{},{'assets':assets},request,app))
def stop_module(request,module_name): lang,user,fio,method = get_info(request) config=UnicodeConfigParser() config.readfp(codecs.open(config_file, encoding='utf-8', mode='r')) config.remove_option('modules',module_name) config.remove_option('modules',module_name+"_description") config.remove_option('modules',module_name+"_name") config.write(codecs.open(config_file, encoding='utf-8', mode='w')) return (False,HttpResponseRedirect('/settings/'))
def password(request): lang,user,fio,method = get_info(request) if request.method == 'POST': from django.contrib.auth.models import User u = User.objects.get(username__exact='john') u.set_password('new password') u.save() return (True,('password.html', {},{},request,app)) return (True,('password.html', {},{},request,app))
def test_cm(request): lang,user,fio,method = get_info(request) # Получаем настройки из файла: cashless={'bill_number':88,'date_of_invoice':'00-11-12'} fn=r"user_settings/config.txt" import ConfigParser config=ConfigParser.RawConfigParser() config.read(fn) text = config.get('cashless','text') text=text.decode('utf8').format({'number':88,'where':"AAAAAAAAAAAAAAA",'date':'10-11-12','price':9854,'what':"DDDDDD",'who':fio.fio,'phones':fio.tel,'date2':str(datetime.datetime.now()).split('.')[0]}).replace('\n','<p>') return (True,('cashless_redirect.html', {},{'text':text,'cashless':cashless},request,app))
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 edit_from_bd(request,section,option): lang,user,fio,method = get_info(request) config=ConfigParser.RawConfigParser() config.read(config_file) # name,opt_id,opt_val,desc = get_bd_option_with_description(section,option) opt_id = get_full_bd_option(section,option).id opts = get_bd_option_variants(section,option) for opt in opts: if str(opt.id) == str(opt_id): opt.selected = True # raise NotImplementedError("Надо корректно обрабатывать настройки, связанные с БД!! например, место по умолчанию, статус по умолчанию+сделать, чтобы при редактировании всё было правильно") return (True,('edit_from_bd.html', {},{'opts':opts,'option':option},request,app))
def save_edited_setting(request,section,option): # raise NotImplementedError("Надо корректно обрабатывать настройки, связанные с БД!! например, место по умолчанию, статус по умолчанию+сделать, чтобы при редактировании всё было правильно") lang,user,fio,method = get_info(request) if request.method == 'POST': value = request.POST.get('new_value') config=UnicodeConfigParser() config.readfp(codecs.open(config_file, encoding='utf-8', mode='r')) config.set(section,option,value) config.write(codecs.open(config_file, encoding='utf-8', mode='w')) return (True,('OK.html', {},{'html':value},request,app)) return (True,('Error.html', {},{'html':'метод не POST! Нифига не сделано!'},request,app))
def assets_by_type(request,type_id): if not type_id: type_id=0 else: type_id=int(type_id) lang,user,fio,method = get_info(request) try: type_name = Asset_type.objects.get(id=type_id) asset_types = Asset_type.objects.all() type_name_asset_type=type_name.asset_type except Asset_type.DoesNotExist: type_name_asset_type = u"Такого типа акивов нет" asset_types=[] return (True,('assets_by_type.html',{},{'type_name':type_name_asset_type,'asset_types':asset_types,'type_id':type_id},request,app))
def save_from_bd(request,section,option): # raise NotImplementedError("Надо корректно обрабатывать настройки, связанные с БД!! например, место по умолчанию, статус по умолчанию+сделать, чтобы при редактировании всё было правильно") lang,user,fio,method = get_info(request) if request.method == 'POST': value = request.POST.get('new_value') config=UnicodeConfigParser() config.readfp(codecs.open(config_file, encoding='utf-8', mode='r')) config.set(section,"__bd__option__"+option,value) config.write(codecs.open(config_file, encoding='utf-8', mode='w')) # name,opt_id,opt_val,desc = get_bd_option_with_description(section,option) opt_id = get_full_bd_option(section,option).id opt_val = get_full_bd_option(section,option).value returning_value = str(opt_id)+";"+opt_val return (True,('OK.html', {},{'html':returning_value},request,app)) return (True,('Error.html', {},{'html':'метод не POST! Нифига не сделано!'},request,app))
def run_module(request,module_name): lang,user,fio,method = get_info(request) config=UnicodeConfigParser() config.readfp(codecs.open(config_file, encoding='utf-8', mode='r')) try: config.set('modules',module_name,'True') config.set('modules',module_name+"_description",'') config.set('modules',module_name+"_name",'') except ConfigParser.NoSectionError: config.add_section('modules') config.set('modules','section_description',u'Подключённые модули') config.set('modules',module_name,'True') config.set('modules',module_name+"_description",'') config.set('modules',module_name+"_name",'') config.write(codecs.open(config_file, encoding='utf-8', mode='w')) return (False,HttpResponseRedirect('/settings/'))
def show_user_settings(request,for_user_login): class Settings_group(): def __init__(self,name,description): self.name = name self.settings = [] self.description = description lang,login,user,method = get_info(request) if user not in admins and for_user_login: return (False,HttpResponseRedirect('/')) settings=[] config=ConfigParser.RawConfigParser() config.read(config_file) section = '{0}_settings'.format(login) try: setting_goup = Settings_group(section,get_section_description(section)) for item in config.items(section): # Не включаем описания и названия опций if item[0][-12:]=='_description' or item[0][-5:]=='_name' or item[0][-5:]=='_help': continue # Настройки, связанные со значениями в БД if item[0][:6]=='__bd__': if item[0][:12]=='__bd__name__': option = item[0][12:] # return name,opt_id,opt_val,desc # Надо, чтобы при отображении в шаблоне редактировалось оно как список! # name,opt_id,opt_val,desc = get_bd_option_with_description(section,option) full_option = get_full_bd_option(section,option) # setting_goup.settings.append(Setting(option, opt_id+";"+opt_val, name, desc, 1)) setting_goup.settings.append(full_option) # Все остальные настройки else: # setting_goup.settings.append(Setting(*get_option_with_name_and_description(section,item[0]), from_bd=0)) full_option = get_full_option(section,item[0]) setting_goup.settings.append(full_option) settings.append(setting_goup) except ConfigParser.NoSectionError: settings=None return (True,('show_settings.html', {},{'settings':settings,},request,app))
def asset_view(request,asset_id): def add_months(sourcedate,months): import calendar month = sourcedate.month - 1 + months year = sourcedate.year + month / 12 month = month % 12 + 1 day = min(sourcedate.day,calendar.monthrange(year,month)[1]) return datetime.date(year,month,day) lang,user,fio,method = get_info(request) asset = Asset.objects.get(id=asset_id) places = asset.place_asset_set.all().order_by('-installation_date') date_of_asset = None if asset.payment.cashless: if asset.payment.cashless.date_of_assets: date_of_asset = asset.payment.cashless.date_of_assets else: date_of_asset = asset.payment.cash.date if date_of_asset: asset.garanty_end = add_months(date_of_asset,asset.guarantee_period) else: asset.garanty_end = u'Ещё не поступил в распоряжение' return (True,('asset.html',{},{'asset':asset,'places':places},request,app))
def all_bills(request): lang,user,fio,method = get_info(request) # cashs = make_request_with_logging(user,"Запрашиваем все чеки",Cash.objects.filter,{'payment__in':Payment.objects.filter(deleted=False)}) cashs = Cash.objects.filter(payment__in=Payment.objects.filter(deleted=False)) cashlesss = Cashless.objects.filter(payment__in=Payment.objects.filter(deleted=False)) return (True,('all_bills.html',{},{'title':'Список всех счетов и чеков','cashs':cashs, 'cashlesss':cashlesss},request,app))
def bill_add(request): lang,user,fio,method = get_info(request) if request.method == 'POST': # Порядок действия таков: # 1) Создаём Cash # 2) Создаём Payment с этим Cash # 3) Создаём Garanty - если её ещё нет. Если есть - добавляем к имеющейся # 4) Итерируем по элементам в форме от 1 до макс добавляя активы в список активов # 5) Если всё прошло хорошо - активы из списка сохраняем bill_date = request.POST.get('date','') if bill_date: a=[int(a) for a in bill_date.split('.')] a.reverse() bill_date=datetime.datetime(*a) else: bill_date = datetime.datetime.now() # print bill_date # raise ImportError cash = Cash(date = bill_date, contractor = Contractor.objects.get(id=request.POST.get('contractor_id')), bill_number = request.POST.get('bill_number'), ) cash.save() payment = Payment(cash = cash, ) payment.save() try: garanty = Garanty.objects.get(number = request.POST.get('garanty')) except Garanty.DoesNotExist: garanty = Garanty(number = request.POST.get('garanty')) garanty.save() for item_number in range(1,int(request.POST.get('max_asset_form_number'))+1): sitem_number = str(item_number) if sitem_number+'_model' in request.POST: for count in range(0,int(request.POST.get('count_of_asset'+sitem_number))): a=Asset(asset_type = Asset_type.objects.get(id=request.POST.get(sitem_number+'_asset_type')), payment = payment, garanty = garanty, model = request.POST.get(sitem_number+'_model'), status = Status.objects.get(id=request.POST.get(sitem_number+'_status')), guarantee_period = request.POST.get(sitem_number+'_guarantee_period'), note = request.POST.get(sitem_number+'_note'), price = request.POST.get(sitem_number+'_price'), ) a.save() cur_place=Place_Asset(installation_date = bill_date, asset = a, place = Place.objects.get(id=request.POST.get(sitem_number+'_current_place')), ) cur_place.save() return (False,HttpResponseRedirect('/tasks/')) # else: # print "FOrm is not valid??" contractors_list = assets.api.get_contractors_list(request,internal=True) asset_types_list = assets.api.get_asset_type_list(request,internal=True) # Translators: This message appears on the home page only message=_('Message') print message print request.LANGUAGE_CODE return (True,('new_bill.html', {'NewCashBillForm':{}},{'contractors_list':contractors_list,'asset_types_list':asset_types_list, 'method':method,'message':message},request,app))
def bill_cashless_add(request): # def what_to_people_friendly(a): # b=list(set(a.split(';'))) # c = '' # for word in b: # count=a.split(';').count(word) # c = c + word + ' - ' + str(count) + u' шт; ' # return c lang,user,fio,method = get_info(request) # Получаем настройки из файла: import ConfigParser config=ConfigParser.RawConfigParser() config.read(config_file) # stages = ";".join([a[1] for a in config.items("cashless_stages")]) from user_settings.functions import get_stages stages = get_stages(";") if request.method == 'POST': # Порядок действия таков: # 1) Создаём Cashless c этапами из файла настройки # 2) Создаём Payment с этим Cash # 3) Создаём Garanty - если её ещё нет. Если есть - добавляем к имеющейся # 4) Итерируем по элементам в форме от 1 до макс добавляя активы в список активов # 5) Если всё прошло хорошо - активы из списка сохраняем bill_date = request.POST.get('date','') if bill_date: a=[int(a) for a in bill_date.split(bill_date[2])] a.reverse() bill_date=datetime.datetime(*a) else: bill_date = datetime.datetime.now() cashless = Cashless(date_of_invoice = bill_date, stages=stages, # нужно для более простой обработки в дальнейшем dates = ';'.join(map(lambda x: '',range(len(stages.split(';'))))), contractor = Contractor.objects.get(id=request.POST.get('contractor_id')), bill_number = request.POST.get('bill_number'), ) cashless.save() payment = Payment(cashless = cashless, ) payment.save() try: garanty = Garanty.objects.get(number = request.POST.get('garanty')) except Garanty.DoesNotExist: garanty = Garanty(number = request.POST.get('garanty')) garanty.save() # Для записки сопровождения счёта places = '' what = '' price = 0 for item_number in range(1,int(request.POST.get('max_asset_form_number'))+1): sitem_number = str(item_number) if sitem_number+'_model' in request.POST: for count in range(0,int(request.POST.get('count_of_asset'+sitem_number))): a=Asset(asset_type = Asset_type.objects.get(id=request.POST.get(sitem_number+'_asset_type')), payment = payment, garanty = garanty, model = request.POST.get(sitem_number+'_model'), status = Status.objects.get(id=request.POST.get(sitem_number+'_status')), guarantee_period = request.POST.get(sitem_number+'_guarantee_period'), note = request.POST.get(sitem_number+'_note'), price = request.POST.get(sitem_number+'_price'), ) a.save() cur_place=Place_Asset(installation_date = bill_date, asset = a, place = Place.objects.get(id=request.POST.get(sitem_number+'_current_place')), ) cur_place.save() # a_TMP = cur_place.place.place if cur_place.place.place + u';' not in places: places = places+ cur_place.place.place + u';' # if a.model + u';' not in what: # what = what + a.model + u';' what = what + a.model + u';' price += float(a.price) places = places[:-1] # Приводим к человеческому виду "кот - 5шт" what = what_to_people_friendly(what[:-1]) # Теперь надо выдать штуку для распечатки сопровождения счёта text = config.get('cashless','text') text=text.decode('utf8').format({'number':cashless.bill_number,'where':places,'date':str(cashless.date_of_invoice),'price':price,'what':what,'who':fio.fio,'phones':fio.tel,'date2':str(datetime.datetime.now()).split('.')[0]}).replace('\n','<p>') # window.open("http://mylink.net", "windowName"); # window.localStorage.setItem('text',text) # document.body.innerHTML=window.localStorage.getItem('text') # return (False,HttpResponseRedirect('/all_bills/')) # Открывается окно с сопровождающей запиской, из него уже открывается окно списка счетов show_cashless_maintain = config.get('cashless','show_text') if show_cashless_maintain=='True': return (True,('cashless_redirect.html', {},{'text':text,'cashless':cashless},request,app)) return (False,HttpResponseRedirect('/all_bills/')) # Создаём новый счёт, значит теперь надо номер новой гарантии try: garanty_number = int(Garanty.objects.all().order_by('-number')[0].number)+1 except IndexError: # значит, гарантий ещё в базе нет garanty_number = 0 contractors_list = assets.api.get_contractors_list(request,internal=True) asset_types_list = assets.api.get_asset_type_list(request,internal=True) return (True, ('new_bill.html', {'NewCashBillForm':{'garanty':garanty_number}}, {'stages':stages,'contractors_list':contractors_list, 'asset_types_list':asset_types_list, 'method':method}, request, app))
def all_bills(request): # вспомогательный класс для вывода счётов по этапам class Bill_Set(object): def __init__(self): self.name="" self.set=[] self.id_name = "" def __unicode__(self): return self.name+str( self.set) def __str__(self): return self.name+str(self.set) def __repr__(self): return self.name+" "+str(self.set) def __getattribute__(self,name): if name=='id_name': name = object.__getattribute__(self,'name') if name == 'Получить товар': return 'Товар_получен' if name == 'Сдать документы': return 'Документы_сданы' return object.__getattribute__(self,'name').replace(" ","_") return object.__getattribute__(self,name) class Bill_with_title(): def __init__(self,c,title): self.bill=c self.title=title def __repr__(self): return self.title+"; "+str(self.bill.id) lang,user,fio,method = get_info(request) # выбираем только ещё не закрытые чеки cashs_tmp = Cash.objects.filter(payment__in=Payment.objects.filter(deleted=False)).filter(closed_for=False) cashs=[] for c in cashs_tmp: # Для каждого чека делаем подсказку - что в нём title="" payment=c.payment_set.get() assets=payment.asset_set.all() for asset in assets: title+=asset.model title+="; " title=title[:-2] cashs.append(Bill_with_title(c,title)) # выбираем только счета, по которым ещё не сдали документы cashlesss = Cashless.objects.filter(payment__in=Payment.objects.filter(deleted=False)) # сортируем счета по безналу по этапам # импортируем функцию для получения количества этапов на счёт from user_settings.functions import get_stages stages = get_stages(";").split(";") stages_number = len(stages) cashlesss_sorted=[Bill_Set() for x in range(stages_number+2)] for x in range(stages_number): cashlesss_sorted[x].name=stages[x] cashlesss_sorted[x+1].name = "Получить товар" cashlesss_sorted[x+2].name = "Сдать документы" # Делаем класс a.name and a.list, делаем из него список по очереди # каждый класс - один из этапов for cl in cashlesss: # Для каждого чека делаем подсказку - что в нём title="" payment=cl.payment_set.get() assets=payment.asset_set.all() for asset in assets: title+=asset.model title+="; " title=title[:-2] # Старый варинат, проверял cl.dates, но делает логическую ошибку. Заменён # if cl.dates: # d=cl.dates.split(";") # for x in range(stages_number): # if not d[x]: # cashlesss_sorted[x].set.append(Bill_with_title(cl,title)) # break # else: # cashlesss_sorted[0].set.append(Bill_with_title(cl,title)) # if not cl.date_of_assets: # cashlesss_sorted[x+1].set.append(Bill_with_title(cl,title)) # continue # if not cl.date_of_documents: # cashlesss_sorted[x+2].set.append(Bill_with_title(cl,title)) # continue # Новый вариант: d=cl.dates.split(";") for x in range(stages_number): if not d[x]: cashlesss_sorted[x].set.append(Bill_with_title(cl,title)) break else: if not cl.date_of_assets: cashlesss_sorted[x+1].set.append(Bill_with_title(cl,title)) continue if not cl.date_of_documents: cashlesss_sorted[x+2].set.append(Bill_with_title(cl,title)) continue # raise ImportError return (True,('all_bills.html',{},{'title':'Список всех счетов и чеков','cashs':cashs, 'cashlesss':cashlesss_sorted,'stages':stages,'stages_range':range(stages_number)},request,app))
def all_deleted_bills(request): lang,user,fio,method = get_info(request) cashs = Cash.objects.filter(payment__in=Payment.objects.filter(deleted=True)) cashlesss = Cashless.objects.filter(payment__in=Payment.objects.filter(deleted=True)) return (True,('all_deleted_bills.html',{},{'title':'Список всех удалённых счетов и чеков','cashs':cashs, 'cashlesss':cashlesss},request,app))
def bill_cash_add(request): lang,user,fio,method = get_info(request) if request.method == 'POST': # Порядок действия таков: # 1) Создаём Cash # 2) Создаём Payment с этим Cash # 3) Создаём Garanty - если её ещё нет. Если есть - добавляем к имеющейся # 4) Итерируем по элементам в форме от 1 до макс добавляя активы в список активов # 5) Если всё прошло хорошо - активы из списка сохраняем bill_date = request.POST.get('date','') if bill_date: a=[int(a) for a in bill_date.split('.')] a.reverse() bill_date=datetime.datetime(*a) else: bill_date = datetime.datetime.now() # print bill_date # raise ImportError cash = Cash(date = bill_date, contractor = Contractor.objects.get(id=request.POST.get('contractor_id')), bill_number = request.POST.get('bill_number'), ) cash.save() payment = Payment(cash = cash, ) payment.save() try: garanty = Garanty.objects.get(number = request.POST.get('garanty')) except Garanty.DoesNotExist: garanty = Garanty(number = request.POST.get('garanty')) garanty.save() for item_number in range(1,int(request.POST.get('max_asset_form_number'))+1): sitem_number = str(item_number) if sitem_number+'_model' in request.POST: for count in range(0,int(request.POST.get('count_of_asset'+sitem_number))): a=Asset(asset_type = Asset_type.objects.get(id=request.POST.get(sitem_number+'_asset_type')), payment = payment, garanty = garanty, model = request.POST.get(sitem_number+'_model'), status = Status.objects.get(id=request.POST.get(sitem_number+'_status')), guarantee_period = request.POST.get(sitem_number+'_guarantee_period'), note = request.POST.get(sitem_number+'_note'), price = request.POST.get(sitem_number+'_price'), ) a.save() cur_place=Place_Asset(installation_date = bill_date, asset = a, place = Place.objects.get(id=request.POST.get(sitem_number+'_current_place')), ) cur_place.save() return (False,HttpResponseRedirect('/all_bills/')) # Создаём новый счёт, значит теперь надо номер новой гарантии try: garanty_number = int(Garanty.objects.all().order_by('-number')[0].number)+1 except IndexError: # значит, гарантий ещё в базе нет garanty_number = 0 contractors_list = assets.api.get_contractors_list(request,internal=True) asset_types_list = assets.api.get_asset_type_list(request,internal=True) return (True,('new_bill.html', {'NewCashBillForm':{'garanty':garanty_number}},{'contractors_list':contractors_list,'asset_types_list':asset_types_list, 'method':method},request,app))