Пример #1
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))
Пример #2
0
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))
Пример #3
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))
Пример #4
0
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"))
Пример #5
0
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))
Пример #6
0
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/'))
Пример #7
0
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))
Пример #8
0
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))
Пример #9
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))
Пример #10
0
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))
Пример #11
0
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))
Пример #12
0
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))
Пример #13
0
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))
Пример #14
0
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/'))
Пример #15
0
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))
Пример #16
0
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))
    
    
Пример #17
0
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))
Пример #18
0
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))
Пример #19
0
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))
Пример #20
0
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))
Пример #21
0
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))
Пример #22
0
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))