def tt(b,e,a): i = b while i < e: s_i2s = i2s(i) s_pytils = numeral.in_words(i) if (s_pytils != s_i2s): print ("\tError on %d\n\t\ti2s\t!%s!\n\t\tpytils\t!%s!\n" % ((i),s_i2s,s_pytils)) i += a
def money_to_words(amount, code): rubles_num_in_words = numeral.in_words(amount) rubles = numeral.choose_plural(amount, CURRENCY_RU[code]) copek_num = round(amount - amount) copek = numeral.choose_plural(int(copek_num), CURRENCY_CENTS_RU[code]) if code in CURRENCY_CENTS_RU else '' if copek: return ("%s %s %02d %s")%(rubles_num_in_words, rubles, copek_num, copek) else: return ("%s %s")%(rubles_num_in_words, rubles)
def processing(self): """ Финальный процессинг через eval всего выражения + вывод """ n = self.collectored_numbers result = str(eval(n[0] + self.operation + n[1])) operation = self.r_operations_list[self.operation] abs_result = numeral.in_words(float(result)) print("Число №1: " + n[0] + "\nЧисло №2: " + n[1]) print("Операция: " + operation + "\nРезультат в виде числа: " + result) print("Результат прописью: " + abs_result + "\n")
def money_to_words(amount, code): rubles_num_in_words = numeral.in_words(amount) rubles = numeral.choose_plural(amount, CURRENCY_RU[code]) copek_num = round(amount - amount) copek = numeral.choose_plural( int(copek_num), CURRENCY_CENTS_RU[code]) if code in CURRENCY_CENTS_RU else '' if copek: return ("%s %s %02d %s") % (rubles_num_in_words, rubles, copek_num, copek) else: return ("%s %s") % (rubles_num_in_words, rubles)
def to_grn(amount): if amount: cash_d = math.modf(amount) if round(cash_d[0], 2) != 0.0: d = int(round(cash_d[0], 2) * 100) if d < 10: d = u"0%s" % d else: d = u"%s" % d else: d = u"00" d += u" коп." return u"{0} грн. {1}".format(numeral.in_words(int(cash_d[1])), d) else: return '-'
def in_words(amount, gender=None): """ In-words representation of amount. Parameter is a gender: MALE, FEMALE or NEUTER Examples:: {{ some_int|in_words }} {{ some_other_int|in_words:FEMALE }} """ try: res = numeral.in_words(amount, getattr(numeral, str(gender), None)) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': str(amount)}
def in_words(amount, gender=None, case=numeral.NOMINATIVE): """ In-words representation of amount. Parameter is a gender: MALE, FEMALE or NEUTER Examples:: {{ some_int|in_words }} {{ some_other_int|in_words:FEMALE }} """ try: res = numeral.in_words(amount, getattr(numeral, str(gender), None), case) except Exception as err: # because filter must die silently res = default_value % {"error": err, "value": str(amount)} return res
def in_words(amount, gender=None): """ In-words representation of amount. Parameter is a gender: MALE, FEMALE or NEUTER Examples:: {{ some_int|in_words }} {{ some_other_int|in_words:FEMALE }} """ try: ures = numeral.in_words(amount, getattr(numeral, str(gender), None)) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently res = default_value % {"error": err, "value": str(amount)}
def printToWord(self): ### Определение переменных для замены в word документе num_dogovor = self.lineEdit_NumDogovor.text() # Номер договора receipt = self.lineEdit_NumReceipt.text() # Номер квитанции fio = self.lineEdit_Fio.text() # ФИО пациента fio_short = self.shorten_to_initials(self.lineEdit_Fio.text()) # Фамилия и инициалы пациента document_name = self.comboBox_Documents.currentText() # Название документа удостоверяющего личность doc_number = self.lineEdit_NumDoc.text() # № документа удостоверяющего личность address = self.lineEdit_Address.text() # Адрес usluga = self.comboBox_Usluga.currentText() # Название услуги summ = self.lineEdit_PriceUsluga.text() # Сумма summ_word = numeral.in_words(int(summ)) # Сумма прописью date_mini = dt.ru_strftime('%d.%m.%Y') # Форматированные текущая дата 01.01.2020 date_full = dt.ru_strftime('%d %B %Y', inflected=True) # Форматированные текущая дата 01 января 2020 ### Формирование и сохранение документа word doc_name = '{}_{}_{}_{}'.format(fio, date_full, num_dogovor, receipt) # Формирование имени документа ФИО_Дата.docx template = r"res\usluga_template.docx" document = MailMerge(template) #print(document.get_merge_fields()) # Какие поля используются в шаблоне document.merge( num_dogovor=num_dogovor, receipt = receipt, fio=fio, fio_short=fio_short, document=document_name, doc_number=doc_number, address=address, usluga=usluga, summ=summ, summ_word = summ_word, date_full = date_full, date_mini = date_mini, ) document.write("docx\{}.docx".format(doc_name,)) os.startfile("docx\{}.docx".format(doc_name,)) # Запуск word документа и печать - os.startfile("res\generated_usluga.docx", "print")
def _get_amount_items_in_words(self): amount = len(self.move_lines) self.amount_items_in_words = numeral.in_words(int(amount))
# -*- coding: utf-8 -*- from pytils.numeral import in_words print in_words(21)
# pytils всегда возвращает юникод (строка в Py3.x) # обычно это ОК выводить юникод в терминал # но если это неинтерактивный вывод # (например, использования модуля subprocess) # то для Py2.x нужно использовать перекодировку в utf-8 from pytils.third import six if six.PY3: out = s else: out = s.encode('UTF-8') print(out) # in_words нужен для представления цифр словами print_(numeral.in_words(12)) #-> двенадцать # вторым параметром можно задать пол: # мужской=numeral.MALE, женский=numeral.FEMALE, срелний=numeral.NEUTER (по умолчанию -- мужской) print_(numeral.in_words(21)) #-> двадцать один # можно передавать неименованным параметром: print_(numeral.in_words(21, numeral.FEMALE)) #-> двадцать одна # можно именованным print_(numeral.in_words(21, gender=numeral.FEMALE)) #-> двадцать одна print_(numeral.in_words(21, gender=numeral.NEUTER))
def get_count_stock_moves_in_text(self, picking_id): picking = self.pool.get('m15').browse(self.cr, self.uid, picking_id) count = len(picking.move_lines) return numeral.in_words(count, numeral.NEUTER)
def get_price_in_text(self, picking_id): sum_all=0.0 picking = self.pool.get('m15').browse(self.cr, self.uid, picking_id) for move in picking.move_lines: sum_all=sum_all + move.price_all return numeral.in_words(int(sum_all))
def generate(self, cr, user, ids, context=None): contract_id = ids if isinstance(ids, (list, tuple)): contract_id = ids[0] contract = self.read(cr, user, contract_id, []) service = self.pool.get('brief.services.stage').read(cr, user, contract['service_id'][0], ['template_id']) if service['template_id']: template = self.pool.get('ir.attachment').read(cr, user, service['template_id'][0], ['store_fname', 'parent_id']) dbro = self.pool.get('document.directory').read(cr, user, template['parent_id'][0], ['storage_id'], context) storage = self.pool.get('document.storage').read(cr, user, dbro['storage_id'][0], ['path']) filepath = os.path.join(storage['path'], template['store_fname']) file_data = open(filepath, 'rb').read() template_io = StringIO() template_io.write(file_data) serializer = OOSerializer(template_io) basic = Template(source=template_io, serializer=serializer) d = datetime.strptime(contract['contract_date'], '%Y-%m-%d') date_str = dt.ru_strftime(u"%d %B %Y", d, inflected=True) if not contract['contract_number']: raise osv.except_osv('Договор', 'Необходимо ввести номер договора') if not contract['amount']: raise osv.except_osv('Договор', 'Необходимо ввести сумму договора') term = 7 if contract['term'] == 'mounth': term = 30 elif contract['term'] == 'year': term = 365 else: term = 0 o = { 'name': u'-', 'contract_number': contract['contract_number'], 'contract_date': date_str, 'doc_type': contract['doc_type_id'][1] if contract['doc_type_id'] else '-', 'responsible_id': contract['responsible_id'][1] if contract['responsible_id'] else '-', # Название баннерной или тизерной сети 'web': 'test', # стоимость услуг цифры 'cost_num': contract['amount'], # стоимость услуг слова 'cost_word': numeral.in_words(float(contract['amount'])), # срок предоставления услуги в фомате 30 (тридцать) 'term': term, # наш генеральный директор 'our_gen_dir': u'-', # название фирмы 'our_firm_name': u'-', # наш Юридический адрес 'our_address': u'-', # Фактический адрес,адрес почтовой корреспонденции наш 'our_fact_address': u'-', # ИНН / КПП наш 'our_inn': u'-', # ОГРН наш 'our_ogrn': u'-', # Код ОКПО наш 'our_okpo': u'-', # банк наш 'our_bank': u'-', # к/с наш 'our_ks': u'-', # р/с наш 'our_rs': u'-', # бик наш 'our_bik': u'-', # Тел/факс наш 'our_phone': u'-', # Web сайт почта наш 'our_site': u'-', # заказчика e-mail 'partner_mail': u'-', # название фирмы заказчика 'partner_firm_name': u'-', # Юридический адрес партнера 'partner_address': u'-', # Фактический адрес,адрес почтовой корреспонденции партнера 'partner_fact_address': u'-', # ИНН / КПП партнера 'partner_inn': u'-', # ОГРН партнера 'partner_ogrn': u'-', # Код ОКПО партнера 'partner_okpo': u'-', # банк партнера 'partner_bank': u'-', # к/с партнера 'partner_ks': u'-', # р/с партнера 'partner_rs': u'-', # бик партнера 'partner_bik': u'-', 'partner_kpp': u'-', # Тел/факс партнера 'partner_phone': u'-', # Web сайт почта партнера 'partner_site': u'-', } if contract['bank_id']: bank = self.pool.get('res.partner.bank').read(cr, 1, contract['bank_id'][0], []) o.update({ 'partner_mail': bank['email'] or u'-', 'partner_site': bank['site'] or u'-', 'partner_firm_name': bank['fullname'] or u'-', 'partner_address': self.pool.get('res.partner.bank.address').get_address(cr, contract['bank_id'][0]) or u'-', 'partner_fact_address': self.pool.get('res.partner.bank.address').get_address(cr, contract['bank_id'][0], 'fa') or u'-', 'partner_inn': bank['inn'] or u'-', 'partner_kpp': bank['kpp'] or u'-', 'partner_ogrn': bank['ogrn'] or u'-', 'partner_okpo': bank['okpo'] or u'-', 'partner_bank': bank['bank'] or u'-', 'partner_ks': bank['correspondent_account'] or u'-', 'partner_rs': bank['current_account'] or u'-', 'partner_bik': bank['bik'] or u'-', 'partner_phone': bank['phone'] or u'-', }) if contract['account_id']: account = self.pool.get('account.account').read(cr, 1, contract['account_id'][0], []) o.update({ 'our_gen_dir': account['responsible'] or u'-', 'our_firm_name': account['full'] or u'-', 'our_address': account['address'] or u'-', 'our_fact_address': account['address'] or u'-', 'our_inn': account['inn'] or u'-', 'our_kpp': account['kpp'] or u'-', 'our_ogrn': u'1127747081406', 'our_okpo': u'13183255', 'our_bank': account['bank'] or u'-', 'our_ks': account['bank_number'] or u'-', 'our_rs': account['account_number'] or u'-', 'our_bik': account['bik'] or u'-', 'our_phone': account['phone'] or u'-', 'our_site': u'UpSale.ru, [email protected]', }) filename = '{0} {1} {2}'.format( contract['contract_number'].encode('utf-8'), contract['partner_id'][1].encode('utf-8'), contract['service_id'][1].encode('utf-8'), ) #data = [(k, v.encode('cp1251')) for k, v in o.iteritems() if isinstance(v, unicode)] odt_file = os.path.join(storage['path'], 'tmp.odt') file(odt_file, 'wb').write(basic.generate(o=o).render().getvalue()) doc_id = self.pool.get('ir.attachment').create(cr, user, { 'name': '{0}.odt'.format(filename, ), 'datas': base64.b64encode(open(odt_file, 'rb').read()), 'datas_fname': '{0}.odt'.format(filename, ), 'res_model': self._name, 'res_id': contract['id'] }) self.write(cr, user, [contract['id']], {'doc_id': doc_id}) return True
def in_words(self, number): return numeral.in_words(number)
#!/usr/bin/env python # -*- coding: utf-8 -*- from pytils import numeral # in_words нужен для представления цифр словами print numeral.in_words(12) #-> двенадцать # вторым параметром можно задать пол: # мужской=numeral.MALE, женский=numeral.FEMALE, срелний=numeral.NEUTER (по умолчанию -- мужской) print numeral.in_words(21) #-> двадцать один # можно передавать неименованным параметром: print numeral.in_words(21, numeral.FEMALE) #-> двадцать одна # можно именованным print numeral.in_words(21, gender=numeral.FEMALE) #-> двадцать одна print numeral.in_words(21, gender=numeral.NEUTER) #-> двадцать одно # можно и дробные print numeral.in_words(12.5) #-> двенадцать целых пять десятых # причем "пишутся" только значимые цифры print numeral.in_words(5.30000)