Ejemplo n.º 1
1
    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
Ejemplo n.º 2
0
 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'три тысячи рублей ноль копеек')
Ejemplo n.º 3
0
 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 копеек')
Ejemplo n.º 4
0
            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')
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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': "апреля",
Ejemplo n.º 7
0
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,
Ejemplo n.º 8
0
 def test_negative(self):
     self.assertEqual(num2text(-12345),
                      u"минус двенадцать тысяч триста сорок пять")
     self.assertEqual(
         decimal2text('-123.45'),
         u'минус сто двадцать три сорок пять')
Ejemplo n.º 9
0
                '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()