def numbers_in_words(self, with_cents=False, currency=''): if self.is_valid(): result = self.cleaned_data['input_data'] if with_cents: try: result = decimal2text(decimal.Decimal(result)) except decimal.InvalidOperation: result = result.replace(',', '.') result = ''.join( list(filter(lambda x: x in '1234567890.', result))) if result.count('.') > 1: result = result.split('.') result_head = ''.join(result[:-1]) result = result_head + '.' + result[-1] result = decimal2text(decimal.Decimal(result)) except IndexError: result = f'Я пока не умею обрабатывать числа больше 999,999,999,999.99 ' \ f'({num2text(999999999999.99)}' else: try: result = num2text(int(result)) except ValueError: result = (''.join( list(filter(lambda x: x.isnumeric(), result)))) result = num2text(int(result)) except IndexError: result = f'Я пока не умею обрабатывать числа больше 999 999 999 999 ' \ f'({num2text(999999999999)}' result = result.capitalize() if currency: pass self.cleaned_data['result'] = result return self
def test_decimal2text(self): int_units = ((u'рубль', u'рубля', u'рублей'), 'm') exp_units = ((u'копейка', u'копейки', u'копеек'), 'f') self.assertEqual( decimal2text( '105.245', int_units=int_units, exp_units=exp_units), u'сто пять рублей двадцать четыре копейки') self.assertEqual( decimal2text( '101.26', int_units=int_units, exp_units=exp_units), u'сто один рубль двадцать шесть копеек') self.assertEqual( decimal2text( '102.2450', places=4, int_units=int_units, exp_units=exp_units), u'сто два рубля две тысячи четыреста пятьдесят копеек') # xD self.assertEqual( decimal2text( '111', int_units=int_units, exp_units=exp_units), u'сто одиннадцать рублей ноль копеек') self.assertEqual( decimal2text( '3000.00', int_units=int_units, exp_units=exp_units), u'три тысячи рублей ноль копеек')
def test_decimal2text_with_fractional_as_number(self): int_units = (('рубль', 'рубля', 'рублей'), 'm') exp_units = (('копейка', 'копейки', 'копеек'), 'f') self.assertEqual( decimal2text( '105.245', fractional_as_number=True, int_units=int_units, exp_units=exp_units), 'сто пять рублей 24 копейки') self.assertEqual( decimal2text( '101.26', fractional_as_number=True, int_units=int_units, exp_units=exp_units), 'сто один рубль 26 копеек') self.assertEqual( decimal2text( '102.2450', places=4, fractional_as_number=True, int_units=int_units, exp_units=exp_units), 'сто два рубля 2450 копеек') # xD self.assertEqual( decimal2text( '111', fractional_as_number=True, int_units=int_units, exp_units=exp_units), 'сто одиннадцать рублей 00 копеек') self.assertEqual( decimal2text( '3000.00', fractional_as_number=True, int_units=int_units, exp_units=exp_units), 'три тысячи рублей 00 копеек')
inc_time.append(row[0]) inc_traf.append(Q_inc) return Q_inc summ_traffic_Mb = (inc_traffic() + out_traffic()) / 1048576 Total1 = summ_traffic_Mb * k Total1 = float('{:.2f}'.format(Total1)) nds = float('{:.2f}'.format((Total + Total1) * 0.2)) int_units = ((u'рубль', u'рубля', u'рублей'), 'm') exp_units = ((u'копейка', u'копейки', u'копеек'), 'f') translite = str( decimal2text(decimal.Decimal(str(Total + Total1)), int_units=int_units, exp_units=exp_units)) doc = DocxTemplate('schetinput.docx') context = { 'sum_tele': out_calls() + inc_calls(), 'sum_sms': sms(), 'sum_inet': Total1, 'propis': translite, 'sum_total': Total + Total1, 'nds': nds } doc.render(context) doc.save('oplata.docx') convert('oplata.docx')
def invoicePDF(request, cid): summa = float(request.POST.get('sum').replace(',', '.')) summaNDS = round(summa - (summa / 1.18), 2) int_units = ((u'рубль', u'рубля', u'рублей'), 'm') exp_units = ((u'копейка', u'копейки', u'копеек'), 'f') summaTXT = decimal2text(decimal.Decimal(summa), int_units=int_units, exp_units=exp_units) # Получаем текущую дату months = [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ] now = datetime.now() month = months[int(now.strftime("%m")) - 1] dateInvoice = now.strftime("%d ") + month + now.strftime(" %Y") numInvoice = 777 contractParams = ContractParameters(request, cid) template = get_template('/opt/lkbilling/templates/invoice/invoice.html') html = template.render({ "c_title": contractParams.title, "c_dateInvoice": dateInvoice, "c_numInvoice": numInvoice, "c_comment": contractParams.comment, "c_dateCreated": contractParams.dateCreated, "c_summa": summa, "c_summaNDS": summaNDS, "c_summaTXT": summaTXT.capitalize() }) options = { 'margin-top': '0.7in', 'margin-right': '0in', 'margin-bottom': '0in', 'margin-left': '0.7in', 'encoding': "UTF-8", 'custom-header': [('Accept-Encoding', 'gzip')], 'cookie': [ ('cookie-name1', 'cookie-value1'), ('cookie-name2', 'cookie-value2'), ], 'no-outline': None } vdisplay = Xvfb() vdisplay.start() # launch stuff inside virtual display here. pdf = pdfkit.from_url(StringIO(html), False, options=options) vdisplay.stop() # Формируем HTTP ответ в виде файла pdf response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="invoice.pdf"' response.write(pdf) return response
traf_sum_mb = (inp_trf() + out_trf()) / 1048576 All = (traf_sum_mb - bonus) * k while All < 0: bonus /= 1024 All = (traf_sum_mb - bonus) * k y = All x = float('{:.2f}'.format(x)) y = float('{:.2f}'.format(y)) z = float('{:.2f}'.format(z)) nds = (z + x + y) * 0.2 nds = float('{:.2f}'.format(nds)) int_units = ((u'рубль', u'рубля', u'рублей'), 'm') exp_units = ((u'копейка', u'копейки', u'копеек'), 'f') summ = str( decimal2text(decimal.Decimal(str(x + y + z)), int_units=int_units, exp_units=exp_units)) doc = DocxTemplate("template.docx") context = { 'bank': 'АО "Четыре папочки" г. Санкт-Петергург', 'inn': "4444444444", 'kpp': "4440000444", 'name': 'АО "Четыре папочки холдинг"', 'bik': '101404101', 'sch1': "44444444444444440000", 'sch2': "11111111111111000000", 'postav': 'АО "Четыре папочки холдинг", ИНН 4444444444, КПП 4440000444, 111444, Санкт-Перербург г Лучшая ул, дом №4, строение 1', 'schetnum': 444, 'day': 4, 'month': "апреля",
price_s = {'internet': 7497.25, 'sms': 8, 'call': {'in': 7.52, 'out': 85.7}} cond = { 'internet': ['1000 кб бесплатно', ' руб/кб'], 'sms': ['5 SMS бесплатно', ' руб/SMS'], 'call': { 'in': ['Плата за исходящие звонки', ' руб/мин'], 'out': ['Плата за входящие звонки', ' руб/мин'] } } price_s_all = '{:.2f}'.format(price_s['internet'] + price_s['sms'] + price_s['call']['in'] + price_s['call']['out']) NDS = float(price_s_all) * 0.18 price_s_all_text = decimal2text(Decimal(price_s_all), places=2, int_units=((u'рубль', u'рубля', u'рублей'), 'm'), exp_units=((u'копейка', u'копейки', u'копеек'), 'f')) price_s_all_text = price_s_all_text[0].upper() + price_s_all_text[1:] # словарь данных для подстановки в словарь template_dict = { 'dest_bank': 'ПАО "БабахБанк", Г. С4', 'bik_bank': '2288841', 'dest_account_bank': '04875748474843469', 'settlment_account': '00587312133865897', 'INN': '90770973', 'KPP': '0001309753', 'org_name': 'ООО "Министерство Магии"', 'n_number': -1, 'n_datetime': date_account,
def test_negative(self): self.assertEqual(num2text(-12345), u"минус двенадцать тысяч триста сорок пять") self.assertEqual( decimal2text('-123.45'), u'минус сто двадцать три сорок пять')
'3000.00', int_units=int_units, exp_units=exp_units), u'три тысячи рублей ноль копеек') def test_negative(self): self.assertEqual(num2text(-12345), u"минус двенадцать тысяч триста сорок пять") self.assertEqual( decimal2text('-123.45'), u'минус сто двадцать три сорок пять') if __name__ == '__main__': import sys if len(sys.argv) > 1: try: num = sys.argv[1] if '.' in num: print(decimal2text( num, int_units=((u'штука', u'штуки', u'штук'), 'f'), exp_units=((u'кусок', u'куска', u'кусков'), 'm'))) else: print(num2text( int(num), main_units=((u'штука', u'штуки', u'штук'), 'f'))) except ValueError: print (sys.stderr, "Invalid argument {}".format(sys.argv[1])) sys.exit() unittest.main()